[GRASS5] CVS Broken?

Folks,

I don't know about serious problems with a merge, but I have tried updating
to the latest, and building and run into problems with dbmi/drivers/odbc. This
is my first attempt to build "stable", so I am not saying this is a new problem.

I get the complaint that sql.h (a unixODBC file I presume) can't be found. This
makes sense, since I don't have it on my system. What isn't clear to me is why
an attempt is even being made to build src/libes/dbmi/drivers/odbc since I don't
have unixODBC. Looking through the Gmakefiles and source code I don't see
how this is intended to build (or be skipped) on systems without unixODBC.

Any suggestions?

PS. I am building from the latest stable despite the warning Glynn sent because I am
afraid I might have been the one to botch CVS.

PPS. Thanks to Markus and everyone for the explantions about the branches. I had
missed the signifigance of updating with a "branch" tag vs. a release tag. Apparently
it has special semantics that locks you into the branch, but not a particular tagged
snapshot of all the files. I think I have all my files checked properly into CVS now.

Best regards,

--
---------------------------------------+--------------------------------------
I set the clouds in motion - turn up | Frank Warmerdam, warmerdam@pobox.com
light and sound - activate the windows | http://pobox.com/~warmerdam
and watch the world go round - Rush | Geospatial Programmer for Rent

Frank Warmerdam wrote:

I don't know about serious problems with a merge, but I have tried
updating to the latest, and building and run into problems with
dbmi/drivers/odbc. This is my first attempt to build "stable", so I am
not saying this is a new problem.

I get the complaint that sql.h (a unixODBC file I presume) can't be
found. This makes sense, since I don't have it on my system. What
isn't clear to me is why an attempt is even being made to build
src/libes/dbmi/drivers/odbc since I don't have unixODBC. Looking
through the Gmakefiles and source code I don't see how this is
intended to build (or be skipped) on systems without unixODBC.

Any suggestions?

What does the "DBMI DRIVERS" section of src/CMD/lists/GRASS look like?
It should look like this:

  ##### DBMI DRIVERS #####
  src/libes/dbmi/lib
  src/libes/dbmi/drivers/stubs
  # requires ODBC:
  # src/libes/dbmi/drivers/odbc
  #
  # requires Informix, needs update:
  # src/libes/dbmi/drivers/informix
  #
  # requires SQLBASE, needs update:
  # src/libes/dbmi/drivers/sqlbase
  #
  src/libes/dbmi/clients

Do you have src/CMD/lists/local or src/CMD/lists/<architecture> files?

At present, the build process doesn't include any logic to
conditionally build a particular library or program according to
whether you have the required dependencies.

Instead, it attempts to build every directory which is listed in
src/CMD/lists/{GRASS,local,<architecture>}.

PS. I am building from the latest stable despite the warning Glynn
sent because I am afraid I might have been the one to botch CVS.

Did you check out the development branch then commit the entire tree
to the release branch? That might explain it.

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

Glynn Clements wrote:

What does the "DBMI DRIVERS" section of src/CMD/lists/GRASS look like?
It should look like this:

##### DBMI DRIVERS ##### src/libes/dbmi/lib
src/libes/dbmi/drivers/stubs

Do you have src/CMD/lists/local or src/CMD/lists/<architecture> files?

At present, the build process doesn't include any logic to
conditionally build a particular library or program according to
whether you have the required dependencies.

Instead, it attempts to build every directory which is listed in
src/CMD/lists/{GRASS,local,<architecture>}.

Glynn,

The local file is correct now, and the build seems to run properly, not
trying to build the odbc driver. I believe the problem is that I hadn't
rerun configure after updating to the release branch, got the odbc problem.
I then reran configure but kept running gmake5 in the libes/dbmi directory
which resulted in the extra odbc driver build be attempted. When I reran
the full make after the reconfigure the build ran fine.

What is gmake5 under the hood? Is it just a script setting up makefiles
for old style (non-GNU) make? If we were willing to specify GNUmake
as a build requirement we could have the makefiles decide what subdirs to
build based on variables setup by configure pretty easily.

Amoung other problems, the existing Gmakefile and list of places to
build is hard to grok for developers new to GRASS.

A few other "developer" questions:

o How do folks normally do quick global builds when they just want to
    refresh things. I find the current mechanisms insistance on reprocessing
   all the html/man stuff makes it very slow to do a top level make.

o Do developers normally do a "make install", and run from the installed tree
    during development, or somehow run directly from their build tree? When I am just making iterative improvements to a program I have adopted
    the practice of just doing a gmake5 in that programs directory, and replacing
    the binary in the installed tree with a link back to the executable in the
    build tree. But this is somewhat tedious to steup, and I would presume other
    folks have a smoother approach.

PS. I am building from the latest stable despite the warning Glynn
sent because I am afraid I might have been the one to botch CVS.

Did you check out the development branch then commit the entire tree
to the release branch? That might explain it.

I certainly don't think I did any global commits, but it is possible I did. I am normally very careful to commit only specific file lists.

However, I looked into some of the items folks mentioned were screwed up now
and couldn't find any suggestion that I had made any sort of commit to the
files.

Best regards,

---------------------------------------+--------------------------------------
I set the clouds in motion - turn up | Frank Warmerdam, warmerdam@pobox.com
light and sound - activate the windows | http://pobox.com/~warmerdam
and watch the world go round - Rush | Geospatial Programmer for Rent

On Fri, Aug 10, 2001 at 09:05:20AM -0400, Frank Warmerdam wrote:
[snip]

What is gmake5 under the hood? Is it just a script setting up makefiles
for old style (non-GNU) make? If we were willing to specify GNUmake
as a build requirement we could have the makefiles decide what subdirs to
build based on variables setup by configure pretty easily.

Amoung other problems, the existing Gmakefile and list of places to
build is hard to grok for developers new to GRASS.

The plan was to completely redo the build system in 5.1. At least one
of the goals of that process it to build shared libraries (when the
architechture allows) so that the resulting binary set can be much
smaller. Improving modularity of the build system is also a goal.

A few other "developer" questions:

o How do folks normally do quick global builds when they just want to
   refresh things. I find the current mechanisms insistance on
reprocessing
  all the html/man stuff makes it very slow to do a top level make.

Yes. Very slow. Takes about an hour or so on my 'puter to do a clean
build.

o Do developers normally do a "make install", and run from the
installed tree
   during development, or somehow run directly from their build tree?
   When I am just making iterative improvements to a program I have adopted
   the practice of just doing a gmake5 in that programs directory, and
replacing
   the binary in the installed tree with a link back to the executable
in the
   build tree. But this is somewhat tedious to steup, and I would
presume other
   folks have a smoother approach.

For small changes, I just do gmake5 and copy the binary from dist.<foo>
to wherever it would live in <target>/grass5/. Somewhat tedious to be
sure. When libraries change, it's another matter...

--
Eric G. Miller <egm2@jps.net>

Frank Warmerdam wrote:

What is gmake5 under the hood? Is it just a script setting up makefiles
for old style (non-GNU) make?

I think so. AFAICT, it's a workaround for "make" programs which don't
have an "include" directive.

A few other "developer" questions:

o How do folks normally do quick global builds when they just want to
    refresh things. I find the current mechanisms insistance on
reprocessing
   all the html/man stuff makes it very slow to do a top level make.

Personally, I just run "make" and wait.

I don't actually do that many global builds. If I'm working on
something, I normally just use "gmake5".

I usually only do a global build after a "cvs update" (compared to
which, a global build is quick).

o Do developers normally do a "make install", and run from the
installed tree
    during development, or somehow run directly from their build tree?

The latter; "cd /usr/src/grass ; bin.i686-pc-linux-gnu/grass5".

> Did you check out the development branch then commit the entire tree
> to the release branch? That might explain it.

I certainly don't think I did any global commits, but it is possible I
did. I am normally very careful to commit only specific file lists.

I doubt that you would do a global commit without noticing.

However, I looked into some of the items folks mentioned were screwed up now
and couldn't find any suggestion that I had made any sort of commit to the
files.

Right. Running "cvs log" on the re-appearing files doesn't show any
recent entries.

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

On Fri, Aug 10, 2001 at 09:05:20AM -0400, Frank Warmerdam wrote:
[...]

A few other "developer" questions:

o How do folks normally do quick global builds when they just want to
    refresh things. I find the current mechanisms insistance on
    reprocessing
   all the html/man stuff makes it very slow to do a top level make.

Frank,

I am not sure if you received an answer here:
It's pretty easy:

Compiling a local module (after once having run all the
configure;make;make install
procedure) can be done with

gmake5 -i
gmakelinks5 -i # this one only required if module not yet present in GRASS

Enjoy,

Markus