>>>>> "Raja" == Raja R Harinath <Raja> writes:
Raja> Hi, David Oleszkiewicz <[EMAIL PROTECTED]> writes: >> so i want to do something like this >> >> configure.in: PROGNAME = "foo" DIR = "${bindir}/${PROG}" >> AC_SUBST(DIR) >> >> myfile.h.in: #define DIR "@DIR@" >> >> when things resolve out to myfile.h i get #define CONF_DIR >> "${exec_prefix}/foo" Raja> Look at the GNU Autoconf Macro Archive for 'AC_DEFINE_DIR'. Or read the documentation. Most of these variables have values that rely on `prefix' or `exec_prefix'. It is on purpose that the directory output variables keep them unexpanded: typically `@datadir@' will be replaced by `${prefix}/share', not `/usr/local/share'. This behavior is mandated by the GNU coding standards, so that when the user runs: `make' she can still specify a different prefix from the one specified to `configure', in which case, if needed, the package shall hard code dependencies to her late desires. `make install' she can specify a different installation location, in which case the package _must_ still depend on the location which was compiled in (i.e., never recompile when `make install' is run). This is an extremely important feature, as many people may decide to install all the files of a package grouped together, and then install links from the final locations to there. In order to support these features, it is essential that `datadir' remains being defined as `${prefix}/share' to depend upon the current value of `prefix'. A corollary is that you should not use these variables but in Makefiles. For instance, instead of trying to evaluate `datadir' in `configure' and hardcoding it in Makefiles using e.g. `AC_DEFINE_UNQUOTED(DATADIR, "$datadir")', you should add `-DDATADIR="$(datadir)"' to your `CPPFLAGS'. Similarly you should not rely on `AC_OUTPUT_FILES' to replace `datadir' and friends in your shell scripts and other files, rather let `make' manage their replacement. For instance Autoconf ships templates of its shell scripts ending with `.sh', and uses this Makefile snippet: .sh: rm -f $@ $@.tmp sed 's,@datadir\@,$(pkgdatadir),g' $< >$@.tmp chmod +x $@.tmp mv $@.tmp $@ Three things are noteworthy: `@datadir\@' The backslash prevents `configure' from replacing `@datadir@' in the sed expression itself. `$(pkgdatadir)' Don't use `@pkgdatadir@'! Use the matching makefile variable instead. `,' Don't use `/' in the sed expression(s) since most probably the variables you use, such as `$(pkgdatadir)', will contain some.