On Sep 23, 2007, at 4:48 AM, Glynn Clements wrote:


William Kyngesburye wrote:

I started looking at the installed makefile fragments to get them in
working order to build addons.

Note that I've just committed a bunch of changed to fix the issues
which I mentioned in my previous email.

Cool.

- Grass.make - add below the "ifdef INST_NOW" block:

ifdef INST_XTN
ARCH_DISTDIR    = $(INST_DIR)
XTN_DISTDIR     = $(GRASS_HOME)/dist.$(ARCH)
ARCH_INC        = -I$(ARCH_DISTDIR)/include -I$(XTN_DISTDIR)/include
ARCH_LIBPATH    = -L$(ARCH_LIBDIR) -L$(XTN_DISTDIR)/lib
BIN             = $(XTN_DISTDIR)/bin
ETC             = $(XTN_DISTDIR)/etc
DRIVERDIR       = $(XTN_DISTDIR)/driver
DBDRIVERDIR     = $(XTN_DISTDIR)/driver/db
endif

Regarding the last four, this is the wrong approach. It will break
everytime someone adds another variable for a subdirectory.

It appears that GISBASE needs to be split into source and destination
variables. The former would be used for -I/-L switches, the latter for
determining where to place output files.

...

If GISBASE is split appropriately, it shouldn't be necessary to
conditionalise this.

- html.make - conditionally refer to ARCH_DISTDIR or XTN_DISTDIR as
needed:

Ditto.

(below, just trying to get a handle on the whole thing)

So, I came up with these "bases" for finding/creating files:

- INST_DIR - where make install target copies files to - can be overridden for installing to external location (I worked on this after my initial email).

- GRASS_HOME - source topdir (full path)
- MODULE_TOPDIR - source topdir (usually relative path)

- ARCH_DISTDIR - where targets are built INTO before installation, default based on GRASS_HOME


and these use them (that are of interest to an external build/install):

- RUN_GISBASE -> ARCH_DISTDIR - but right now that's expanded by configure

- RUN_GISRC -> ARCH_DISTDIR

- GISBASE -> ARCH_DISTDIR - usually reset to RUN_GISBASE (which is just ARCH_DISTDIR anyways), but the main makefile uses it directly for GRASS_PDFDIR

- demolocation -> ARCH_DISTDIR

- html.make -> ARCH_DISTDIR - for generating html files into

- makefile includes -> MODULE_TOPDIR
- doxygen commands in doxygen.make -> MODULE_TOPDIR
- FMODE_OBJ in grass.make -> MODULE_TOPDIR
- htmlgen in html.make -> MODULE_TOPDIR - to find tools/mkhtml.sh
- scriptstrings in script.make -> MODULE_TOPDIR - to find translate.c files

- BIN, ETC, DRIVERDIR -> ARCH_DISTDIR

- ARCH_LIBDIR, ARCH_INCDIR -> ARCH_DISTDIR


As used with the INST_NOW/INST_XTN makes, where GRASS_HOME is set to the module source dir and MODULE_TOPDIR is set to the installed GRASS binary, that creates a couple problems:

- ARCH_DISTDIR is local to the module source, but is used to find and use demolocation (RUN_GISBASE, RUN_GISRC).

INST_XTN will work with GRASS_HOME set to the module source dir, but won't find the installed demolocation.

- Also, ARCH_LIBDIR and ARCH_INCDIR are needed to find BOTH installed GRASS libs and headers AND module built libs and headers (for the rare addon module that has its own library). For the INST_NOW build, this works as is.

For the INST_XTN build, the installed GRASS lib/include would have to be added to ARCH_INC and ARCH_LIBPATH (slightly different than I currently have it).


So, as you said (it's making sense to me now), GISBASE somehow needs its own base dir setting, defaulting to ARCH_DISTDIR, and which would only need to be overridden by the INST_XTN build.

How about this: since GISBASE is really only for *running* GRASS, and should only be set as needed (fix that GRASS_PDFDIR usage), don't use it as a makefile var. RUN_GISRC is off the RUN_GISBASE dir, which configures to the same as ARCH_DISTDIR, so base it on that, and default RUN_GISBASE to ARCH_DISTDIR, in platform.make:

RUN_GISBASE = ${ARCH_DISTDIR}
RUN_GISRC = ${RUN_GISBASE}/demolocation/.grassrc${GRASS_VERSION_MAJOR} ${GRASS_VERSION_MINOR}

Configure won't need to set anything for RUN_GISBASE then. I wouldn't need those conditionals in html.make. And just nned to add to ARCH_INC and ARCH_LIBPATH for the INST_XTN build.

Then, for modules, in the module source dir:

for INST_NOW:

INST_NOW=y make GRASS_HOME=/path/to/installed/grass MODULE_TOPDIR=/ path/to/installed/grass

for INST_XTN:

INST_NOW=y make GRASS_HOME=. MODULE_TOPDIR=/path/to/installed/grass RUN_GISBASE=/path/to/installed/grass


-----
William Kyngesburye <kyngchaos*at*kyngchaos*dot*com>
http://www.kyngchaos.com/

Theory of the Universe

There is a theory which states that if ever anyone discovers exactly what the universe is for and why it is here, it will instantly disappear and be replaced by something even more bizarrely inexplicable. There is another theory which states that this has already happened.

-Hitchhiker's Guide to the Galaxy 2nd season intro


_______________________________________________
grass-dev mailing list
[email protected]
http://grass.itc.it/mailman/listinfo/grass-dev

Reply via email to