How to get fully expanded variables out of configure?

autoconf, configure, expand, variables

Solution

The Autoconf manual (I cannot recall or find exactly where) recommends to "manually" do such a kind of variable substitution from within a Makefile.in (or .am if you happen to use Automake):

Makefile.in

[...]
foo.sh: foo.sh.in
        $(SED) \
            -e 's|[@]prefix@|$(prefix)|g' \
            -e 's|[@]exec_prefix@|$(exec_prefix)|g' \
            -e 's|[@]bindir@|$(bindir)|g' \
            -e 's|[@]datarootdir@|$(datarootdir)|g' \
            < "$<" > "$@"
[...]

foo.sh.in

#!/bin/sh
datarootdir=@datarootdir@
du "$datarootdir"

Problem

I created a configure.ac file like this: ``` AC_INIT() set ``` the purpose of this is to print every available environment variable the configure script creates using `set`, so I do this: ``` user@host:~$ autoconf user@host:~$ ./configure ``` which prints a bunch of variables like ``` build= cache_file=/dev/null IFS=' ' LANG=C LANGUAGE=C datarootdir='${prefix}/share' mandir='${datarootdir}/man' no_create= ``` So far so good. The problem is: - I want to expand the variables like `${prefix}/share` - but piping everything to a file `example.sh` and executing it using bash doesn't work, because bash complains about modifying read-only variables like `UID` and expansion itself doesn't seem to work either. - I tried using a `makefile` for this where expansion works, but it complains about newlines in strings, like in the above output the line `IFS=' causes an error message Makefile:24: *** missing separator. Stop.` Does anyone have an idea how to get a fully expanded version of configure's output?

Original source