[GRASS5] Problem compiling 5.1

Hi,

I have a problem compiling grass5.1. As directed in INSTALL, I configure it
with grass5.0 head branch:

CFLAGS="-g -Wall" ./configure --with-grass50=/home/Geo/GRASS/grass

Then run 'make'. Here's the error:

make[3]: Entering directory `/home/Geo/GRASS/grass51/display/d.mon/cmd'
make[3]: *** No rule to make target `-lpq', needed by
`/home/Geo/GRASS/grass51/dist.i686-pc-linux-gnu/etc/bin/cmd/d.mon'. Stop.
make[3]: Leaving directory `/home/Geo/GRASS/grass51/display/d.mon/cmd'
make[2]: *** [subdirs] Error 1
make[2]: Leaving directory `/home/Geo/GRASS/grass51/display/d.mon'
make[1]: *** [subdirs] Error 1
make[1]: Leaving directory `/home/Geo/GRASS/grass51/display'
make: *** [default] Error 1

I guess '-lpq' must be the linking flag for Postgres library 'libpq', as
defined in Platform.make:
#PostgreSQL:
PQINCPATH = -I/usr/local/pgsql/include
PQLIBPATH = -L/usr/local/pgsql/lib
PQLIB = -lpq

but looking thru the Makefiles I don't see how 'd.mon' is dependent upon
'-lpq', where is this specified?
I must be missing something in the Makefile logic or layout.

Any ideas how to deal with this would be great.

Aleksey

Aleksey Naumov wrote:

I have a problem compiling grass5.1. As directed in INSTALL, I configure it
with grass5.0 head branch:

CFLAGS="-g -Wall" ./configure --with-grass50=/home/Geo/GRASS/grass

Then run 'make'. Here's the error:

make[3]: Entering directory `/home/Geo/GRASS/grass51/display/d.mon/cmd'
make[3]: *** No rule to make target `-lpq', needed by
`/home/Geo/GRASS/grass51/dist.i686-pc-linux-gnu/etc/bin/cmd/d.mon'. Stop.
make[3]: Leaving directory `/home/Geo/GRASS/grass51/display/d.mon/cmd'
make[2]: *** [subdirs] Error 1
make[2]: Leaving directory `/home/Geo/GRASS/grass51/display/d.mon'
make[1]: *** [subdirs] Error 1
make[1]: Leaving directory `/home/Geo/GRASS/grass51/display'
make: *** [default] Error 1

I guess '-lpq' must be the linking flag for Postgres library 'libpq', as
defined in Platform.make:
#PostgreSQL:
PQINCPATH = -I/usr/local/pgsql/include
PQLIBPATH = -L/usr/local/pgsql/lib
PQLIB = -lpq

but looking thru the Makefiles I don't see how 'd.mon' is dependent upon
'-lpq', where is this specified?
I must be missing something in the Makefile logic or layout.

d.mon/cmd/Makefile has:

  LIBES = $(DISPLAYLIB) $(RASTERLIB) $(VECTLIB) $(DBMILIB) $(GISLIB)

  include $(MODULE_TOPDIR)/include/Make/Module.make

Module.make has:

  include $(MODULE_TOPDIR)/include/Make/Platform.make
  include $(MODULE_TOPDIR)/include/Make/Grass.make

  ...

  $(BIN_CMD)/$(PGM): $(ARCH_CMD_OBJS) $(LIBES)
    $(CC) $(LDFLAGS) -o $@ $(ARCH_CMD_OBJS) $(LIBES) $(MATHLIB) $(XDRLIB)
    @test -e $(BIN)/$(PGM) || ln $(ETC)/front.end $(BIN)/$(PGM)

IOW, the program has $(LIBES) as dependencies.

Grass.make has:

  VECTLIB = $(VECTRLIB) $(DIG2LIB) $(SHAPELIB) $(PQLIB) $(BTREELIB)

$(PQLIB) comes from Platform.make, which is the new name for the
(configure-generated) "head" file.

So, $(VECTLIB) is only suitable for use in a rule's commands, not in
its dependencies.

The $(BIN_CMD)/$(PGM) rule in Module.make needs to be re-written, with
$(LIBES) replaced by two separate variables: one for GRASS libraries
(dependencies, specified using pathnames) and one for external
libraries (not dependencies, specified using -L/-l switches).

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

Glynn,

thanks for the explanation, very clear as always.

Aleksey

On Thu, 14 Mar 2002, Glynn Clements wrote:

Aleksey Naumov wrote:

> I have a problem compiling grass5.1. As directed in INSTALL, I configure it
> with grass5.0 head branch:
>
> CFLAGS="-g -Wall" ./configure --with-grass50=/home/Geo/GRASS/grass
>
> Then run 'make'. Here's the error:
>
> make[3]: Entering directory `/home/Geo/GRASS/grass51/display/d.mon/cmd'
> make[3]: *** No rule to make target `-lpq', needed by
> `/home/Geo/GRASS/grass51/dist.i686-pc-linux-gnu/etc/bin/cmd/d.mon'. Stop.
> make[3]: Leaving directory `/home/Geo/GRASS/grass51/display/d.mon/cmd'
> make[2]: *** [subdirs] Error 1
> make[2]: Leaving directory `/home/Geo/GRASS/grass51/display/d.mon'
> make[1]: *** [subdirs] Error 1
> make[1]: Leaving directory `/home/Geo/GRASS/grass51/display'
> make: *** [default] Error 1
>
> I guess '-lpq' must be the linking flag for Postgres library 'libpq', as
> defined in Platform.make:
> #PostgreSQL:
> PQINCPATH = -I/usr/local/pgsql/include
> PQLIBPATH = -L/usr/local/pgsql/lib
> PQLIB = -lpq
>
> but looking thru the Makefiles I don't see how 'd.mon' is dependent upon
> '-lpq', where is this specified?
> I must be missing something in the Makefile logic or layout.

d.mon/cmd/Makefile has:

  LIBES = $(DISPLAYLIB) $(RASTERLIB) $(VECTLIB) $(DBMILIB) $(GISLIB)

  include $(MODULE_TOPDIR)/include/Make/Module.make

Module.make has:

  include $(MODULE_TOPDIR)/include/Make/Platform.make
  include $(MODULE_TOPDIR)/include/Make/Grass.make

  ...

  $(BIN_CMD)/$(PGM): $(ARCH_CMD_OBJS) $(LIBES)
    $(CC) $(LDFLAGS) -o $@ $(ARCH_CMD_OBJS) $(LIBES) $(MATHLIB) $(XDRLIB)
    @test -e $(BIN)/$(PGM) || ln $(ETC)/front.end $(BIN)/$(PGM)

IOW, the program has $(LIBES) as dependencies.

Grass.make has:

  VECTLIB = $(VECTRLIB) $(DIG2LIB) $(SHAPELIB) $(PQLIB) $(BTREELIB)

$(PQLIB) comes from Platform.make, which is the new name for the
(configure-generated) "head" file.

So, $(VECTLIB) is only suitable for use in a rule's commands, not in
its dependencies.

The $(BIN_CMD)/$(PGM) rule in Module.make needs to be re-written, with
$(LIBES) replaced by two separate variables: one for GRASS libraries
(dependencies, specified using pathnames) and one for external
libraries (not dependencies, specified using -L/-l switches).

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