.if !defined(WITHOUT_MOZILLA)
DISTFILES+= ${MOZILLA_PROJECT}:moz \
${MOZILLA_SOURCE}:mozsrc
USE_GNOME+= orbit gtk12
.endif
.if defined(USE_RUSSIAN_GSI)
GSI_VERSION= 2005-01-20
GSI_DIR= rusgsi
DISTFILES+= gsi-$(GSI_VERSION)-sorted.txt.bz2:oorus
.endif
.if defined(USE_INFRA_PATCHSET)
INFRA_PATCHDIR= infrapatch
INFRA_PATCHEXT= OOo_1.1.4_infra_patches
DISTFILES+= ${INFRA_PATCHEXT}.tar.gz:oorus
.endif
Вот именно эта доработка позволила мне уменьшить сборку порта часа на два. Задание «WITHOUT_MOZILLA=yes» исключит из списка DISTFILES файлы исходного кода Mozilla Suite, и, следовательно, загружаться они не будут. Другие условия дополняют список DISTFILES файлами, содержащими модификации интерфейса (gsi-2005-01-20-sorted.txt.bz2), и набором патчей от «Инфра-Ресурс», задают имена каталогов, в которые они будут распаковываться и привязывают их к серверу в группу oorus.
# When USE_RUSSIAN_GSI was defined, ensure, that
# PREBUILD_TRANSEX3 and RUSSIAN_GSI were also defined
.if defined(USE_RUSSIAN_GSI)
.if !defined(PREBUILD_TRANSEX3)
PREBUILD_TRANSEX3= yes
GSI_PREBUILD= ${WRKDIR}/${GSI_DIR}/btransex
.endif
.if !defined(RUSSIAN_GSI)
RUSSIAN_GSI= ${WRKDIR}/${GSI_DIR}/gsi-${GSI_VERSION}-sorted.txt
.endif
.endif
# When USE_INFRA_PATCHSET was defined, ensure,
# that INFRA_PATCHER was also defined
.if defined(USE_INFRA_PATCHSET)
INFRA_PATCHER= ${WRKDIR}/${INFRA_PATCHDIR}/${INFRA_PATCHEXT}/do_infrapatch
.endif
Для работы с файлом трансляции интерфейса потребуется начальная обработка его программой transex3, что и задается соответствующим параметром.
Также устанавливается имя скрипта, который запустит эту программу. Это небольшой скрипт, который будет создан автоматически. Кроме того, задается имя распакованного файла трансляции элементов интерфейса и имя программы, которая будет использована для наложения патчей.
Переходим к реальным действиям:
.if defined(USE_RUSSIAN_GSI)
@${ECHO_MSG} "===> Extracting russian GSI file"
@${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.