Как получить полностью расширенные переменные из конфигурации? - PullRequest
5 голосов
/ 17 сентября 2009

Я создал файл configure.ac так:

AC_INIT()
set

цель этого состоит в том, чтобы напечатать каждую доступную переменную среды, которую сценарий конфигурирования создает с использованием set, поэтому я делаю это:

user@host:~$ autoconf
user@host:~$ ./configure

, который печатает кучу переменных вроде

build=
cache_file=/dev/null
IFS='   
'
LANG=C
LANGUAGE=C
datarootdir='${prefix}/share'
mandir='${datarootdir}/man'
no_create=

Пока все хорошо. Проблема:

  1. Я хочу расширить переменные, как ${prefix}/share - но трубка все в файл example.sh и его выполнение с помощью bash не работает, потому что bash жалуется на изменение переменных, доступных только для чтения, таких как UID, и само расширение, похоже, тоже не работает.
  2. Я попытался использовать makefile для этого, где расширение работает, но он жалуется на перевод строк в строках, как в приведенном выше выводе строка IFS=' causes an error message Makefile:24: *** missing separator. Stop.

У кого-нибудь есть идеи, как получить полностью расширенную версию вывода configure?

1 Ответ

6 голосов
/ 13 октября 2009

Руководство Autoconf (я не могу вспомнить или найти точно, где) рекомендует «вручную» выполнить такой тип подстановки переменных из файла Makefile.in (или .am, если вы используете 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"
...