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

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

Autoconf

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


Ручная настройка

@anchor{Manual Configuration}

Некоторые типы свойств не могут быть определены автоматически путем запуска тестовых программ. Например, детали реализации формата объектных файлов или специальные ключи, которые необходимо передать компилятору или компоновщику. Вы можете проверить такие свойства используя специализированные возможности, такие как заставив configure проверить вывод программы uname или производя поиск библиотек, специфических для отдельных систем. Однако Autoconf предоставляет однообразный метод для обработки неопределяемых свойств.

Указание типа системы

@anchor{Specifying Names}

Подобно другим скриптам GNU configure, созданные Autoconf скрипты configure могут делать заключение основываясь на каноническом имени типа системы, которое имеет форму:

cpu-company-system

configure обычно может определить каноническое имя типа системы на которой он запущен. Для этого он запускает скрипт с именем config.guess, который определяет имя, используя команду uname или символы определенные препроцессором C.

В качестве альтернативы, пользователь может указать тип системы как аргумент командной строки скрипта configure. Это необходимо сделать, если вы хотите использовать кросс-компиляцию. В большинстве сложных случаев кросс-компиляции будут вовлечены три типа систем. Для их указания используются следующие ключи:

–build=build-type
тип системы на которой настраивается и компилируется пакет (используется редко);
–host=host-type
тип системы на которой будет запускаться пакет;
–target=target-type
тип системы для которой утилиты компилятора будут создавать код.

Если пользователь задает configure неключевой аргумент, то он используется как значение по умолчанию для всех типов систем, если только пользователь не указал типы явно для систем с помощью ключей командной строки. Если типы целевой и собирающей систем не заданы, а задан тип системы на которой будет запускаться пакет, то они равны заданному значению. Если вы используете кросс-компиляцию, то вам необходимо указать в командной строке скрипта configure имена используемых вами кросс-утилит, в частности компилятора С, например,

CC=m68k-coff-gcc configure –target=m68k-coff

configure распознает короткие алиасы для многих типов систем; например, в командной строке может быть задано имя `decstation’ вместо `mips-dec-ultrix4.2’. configure запускает скрипт с именем config.sub для канонизации алиасов типов систем.

Получение канонического типа системы

@anchor{Canonicalizing}

Следующие макросы делают тип системы доступным для скриптов configure. Они запускают скрипт командного процессора config.guess для определения значений для каждого из типов систем, в которых они нуждаются, и которые пользователь не указал в командной строке. Они запускают config.sub для канонизации заданных пользователем псевдонимов. Если вы используете эти макросы, то вы должны распространять эти два файла вместе с вашим исходным кодом. See section Создание выходных файлов, для получения информации о макросе AC_CONFIG_AUX_DIR, который вы можете использовать для контроля того, в каком именно каталоге configure будет искать эти файлы. Если вы не используете ни один из этих макросов, то configure игнорирует заданные ключи `–host’, `–target’ и `–build’.

Macro: AC_CANONICAL_SYSTEM
Определяет тип системы и устанавливает выходные переменные равными именам канонических типов систем. See section Переменные типов систем, где описано, какие именно переменные устанавливаются этим макросом.

Macro: AC_CANONICAL_HOST
Выполняет часть операций AC_CANONICAL_SYSTEM, относящуюся к определению типа системы, на которой будет запускаться пакет. Это все, что необходимо для программ, которые не входят в набор утилит компилятора.

Macro: AC_VALIDATE_CACHED_SYSTEM_TUPLE (cmd)
Если в кэш-файле записан тип системы, не совпадающий с текущим, то выполняется команда cmd или печатается стандартное сообщение об ошибке.

Переменные типов систем

@anchor{System Type Variables}

После вызова AC_CANONICAL_SYSTEM информация о типе системы содержится в нижеперечисленных выходных переменных. После AC_CANONICAL_HOST устанавливаются только те из перечисленных переменных, чьи имена начинаются на host.

build, host, target
канонические имена систем;
build_alias, host_alias, target_alias
имена, указанные пользователем или канонические имена, если был использован файл config.guess;
build_cpu, build_vendor, build_os
host_cpu, host_vendor, host_os
target_cpu, target_vendor, target_os
отдельные части канонического имени (для удобства).

Использование типов систем

@anchor{Using System Type}

Как использовать канонический тип системы? Обычно вы используете его в одном или нескольких операторах case в `configure.in’ для выбора специфических для системы файлов C. Затем делает ссылки на файлы, чьи имена содержат информацию о системе, чтобы они назывались также своим обобщенным именем, например, `host.h’ или `target.c’. Шаблоны в операторе case могут использовать специальные символы командного процессора для группировки нескольких вариантов вместе, например как в таком фрагменте:

case “$target” in
i386-*-mach* | i386-*-gnu*) obj_format=aout emulation=mach bfd_gas=yes ;;
i960-*-bout) obj_format=bout ;;
esac

Macro: AC_LINK_FILES (source…, dest…)
Заставляет AC_OUTPUT сделать ссылку с каждого файла из списка source на соответствующий файл с именем dest. Если это возможно, то создается символьная ссылка, иначе создается жесткая ссылка. Имена dest и source должны быть заданы относительно каталога верхнего уровня с исходными текстами или каталога, в котором происходит сборка. Этот макрос может быть вызван неоднократно.

Например, такой вызов:

AC_LINK_FILES(config/${machine}.h config/${obj_format}.h, host.h object.h)

создает в текущем каталоге файл `host.h’, который является ссылкой на `srcdir/config/${machine}.h’, и `object.h’, который является ссылкой на `srcdir/config/${obj_format}.h’.

Вы также можете использовать тип системы, на которой будет запускаться программа, для поиска утилит кросс-компиляции. See section Общие программы и проверки файлов, для информации о макросе AC_CHECK_TOOL, который выполняет это.


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

Comments