Руководство FreeBSD по созданию портов
Пред. | Глава 12. Что делать нужно, и что делать нельзя | След.

# 12.6. Написание чего-либо после `bsd.port.mk`

Не пишите ничего после строки `.include <bsd.port.mk>`. Этой строки можно избежать, включив в где-то в середину вашего файла `Makefile` файл `bsd.port.pre.mk`, и файл `bsd.port.post.mk` в конец.

> Замечание: Вам нужно включить либо пару файлов `bsd.port.pre.mk`/`bsd.port.post.mk`, либо только `bsd.port.mk`; не используйте оба этих метода одновременно.

В файле `bsd.port.pre.mk` определяются лишь несколько переменных, которые могут быть использованы в тестах из файла `Makefile`, в файле `bsd.port.post.mk` заданы остальные.

Вот некоторые важные переменные, определенные в файле `bsd.port.pre.mk` (это не полный список, для выяснения полного списка прочтите, пожалуйста, сам файл `bsd.port.mk`).

Переменная | Описание
--- | ---
`ARCH` | Архитектура машины в виде, получаемом по команде `uname -m` (например, `i386`)
`OPSYS` | Тип операционной системы, получаемый по команде `uname -s` (например, `FreeBSD`)
`OSREL` | Версия релиза операционной системы (например, `2.1.5` или `2.2.7`)
`OSVERSION` | Версия операционной системы в виде числа, та же, что и `__FreeBSD_version`.
`PORTOBJFORMAT` | Формат объектных файлов, используемых в системе (`elf` или `aout`); заметьте, что для ``современных'' версий FreeBSD `aout` не используется.)
`LOCALBASE` | Корень дерева ``local'' (например, `/usr/local/`)
`PREFIX` | Куда, собственно, устанавливается порт (обратитесь к подробной информации о `PREFIX`).

> Замечание: Если вы задаете переменные `USE_IMAKE`, `USE_X_PREFIX`, или `MASTERDIR`, то делайте это перед тем, как включать `bsd.port.pre.mk`.

Вот несколько примеров того, что вы можете написать после `bsd.port.pre.mk`:

    # no need to compile lang/perl5 if perl5 is already in system
    .if ${OSVERSION} > 300003
    BROKEN= perl is in system
    .endif

    # only one shlib version number for ELF
    .if ${PORTOBJFORMAT} == "elf"
    TCL_LIB_FILE=  ${TCL_LIB}.${SHLIB_MAJOR}
    .else
    TCL_LIB_FILE=  ${TCL_LIB}.${SHLIB_MAJOR}.${SHLIB_MINOR}
    .endif

    # software already makes link for ELF, but not for a.out
    post-install:
    .if ${PORTOBJFORMAT} == "aout"
           ${LN} -sf liblinpack.so.1.0 ${PREFIX}/lib/liblinpack.so
    .endif

Вы не забываете об использовании табуляции вместо пробелов после `BROKEN=` и `TCL_LIB_FILE=`, не так ли? :-).

Пред. | Начало | След.
Значения `__FreeBSD_version` | Уровень выше | Использование выражения `exec` в сценариях обёртках

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