[GRASSLIST:6021] compilation: grass5.0.2

Hi!
First of all. Congratulations for grass5.0.2!

The ./configure can't find the readline libs.

But I had installed grass5.0.0pre with readline and I've got libreadline.a in
/usr/lib and a libreadline.so.4.2 in /lib.

Could you help me with this?

Best regards

Javier Garcia

javier garcia - CEBAS wrote:

First of all. Congratulations for grass5.0.2!

The ./configure can't find the readline libs.

But I had installed grass5.0.0pre with readline and I've got libreadline.a in
/usr/lib and a libreadline.so.4.2 in /lib.

Could you help me with this?

Failure to detect readline normally occurs because readline requires
some other library (e.g. libncurses, libtermcap or libtinfo).
Unfortunately, there isn't any obvious way of detecting which
additional libraries we should attempt to use.

For the time being, you have to either:

a) ensure that the libreadline which configure finds is a dynamic
library (libreadline.so) with correct dependency information, or

b) don't use --with-readline, and manually edit src/CMD/head and
src/include/config.h once the configure script has completed.

--
Glynn Clements <glynn.clements@virgin.net>

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Glynn Clements wrote:

javier garcia - CEBAS wrote:

First of all. Congratulations for grass5.0.2!

The ./configure can't find the readline libs.

But I had installed grass5.0.0pre with readline and I've got

libreadline.a in

/usr/lib and a libreadline.so.4.2 in /lib.

Could you help me with this?

Failure to detect readline normally occurs because readline requires
some other library (e.g. libncurses, libtermcap or libtinfo).
Unfortunately, there isn't any obvious way of detecting which
additional libraries we should attempt to use.

For the time being, you have to either:

Then why does grass 5.0.0 detect it on the same machine?

This is the most recent grass-5.0.0 build I did on this machine:

[bgmilne@bgmilne rpm]$ rpm -qip
mdk/RPMS.mdk9.1/i586/grass-5.0.0-2mdk.i586.rpm
Name : grass Relocations: (not relocateable)
Version : 5.0.0 Vendor: MandrakeSoft
Release : 2mdk Build Date: Sat 22 Feb 2003
16:54:36 SAST
Install date: (not installed) Build Host: bgmilne.cae.co.za
Group : Sciences/Geosciences Source RPM:
grass-5.0.0-2mdk.src.rpm
Size : 83689682 License: GPL
Packager : Buchan Milne <bgmilne@linux-mandrake.com>
URL : http://grass.itc.it/
Summary : Geographic Resources Analysis Support System
Description :
GRASS (Geographic Resources Analysis Support System)
is a raster-based GIS, vector GIS,
image processing system, graphics production
system, data management system, and spatial
modeling system. A graphical user interface
for X-Windows is provided.

As you can see, readline hasn't been modified any time recently:

[bgmilne@bgmilne rpm]$ rpm -qi readline-devel
Name : readline-devel Relocations: (not relocateable)
Version : 4.3 Vendor: MandrakeSoft
Release : 4mdk Build Date: Mon 05 Aug 2002
11:36:16 SAST
Install date: Wed 23 Oct 2002 13:00:04 SAST Build Host:
ke.mandrakesoft.com
Group : Development/C Source RPM:
readline-4.3-4mdk.src.rpm
Size : 3284392 License: GPL
Packager : Thierry Vignaud <tvignaud@mandrakesoft.com>
Summary : Files for developing programs that use the readline library.
Description :
The "readline" library will read a line from the terminal and return it,
using prompt as a prompt. If prompt is null, no prompt is issued. The
line returned is allocated with malloc(3), so the caller must free it when
finished. The line returned has the final newline removed, so only the
text of the line remains.

a) ensure that the libreadline which configure finds is a dynamic
library (libreadline.so) with correct dependency information, or

b) don't use --with-readline, and manually edit src/CMD/head and
src/include/config.h once the configure script has completed.

I think something has broken. So I started a build of 5.0.0:

relevant parts of ./configure of 5.0.0

checking whether to use Readline... yes
checking for location of Readline includes...
checking for readline/readline.h... yes
checking for readline/history.h... yes
checking for location of Readline library...
checking for readline in -lreadline... no
checking for readline in -lreadline... yes

Grass 5.0.0 configure summary:

GRASS is now configured for i586-mandrake-linux-gnu

  Source directory: /home/bgmilne/rpm/BUILD/grass-5.0.0
  Build directory: /home/bgmilne/rpm/BUILD/grass-5.0.0
  Installation directory: /usr/grass5
  C compiler: gcc -O2 -fomit-frame-pointer -pipe
- -march=i586 -mcpu=pentiumpro
  FORTRAN compiler: g77

  NVIZ: yes

  X11 support: yes
  DBM support: yes
  JPEG support: yes
  TIFF support: yes
  PNG support: yes
  GD support: yes
  Tcl/Tk support: yes
  PostgreSQL support: yes
  OpenGL(R) support: yes
  ODBC support: yes
  FFTW support: yes
  BLAS support: yes
  LAPACK support: yes
  Motif support: yes
  FreeType support: yes
  GLw support: yes
  NLS support: yes
  Readline support: yes

Error from config.log in 5.0.2:

configure:5118: checking whether to use Readline
configure:5139: checking for location of Readline includes
configure:5165: checking for readline/readline.h
configure:5173: gcc -E conftest.c >/dev/null 2>conftest.out
configure:5209: checking for readline/history.h
configure:5217: gcc -E conftest.c >/dev/null 2>conftest.out
configure:5251: checking for location of Readline library
configure:5276: checking for readline in -lreadline
configure:5293: gcc -o conftest -O2 -fomit-frame-pointer -pipe
- -march=i586 -mcpu
=pentiumpro conftest.c -lreadline 1>&5
/usr/lib/gcc-lib/i586-mandrake-linux-gnu/3.2.2/../../../libreadline.so:
undefined reference to `tgetnum'
/usr/lib/gcc-lib/i586-mandrake-linux-gnu/3.2.2/../../../libreadline.so:
undefined reference to `tgoto'
/usr/lib/gcc-lib/i586-mandrake-linux-gnu/3.2.2/../../../libreadline.so:
undefined reference to `tgetflag'
/usr/lib/gcc-lib/i586-mandrake-linux-gnu/3.2.2/../../../libreadline.so:
undefined reference to `BC'
/usr/lib/gcc-lib/i586-mandrake-linux-gnu/3.2.2/../../../libreadline.so:
undefined reference to `tputs'
/usr/lib/gcc-lib/i586-mandrake-linux-gnu/3.2.2/../../../libreadline.so:
undefined reference to `PC'
/usr/lib/gcc-lib/i586-mandrake-linux-gnu/3.2.2/../../../libreadline.so:
undefined reference to `tgetent'
/usr/lib/gcc-lib/i586-mandrake-linux-gnu/3.2.2/../../../libreadline.so:
undefined reference to `UP'
/usr/lib/gcc-lib/i586-mandrake-linux-gnu/3.2.2/../../../libreadline.so:
undefined reference to `tgetstr'
collect2: ld returned 1 exit status
configure: failed program was:
#line 5282 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply. */
char readline();

int main() {
readline()
; return 0; }

The only things that have changed recently on this box are glibc etc
(although I am running current - except for tcl8.4 which I need to build
grass against before I upgrade - cooker), but since 5.0.0 starts
building, I think it's a grass problem. And it seems readline is current.

Oh well, guess I will have to try it at home (Mandrake 9.1), it's too
late to fix this now ...

Buchan

- --
|--------------Another happy Mandrake Club member--------------|
Buchan Milne Mechanical Engineer, Network Manager
Cellphone * Work +27 82 472 2231 * +27 21 8828820x121
Stellenbosch Automotive Engineering http://www.cae.co.za
GPG Key http://ranger.dnsalias.com/bgmilne.asc
1024D/60D204A7 2919 E232 5610 A038 87B1 72D6 AC92 BA50 60D2 04A7
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQE+lvdgrJK6UGDSBKcRAgLxAJwLj++jAj/oTKnZKj5OxqNeObHBeQCfbL6b
8aQXWwKIjo0z8F507exS3Vc=
=h66o
-----END PGP SIGNATURE-----

[BTW, it's only r.mapcalc which actually uses readline.]

Buchan Milne wrote:

> > First of all. Congratulations for grass5.0.2!
> >
> > The ./configure can't find the readline libs.
> >
> > But I had installed grass5.0.0pre with readline and I've got libreadline.a in
> > /usr/lib and a libreadline.so.4.2 in /lib.
> >
> > Could you help me with this?
>
>
> Failure to detect readline normally occurs because readline requires
> some other library (e.g. libncurses, libtermcap or libtinfo).
> Unfortunately, there isn't any obvious way of detecting which
> additional libraries we should attempt to use.
>
> For the time being, you have to either:

Then why does grass 5.0.0 detect it on the same machine?

5.0.0 also included tried with and without $TERMLIB. Unfortunately,
$TERMLIB was basically some random library which happened to provide
tgetent.

The TERMLIB checks have been completely removed in 5.0.2. This
(gratuitous) dependency was responsible for the Linux binary packages
not working on various Linux distributions, because the binaries
needed libtermcap but not all distributions provided it (or the user
never installed it because none of the vendor's packages require it).

checking whether to use Readline... yes
checking for location of Readline includes...
checking for readline/readline.h... yes
checking for readline/history.h... yes
checking for location of Readline library...
checking for readline in -lreadline... no

Without $TERMLIB

checking for readline in -lreadline... yes

With $TERMLIB

Error from config.log in 5.0.2:

configure:5251: checking for location of Readline library
configure:5276: checking for readline in -lreadline
configure:5293: gcc -o conftest -O2 -fomit-frame-pointer -pipe
- -march=i586 -mcpu
=pentiumpro conftest.c -lreadline 1>&5
/usr/lib/gcc-lib/i586-mandrake-linux-gnu/3.2.2/../../../libreadline.so:
undefined reference to `tgetnum'

libreadline needs one of the libraries which access the
termcap/terminfo database. But there's no way to tell which one;
libtermcap, libtinfo, libcurses, libncurses and libtermlib are all
plausible; many systems will have two or more libraries which provide
those functions, with no way to tell exactly which one should be used
(using the wrong one tends to break stuff).

For the time being, --with-readline will only work on systems where
libreadline is a shared library with dependency information, e.g.:

$ ldd /usr/lib/libreadline.so
  libtermcap.so.2 => /lib/libtermcap.so.2 (0x4002c000)
  libc.so.6 => /lib/libc.so.6 (0x40030000)
  /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)

In the longer term, we need either:

a) an elaborate set of tests, which produces the right answer on
all platforms, both with and without curses (curses may provide these
functions itself, or it may require a specific additional library;
linking against libtermcap when curses wants libtinfo, or vice-versa,
will break things), or

b) one or more configure switches so that the user can choose which
libraries are used; the problem there is dealing with the "bug"
reports when the user picks the wrong one.

--
Glynn Clements <glynn.clements@virgin.net>