Создаем порт для FreeBSD своими руками. Часть II - [3]
Хорошо, опции заданы. Как их обработать?
Прежде всего необходимо отметить, что при использовании OPTIONS включение файла bsd.port.mk следует заменить на:
include
# processing WITH_SOMEWHERE here
include
иначе ни одна переменная WITH_SOMEWHERE распознана не будет. Обработка же переменных выполняется стандартным образом — с помощью условия if задаются дополнительные параметры для configure, зависимости, подстановки для pkg-plist и т. д.
if defined(WITH_SAM_XML)
LIB_DEPENDS+= xml2.5:${PORTSDIR}/textproc/libxml2
CONFIGURE_ARGS+= — with-xml-prefix=${LOCALBASE}
WANT_EXPSAM_MODULES+= xml
PLIST_SUB+= SAMXML=""
else
PLIST_SUB+= SAMXML="@comment»
endif
Комбинация проверяемых условий может быть довольно сложной. В качестве примера того, как могут использоваться значения опции, лучше всего рассматривать порт net/samba3 — в нем очень много опций, есть на что посмотреть.
Ну и наконец самый интересный раздел — замена/дополнение стандартных обработчиков Makefile при сборке порта. Как уже было сказано в [1], сборка порта состоит из последовательности выполнения ряда мишеней, которые в свою очередь делятся на подмишени pre-something, do-something и post-something (есть еще специальные мишени, описание их см в bsd.port.mk). Для чего это было сделано? Для того чтобы иметь возможность воздействия на процесс создания порта — что-нибудь изменить, вывести сообщение, создать файл или каталог и т. д. Как следует из названия, подмишени pre-somethnig и post-something выполняются соответственно до и после мишени something. Например, последовательность распаковки будет такова: pre-extract, do-extract, post-extract. При этом, если подмишень do-something не описана, будет выполняться стандартная системная обработка. Обратите внимание, что, если мишень do-something описана, она замещает стандартную мишень и вся ответственность за выполнение данного шага ложится на майнтайнера порта, то есть, например, даже если в Makefile, идущем с программой, есть мишень install, то при наличии в Makefile порта подмишени do-install мишень install из Makefile программы не будет выполнена никогда!
Дополнение стандартных мишеней очень широко используется для вывода различных сообщений в процессе сборки порта, создания каких-либо файлов и т. д. Например:
pre-extract:
@${ECHO_MSG} ""
@${ECHO_MSG} "For debugging information support you should specify"
@${ECHO_MSG} "WITH_DEBUG=yes (press Ctrl-C here and start make WITH_DEBUG=yes)"
@${ECHO_MSG} ""
@sleep 2
post-deinstall:
@${ECHO_MSG} ""
@${ECHO_MSG} "Do not forget delete filter description from /etc/mail/freebsd.mc"
@${ECHO_MSG} "and rebuild sendmail.cf file!"
@${ECHO_MSG} ""
pre-configure:
if defined(WITHOUT_RC_NG)
@${SED} — e "s=%%PREFIX %%=${PREFIX}=" ${FILESDIR}/milter-sid.sh \
> ${WRKSRC}/milter-sid.sh
endif
Заменять обработчики мишеней (создавать секции do-something)[2] не рекомендует, но тем не менее это единственный путь для установки программ с закрытым исходным кодом, а также скриптов и программ, упакованных нестандартным образом. Например, мне встречалась программа, дистрибутив которой был упакован в архив формата ZIP, внутри котрого находился архив. tar.bz2 и файл сигнатуры. sig. Для распаковки нужно было сначала распаковать архив ZIP, потом проверить сигнатуру, а только потом — распаковывать. tar.bz2.
Но довольно теории. Рассмотрим в качестве примеров два порта, которые были мной созданы в разное время — порт для скрипта монтирования сетевых ресурсов Windows при входе в систему mountsmb2 и доработка к порту OpenOffice 1.1.4.
Mountsmb2
Набор скриптов mountsmb2 (там их три) был написан мной достаточно давно и преследовал тольк одну цель — автоматически монтировать SMB/CIFS-сетевые ресурсы от других Samba-серверов и компьютеров под управлением Windows. Поскольку это скрипт, написанный на языке командной оболочки sh, то никакой сборки порта не требуется и именно поэтому этот порт будет рассмотрен в качестве примера.
PORTNAME= mountsmb2
PORTVERSION= 0.90.1
CATEGORIES= sysutils net
MASTER_SITES= ftp://ftp.granch.ru/pub/other/
MAINTAINER= [email protected]
COMMENT= SMB/CIFS shares mounting scripts to do it at login
RUN_DEPENDS= findsmb:${PORTSDIR}/net/samba3 \
sudo:${PORTSDIR}/security/sudo \
gawk:${PORTSDIR}/lang/gawk
USE_BZIP2= yes
NO_BUILD= yes
include
do-install:
for i in smb2awk smb2nsmbrc mountsmb2
${INSTALL_SCRIPT} ${WRKSRC}/${i} ${PREFIX}/bin
endfor
-@${MKDIR} ${EXAMPLESDIR}
for i in sudoers.login.nsmbrc.mssmbrc
${INSTALL_DATA} ${WRKSRC}/${i} ${EXAMPLESDIR}
endfor
-@${MKDIR} ${DOCSDIR}
${INSTALL_DATA} ${WRKSRC}/README.FreeBSD
${DOCSDIR}
@${SED} — e "s,%%EXAMPLESDIR%%,${EXAMPLESDIR},g" — i.old ${PKGMESSAGE}
@${CAT} ${PKGMESSAGE}
@${RM} — f ${PKGMESSAGE}
@${MV} ${PKGMESSAGE}.old ${PKGMESSAGE}
include
В RUN_DEPENDS перечисляются все порты, от которых зависит данный скрипт, а именно GNU AWK, sudo и Samba, из которой на самом деле нужна только программа findsmb. «USE_BZIP2=yes» указывает на то, что дистрибутив упакован программой bzip2. «NO_BUILD=yes» указывает на то, что программа не требует сборки. Если этого не указать, то система будет пытаться выполнить команду make в каталоге порта, не найдет Makefile и аварийно завершится.
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.