[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
configure
Скрипты конфигурации, создаваемые Autoconf, по принятым соглашениям
называются configure
. При запуске configure
создает
несколько файлов, заменяя в них параметры конфигурации на
соответствующие системе значения. configure
создает следующие
файлы:
#define
(see section 3.4 Заголовочные файлы конфигурации);
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 ---' |
2.1 Написание `configure.in' Что нужно написать во входном файле Autoconf. 2.2 Использование программы autoscan
для создания `configure.in'Полуавтоматическое написание `configure.in'. 2.3 Использование программы ifnames
для перечисления условныхСписок условных выражений в исходных текстах. 2.4 Использование программы autoconf
для создания скриптаconfigure
Как создать скрипты конфигурации. 2.5 Использование autoreconf
для обновления ваших скриптовconfigure
Пересоздание нескольких скриптов configure
.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Для создания скрипта configure
для программного пакета, создайте
файл с именем `configure.in', который содержит вызовы макросов
Autoconf, проверяющие системные возможности, необходимые вашему
пакету или используемые ими. Для многих таких возможностей
макросы Autoconf уже написаны; See section 4. Существующие тесты, где находится
их описание. Для большинства других возможностей вы можете использовать
шаблонные макросы Autoconf, на базе которых можно создать специальные
проверки; See section 5. Написание тестов, где это описано. Для особо
хитроумных или специализированных возможностей в файл
`configure.in' может понадобиться включить специально написанные
скрипты командного процессора. Программа autoscan
может оказать
вам хорошую помощь на первых порах при создании файла
`configure.in' (see section 2.2 Использование программы autoscan
для создания `configure.in', где описана эта
программа).
За некоторыми исключениями, порядок вызовов макросов Autoconf в
`configure.in' не важен. Каждый файл `configure.in' должен в
самом начале содержать вызов макроса AC_INIT
, а также вызов
макроса AC_OUTPUT
в самом конце (see section 3.2 Создание выходных файлов). Также некоторые
макросы полагаются на то, что другие макросы были вызваны первыми,
поскольку для того, чтобы принять решение, они проверяют уже
установленные значения переменных. Такие макросы отдельно отмечены в
описании (see section 4. Существующие тесты), а при создании скрипта
configure
выдается предупреждение, если вы нарушили порядок
вызова макросов.
Для того, чтобы ваши файлы были последовательны и единообразны, мы приведем желательный порядок вызова макросов Autoconf. В принципе, то,что находится ближе к концу списка, может зависеть от того, что находится в начале списка. Например, библиотечные функции могут зависеть от определений типов и библиотек.
|
Лучше всего помещать каждый вызов макроса на отдельную строку файла
`configure.in'. Большинство макросов не добавляют дополнительных
переводов строк: они полагают, что после каждого вызова макроса
находится новая строка. Это позволяет сделать скрипт configure
читабельнее, не добавляя ненужных пустых строк. Можно спокойно
устанавливать переменные окружения в той же строке, что и вызов макроса,
потому что командные процессоры позволяют выполнять присваивание в одной
строке, без дополнительных пустых строк.
При вызове макросов с аргументами между открывающей скобкой и
названием макроса не должно быть пробелов. Аргументы могут
занимать несколько строк, если они заключены в "кавычки" языка
m4
--- `[' и `]'. Если у вас
есть длинная строка, например, список имен файлов, то можно использовать
символ обратного слэша в конце строки для указания продолжения списка
на следующей строке (эта возможность реализуется командным
процессором без привлечения возможностей Autoconf).
Некоторые макросы отрабатывают два случая:---выполнение заданного условия и невыполнение заданного условия. В некоторых местах вы можете захотеть сделать что-либо, если условие выполняется, и ничего не делать в противном случае, и наоборот. Для того, чтобы пропустить действие при выполнении условия, передайте пустое значение аргументу action-if-found данного макроса. Для пропуска действия при невыполнении условия уберите аргумент action-if-not-found данного макроса, включая предшествующую ему запятую.
В файл `configure.in' можно включать комментарии, начиная их со
встроенного макроса m4
--- dnl
, который отбрасывает текст
вплоть до начала новой строки. Эти комментарии не появятся в созданных
скриптах configure
. Например, полезно начинать файлы
`configure.in' со строки, которая может выглядеть так:
dnl для создания скрипта configure обработайте этот файл программой autoconf. |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
autoscan
для создания `configure.in'
Программа autoscan
может помочь вам в создании файла
`configure.in' для программного пакета.
autoscan
выполняет анализ дерева исходных текстов, корень
которого указан в командной строке или совпадает с текущим каталогом.
Программа ищет в
исходных текстах следы обычных проблем с переносимостью и создает
файл `configure.scan', который является заготовкой
`configure.in' для данного пакета.
Вы должны сами просмотреть файл `configure.scan' перед тем, как
переименовать его в `configure.in': скорее всего он будет нуждаться
в некоторых исправлениях. Иногда autoscan
выдает макросы в
неправильном порядке, и поэтому
autoconf
будет выдавать предупреждения; вам необходимо вручную
передвинуть эти макросы. Если же вы хотите, чтобы пакет использовал
заголовочный файл настроек, то вы должны сами добавить вызов макроса
AC_CONFIG_HEADER
(see section 3.4 Заголовочные файлы конфигурации). Вам
также необходимо добавить или изменить некоторые директивы препроцессора
#if
в вашей программе для того, чтобы заставить ее работать с
Autoconf (see section 2.3 Использование программы ifnames
для перечисления условных, где описана программа, помогающая
вам выполнить эту работу).
Программа autoscan
использует несколько файлов данных, чтобы
определить, какие макросы следует использовать при обнаружении
определенных символов в исходных файлах пакета. Эти файлы данных
устанавливаются вместе с дистрибутивными макро-файлами Autoconf и имеют
одинаковый формат.
Каждая строка
состоит из символа, пробелов и имени макроса Autoconf, которое выдается
в том случае, если заданный символ имеется в исходных текстах. Строки,
начинающиеся с символа `#', являются комментариями.
autoscan
устанавливается только в том случае, если у вас установлена
программа Perl. autoscan
распознает следующие ключи командной строки:
--help
--macrodir=dir
AC_MACRODIR
равным пути к этому
каталогу; данный ключ командной строки переопределяет значение переменной
окружения.
--verbose
--version
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ifnames
для перечисления условных
Программа ifnames
может помочь при создании файла
`configure.in' для программного пакета. Она выдает список
идентификаторов, которые пакет уже использует в условных выражениях
препроцессора языка С. Если ваша программа уже была написана с учетом
возможного переноса на другие платформы, то данная программа может
помочь вам определить, какие проверки необходимо выполнить в
configure
. Эта программа может помочь заполнить некоторые пробелы
в файле `configure.in', созданном программой autoscan
(see section 2.2 Использование программы autoscan
для создания `configure.in').
Программа ifnames
обрабатывает все исходные тексты на C,
перечисленные в командной строке (или же принимает текст со стандартного
ввода, если ни один файл не был указан), и выдает на стандартный вывод
сортированный список
идентификаторов, используемых в директивах #if
,
#elif
, #ifdef
или #ifndef
. Программа выдает каждый
идентификатор на отдельной строке, за которым через пробел следует
список файлов, в которых этот идентификатор встречается.
Программа ifnames
распознает следующие ключи командной строки:
--help
-h
--macrodir=dir
AC_MACRODIR
равным пути к этому
каталогу; данный ключ командной строки переопределяет значение переменной
окружения.
--version
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
autoconf
для создания скрипта configure
Для того, чтобы создать скрипт 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 7. Создание макросов, где
приведена дополнительная информация). Если определение макроса
существует в нескольких файлах, считывающих autoconf
, то
последнее макроопределение переопределяет все предыдущие.
autoconf
распознает следующие ключи командной строки:
--help
-h
--localdir=dir
-l dir
--macrodir=dir
AC_MACRODIR
равным пути к этому
каталогу; данный ключ командной строки переопределяет значение переменной
окружения.
--version
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
autoreconf
для обновления ваших скриптов configure
Если у вас много скриптов 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 3.3.3 Автоматическая пересборка, в которой описаны правила
`Makefile' для автоматического пересоздания скриптов
configure
, если изменяются исходные тексты этих скриптов. Этот
метод корректно обрабатывает изменение шаблонов заголовочных файлов
конфигурации, но не передает команде ключи командной строки
`--macrodir=dir' или `--localdir=dir'.
autoreconf
распознает следующие ключи командной строки:
--help
-h
--force
-f
--localdir=dir
-l dir
autoconf
и autoheader
искать файлы
`aclocal.m4' и (для autoheader
) `acconfig.h' (но не
`file.top' и `file.bot') данного пакета в каталоге
dir вместо каталога, который содержит отдельный файл
`configure.in'.
--macrodir=dir
-m dir
AC_MACRODIR
равным пути к этому
каталогу; данный ключ командной строки переопределяет значение переменной
окружения.
--verbose
autoreconf
запускает
autoconf
(если есть необходимость, то и autoheader
).
--version
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |