Читаем Создаем порт для FreeBSD своими руками. Часть II полностью

.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, там есть чему поучиться. 

<p><strong>Некоторые переменные USE_*</strong></p>

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

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

Перейти на страницу:

Похожие книги

Основы программирования в Linux
Основы программирования в Linux

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Нейл Мэтью , Ричард Стоунс , Татьяна Коротяева

ОС и Сети / Программирование / Книги по IT
97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT
Программист-прагматик. Путь от подмастерья к мастеру
Программист-прагматик. Путь от подмастерья к мастеру

Находясь на переднем крае программирования, книга "Программист-прагматик. Путь от подмастерья к мастеру" абстрагируется от всевозрастающей специализации и технических тонкостей разработки программ на современном уровне, чтобы исследовать суть процесса – требования к работоспособной и поддерживаемой программе, приводящей пользователей в восторг. Книга охватывает различные темы – от личной ответственности и карьерного роста до архитектурных методик, придающих программам гибкость и простоту в адаптации и повторном использовании.Прочитав эту книгу, вы научитесь:Бороться с недостатками программного обеспечения;Избегать ловушек, связанных с дублированием знания;Создавать гибкие, динамичные и адаптируемые программы;Избегать программирования в расчете на совпадение;Защищать вашу программу при помощи контрактов, утверждений и исключений;Собирать реальные требования;Осуществлять безжалостное и эффективное тестирование;Приводить в восторг ваших пользователей;Формировать команды из программистов-прагматиков и с помощью автоматизации делать ваши разработки более точными.

А. Алексашин , Дэвид Томас , Эндрю Хант

Программирование / Книги по IT