@anchor{Upgrading}
По большей части Autoconf версии 2 обратно совместим с версией 1.
Однако же, в нем появились более удобные способы решения некоторых
вещей, а некоторые особенно уродливые способы из версии 1 не
поддерживаются. Так что, в зависимости от сложности ваших файлов
`configure.in', вам, может быть, придется вручную скорректировать
ваши файлы, чтобы использовать их с Autoconf версии 2. Этот раздел описывает некоторые
проблемы, которых можно ожидать при переходе к новой версии. Также,
возможно, ваши скрипты configure
получат выгоду от
использования новых возможностей версии 2; список изменений приведен в
файле `NEWS' дистрибутива Autoconf.
В первую очередь убедитесь, что у вас установлен GNU m4
версии
1.1 или более свежей, предпочтительней использовать версию 1.3 или
следующие. Версии до 1.1 имели ошибку, которая препятствовала их работе
с Autoconf версии 2. Версии 1.3 и более поздние работают быстрее,
чем более ранние версии, поскольку с версии 1.3 GNU m4
имеет
более эффективную реализацию diversions и может сохранить свое
состояние в файле, который потом может быстро считан обратно.
@anchor{Changed File Names}
Если у вас есть файл `aclocal.m4', установленный вместе с Autoconf
(а не в каталоге с исходными текстами), то вы
должны переименовать его в `acsite.m4'. See section Использование программы autoconf
для создания скрипта configure
.
Если вы распространяете с вашим пакетом файл `install.sh', то
переименуйте его в `install-sh', так что встроенные правила
make
не будут создавать на его основе файл
`install'. AC_PROG_INSTALL
ищет файл, пользуясь обоими
именами, но лучше использовать новое имя.
Если вы используете `config.h.top' или `config.h.bot', то вы
все равно сможете их использовать, но будет лучше, если вы
объедините их в файл `acconfig.h'. See section Использование autoheader
для создания `config.h.in'.
@anchor{Changed Makefiles}
Добавьте `@CFLAGS@', `@CPPFLAGS@' и `@LDFLAGS@' в
ваши файлы `Makefile.in', чтобы туда попадали значения
соответствующих переменных среды, установленные при запуске
configure
. Это необязательно, но удобно для
пользователей.
Также добавьте `@configure_input@' в комментарий каждого из
входных файлов макроса AC_OUTPUT
, кроме файлов `Makefile',
чтобы выходные файлы содержали сообщение о том, что они созданы скриптом
configure
. Автоматический выбор синтаксиса для комментариев в
файлах, для которых вызывается AC_OUTPUT
, было бы слишком сложно.
Добавьте `config.log' и `config.cache' в список файлов,
которые вы удаляете с помощью цели distclean
.
Если у вас в `Makefile.in' имеется следующее:
prefix = /usr/local exec_prefix = ${prefix}
то вы должны изменить эту запись на следующую:
prefix = @prefix@ exec_prefix = @exec_prefix@
Старое поведение замены переменных без знаков `@' вокруг них было удалено.
@anchor{Changed Macros}
В Autoconf версии 2 многие макросы были переименованы. Вы все равно
можете использовать старые имена, но новые имена макросов более понятны
и для них легче найти документацию. See section Старые имена макросов, где приведена таблица соответствия новых имен старым именам.
Используйте программу autoupdate
для
преобразования ваших файлов `configure.in' для использования новых
имен макросов. See section Использование autoupdate
для обновления configure
.
Некоторые макросы были заменены аналогичными, которые лучше выполняют
нужную задачу, но несовместимы по параметрам вызова. Если вы получаете
предупреждения о вызове устаревших макросов во время запуска
autoconf
, то можете спокойно игнорировать эти предупреждения,
но ваш скрипт configure
, вообще, будет работать лучше, если вы
последуете советам заменить устаревший макрос на новый. Аналогичным
образом был изменен механизм
выдачи результатов тестов. Если вы использовали команды echo
или
AC_VERBOSE
(может быть, посредством AC_COMPILE_CHECK
), то вывод
вашего скрипта configure
будет выглядеть лучше, если вы станете
использовать макросы AC_MSG_CHECKING
и AC_MSG_RESULT
.
See section Выдача сообщений. Эти макросы лучше всего работают при
использовании кэшированных переменных. See section Кэширование результатов.
autoupdate
для обновления configure
@anchor{Invoking autoupdate}
Программа autoupdate
обновляет файл `configure.in' заменяя
вызовы старых макросов Autoconf на вызовы макросов с новыми именами. В
Autoconf версии 2 большинство макросов были переименованы для
использования более общей и понятной схемы наименования. Для описания
новой схемы именования See section Имена макросов. Хотя макросы со старыми
именами все равно работают (see section Старые имена макросов, где приведен
список старых имен макросов и соответствующих им новых имен), но если вы
обновите свои файлы для соответствия новым именам макросов, то файлы
`configure.in' станут читабельнее, а использовать свежую
документацию по Autoconf станет проще.
Если autoupdate
запущена без аргументов, то она обновляет
`configure.in', делая резервную копию оригинальной версии файла с
использованием суффикса `~' (или значения переменной среды
SIMPLE_BACKUP_SUFFIX
, если она установлена). Если вы зададите
аргумент программе autoupdate
, то она будет считывать данные из
этого файла вместо `configure.in' и выводить данные в поток
стандартного вывода.
autoupdate
распознает следующие ключи командной строки:
--help
-h
--macrodir=dir
-m dir
AC_MACRODIR
; использование этого ключа
перекрывает переменную среды.
--version
autoupdate
и прекращает работу.
@anchor{Changed Results}
Если вы проверяли результаты предыдущих тестов путем проверки переменной
командного процессора DEFS
, то теперь вам необходимо
переключиться на проверку значений переменных кэша для данных
тестов. Переменная DEFS
больше не существует во время запуска
configure
; она создается только при генерации выходных файлов.
Это изменение поведения было сделано потому, что правильное
экранирование содержимого этой переменной оказалось слишком громоздким и
неэффективным при
каждом вызове макроса AC_DEFINE
. See section Имена переменных кэша.
Например, вот фрагмент `configure.in', написанного для Autoconf версии 1:
AC_HAVE_FUNCS(syslog) case "$DEFS" in *-DHAVE_SYSLOG*) ;; *) # syslog не находится в библиотеках по умолчанию. Смотрим, есть ли он в # других библиотеках. saved_LIBS="$LIBS" for lib in bsd socket inet; do AC_CHECKING(for syslog in -l$lib) LIBS="$saved_LIBS -l$lib" AC_HAVE_FUNCS(syslog) case "$DEFS" in *-DHAVE_SYSLOG*) break ;; *) ;; esac LIBS="$saved_LIBS" done ;; esac
Вот как это записывается для версии 2:
AC_CHECK_FUNCS(syslog) if test $ac_cv_func_syslog = no; then # syslog не находится в библиотеках по умолчанию. Смотрим, есть ли он в # других библиотеках. for lib in bsd socket inet; do AC_CHECK_LIB($lib, syslog, [AC_DEFINE(HAVE_SYSLOG) LIBS="$LIBS $lib"; break]) done fi
Если вы обходили ошибку в макросе AC_DEFINE_UNQUOTED
, добавляя
символы обратной косой черты перед кавычками, то теперь вам придется
удалить их. Этот макрос сейчас работает предсказуемо и не рассматривает
особым образом кавычки (кроме обратных). See section Установка выходных переменных.
Все логические переменные командного процессора, устанавливаемые макросами Autoconf, используют `yes' для истинных переменных. Большинство из них использует `no' для ложных значений, хотя для обратной совместимости некоторые из них используют пустую строку. Если вы полагались, что переменная командного процессора будет установлена в что-нибудь типа `1' или `t' для истинного значения, то вам необходимо изменить ваши тесты.
@anchor{Changed Macro Writing}
При определении ваших собственных макросов вы должны использовать
макрос AC_DEFUN
вместо define
. AC_DEFUN
автоматически вызывает макрос AC_PROVIDE
и проверяет, что макросы,
вызываемые через AC_REQUIRE
, не прерывают другие макросы, для
предотвращения вложенных сообщений `checking...' на экране. На
самом деле, старый способ не причинит вреда, но он менее удобен и менее
привлекателен. See section Определение макросов.
Вы, вероятно, рассматривали макросы, поставляемые с Autoconf, как руководство по написанию макросов. Посмотрите на новую их версию, потому что стиль некоторых макросов сильно улучшен, а новые возможности активно используются.
Если вы делали хитрые вещи, используя недокументированные свойства Autoconf (макросы, переменные, diversions), то проверьте, не нужно ли изменить что-нибудь, чтобы учесть сделанные в Autoconf изменения. Может быть, теперь вы можете пользоваться стандартной возможностью версии 2, вместо того, чтобы упражняться в изобретательности. Или нет.
Для ускорения работы написанных вами макросов добавьте в них поддержку кэширования. Просмотрите все ваши тесты, может быть их нужно оформить в виде макросов, которые вы сможете использовать в разных пакетах.
Go to the first, previous, next, last section, table of contents.