Question

I'd like my application to have portable access to the configuration files installed during make install (dist_sysconf_DATA). Is it possible to access $(sysconfdir) via config.h?

Was it helpful?

Solution

It is, but you should not do this according to official voices (as in, I am not gonna search the manual for it now) so as to continue supporting overriding it for specific objects to be built.

make CPPFLAGS="-USYSCONFDIR -DSYSCONFDIR=/blah" thisoneobject.o

Hence, what one is supposed to do:

AM_CPPFLAGS = -DSYSCONFDIR=\"${sysconfdir}\"

OTHER TIPS

If you're using autoheader, adding this to your configure.ac will output a SYSCONFDIR macro in your config.h, and it will be defined with the value $(sysconfdir) or ${prefix}/etc.

if test "x$sysconfdir" = 'x${prefix}/etc'; then
    if test "x$prefix" = 'xNONE'; then
        sysconfdir=$ac_default_prefix/etc
    else
        sysconfdir=$prefix/etc
    fi
fi

AC_DEFINE_UNQUOTED([SYSCONFDIR], ["$sysconfdir"], [location of system configuration directory])

But I would strongly recommend against doing that, and instead, stick with using the -DSYSCONFDIR flag. It's less code and therefore less prone to something going wrong. Using a condition in configure.ac such I mentioned may not be portable or take into account every case that might be encountered. Using -DSYSCONFDIR is the best option. Sometimes appearance just doesn't matter.

What I believe is most commonly done (and this is what I do)

Add the following in your Makefile.am

AM_CPPFLAGS = -DSYSCONFIR='"$(sysconfdir)"'

And now you can access SYSCONFDIR in source

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top