Руководство FreeBSD по созданию портов
Пред. | Глава 6. Особые соглашения | След.

# 6.4. Использование GNU autotools

## 6.4.1. Введение

Различные инструменты GNU autotools предоставляют механизм абстракции для построения частей программного обеспечения на широком наборе операционных систем и аппаратных архитектур. Внутри Коллекции Портов отдельный порт может использовать эти инструменты при помощи простых конструкций:

    USE_AUTOTOOLS= tool:version[:operation] ...

К моменту написания `tool` может быть одним из `libtool`, `libltdl`, `autoconf`, `autoheader`, `automake` или `aclocal`.

`version` указывает конкретную версию используемого инструмента (действующие версии смотрите в `devel/{automake,autoconf,libtool}[0-9]+`).

`operation` является необязательным расширением и указывает на способ использования инструмента.

Одновременно может быть указано несколько инструментов, добавляя их все на одной строке или используя конструкцию Makefile `+=`.

В заключение, существует специальный инструмент по называнию `autotools`, который является удобной функцией при установке всех доступных версий autotools для возможности проведения кросс-разработки. Это также может быть достигнуто путем установки порта `devel/autotools`.

## 6.4.2. `libtool`

Динамические библиотеки, использующие инфраструктуру построения GNU, обычно используют libtool для настройки компиляции и установки динамических библиотек в соответствии с особенностями данной операционной системы. В типичной практике используется копирование встроенного в приложение `libtool`. Если вам нужно использовать внешнюю команду `libtool`, то вы можете использовать версию, поставляемую Коллекцией Портов:

    USE_AUTOTOOLS= libtool:version[:env]

При отсутствии дополнительных операций, `libtool:`version`` сообщает инфраструктуре построения о применении патча к сценарию configure с установленной в системе копией `libtool`. Подразумевается использование The `GNU_CONFIGURE` Более того, некоторые переменные make и оболочки shell будут назначены для дальнейшего использования этим портом. Подробности смотрите в `bsd.autotools.mk`.

При использовании операции `:env` будет настроено только окружение.

Наконец, `LIBTOOLFLAGS` и `LIBTOOLFILES` можно установить по желанию, чтобы переопределить наиболее вероятные аргументы для `libtool` и файлы, предназначенные для изменения. Большинству портов это скорее всего не понадобится. Для дальнейших подробностей смотрите `bsd.autotools.mk`.

## 6.4.3. `libltdl`

Некоторые порты задействуют пакет с библиотекой `libltdl`, которая является частью комплекта `libtool`. Использование этой библиотеки не вызывает автоматическое использование самой `libtool`, и, таким образом, обеспечивается отдельная конструкция.

    USE_AUTOTOOLS= libltdl:version

Всё, что в настоящее время она делает, это добавление `LIB_DEPENDS` для подходящего порта `libltdl`, потому она предоставляется как удобная функция для помощи в устранении всяких зависимостей от портов autotools вне инфраструктуры `USE_AUTOTOOLS`. Для этого инструмента не существует необязательных операций.

## 6.4.4. `autoconf` и `autoheader`

Некоторые порты не содержат сценарий configure, но содержат шаблон autoconf в файле `configure.ac`. Вы можете использовать следующие присвоения, чтобы позволить `autoconf` создать сценарий configure, а `autoheader` создать заголовки шаблона для использования в сценарии configure.

    USE_AUTOTOOLS=	autoconf:version[:env]

и

    USE_AUTOTOOLS=	autoheader:version

которые также подразумевают использование `autoconf:`version``.

Аналогично команде `libtool`, подключение необязательной операции `:env` всего лишь настраивает окружение для дальнейшего использования. Без этого выполняется наложение патчей и переконфигурирование порта.

Дополнительные необязательные переменные `AUTOCONF_ARGS` и `AUTOHEADER_ARGS` можно переопределить в `Makefile` порта, если указано явным образом. Как и с эквивалентами `libtool`, большинству портов это вряд ли понадобится.

## 6.4.5. `automake` и `aclocal`

Некоторые пакеты содержат только файлы `Makefile.am`. Они должны быть преобразованы в файлы `Makefile.in` с использованием automake и дальнейшей обработкой `configure` для получения настоящего `Makefile`.

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

`aclocal` имеет похожую связь с `automake`, как у `autoheader` с `autoconf`, что описано в предыдущей главе. `aclocal` подразумевает использование `automake`, таким образом, мы имеем:

    USE_AUTOTOOLS=	automake:version[:env]

и

    USE_AUTOTOOLS=	aclocal:version

которые также подразумевают использование `automake:`version``.

Также как и для `libtool` и `autoconf`, подключение необязательной операции `:env` всего лишь устанавливает окружение для дальнейшего пользования. Без этого выполняется реконфигурирование этого порта.

Как и в случае с `autoconf` и `autoheader`, обе `automake` и `aclocal` имеют необязательные переменные `AUTOMAKE_ARGS` и `ACLOCAL_ARGS`, соответственно, которые при необходимости можно переопределить в `Makefile` порта.

Пред. | Начало | След.
Механизмы построения | Уровень выше | Использование GNU `gettext`

По вопросам связанным с системой портов для FreeBSD, пишите по адресу <ports@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите по адресу <doc@FreeBSD.org>.