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