[GRASS5] [bug #2545] (grass) vect32 fails to build

this bug's URL: http://intevation.de/rt/webrt?serial_num=2545
-------------------------------------------------------------------------

Subject: vect32 fails to build

Platform: other
grass obtained from: Trento Italy site
grass binary for platform: Compiled from Sources

Looks like some changes in the makefiles in libes/vect32 are causing problems. I get this error:

GISGEN: src/libes/vect32 - Sat Jul 17 21:49:19 CDT 2004

#################################################################
/Users/williamk/Documents/src/unix/GRASS/grass53_exp_2004_07_17/src/libes/vect32
  mkdir OBJ.powerpc-apple-darwin7.4.0
  make -f OBJ.powerpc-apple-darwin7.4.0/make.rules

mkdir -p /Users/williamk/Documents/src/unix/GRASS/grass53_exp_2004_07_17/src/libes/vect32/
Vlib
mkdir -p /Users/williamk/Documents/src/unix/GRASS/grass53_exp_2004_07_17/src/libes/vect32/
diglib
make[1]: *** No rule to make target `Vlib/OBJ.powerpc-apple-darwin7.4.0/close.o', needed by `/
Users/williamk/Documents/src/unix/GRASS/grass53_exp_2004_07_17/src/libes/LIB.powerpc-
apple-darwin7.4.0/libvect_combined.a'. Stop.
GISGEN failure at STEP: src/libes/vect32

and then a bunch of other vector stuff fails later on. I guess the snapshot caught the CVS tree in a
not-quite-working state.

-------------------------------------------- Managed by Request Tracker

On Sun, 18 Jul 2004, Request Tracker wrote:

this bug's URL: http://intevation.de/rt/webrt?serial_num=2545
-------------------------------------------------------------------------

Subject: vect32 fails to build

Platform: other
grass obtained from: Trento Italy site
grass binary for platform: Compiled from Sources

Looks like some changes in the makefiles in libes/vect32 are causing problems. I get this error:

GISGEN: src/libes/vect32 - Sat Jul 17 21:49:19 CDT 2004

#################################################################
/Users/williamk/Documents/src/unix/GRASS/grass53_exp_2004_07_17/src/libes/vect32
mkdir OBJ.powerpc-apple-darwin7.4.0
make -f OBJ.powerpc-apple-darwin7.4.0/make.rules

mkdir -p /Users/williamk/Documents/src/unix/GRASS/grass53_exp_2004_07_17/src/libes/vect32/
Vlib
mkdir -p /Users/williamk/Documents/src/unix/GRASS/grass53_exp_2004_07_17/src/libes/vect32/
diglib
make[1]: *** No rule to make target `Vlib/OBJ.powerpc-apple-darwin7.4.0/close.o', needed by `/
Users/williamk/Documents/src/unix/GRASS/grass53_exp_2004_07_17/src/libes/LIB.powerpc-
apple-darwin7.4.0/libvect_combined.a'. Stop.
GISGEN failure at STEP: src/libes/vect32

and then a bunch of other vector stuff fails later on. I guess the snapshot caught the CVS tree in a
not-quite-working state.

Oh dear- I didn't test the new changes with the old gmake build system. I will have a look at it later. Can you use the alternate build system with static libraries:
./configure --enable-gmake=no --enable-shared=no
as a workaround?

Paul

On Sun, 18 Jul 2004, Paul Kelly wrote:

On Sun, 18 Jul 2004, Request Tracker wrote:

this bug's URL: http://intevation.de/rt/webrt?serial_num=2545
-------------------------------------------------------------------------

Subject: vect32 fails to build

Platform: other
grass obtained from: Trento Italy site
grass binary for platform: Compiled from Sources

Looks like some changes in the makefiles in libes/vect32 are causing problems. I get this error:

GISGEN: src/libes/vect32 - Sat Jul 17 21:49:19 CDT 2004

make[1]: *** No rule to make target `Vlib/OBJ.powerpc-apple-darwin7.4.0/close.o', needed by `/
Users/williamk/Documents/src/unix/GRASS/grass53_exp_2004_07_17/src/libes/LIB.powerpc-
apple-darwin7.4.0/libvect_combined.a'. Stop.
GISGEN failure at STEP: src/libes/vect32

and then a bunch of other vector stuff fails later on. I guess the snapshot caught the CVS tree in a
not-quite-working state.

Oh dear- I didn't test the new changes with the old gmake build system. I will have a look at it later. Can you use the alternate build system with static libraries:
./configure --enable-gmake=no --enable-shared=no
as a workaround?

The patch below shows how I propose to fix this. I think src/CMD/gmake.sh should be changed so that $(OBJARCH) is preprended at the beginning of a path leading to a .o file rather than immediately preceding the filename.
i.e. Vlib/open.o becomes $(OBJARCH)/Vlib/open.o rather than Vlib/$(OBJARCH)/open.o as at present.

This should fix things for both the alternate and gmake systems.
It will also cause problems for badly written or non-standard Gmakefiles. The only one I came across is for r3.null and I will fix that by building r3.null and r3.mask from the same directory (cf. r.mapcalc and r3.mapcalc are built from the same directory).

But there might also be problems with non-standard Gmakefiles in add-on modules people have written themselves I suppose. But probably not very likely. So I just wanted to post this here for a while for comments before committing the changes.

The r.terraflow Gmakefile also needs fixed so it will work with both build systems. It has a related but different problem with using sub-directories.

Index: src/libes/vect32/Gmakefile

RCS file: /grassrepository/grass/src/libes/vect32/Gmakefile,v
retrieving revision 1.4
diff -u -r1.4 Gmakefile
--- src/libes/vect32/Gmakefile 15 Jul 2004 21:47:03 -0000 1.4
+++ src/libes/vect32/Gmakefile 20 Jul 2004 20:38:19 -0000
@@ -64,5 +64,5 @@
    $(SLIBRULE)

  mkextradirs:
- mkdir -p $(DSTDIR)/src/libes/vect32/Vlib
- mkdir -p $(DSTDIR)/src/libes/vect32/diglib
+ mkdir -p $(OBJARCH)/Vlib
+ mkdir -p $(OBJARCH)/diglib
Index: src/CMD/generic/gmake.sh

RCS file: /grassrepository/grass/src/CMD/generic/gmake.sh,v
retrieving revision 1.16
diff -u -r1.16 gmake.sh
--- src/CMD/generic/gmake.sh 25 Mar 2004 11:47:29 -0000 1.16
+++ src/CMD/generic/gmake.sh 20 Jul 2004 20:38:20 -0000
@@ -262,9 +262,9 @@

  # prepend all .o with $(OBJARCH) and .a files with $(LIBARCH)
  sed \
- -e 's#[\*0-9a-zA-Z_\.\-\$\(\)]*\.o[ \ ]#$(OBJARCH)/&#g' \
- -e 's#[\*0-9a-zA-Z_\.\-\$\(\)]*\.o:[ \ ]#$(OBJARCH)/&#g' \
- -e 's#[\*0-9a-zA-Z_\.\-\$\(\)]*\.o$#$(OBJARCH)/&#g' \
+ -e 's#[\/\*0-9a-zA-Z_\.\-\$\(\)]*\.o[ \ ]#$(OBJARCH)/&#g' \
+ -e 's#[\/\*0-9a-zA-Z_\.\-\$\(\)]*\.o:[ \ ]#$(OBJARCH)/&#g' \
+ -e 's#[\/\*0-9a-zA-Z_\.\-\$\(\)]*\.o$#$(OBJARCH)/&#g' \
      -e 's#[\*0-9a-zA-Z_\.\-\$\(\)]*\.a[ \ ]#$(LIBARCH)/&#g' \
      -e 's#[\*0-9a-zA-Z_\.\-\$\(\)]*\.a:[ \ ]#$(LIBARCH)/&#g' \
      -e 's#[\*0-9a-zA-Z_\.\-\$\(\)]*\.a$#$(LIBARCH)/&#g' \
@@ -280,7 +280,7 @@

  sed -e 's/=/ /' -e 's/\\//' Gmakefile |\
   awk '{for(i=1;i<=NF;i++) \
- if ($i ~ /^[a-zA-Z0-9_\.\-\$\(\)]*\.o$/) print substr($i,1,length($i)-2)} ' |\
+ if ($i ~ /^[\/a-zA-Z0-9_\.\-\$\(\)]*\.o$/) print substr($i,1,length($i)-2)} ' |\
   sort -u |\
   (
      while read file

On Wed, 21 Jul 2004, Lorenzo Moretti wrote:

The patch below shows how I propose to fix this. I think src/CMD/gmake.sh should be changed so that $(OBJARCH) is preprended at the beginning of a path leading to a .o file rather than immediately preceding the filename.
i.e. Vlib/open.o becomes $(OBJARCH)/Vlib/open.o rather than Vlib/$(OBJARCH)/open.o as at present.

Paul

Your patch resolve bug #2545 and bug #2547. Now is possible to create libvect_combined.a

OK- I have committed it.

This should fix things for both the alternate and gmake systems.
It will also cause problems for badly written or non-standard Gmakefiles. The only one I came across is for r3.null and I will fix that by building r3.null and r3.mask from the same directory (cf. r.mapcalc and r3.mapcalc are built from the same directory).

But there might also be problems with non-standard Gmakefiles in add-on modules people have written themselves I suppose. But probably not very likely. So I just wanted to post this here for a while for comments before committing the changes.

The r.terraflow Gmakefile also needs fixed so it will work with both build systems. It has a related but different problem with using sub-directories.

Yes the only problem is in r3.null like you say...

I changed it yesterday.
r.terraflow's Gmakefile still needs fixed to work with the alternate build system.