Алексей Махоткин

домашняя страница

Autoconf

Go to the first, previous, next, last section, table of contents.


Написание `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’ можно включать комментарии, начиная их со встроенного макроса m4dnl, который отбрасывает текст вплоть до начала новой строки. Эти комментарии не появятся в созданных скриптах configure. Например, полезно начинать файлы `configure.in’ со строки, которая может выглядеть так:

dnl для создания скрипта configure обработайте этот файл программой autoconf.


Go to the first, previous, next, last section, table of contents.

Comments