Выбрать главу

.if defined(PREBUILD_TRANSEX3)

@${ECHO_MSG} "===> Pre-build TRANSEX3"

@${ECHO} "source ${WRKSRC}/FreeBSDEnv.Set"

> ${GSI_PREBUILD}

@${ECHO} "cd transex3 && build --all && deliver"

>> ${GSI_PREBUILD}

@${CHMOD} +x ${GSI_PREBUILD}

@cd ${WRKSRC} && PATH="${PATH}:${LOCALBASE}/bin:${LOCALBASE}/sbin" && ${TCSH} ${GSI_PREBUILD}

.endif

.if defined(USE_RUSSIAN_GSI)

@${ECHO_MSG} "===> Build russian GSI"

@cd ${WRKSRC} && PATH="${PATH}:${LOCALBASE}/bin:${LOCALBASE}/sbin" && ${TCSH} -c 'source FreeBSDEnv.Set && localize -m -i ru-RU -l ${LANG_EXT} -f ${RUSSIAN_GSI}'

.endif

Первая часть задает предварительную сборку программы transex3, для чего формируется скрипт, затем осуществляется переход в каталог с распакованными исходниками и запуск сборки. Обратите внимание, как передается значение переменной PATH. Вторая часть задает обработку исходных текстов OpenOffice согласно новому файлу локализации интерфейса.

Полный текст Makefile из editors/openoffice-1.1 с внесенными мной изменениями можно скачать с [3]. Этот файл уже не используется как файл порта, но как образец написания Makefile, там есть чему поучиться. 

Некоторые переменные USE_*

Здесь описаны некоторые наиболее часто используемые переменные USE_*, не упомянутые до сих пор. Полный список их значительно больше, смотреть его нужно в bsd.port.mk.

IGNOREFILES= <список файлов> – задает список файлов, для которых не выполняется проверка контрольной суммы из distinfo.

EXTRACT_ONLY=yes – только распаковать файлы дистрибутива, не выполнять никакой работы по сборке. Как правило, в таком порту применяется заменяющая подмишень do-install.

RESTRICTED=yes – запрещает помещать собранный пакет на FTP или распространять на CD-ROM. Как правило вследствие лицензионных ограничений. Это не такая уже редкость, например такое ограничение имеет виртуальная машина Java.

NO_CDROM=yes – почти то же самое, только разрешает помещение на FTP.

FORBIDDEN=yes – запрещает сборку из-за уязвимостей программы.

IGNORE=yes – запрещает сборку из-за грубых ошибок при сборке программы. Фактически используется для прекращения работы системы по каким-либо причинам (например, неподдерживаемая версия FreeBSD).

BROKEN=yes – запрещает сборку из-за различных ошибок.

USE_ZIP=yes – для распаковки использовать zip.

USE_DOS2UNIX=yes – все тексты перекодировать таким образом, чтобы преобразовать переводы строк из вида DOS в вид UNIX.

USE_GCC=<номер> – задает номер версии компилятора GCC. Я помню только один порт, использовавший эту USE_* – editors/openoffice на 4.х, имевший по умолчанию GCC 2.95.4.

USE_GETOPT_LONG=yes – для 4.х добавляет зависимость от libgnugetopt. Для 5.х и выше уже неактуально – libgnugeopt перенесена в базовую систему.

USE_PERL=yes, USE_JAVA=yes, USE_PYTHON=yes,

• USE_RUBY=yes – добавляют соответствующие зависимости от интерпретатора соответствующего языка.

USE_AUTOTOOLS=<tool>:<version> – добавляет зависимость от некоторой программы из GNU Autotools. Если задана и программа и версия, задает зависимость от конкретной версии, если версия опущена, то задает зависимость от программы без номера в имени. Например: «USE_AUTOTOOLS=libtooclass="underline" 15» задает зависимость от devel/libtool15, но «USE_AUTOTOOLS=libtool» задает зависимость от devel/libtool, что может быть совсем не одно и то же!

USE_GNOME=<список компонентов через пробел> – задает зависимости от перечисленного списка компонентов GNOME. Например, приведенная выше строка: «USE_GNOME+= orbit gtk12» задает зависимости от компонентов devel/orbit и x11-toolkits/gtk12. При задании зависимостей следует придерживаться разумного минимума – указывать только те компоненты, которые действительно нужны для работы. Помните, что подключенные компоненты тоже имеют свои зависимости, которые могут иметь свои зависимости и т. д. – глубина вложенности неограничена.

USE_QT_VER=3 – добавляет зависимость от библиотеки x11-toolkits/qt33 и неявно подключает файл bsd.kde.mk.

USE_LINUX={yes|<число>} – добавляет зависимость от порта emulators/linux-base-8, если не указано <число>. Если <число> указано, то добавляется зависимость от порта emulators/linux-base-<число>.

CONFLICTS=<список портов> – содержит список портов, с которыми может конфликтовать данный порт. Конфликт может выражаться в совпадающих именах каталогов для установки, совпадающих именах файлов, одинаковых TCP/UDP-портах, невозможность сборки одного порта при наличии другого и прочих причинах. Выражение для списка портов может содержать мета-символы «*?[]!». Например, «apache*-1.3.[012345]».

Заключение

Наша работа закончена, но жизнь продолжается... Мы рассмотрели основные возможности системы сборки портов. Однако далеко не для каждого порта требуется такое количество работы – для многих несложных программ порт от начала до конца, включая отсылку во FreeBSD Team, пишется за полдня. Система сборки портов обладает очень большими возможностями. Изучать их все нет необходимости – всегда можно заглянуть в bsd.port.mk, который и является главным справочником по ее возможностям.

В начале файла идет громадный блок комментария, в котором перечислены все переменные, которые можно использовать, и даны к ним краткие описания, для чего они предназначены. Число программ, которые работают под FreeBSD, постоянно увеличивается, порты для них пишутся, как мы теперь видим, обычными людьми, и, создавая новый порт для программы, которая там в данный момент отсутствует, мы не только облегчаем себе жизнь, но и помогаем сообществу.

вернуться

3

Доработанный Makefile из порта editors/openoffice-1.1 – ftp://ftp.granch.ru/pub/openoffice/Makefile.OOo.