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

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

Automake

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


Сканирование файла `configure.in’

Для определения разной информации о данном пакете Automake сканирует файл `configure.in’. Также ему требуется определение некоторых макросов и переменных autoconf в файле `configure.in’. Automake также использует информацию из файла `configure.in’ для определения параметров вывода.

Для того, чтобы облегчить сопровождение, Automake предоставляет некоторые макросы Autoconf. Эти макросы могут быть автоматически помещены в ваш файл `aclocal.m4’ при использовании программы aclocal.

Требования к конфигурации

Чтобы удовлетворить основным требованиям Automake, можно использовать макрос AM_INIT_AUTOMAKE (see section Макросы Autoconf, поставляемые с Automake). Но если хотите, то можете совершить требуемые шаги вручную:

  • Определить переменные PACKAGE и VERSION с помощью AC_SUBST. Переменная PACKAGE должна содержать имя пакета, в том виде, в котором оно используется при создании дистрибутива. Например, Automake определяет переменную PACKAGE со значением `automake’. Переменная VERSION должна содержать номер разрабатываемой версии. Мы рекомендуем хранить номер версии в единственном месте, а именно, в файле `configure.in’: это упрощает выпуск новых версий. Automake не производит никакой интерпретации переменных PACKAGE или VERSION, за исключением работы в режиме `Gnits’ (see section Эффект использования ключей –gnu и –gnits).
  • Если программа или скрипт устанавливаются, то используйте макрос AC_ARG_PROGRAM. See section `Преобразование имен при установке’ in Autoconf.
  • Используйте макрос AC_PROG_MAKE_SET если пакет не является плоским. See section `Создание файлов вывода’ in Руководство Autoconf.
  • Используйте макрос AM_SANITY_CHECK для того, чтобы убедиться, что среда, в которой будет производится сборка пакета, является нормальной.
  • Вызовите макрос AC_PROG_INSTALL (see section `Particular Program Checks’ in The Autoconf Manual).
  • Используйте макрос AM_MISSING_PROG для того, чтобы убедиться, что программы aclocal, autoconf, automake, autoheader и makeinfo находятся в среде в которой производится сборка пакета. Вот как это сделано:
    missing_dir=`cd $ac_aux_dir && pwd`
    AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
    AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
    AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
    AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
    AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
    

Вот список других макросов, которые требуются Automake, но которые не запускаются макросом AM_INIT_AUTOMAKE:

AC_OUTPUT
Automake использует этот макрос для определения того, какие файлы необходимо создавать (see section `Создание выходных файлов’ in Руководство Autoconf). Файлы с именем `Makefile’ из этого списка считаются файлами для программы make. Остальные файлы интерпретируются по разному. В настоящее время отличие состоит лишь в том, что файлы `Makefile’ удаляются make distclean, тогда как другие файлы удаляются командой make clean.

Другие вещи, которые распознает Automake

Также Automake распознает использование некоторых макросов и в соответствии с ними генерирует `Makefile.in’. Вот список распознаваемых макросов и результатов их работы:

AC_CONFIG_HEADER
Automake требует использования макроса AM_CONFIG_HEADER, который похож на AC_CONFIG_HEADER (see section `Configuration Header Files’ in The Autoconf Manual), но кроме этого выполняет полезную работу, специфичную для Automake.
AC_CONFIG_AUX_DIR
Automake будет искать различные вспомогательные скрипты, такие как `mkinstalldirs’, в каталоге, указанном в качестве параметра макроса. Если скрипты там не обнаружены, то они ищутся в их стандартном месте (в каталоге верхнего уровня пакета, либо в каталоге исходных текстов, соответствующем текущему файлу `Makefile.am’). See section `Finding `configure’ Input’ in The Autoconf Manual.
AC_PATH_XTRA
Automake при выполнении этого макроса для каждого файла `Makefile.in’, который компилирует программу или библиотеку на C, поместит туда определения переменных, указанных в AC_PATH_XTRA. See section `Системные сервисы’ in Руководство Autoconf.
AC_CANONICAL_HOST
AC_CHECK_TOOL
Automake обеспечит существование файлов `config.guess’ и `config.sub’. Также в файле `Makefile’ появятся переменные `host_alias’ и `host_triplet’. Смотрите section `Получение канонического типа системы’ in Руководство Autoconf, и section `Проверка базовых программ’ in Руководство Autoconf.
AC_CANONICAL_SYSTEM
Этот макрос подобен макросу AC_CANONICAL_HOST, но кроме этого он определяет в файле `Makefile’ переменные `build_alias’ и `target_alias’. See section `Получение канонического типа системы’ in Руководство Autoconf.
AC_FUNC_ALLOCA
AC_FUNC_GETLOADAVG
AC_FUNC_MEMCMP
AC_STRUCT_ST_BLOCKS
AC_FUNC_FNMATCH
AM_FUNC_STRTOD
AC_REPLACE_FUNCS
AC_REPLACE_GNU_GETOPT
AM_WITH_REGEX
Automake обеспечит генерацию соответствующих зависимостей для объектов, относящихся к этим макросам. Также Automake проверит, что соответствующие файлы исходных текстов являются частью дистрибутива. Заметьте, что Automake поставляется без исходных текстов на C, которые требуются для использования этих макросов, так что automake -a не сможет установить их. За дополнительной информацией см. See section Построение библиотеки. Также смотри section `Проверка отдельных функций’ in Руководство Autoconf.
LIBOBJS
Automake также обнаружит операторы, которые помещают файлы с расширением `.o’ в LIBOBJS, и будет обрабатывать эти дополнительные файлы так, как если бы они описывались макросом AC_REPLACE_FUNCS. See section `Проверка базовых функций’ in Руководство Autoconf.
AC_PROG_RANLIB
Этот макрос требуется, если в пакете собирается какая-нибудь библиотека. See section `Проверка отдельных программ’ in Руководство Autoconf.
AC_PROG_CXX
Требуется если в пакет входят исходные тексты на языке C++. See section `Проверка отдельных программ’ in Руководство Autoconf.
AC_PROG_F77
Требуется, если в пакет будут включаться исходные тексты на Fortran 77. Этот макрос распространяется с Autoconf версии 2.13 и более поздних. See section `Проверка отдельных программ’ in Руководство Autoconf.
AC_F77_LIBRARY_LDFLAGS
Этот макрос требуется для программ и разделяемых библиотек, которые написаны на разных языках и включают Fortran 77 (see section Использование Fortran 77 с C и C++). See section Макросы Autoconf, поставляемые с Automake.
AM_PROG_LIBTOOL
Automake включит поддержку libtool (see section `Введение’ in Руководство Libtool).
AC_PROG_YACC
Если в пакете есть исходный текст на Yacc, то вы должны либо использовать этот макрос, либо определить переменную `YACC’ в файле `configure.in’. Рекомендуется использовать первый вариант (See section `Проверка отдельных программ’ in Руководство Autoconf.)
AC_DECL_YYTEXT
Этот макрос требуется, если в пакете есть исходный текст на Lex. See section `Проверка отдельных программ’ in Руководство Autoconf.
AC_PROG_LEX
Если есть исходный текст на Lex, то должен использоваться этот макрос. See section `Проверка отдельных программ’ in Руководство Autoconf.
ALL_LINGUAS
Если Automake обнаружит, что эта переменная установлена в файле `configure.in’, то он проверит каталог `po’, для того, чтобы обеспечить, что все указанные файлы с расширением `.po’ существуют, и что указаны все существующие файлы `.po’.
AM_C_PROTOTYPES
Это макрос требуется при использовании автоматической де-ANSI-фикации; смотри section Автоматическая де-ANSI-фикация.
AM_GNU_GETTEXT
Этот макрос требуется для пакетов, которые используют пакет GNU gettext (see section Gettext). Он распространяется вместе с gettext. Если Automake находит этот макрос, то он проверяет, отвечает ли данный пакет некоторым требованиям gettext.
AM_MAINTAINER_MODE
Этот макрос добавляет ключ `–enable-maintainer-mode’ к скрипту configure. Если используется данный макрос, то automake отключит правило `maintainer-only’ в сгенерированных файлах `Makefile.in’. Этот макрос не разрешен в режиме `Gnits’ (see section Эффект использования ключей –gnu и –gnits). Этот макрос определяет условную переменную `MAINTAINER_MODE’, которую можно использовать в ваших собственных файлах `Makefile.am’.
AC_SUBST
AC_CHECK_TOOL
AC_CHECK_PROG
AC_CHECK_PROGS
AC_PATH_PROG
AC_PATH_PROGS
Для каждого из этих макросов, их первый аргумент автоматически определяется в качестве переменной в каждом сгенерированном файле `Makefile.in’. See section `Установка переменных вывода’ in Руководство Autoconf, и section `Проверка основных переменных’ in Руководство Autoconf.

Автоматическая генерация `aclocal.m4’

Automake содержит некоторое количество макросов Autoconf, которые могут быть использованы в вашем пакете; в некоторых ситуациях они требуются для работы Automake. Эти макросы должны быть определены в вашем файле `aclocal.m4’; иначе они не будут обнаружены программой autoconf.

Программа aclocal автоматически создает файл `aclocal.m4’ на основе содержимого `configure.in’. Это обеспечивает удобный способ для получения макросов Automake, без выполнения дополнительного поиска. Механизм aclocal является также расширяемым для использования другими пакетами.

При запуске программа aclocal производит поиск макроопределений во всех файлах `.m4’, которые она может найти. Затем она сканирует `configure.in’. Любое упоминание одного из найденных на первом этапе макросов приводит к тому, что этот макрос и все макросы, требуемые для его работы, будут помещены в файл `aclocal.m4’.

Если файл `acinclude.m4’ существует, то его содержимое также будет автоматически включено в `aclocal.m4’. Это полезно для включения локальных макросов в `configure’.

Программа aclocal работает со следующими ключами командной строки:

–acdir=dir
Заставляет программу искать файлы с макросами в каталоге dir, вместо каталога, куда производилась установка программы. Этот ключ в основном используется для отладки.
–help
Напечатать справку по ключам командной строки и закончить работу.
-I dir
Добавляет каталог dir в список каталогов, в которых производится поиск файлов `.m4’.
–output=file
Вывод производится в файл file, а не в файл `aclocal.m4’.
–print-ac-dir
Печатает имя каталога, в котором aclocal будет производить поиск файлов `.m4’. При задании этого ключа подавляется обычная обработка. Этот ключ используется пакетом для определения места, куда будет производиться установка файлов с макросами.
–verbose
Печатает имена обрабатываемых файлов.
–version
Выдает номер версии и заканчивает работу.

Макросы Autoconf, поставляемые с Automake

AM_CONFIG_HEADER
При использовании этого макроса Automake сгенерирует правила для автоматической регенерации заголовочного файла конфигурации. Если вы используете этот макрос, то вы должны создать в каталоге исходных текстов файл `stamp-h.in’. Он может быть пустым.
AM_ENABLE_MULTILIB
Этот макрос используется, когда будет строиться “мульти-библиотека”. “Мульти-библиотека” компилируется несколько раз, по разу на каждую комбинацию флагов компиляции. Это полезно только в тех случаях, когда библиотека предназначена для кросс-компиляции. Первым необязательным аргументом макроса является имя создаваемого файла `Makefile’; значением по умолчанию является `Makefile’. Второй аргумент используется для нахождения каталога верхнего уровня исходных текстов; по умолчанию используется пустая строка (обычно этот аргумент не следует использовать, если вы не знакомы с внутренним устройством).
AM_FUNC_STRTOD
Если функция strtod недоступна, или работает неправильно (как в SunOS 5.4), то строка `strtod.o’ добавляется к выходной переменной LIBOBJS.
AM_FUNC_ERROR_AT_LINE
Если функция error_at_line не найдена, то строка `error.o’ добавляется к LIBOBJS.
AM_FUNC_MKTIME
Проверяет наличие работоспособной функции mktime. Если таковая не найдена, то к переменной `LIBOBJS’ добавляется `mktime.o’.
AM_FUNC_OBSTACK
Проверка наличия кода GNU obstacks; если код не найден, то добавить строку `obstack.o’ к переменной `LIBOBJS’.
AM_C_PROTOTYPES
Проверяет, распознает ли компилятор прототипы функций. Если это происходит, то определяет переменную `PROTOTYPES’ и устанавливает выходные переменные `U’ и `ANSI2KNR’ в пустую строку. В противном случае, устанавливает `U’ равным `_’, а `ANSI2KNR’ в `./ansi2knr’. Automake использует эти значения для реализации автоматической де-ANSI-фикации.
AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL
Если использование TIOCGWINSZ требует наличия файла `<sys/ioctl.h>’, то этот макрос определяет переменную GWINSZ_IN_SYS_IOCTL. В противном случае поиск TIOCGWINSZ будет осуществляться в `<termios.h>’.
AM_INIT_AUTOMAKE
Запускает множество макросов, в которых нуждается `configure.in’. Этот макрос требует два аргумента – имя пакета и номер версии. По умолчанию этот макрос определяет через AC_DEFINE макросы `PACKAGE’ и `VERSION’. Такого поведения можно избежать, передавая непустой третий аргумент.
AM_PATH_LISPDIR
Ищет программу emacs, и если она найдена, то устанавливает выходную переменную lispdir равной полному пути к каталогу `site-lisp’ программы Emacs.
AM_PROG_CC_STDC
Если по умолчанию компилятор C не работает в режиме ANSI C, то пробует добавить опцию к переменной CC, которая заставит его делать это. Этот макрос пробует различные ключи командной строки компилятора, которые включают режим ANSI C на некоторых системах. Считается, что компилятор находится в режиме ANSI C, если он корректно обрабатывает прототипы функций. Если вы используете этот макрос, то вы должны проверить, что после его вызова компилятор C будет работать в режиме ANSI C; если это не так, то переменная среды am_cv_prog_cc_stdc устанавливается в значение `no’. Если вы написали свою программу в стандарте ANSI C, то вы можете создать ее не-ANSI-фицированную копию, используя опцию ansi2knr (see section Автоматическая де-ANSI-фикация).
AM_PROG_LEX
Этот макрос похож на макросы AC_PROG_LEX и AC_DECL_YYTEXT (see section `Проверка отдельных программ’ in Руководство Autoconf), но использует скрипт missing на системах, в которых нет lex. Одной из таких систем является `HP-UX 10’.
AM_SANITY_CHECK
Этот макрос выполняет проверку того, что файл, созданный в каталоге для компиляции, новее, чем файл в каталоге с исходными текстами. На системах с неправильно установленными часами произойдет сбой. Этот макрос автоматически запускается из AM_INIT_AUTOMAKE.
AM_SYS_POSIX_TERMIOS
Проверяет, доступны ли заголовочные файлы POSIX `termios’ в данной системе. Если это так, то переменная среды am_cv_sys_posix_termios устанавливается в значение `yes’. Если нет, то значением переменной будет являться `no’.
AM_TYPE_PTRDIFF_T
Определяет переменную `HAVE_PTRDIFF_T’ в том случае, если тип `ptrdiff_t’ определен в `<stddef.h>’.
AM_WITH_DMALLOC
Добавляет поддержку пакета dmalloc Если пользователь выполняет конфигурацию с ключом `–with-dmalloc’, то будет определена переменная WITH_DMALLOC и добавлен ключ `-ldmalloc’ в переменную LIBS.
AM_WITH_REGEX
Добавляет `–with-regex’ к ключам командной строки configure. Если этот ключ указан (по умолчанию), то используется библиотека регулярных выражений `regex’, файл `regex.o’ помещается в `LIBOBJS’ и определяется переменная `WITH_REGEX’. Если задан ключ `–without-regex’, то используется библиотека регулярных выражений `rx’, а `rx.o’ добавляется в переменную `LIBOBJS’.

Написание ваших собственных макросов aclocal

Программа aclocal сама по себе ничего не знает о каких-либо макросах, поэтому ее очень легко расширять, создавая свои собственные макросы.

Эта возможность в основном используется библиотеками, которые хотят предоставить собственные макросы Autoconf для использования другими программами. Например, библиотека gettext предоставляет макрос AM_GNU_GETTEXT, который должен быть использован любым пакетом, использующим gettext. При установке библиотеки устанавливается также этот макрос, чтобы программа aclocal смогла его найти.

Файл макросов должен быть серией вызовов AC_DEFUN. Программа aclocal также понимает директиву AC_REQUIRE, так что вполне безопасно помещать каждый макрос в отдельный файл. See section `Prerequisite Macros’ in Руководство Autoconf, и section `Макроопределения’ in Руководство Autoconf.

Имя файла макросов должно оканчиваться на `.m4’. Такие файлы должны устанавливаться в каталог `$(datadir)/aclocal’.


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

Comments