Создаем порт для FreeBSD своими руками. Часть II | страница 9
# 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, выполнив запрошенное действие, возвращается в каталог, из которого она была запущена. Точно так же выполняются все другие действия, связанные со сменой каталога, — например распаковка файлов.