52669.fb2 Создаем порт для FreeBSD своими руками. Часть II - читать онлайн бесплатно полную версию книги . Страница 5

Создаем порт для FreeBSD своими руками. Часть II - читать онлайн бесплатно полную версию книги . Страница 5

@${MKDIR} ${WRKDIR}/${GSI_DIR}

@${CP} ${DISTDIR}/${DIST_SUBDIR}/gsi-${GSI_VERSION}-sorted.txt.bz2 ${WRKDIR}/${GSI_DIR}

@cd ${WRKDIR}/${GSI_DIR} && \

${BZIP2_CMD} — d gsi-${GSI_VERSION}-sorted.txt.bz2

endif

if defined(USE_INFRA_PATCHSET)

@${ECHO_MSG} "===> Extracting Infra patches set"

@${MKDIR} ${WRKDIR}/${INFRA_PATCHDIR}

@${CP} ${DISTDIR}/${DIST_SUBDIR}/${INFRA_PATCHEXT}.tar.gz ${WRKDIR}/${INFRA_PATCHDIR}

@cd ${WRKDIR}/${INFRA_PATCHDIR} && \

${TAR} — xzvf ${INFRA_PATCHEXT}.tar.gz

endif

Копируем упакованный файл трансляции интерфейса из /usr/ports/distfiles/openoffice (задана DIST_SUBDIR) в каталог, который был создан заранее, и распаковываем его архиватором bzip2. Копируем архив патчей «Инфра-Ресурс» в другой, предварительно созданный каталог и распаковываем его, но уже программой tar. Обратите внимание, что все команды параметризированы, — всюду используется ${PROGRAM}, а не /bin/program!

post-patch:

if defined(USE_INFRA_PATCHSET)

@${ECHO_MSG} "===> Patching OOo with Infra patches set"

@cd ${WRKDIR}/${INFRA_PATCHDIR}/${INFRA_PATCHEXT} && \

${SH} ${INFRA_PATCHER}

endif

Дополняем мишень patch подмишенью post-patch, в которой собственно и запускаем скрипт, вносящий изменения. Обратите внимание — записать это в две строки нельзя! Если записать команды cd и запуск скрипта на разных строках, то запуск скрипта произойдет не из каталога, в который перешли командой cd, а из текущего, потому что make, выполнив запрошенное действие, возвращается в каталог, из которого она была запущена. Точно так же выполняются все другие действия, связанные со сменой каталога, — например распаковка файлов.

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=libtool:15» задает зависимость от devel/libtool15, но «USE_AUTOTOOLS=libtool» задает зависимость от devel/libtool, что может быть совсем не одно и то же!