[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
По большей части 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 и может сохранить свое состояние в
файле, который потом может быстро считан обратно.
13.1 Измененные имена файлов 13.2 Измененные файлы Makefile Новые вещи, которые можно поместить в `Makefile.in'. 13.3 Измененные макросы 13.4 Использование autoupdate
для обновленияconfigure
Замена старых имен макросов в configure.in
.13.5 Измененные результаты 13.6 Измененное написание макросов
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Если у вас есть файл `aclocal.m4', установленный вместе с Autoconf
(а не в каталоге с исходными текстами), то вы
должны переименовать его в `acsite.m4'. See section 2.4 Использование программы autoconf
для создания скрипта configure
.
Если вы распространяете с вашим пакетом файл `install.sh', то
переименуйте его в `install-sh', так что встроенные правила
make
не будут создавать на его основе файл
`install'. AC_PROG_INSTALL
ищет файл, пользуясь обоими
именами, но лучше использовать новое имя.
Если вы используете `config.h.top' или `config.h.bot', то
будет лучше,сли вы объедините их в файл `acconfig.h'. See section 3.4.2 Использование autoheader
для создания `config.h.in'.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Добавьте `@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@ |
Старое поведение замены переменных без знаков `@' вокруг них было удалено.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
В Autoconf версии 2 многие макросы были переименованы. Вы все равно
можете использовать старые имена, но новые понятнее, и для них легче
найти документацию. See section 15. Старые имена макросов, где приведена таблица
соответствия новых имен старым именам. Используйте программу
autoupdate
для преобразования ваших файлов `configure.in'
для использования новых имен макросов. See section 13.4 Использование autoupdate
для обновления configure
.
Некоторые макросы были заменены аналогичными, лучше выполняющими нужную
задачу, но несовместимыми по параметрам вызова. Если вы получаете
предупреждения о вызове устаревших макросов во время запуска
autoconf
, то можете спокойно игнорировать эти предупреждения, но
ваш скрипт configure
будет работать лучше, если вы последуете
советам и замените устаревший макрос на новый. Аналогичным образом был
изменен механизм выдачи результатов тестов. Если вы использовали
команды echo
или AC_VERBOSE
(может быть, посредством
AC_COMPILE_CHECK
), то вывод вашего скрипта configure
будет
выглядеть лучше, если вы станете использовать макросы
AC_MSG_CHECKING
и AC_MSG_RESULT
. See section 6.4 Выдача сообщений.
Эти макросы лучше работают при использовании кэшированных
переменных. See section 6.3 Кэширование результатов.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
autoupdate
для обновления configure
Программа autoupdate
обновляет файл `configure.in', заменяя
вызовы старых макросов Autoconf на вызовы макросов с новыми именами. В
Autoconf версии 2 большинство макросов были переименованы для
использования более общей и понятной схемы наименования. Для описания
новой схемы именования See section 7.2 Имена макросов. Хотя макросы со старыми
именами все равно работают (см.see section 15. Старые имена макросов, где приведен
список старых имен макросов и соответствующих им новых имен), но если вы
обновите свои файлы для соответствия новым именам макросов, то файлы
`configure.in' станут читабельнее, а использовать свежую
документацию по Autoconf станет проще.
Если autoupdate
запущена без аргументов, то она обновляет
`configure.in', делая резервную копию оригинальной версии файла с
использованием суффикса `~' (или значения переменной среды
SIMPLE_BACKUP_SUFFIX
, если она установлена). Если вы зададите
аргумент программе autoupdate
, то она будет считывать данные из
этого файла вместо `configure.in' и выводить данные в поток
стандартного вывода.
autoupdate
распознает следующие ключи командной строки:
--help
-h
--macrodir=dir
-m dir
AC_MACRODIR
; использование этого ключа
перекрывает переменную среды.
--version
autoupdate
и прекращает работу.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Если вы проверяли результаты предыдущих тестов путем проверки переменной
командного процессора DEFS
, то теперь вам необходимо
переключиться на проверку значений переменных кэша для данных
тестов. Переменная DEFS
больше не существует во время запуска
configure
; она создается только при генерации выходных файлов.
Это изменение поведения было сделано потому, что правильное
экранирование содержимого этой переменной оказалось слишком громоздким и
неэффективным при каждом вызове макроса AC_DEFINE
. See section 6.3.1 Имена переменных кэша.
Например, вот фрагмент `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 6.2 Установка выходных переменных.
Все логические переменные командного процессора, устанавливаемые макросами Autoconf, используют `yes' для истинных переменных. Большинство из них использует `no' для ложных значений, хотя для обратной совместимости некоторые из них используют пустую строку. Если вы полагали, что переменная командного процессора будет установлена во что-нибудь типа `1' или `t' для истинного значения, то вам необходимо изменить ваши тесты.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
При определении ваших собственных макросов вы должны использовать макрос
AC_DEFUN
вместо define
. AC_DEFUN
автоматически
вызывает макрос AC_PROVIDE
и проверяет, что макросы, вызываемые
через AC_REQUIRE
, не прерывают другие макросы для предотвращения
вложенных сообщений `checking...' на экране. На самом деле
старый способ не причинит вреда, но он менее удобен и привлекателен.
See section 7.1 Определение макросов.
Вы, вероятно, рассматривали макросы, поставляемые с Autoconf, как руководство по написанию макросов. Посмотрите на новую их версию, потому что стиль некоторых макросов намного улучшен, а новые возможности активно используются.
Если вы делали хитрые вещи, используя недокументированные свойства Autoconf (макросы, переменные, diversions), то проверьте, не нужно ли изменить что-нибудь, чтобы учесть сделанные в Autoconf изменения. Может быть, теперь вы можете пользоваться стандартной возможностью версии 2 вместо того, чтобы упражняться в изобретательности. Или нет.
Для ускорения работы написанных вами макросов добавьте в них поддержку кэширования. Просмотрите все ваши тесты, может быть, их нужно оформить в виде макросов, которые вы сможете использовать в разных пакетах.
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |