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

Изменить размер шрифта:

.if defined(USE_RUSSIAN_GSI)

MASTER_SITES+= http://ootrans.i-rs.ru/out/:oorus

.endif

.if defined(USE_INFRA_PATCHSET)

MASTER_SITES+= ftp://ftp.i-rs.ru/pub/openoffice/1.1.4/ru/:oorus

.endif

Эти строки были внесены сразу же после списка MASTER_SITES. Они задают сервера, откуда будут загружаться необходимые файлы и устанавливают группу, которая будет впоследствии связана с файлами дистрибутива.

.if !defined(WITHOUT_MOZILLA)

DISTFILES+= $:moz

$: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+= $.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= $/$/btransex

.endif

.if !defined(RUSSIAN_GSI)

RUSSIAN_GSI= $/$/gsi-$-sorted.txt

.endif

.endif

# When USE_INFRA_PATCHSET was defined, ensure,

# that INFRA_PATCHER was also defined

.if defined(USE_INFRA_PATCHSET)

INFRA_PATCHER= $/$/$/do_infrapatch

.endif

 Для работы с файлом трансляции интерфейса потребуется начальная обработка его программой transex3, что и задается соответствующим параметром.

Также устанавливается имя скрипта, который запустит эту программу. Это небольшой скрипт, который будет создан автоматически. Кроме того, задается имя распакованного файла трансляции элементов интерфейса и имя программы, которая будет использована для наложения патчей.

Переходим к реальным действиям:

.if defined(USE_RUSSIAN_GSI)

@$ "===> Extracting russian GSI file"

@$ $/$

@$ $/$/gsi-$-sorted.txt.bz2 $/$

@cd $/$ &&

$ -d gsi-$-sorted.txt.bz2

.endif

.if defined(USE_INFRA_PATCHSET)

@$ "===> Extracting Infra patches set"

@$ $/$

@$ $/$/$.tar.gz $/$

@cd $/$ &&

$ -xzvf $.tar.gz

.endif

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

post-patch:

.if defined(USE_INFRA_PATCHSET)

@$ "===> Patching OOo with Infra patches set"

@cd $/$/$ &&

$ $

.endif

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

.if defined(PREBUILD_TRANSEX3)

@$ "===> Pre-build TRANSEX3"

@$ "source $/FreeBSDEnv.Set"

> $

@$ "cd transex3 && build --all && deliver"

>> $

@$ +x $

@cd $ && PATH="$

:$/bin:$/sbin" && $ $

.endif

.if defined(USE_RUSSIAN_GSI)

@$ "===> Build russian GSI"

@cd $ && PATH="$

:$/bin:$/sbin" && $ -c 'source FreeBSDEnv.Set && localize -m -i ru-RU -l $ -f $'

.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 ,

Оригинальный текст книги читать онлайн бесплатно в онлайн-библиотеке Knigger.com