Autoconf - Создание скриптов configure
Go to the first, previous, next, last section, table of contents.
Создание скриптов configure
Скрипты конфигурации, создаваемые Autoconf, по принятым соглашениям называются
configure
. При запуске configure
создает несколько файлов,
заменяя в них параметры конфигурации на соответствующие системе значения.
configure
создает следующие файлы:
- один или несколько файлов `Makefile', по одному на каждый подкаталог пакета (see section Подстановки в файлах Makefile);
-
если задано, создается заголовочный файл для языка C, имя которого можно
задать при создании скрипта и который содержит директивы
#define
(see section Заголовочные файлы конфигурации); - скрипт командного процессора с именем `config.status', который при запуске заново создаст вышеперечисленные файлы (see section Воссоздание конфигурации);
- скрипт командного процессора с именем `config.cache', который сохраняет результаты выполнения многих тестов (see section Кэш-файлы);
-
файл с именем `config.log', который содержит все сообщения, выданные
компиляторами. Этот файл может использоваться при отладке,
если
configure
работает неправильно.
Для того, чтобы с помощью Autoconf создать скрипт configure
, вам
необходимо написать входной файл с именем `configure.in' и
выполнить команду autoconf
. Если вы напишите собственный код
тестирования возможностей системы, в дополнение к поставляемым с
Autoconf, то вам придется записать его в файлы с именами `aclocal.m4' и
`acsite.m4'.
Если вы используете заголовочный файл, который содержит
директивы #define
, то вы также должны создать файл
`acconfig.h', и вы сможете распространять с пакетом созданный с
помощью Autoconf файл `config.h.in'.
Вот диаграмма, показывающая, как создаются файлы, используемые при
конфигурации. Выполняемые программы обозначены суффиксом `*'.
Необязательные файлы взяты в квадратные скобки (`[]'). Программы
autoconf
и autoheader
также читают установленные файлы с
макросами Autoconf (обрабатывая файл `autoconf.m4').
Файлы, используемые при подготовке программного пакета к распространению:
Файлы исходных текстов --> [autoscan*] --> [configure.scan] --> configure.in configure.in --. .------> autoconf* -----> configure +---+ [aclocal.m4] --+ `---. [acsite.m4] ---' | +--> [autoheader*] -> [config.h.in] [acconfig.h] ----. | +-----' [config.h.top] --+ [config.h.bot] --' Makefile.in -------------------------------> Makefile.in
Файлы, используемые при конфигурации программного пакета:
.-------------> config.cache configure* ------------+-------------> config.log | [config.h.in] -. v .-> [config.h] -. +--> config.status* -+ +--> make* Makefile.in ---' `-> Makefile ---'
Написание `configure.in'
Для создания скрипта configure
для программного пакета, создайте
файл с именем `configure.in', который содержит
вызовы макросов Autoconf, которые проверяют системные возможности,
которые нужны вашему пакету или которые он может использовать. Для
многих таких возможностей макросы Autoconf уже написаны;
See section Существующие тесты, где находится их описание. Для большинства других возможностей
вы можете использовать шаблонные макросы Autoconf, на базе которых можно
создать специальные проверки; See section Написание тестов, где это описано.
Для особо хитроумных или специализированных возможностей, в файл
`configure.in' может понадобиться включить специально написанные
скрипты командного процессора. Программа autoscan
может оказать вам
хорошую помощь на первых порах, при создании файла `configure.in'
(see section Использование программы autoscan
для создания `configure.in', где описана эта программа).
За некоторыми исключениями, порядок вызовов макросов Autoconf в
`configure.in' не важен. Каждый файл `configure.in'
должен в самом начале содержать вызов макроса AC_INIT
, а также
вызов макроса AC_OUTPUT
в самом конце
(see section Создание выходных файлов). Также некоторые макросы полагаются на то, что другие
макросы были вызваны первыми, поскольку для того, чтобы принять
решение, они проверяют уже установленные значения переменных. Такие
макросы отдельно отмечены в описании
(see section Существующие тесты), а при создании скрипта
configure
выдается предупреждение, если вы нарушили порядок
вызова макросов.
Для того, чтобы ваши файлы были последовательны и единообразны, мы приведем желательный порядок вызова макросов Autoconf. Вообще говоря, то, что находится ближе к концу списка, может зависеть от того, что находится в начале списка. Например, библиотечные функции могут зависеть от определений типов и библиотек.
AC_INIT(file)
Проверка программ Проверка библиотек Проверка заголовочных файлов Проверка определений типов Проверка структур Проверка характеристик компилятора Проверка библиотечных функций Проверка системных сервисовAC_OUTPUT([file...])
Лучше всего помещать каждый вызов макроса на отдельную строку файла
`configure.in'. Большинство макросов не добавляют дополнительных
переводов строк; они полагают, что после каждого вызова макроса
находится новая строка. Это позволяет сделать скрипт configure
читабельнее, не добавляя ненужных пустых строк. Можно спокойно
устанавливать переменные окружения в той же строке, что и вызов
макроса, потому что командные процессоры позволяют выполнять
присваивание в одной строке, без дополнительных пустых строк.
При вызове макросов с аргументами между открывающей скобкой и
названием макроса не должно быть пробелов. Аргументы могут
занимать несколько строк если они заключены в "кавычки" языка
m4
--- `[' и `]'. Если у вас
есть длинная строка, например, список имен файлов, то можно использовать
символ обратного слэша в конце строки для указания, что список продолжается
на следующей строке (эта возможность реализуется командным
процессором, без привлечения возможностей Autoconf).
Некоторые макросы отрабатывают два случая--- когда заданное условие выполняется и когда условие не выполняется. В некоторых местах вы можете захотеть сделать что-либо, если условие выполняется, и ничего не делать в противном случае, и наоборот. Для того, чтобы пропустить действие при выполнении условия, передайте пустое значение аргументу action-if-found данного макроса. Для пропуска действия при невыполнении условия уберите аргумент action-if-not-found данного макроса, включая предшествующую ему запятую.
В файл `configure.in' можно включать комментарии, начиная их со
встроенного макроса m4
--- dnl
, который отбрасывает текст
вплоть до начала новой строки. Эти комментарии не появятся в созданных
скриптах configure
. Например, полезно начинать файлы
`configure.in' со строки, которая может выглядеть так:
dnl для создания скрипта configure обработайте этот файл программой autoconf.
Использование программы autoscan
для создания `configure.in'
@anchor{Invoking autoscan}
Программа autoscan
может помочь вам в создании файла
`configure.in' для программного пакета.
autoscan
выполняет анализ дерева исходных текстов, корень
которого указан в командной строке или совпадает с текущим каталогом.
Программа ищет в
исходных текстах следы обычных проблем с переносимостью и создает
файл `configure.scan', который является заготовкой для
`configure.in' для данного пакета.
Вы должны сами просмотреть файл `configure.scan' перед тем, как
переименовать его в `configure.in': скорее всего, он будет нуждаться
в некоторых исправлениях. Иногда autoscan
выдает макросы в
неправильном порядке, и поэтому
autoconf
будет выдавать предупреждения; вам необходимо вручную
передвинуть эти макросы. Также, если вы хотите, чтобы пакет использовал
заголовочный файл настроек, то вы должны сами добавить вызов макроса
AC_CONFIG_HEADER
(see section Заголовочные файлы конфигурации). Вам
также необходимо добавить или изменить некоторые директивы препроцессора
#if
в вашей программе, для того, чтобы заставить ее работать с
Autoconf (see section Использование программы ifnames
для перечисления условных выражений, где описана программа, которая поможет
вам выполнить эту работу).
Программа autoscan
использует несколько файлов данных, чтобы
определить, какие макросы следует использовать при обнаружении
определенных символов в исходных файлах пакета. Эти файлы данных
устанавливаются вместе с дистрибутивными макро-файлами Autoconf и имеют
одинаковый формат.
Каждая строка
состоит из символа, пробелов и имени макроса Autoconf, которое выдается
в том случае, если заданный символ имеется в исходных текстах. Строки,
начинающиеся с символа `#' являются комментариями.
autoscan
устанавливается только в том случае, если у вас установлена
программа Perl. autoscan
распознает следующие ключи командной строки:
--help
- Выдает список ключей командной строки и прекращает работу.
--macrodir=dir
-
Заставляет программу искать файлы данных в каталоге dir, а не
в каталоге, куда производилась установка. Вы также можете установить
значение переменной окружения
AC_MACRODIR
равным пути к этому каталогу; данный ключ командной строки переопределяет значение переменной окружения. --verbose
- Выдает имена исследуемых файлов и потенциально интересные символы, обнаруженные в этих файлах. Выдача может быть довольно обширной.
--version
- выдает номер версии Autoconf и прекращает работу.
Использование программы ifnames
для перечисления условных выражений
@anchor{Invoking ifnames}
Программа ifnames
может помочь при создании файла
`configure.in' для программного пакета. Она выдает
список идентификаторов, которые пакет уже использует в условных
выражениях препроцессора языка С. Если ваша программа уже была написана
с учетом возможного переноса на другие платформы, то данная программа
может помочь вам определить, какие проверки необходимо выполнить в
configure
. Эта программа может помочь заполнить некоторые пробелы
в файле `configure.in', который был создан программой
autoscan
(see section Использование программы autoscan
для создания `configure.in').
Программа ifnames
обрабатывает все исходные тексты на C,
перечисленные в командной строке (или же принимает текст со стандартного
ввода, если ни один файл не был указан) и выдает на стандартный вывод
сортированный список
идентификаторов, которые используются в директивах #if
,
#elif
, #ifdef
или #ifndef
. Программа выдает каждый
идентификатор на отдельной строке, за которым через пробел следует
список файлов, в которых этот идентификатор встречается.
Программа ifnames
распознает следующие ключи командной строки:
--help
-h
- выдает список ключей командной строки и прекращает работу.
--macrodir=dir
-
Заставляет программу искать файлы данных в каталоге dir, а не
в каталоге, куда производилась установка. Вы также можете установить
значение переменной окружения
AC_MACRODIR
равным пути к этому каталогу; данный ключ командной строки переопределяет значение переменной окружения. --version
- выдает номер версии Autoconf и прекращает работу.
Использование программы autoconf
для создания скрипта configure
@anchor{Invoking autoconf}
Для того, чтобы создать скрипт configure
из файла `configure.in',
просто запустите программу autoconf
без аргументов. autoconf
обработает файл `configure.in' с помощью макропроцессора m4
,
используя макросы Autoconf. Если вы зададите аргумент программе
autoconf
, то программа будет выполнять чтение заданного файла, а не
файла `configure.in' и вывод будет производиться на стандартный
вывод, не в в файл configure
. Если вы дадите программе
autoconf
аргумент `-', то она будет читать
со стандартного ввода, а не из файла `configure.in', а результаты будут
выдаваться на стандартный вывод.
Макросы Autoconf определены в нескольких файлах. Некоторые из них
распространяются вместе с Autoconf; autoconf
читает их в
первую очередь. Затем ищется необязательный файл `acsite.m4' в каталоге,
который содержит распространяемые с Autoconf файлы макросов, и
необязательный файл `aclocal.m4' в текущем каталоге. Эти файлы могут содержать макросы,
специфические для вашей машины или макросы для конкретных пакетов
программного обеспечения (see section Создание макросов, где приведена
дополнительная информация). Если определение макроса существует в нескольких файлах,
которые считывает autoconf
, то последнее макроопределение
переопределяет все предыдущие.
autoconf
распознает следующие ключи командной строки:
--help
-h
- выдает список ключей командной строки и прекращает работу.
--localdir=dir
-l dir
- Ищет файл `aclocal.m4' для данного пакета в каталоге dir, а не в текущем каталоге.
--macrodir=dir
-
Заставляет программу искать файлы данных в каталоге dir, а не
в каталоге, куда производилась установка. Вы также можете установить
значение переменной окружения
AC_MACRODIR
равным пути к этому каталогу; данный ключ командной строки переопределяет значение переменной окружения. --version
- выдает номер версии Autoconf и прекращает работу.
Использование autoreconf
для обновления ваших скриптов configure
@anchor{Invoking autoreconf}
Если у вас много скриптов configure
, созданных с помощью
Autoconf, то программа autoreconf
может
облегчить вашу работу. Она запускает программы
autoconf
(и, если необходимо, autoheader
) для
повторного создания скриптов configure
и шаблонов заголовочных
файлов настройки для исходных текстов, корневой каталог которых
находится в текущем каталоге. По умолчанию, эти программы создают заново
только те файлы, которые старше, чем соответствующий файл
`configure.in' или (если имеется) `aclocal.m4'. Поскольку
программа autoheader
не изменяет время модификации
выходного файла в случае, если файл не изменялся, то не обязательно
будет проделано минимальное количество работы. Если вы
установили новую версию Autoconf, то вы можете заставить
autoreconf
заново создать все файлы, задав ключ командной
строки `--force'.
Если вы зададите программе autoreconf
ключи командной строки
`--macrodir=dir' или `--localdir=dir', то она
передаст их программам autoconf
и autoheader
(с правильно
настроенными относительными путями).
autoreconf
не поддерживает нахождение в одном дереве как каталогов,
которые являются частями большого проекта (и которые используют
одни и те же файлы `aclocal.m4' и `acconfig.h'), так и каталогов, которые
являются независимыми пакетами (которые имеют собственные файлы
`aclocal.m4' и `acconfig.h'). Программа предполагает, что все
каталоги являются частями одного пакета, если вы используете ключ
командной строки `--localdir', или что каждый каталог является
отдельным пакетом, если вы не используете этот ключ. Это
ограничение может быть убрано в будущем.
See section Автоматическая пересборка, где описаны правила `Makefile'
для автоматического пересоздания скриптов configure
, если
изменяются исходные тексты этих скриптов. Этот метод
корректно обрабатывает изменение шаблонов заголовочных файлов
конфигурации, но не передает команде ключи командной строки
`--macrodir=dir' или `--localdir=dir'.
autoreconf
распознает следующие ключи командной строки:
--help
-h
- выдает список ключей командной строки и прекращает работу.
--force
-f
- Пересоздать даже те скрипты `configure' и заголовочные файлы настройки, которые новее, чем соответствующие входные файлы (`configure.in' и, если есть, `aclocal.m4').
--localdir=dir
-l dir
-
Заставляет программы
autoconf
иautoheader
искать файлы `aclocal.m4' и (дляautoheader
) `acconfig.h' (но не `file.top' и `file.bot') данного пакета в каталоге dir вместо каталога, который содержит отдельный файл `configure.in'. --macrodir=dir
-m dir
-
Заставляет программу искать файлы данных в каталоге dir, а не
в каталоге, куда производилась установка. Вы также можете установить
значение переменной окружения
AC_MACRODIR
равным пути к этому каталогу; данный ключ командной строки переопределяет значение переменной окружения. --verbose
-
Выдает имена каждого каталога, в котором
autoreconf
запускаетautoconf
(и если необходимо то иautoheader
). --version
- Выдает номер версии Autoconf и прекращает работу.
Go to the first, previous, next, last section, table of contents.