Создаем порт для FreeBSD своими руками. Часть II - [4]
Инсталляцией порт управляет самостоятельно — в Makefile присутствует заменяющая подмишень do-install. Здесь хорошо видно, как можно организовать цикл, который установит несколько файлов, перечисленных в списке, в указанное место. После первого цикла, который устанавливает собственно скрипты идет команда создания каталога для документации — система сама не будет делать ничего, все необходимые каталоги должны быть созданы портом.
Такая странная форма записи команды означает что:
• если команда завершается неудачно, например, такой каталог уже существует, то make не прекращает работу (минус перед командой);
• команда не отображается на терминале (знак @ перед командой).
Потом идет второй цикл, который устанавливает файлы примеров в каталог, который для этого предварительно создается, создается каталог документации и в него копируется файл README.FreeBSD.
Команда sed подготавливает файл pkg-message к отображению. В файле, который распространяется вместе с портом присутствует макроподстановка %%EXAMPLESDIR%%, которая, перед тем как это сообщение будет показано пользователю, заменяется на значение переменной ${EXAMPLESDIR}. Чтобы не изменять оригинальный файл pkg-message (возможно, в следующий раз установка будет проходить с другим значением ${EXAMPLESDIR}), старый файл сохраняется, измененный файл удаляется, старый файл переименовывается в оригинальное имя. Порт несложный, но он демонстрирует, как можно использовать заменяющие подмишени. При создании таких портов следует быть предельно внимательными — помните, что любой каталог, не входящий в стандартное дерево каталогов, описанное в bsd.local.mk, имеет право не существовать и должен быть предварительно создан.
Модификация порта OpenOffice 1.1.4
С моей точки зрения, порт для сборки OpenOffice editors/openoffice имел множество недостатков, но эти изменения я никогда не пробовал отправить во FreeBSD Team для помещения их в дерево портов. Какие изменения были внесены мной:
• возможность отказаться от сборки Mozilla Suite, нужной только для работы с адресной книгой формата Mozilla;
• возможность загрузить и применить последний (на тот момент) файл локализации интерфейса;
• возможность загрузить и применить внешние патчи, созданные в «Инфра-Ресурс» для версии для Linux.
Порт на самом деле состоит из двух файлов — editors/openoffice-1.1 и russian/openoffice. Makefile порта russian/openoffice-1.1 достаточно прост:
CATEGORIES= russian
if!defined (LANG) &&!defined(USE_LANG)
USE_LANG= ru_RU.KOI8-R
endif
LANG_LIST= ru_RU.KOI8-R uk_UA.KOI8-U
LANG_PKGNAME= ru
LANG_EXT= 07
LANG_CONFIGURE_ARG= RUSS
MASTERDIR= ${.CURDIR}/../../editors/openoffice-1.1
USE_RUSSIAN_GSI= yes
USE_INFRA_PATCHSET= yes
include "${MASTERDIR}/Makefile"
При запуске make в каталоге editors/openoffice-1.1 получаем OpenOffice c английским интерфейсом и справкой, при запуске в каталоге russian/openoffice — с русским интерфейсом. Достигается это таким же образом, как любой порт включает в себя bsd.port.mk, — командой. include. Только здесь параметром команды является имя так называемого «мастер-порта», то есть порта, в котором делается вся обработка. Это очень широко распространённый прием для крупных проектов — создается один мастер-порт и несколько портов, в которых только определяются некоторые переменные. Так работают postgresql, openldap, php и множество других портов. В приведенном выше примере мной были добавлены переменные «USE_RUSSIAN_GSI=yes» и «USE_INFRA_PATCHSET=yes», использование которых будет видно в коде из основного порта. Основной порт чересчур громоздок, чтобы приводить его весь, я приведу только некоторые фрагменты.
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+= ${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
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.