1 Расширенные возможности системы, не рассмотренные в первой части




Скачать 158.37 Kb.
Название1 Расширенные возможности системы, не рассмотренные в первой части
Дата публикации20.05.2013
Размер158.37 Kb.
ТипДокументы
odtdocs.ru > География > Документы
Порт для FreeBSD – своими руками. Часть вторая: расширенные возможности

В первой части статьи мы рассмотрели основные вопросы создания порта для FreeBSD своими руками. Но система сборки программ, используемая во FreeBSD имеет значительно большие возможности, чем те, которые мы задействовали. Какие это возможности и как их использовать в своих портах?

1 Расширенные возможности системы, не рассмотренные в первой части


Скромный размер нашего первого порта и его достаточная простота не позволила нам рассмотреть все возможности системы портов. В этом опять же проявляется ее достоинство – не нужно знать много для построения сравнительно простого порта. Но зачастую бывает так, что необходимо реализовать некую собственную функцию по обработке исходного текста или проверить наличие некоторой программы до начала установки своей. Сразу же возникает вопрос – пытаться реализовать это своими силами или же это уже было кем-то когда-то реализовано?

Расширенные возможности системы сборки портов, которые мы не использовали в первой части и которые можно использовать, это:

  • Многофайловые дистрибутивы с возможностью отбора файлов в зависимости от заданного набора переменных

  • Внешние патчи, которые можно подключать в зависимости от заданного набора переменных

  • Задание параметров сборки порта с помощью полноэкранного текстового режима OPTIONS, с возможностью дальнейшего хранения и редактирования этих параметров

  • Дополнение или замена части процедур создания программы из порта

Возможность работы с многофайловыми дистрибутивами позволяет указать, с какого из перечисленных сайтов нужно загружать указанный файл. Допустим, программа состоит из файлов file1.tgz и file2.tgz. File1.tgz присутствует только на двадцатом из перечисленных MASTER_SITES, в то время, как file2.tgz – всюду. Система будет попусту обшаривать девятнадцать сайтов. Это не страшно, когда делается автоматом, но ужасно нервирует, когда спешишь. Кроме того, в зависимости от заданного набора параметров можно включать или исключать некоторые компоненты. Это особенно существенно, когда эти компоненты весят десятки мегабайт (например порт editors/openoffice2).

Работа с внешними патчами также крайне важна, особенно когда автор программы не желает контактировать и исправлять код. В таком случае патч либо размещается непосредственно в дереве портов, либо (как правило, если он довольно обьемный) выкладывается на некоторый сайт и указывается с помощью PATCH_SITES

Задание параметров сборки порта значительно повышает удобство работы с ним. Многие порты имеют не один десяток переменных WITH_FOO=yes WITHOUT_BAR=yes, которые не то, что набрать в командной строке – запомнить непросто! Например, порт graphics/ImageMagick имеет 26 переменных типа WITHOUT_IMAGEMAGICK_SOME=yes. Если бы автор порта не сделал экран опций, работать с таким портом было бы просто невозможно.

Дополнение или замена части процедур создания порта – это крайне важные возможности системы. Перечень основных шагов системы, выполняемых при создании программы, был уже приведен в [1]. Но возможно ли, скажем, установить через систему портов бесплатную программу с закрытым исходным текстом? Думаете, нет? Можно. И именно для этого были реализованы механизмы дополнения и/или замены части процедур сборки порта. Мы рассмотрим их в соответствующем разделе.

А теперь пора перейти от слов к делу

^ Многофайловые дистрибутивы и внешние патчи

Обычно программа состоит всего из одного файла архива. Но порт зачастую состоит не только из архива исходных текстов программы – в него могут входить дополнительные архивы, файлы данных, файлы драйверов, дополнительные файлы, используемые в процессе построения. Хорошо, конечно, когда есть свой собственный ftp-сервер, в надежности которого не сомневаешься. В этом случае файлы дистрибутива просто перечисляются:

DISTFILES= file1.tar.bz2 \

file2.tar.bz2 \

file3.tar.bz2

при этом все данные файлы будут последовательно запрошены со всех перечисленных сайтов в MASTER_SITES и с основного сайта FreeBSD, если они не будут обнаружены. Но что же делать тем, кто не имеет собственных серверов и размещает файлы на публичных хостингах? Для этого в системе есть специальная возможность связывания определенных файлов и определенных сайтов так, чтобы при поиске файлов система просматривала только некоторые определенные сайты. Эта возможность называется MASTER_SITES:n

Возьмем приведенный выше пример. Допустим, у нас имеются вебсайты www.foobar.com и www.nichego.net. Сайт www.foobar.com находится за рубежом, имеет быстрый и надежный канал. www.nichego.net находится в г. Тьмутаракани и подключен к Интернет через модем на 28.8 кБит. Как сделать так, чтобы система брала только file1.tar.gz с www.nichego.net, а остальные - с www.foobar.com? Нужно ассоциировать метки и с файлами и с сайтами:

DISTFILES= file1.tar.bz2 \

file2.tar.bz2:foobar \

file3.tar.bz2:foobar

MASTER_SITES= http://www.foobar.com/:foobar \

http://www.nichego.net

Если метка отсутствует, считается, что файл (сайт) имеет метку по умолчанию DEFAULT. Явно задавать ее не следует, разве что требуется перечислить несколько групп и DEFFULT в том числе. Система свяжет DISTFILES и MASTER_SITES, используя метки и загрузит файлы в следующей последовательности: сначала file1.tar.bz2 с http://www.nichego.net, потом file2.tar.bz2 и file3.tar.bz2 с http://www.foobar.com.

Можно было бы сделать чтобы и файл file1.tar.bz2 тоже сначала проверялся на http://www.foobar.com, а уже потом – на http://www.nichego.net. Для этого нужно www.foobar.com включить также и в группу DEFAULT

MASTER_SITES= http://www.foobar.com/:foobar,DEFAULT

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

^ GSI_VERSION= 2005-01-20

DISTFILES+= gsi-$(GSI_VERSION)-sorted.txt.bz2:oorus,oorus2

INFRA_PATCHEXT= OOo_1.1.4_infra_patches

DISTFILES+= ${INFRA_PATCHEXT}.tar.gz:DEFAULT,oorus

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

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

MASTER_SITES+= ftp://ftp/granch.ru/pub/openoffice

В данном фрагменте файл gsi-2005-01-20-sorted.txt.bz2 будет скачиваться сначала с http://ootrans.i-rs.ru/out, потом с ftp://ftp.i-rs.ru/pub/openoffice/1.1.4/ru/, а файл OOo _1.1.4_infra_patches.tar.gz – сначала с ftp://ftp.i-rs.ru/pub/openoffice/1.1.4/ru/, потом с ftp://ftp.granch.ru/pub/openoffice/.

Когда стоит пользоваться такой возможностью? Когда порт может состоять из большого количества файлов, и хочется сделать возможность обойтись без загрузки файлов, которые не нужны. Например, это не было сделано в порту editors/openoffice-1.1 и в результате чего исходные тексты Mozilla Suite (обьема немалого – 35 мег) загружались независимо от желания пользователя ее использовать.

Использование внешних патчей во многом похоже на загрузку файлов исходного кода программы, только здесь используются переменные PATCH_SITES и PATCHFILES:

PATCH_SITES= ftp://ftp.cis.upenn.edu/pub/xv/

PATCHFILES= ${DISTNAME}.JPEG-patch ${DISTNAME}.TIFF-patch \

croppad.patch grabpatch vispatch \

deepcolor.patch gifpatch exceed_grab.patch \

tiff1200.patch gssafer.patch

Имейте в виду, что патчи, заданные в PATCHFILES применяются ДО применения патчей из подкаталога files! То есть последовательность действий будет выглядеть так:

===> Patching for xv-3.10a_5

===> xv-3.10a_5 depends on file: /usr/local/bin/perl5.8.7 - found

===> Applying distribution patches for xv-3.10a_5

===> Applying FreeBSD patches for xv-3.10a_5

Когда стоит использовать внешние патчи? Разработчики обычно используют их, чтобы избежать выпуска нового релиза программы (так обычно поступают разработчики squid – вместо выпуска нового релиза они выкладывают патчи значительного объема), авторы портов, не являющиеся разработчиками программы – чтобы внести в исходный текст изменения, с которыми автор может быть не согласен, если они достаточно объемные и их нельзя поместить непосредственно в дерево портов, для расширения функциональности и т.д. Следует учесть то, что если патч не создан с использованием стандартной процедуры diff, то его нельзя применять описанным методом и необходимо предусмотреть для него специальную обработку (см. пример в описании порта для OpenOffice).

Опции

Если программа сложная, то, как правило она предлагает множество различных вариантов построения – с использованием такой-то возможности, без использования такой-то возможности... Некоторые порты сначала проводят «автоматическое обнаружение» некоторых задействуемых компонент, а уже потом устанавливают переменные, включающие или отключающие различные возможности, а некоторые оставляют это на усмотрение пользователя. Если пользователь об этом не подозревает, то он может так никогда ими и не воспользоваться. Одним из примеров того, как делать ни в коем случае было не надо, я считаю порт graphics/ImageMagick до того момента, как в него была добавлена возможность использовать OPTION. Мало того, что там 26 переменных, так еще пользователь даже не оповещается, что они вообще есть! В результате строка запуска сборки порта могла выглядеть, например,таким образом:

# make WITHOUT_IMAGEMAGICK_JPEG=yes WITH_WINDOWS_FONT_DIR=/tmp/blabla WITHOUT_IMAGEMAGICK_PNG=yes WITHOUT_IMAGEMAGICK_BZIP2=yes ...

Кроме того, что это просто ОЧЕНЬ долго набирать, попробуйте-ка вспомнить, какие там опции задавались при предыдущей сборке полгода назад? Разумеется это крайне неудобно и некоторое время назад в системе появилась возможность задавать опции в полноэкранном текстовом режиме.






Рисунок 1: Внешний вид экрана опций для порта


Все опции, перечисленные на экране задаются и отменяются простым нажатием пробела, результат выбора будет сохранен и использован при последующих сборках порта. В любое время его можно изменить, выполнив команду:

# make config

Формируется экран опций следующей командой в Makefile:

OPTIONS= LDAP "With LDAP support" on \

ADS "With Active Directory support" off \

CUPS "With CUPS printing support" on \

WINBIND "With WinBIND support" on \

ACL_SUPPORT "With ACL support" off \

SAM_XML «SAM with XML support» off

Первый параметр задает имя опции, которе потом будет использовано в переменной WITH_*. Например, для первого параметра имя переменной будет WITH_LDAP. Второй параметр задает текст комментария, который будет выведен справа от соответствующей опции и третий – значение по умолчанию. При указании «on» опция по умолчанию включена, при указании «off» - выключена.

Хорошо, опции заданы. Как их обработать?

Прежде всего необходимо отметить, что при использовании 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 при сборке порта. Сборка порта состоит из последовательности выполнения ряда мишеней, которые в свою очередь делятся на подмишени 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) [1] не рекомендует, но тем не менее это единственный путь для установки программ с закрытым исходным кодом, а также скриптов и программ, упакованных нестандартным образом. Например, мне встречалась программа, дистрибутив которой был упакован в архив формата ZIP, внутри котрого находился архив .tar.bz2 и файл сигнатуры .sig. Для распаковки нужно было сначала распаковать архив ZIP, потом проверить сигнатуру, а только потом – распаковывать .tar.bz2.

Но довольно теории. Рассмотрим в качестве примеров два порта, которые были мной созданы в разное время – порт для скрипта монтирования сетевых ресурсов Windows при входе в систему mountsmb2 и доработка к порту OpenOffice, которую я никогда не отправлял во FreeBSD Team, а также фрагменты различных других портов.

Mountsmb2

Набор скриптов mountsmb2 (там их три) был написан мной достаточно давно и преследовал только одну цель – автоматически монтировать SMB/CIFS сетевые ресурсы от других Samba-серверов и компьютеров под управлением Windows. Поскольку это скрипт, написанный на языке командной оболочки sh, то никакой сборки порта не требуется и именно поэтому этот порт будет рассмотрен в качестве примера.

PORTNAME= mountsmb2

PORTVERSION= 0.90.1

CATEGORIES= sysutils net

MASTER_SITES= ftp://ftp.sheltonsoft.ru/pub/other/

MAINTAINER= shelton@sheltonsoft.ru

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 и аварийно завершится.

Инсталляцией порт управляет самостоятельно – в Makefile присутствует заменяющая подмишень do-install. Здесь хорошо видно, как можно организовать цикл, который установит несколько файлов, перечисленных в списке, в указанное место. После первого цикла, который устанавливает собственно скрипты идет команда создания каталога для документации – система сама не будет делать ничего, все необходимые каталоги должны быть созданы портом. Такая странная форма записи команды означает что:

  • если команда завершается неудачно, например, такой каталог уже существует, то make не прекращает работу (минус перед командой).

  • команда не отображается на терминале (знак @ перед командой).

Потом идет второй цикл, который устанавливает файлы примеров в каталог, который для этого предварительно создается, создается каталог документации и в него копируется файл README.FreeBSD.

Команда sed подготавливает файл pkg-message к отображению. В файле, который распространяется вместе с портом присутствует макроподстановка %%EXAMPLESDIR%%, которая перед тем как это сообщение будет показано пользователю заменяется на значение переменной ${EXAMPLESDIR}. Чтобы не изменять оригинальный файл pkg-message (возможно в следующий раз установка будет проходить с другим значением ${EXAMPLESDIR}) старый файл сохраняется, измененный файл удаляется, старый файл переименовывается в оригинальное имя. Порт несложный, но он демонстрирует, как можно использовать заменяющие подмишени. При создании таких портов следует быть предельно внимательными – помните, что любой каталог, не входящий в стандартное дерево каталогов, описанное в bsd.local.mk, имеет право не существовать и должен быть предварительно создан.

^ Модификация порта OpenOffice

С моей точки зрения, порт для сборки OpenOffice editors/openoffice имел множество недостатков, но эти изменения я никогда не пробовал отправить во FreeBSD Team для помещения их в дерево портов. Какие изменения были внесены мной:

  • возможность задания тех или иных опций для сборки OpenOffice.org через экран опций

  • возможность загрузить и применить внешние патчи, созданные в «Инфра-Ресурс» [2]

Порт чересчур громоздок, чтобы приводить его весь, я приведу только некоторые фрагменты.

DISTFILES+= ${OOOSRC} unowinreg.dll:unowinreg

DISTFILES+= infra-ooo-files_${OOOVERSION}.tar.gz:infra

DISTFILES+= citycat-files_${OOOVERSION}.tar.bz2:citycat

.if defined(WITH_GPC)

DISTFILES+= gpc231.tar.Z:gpc

.endif

Назначаем различные группы DISTFILES и по компонентам и в зависимости от задания переменных.

USE_XORG= x11 ice xaw xau xext xrender xrandr \

xi xt xcursor xdamage xcomposite xfixes

Вот такой вот прием - задание списка компонентов, которые будут использоваться - применяется очень широко. Разумеется, все перечисленные компоненты должны быть заранее где-то определены.

INTRO_BITMAP= ${WRKDIR}/citycat-files_${OOOVERSION}/res/citycat/intro.bmp

ABOUT_BITMAP= ${WRKDIR}/citycat-files_${OOOVERSION}/res/citycat/about.bmp

Можно задавать произвольные переменные, если правильно инициализировать их. Если при инициализации допустить ошибку, то переменная будет или не определена или определена неверно, но никакой диагностики не будет.

Секция переопределений начинается с определения первой заменяющей мишени. Неважно, что это будет за мишень, но после начала любой заменяющей мишени код будет относиться к ней до тех пор, пока не начнется следующая заменяющая мишень, или же не закончится текст файла

CRLFFILES=curl/curl*patch neon/neon*patch jfreereport/patches/*.patch

for i in ${CRLFFILES}; do \

cd ${WRKSRC} ; ${REINPLACE_CMD} -e 's#^M##g' $$i ; \

done

Список можно даже не заключать в кавычки. Зато все время необходимо помнить, что мы находимся в каталоге порта и все действия по ручному копированию, перемещению изменению файлов необходимо начинать с перехода в рабочий каталог порта WRKSRC. Собственно фрагмент кода демонстрирует как использовать цикл и как можно удалить из файлов переводы строк в стандарте DOS.

pre-configure: infrapatch catspatch

@${LN} -sf ${LOCALBASE}/bin/gperf ${WRKSRC}/solenv/bin/gperf

Мишени могут иметь зависимости, которые точно так же как в стандартом make, будут удовлетворены прежде чем начнется выполнение кода самой мишени. Все команды должны быть параметризированы, то есть использоваться не /usr/bin/ln, а ${LN}

Различные фрагменты

.if !defined(WITHOUT_GTL) || exists (${LOCALBASE}/lib/libQtShiva.so)

LIB_DEPENDS+= OpenCTL.0:${PORTSDIR}/graphics/opengtl \

QtShiva.0:${PORTSDIR}/graphics/qtgtl

^ PLIST_SUB+= GTL=""

.else

PLIST_SUB+= GTL="@comment "

.endif

Порт может «автоматически» обнаруживать некоторые файлы и в зависимости от результатов корректировать зависимости.

.if ${OSVERSION} < 700000

LIB_DEPENDS+= pulse.0:${PORTSDIR}/audio/pulseaudio

EXTRA_PATCHES= ${FILESDIR}/releng6_pulseaudio

.else

EXTRA_PATCHES= ${FILESDIR}/libsydney_oss

.endif

Порт может самостоятельно определить версию FreeBSD и предпринять действия в зависимости от того, какая это версия.

^ Некоторые переменные USE_*

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

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

EXTRACT_ONLY=yes – только распаковать файлы дистрибутива, не выполнять никакой работы по сборке. Как правило, в таком порту применяется заменяющая подмишень do-install.

RESTRICTED=yes – запрещает помещать собранный пакет на FTP или распространять на CDROM. Как правило вследствие лицензионных ограничений. Это не такая уже редкость, например такое ограничение имеет виртуальная машина 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_PERL=yes, USE_JAVA=yes, USE_PYTHON=yes, USE_RUBY=yes – добавляют соответствующие зависимости от интерпретатора соответствующего языка.

USE_AUTOTOOLS=: - добавляет зависимость от некоторой программы из GNU Autotools. Если задана и программа и версия, задает зависимость от конкретной версии, если версия опущена, то задает зависимость от программы без номера в имени. Например:

USE_AUTOTOOLS=libtool:15

задает зависимость от devel/libtool15, но

USE_AUTOTOOLS=libtool

задает зависимость от devel/libtool, что может быть совсем не одно и то же!

USE_GNOME=<список компонентов через пробел> - задает зависимости от перечисленного списка компонентов GNOME. Например, приведенная выше строка

USE_GNOME+= orbit gtk12

задает зависимости от компонентов devel/orbit и x11-toolkits/gtk12.

При задании зависимостей следует придерживаться разумного минимума – указывать только те компоненты, которые действительно нужны для работы. Помните, что подключенные компоненты тоже имеют свои зависимости, которые могут иметь свои зависимости и т.д. - глубина вложенности неограничена.

USE_QT_VER=3 – добавляет зависимость от библиотеки x11-toolkits/qt33 и неявно подключает файл bsd.kde.mk

USE_LINUX={yes|<число>} - добавляет зависимость от порта emulators/linux-base-8, если не указано <число>. Если <число> указано, то добавляется зависимость от порта emulators/linux-base-<число>

CONFLICTS=<список портов> - Содержит список портов, с которыми может конфликтовать данный порт. Конфликт может выражаться в совпадающих именах каталогов для установки, совпадающих именах файлов, одинаковых TCP/UDP портах, невозможность сборки одного порта при наличии другого и прочих причинах. Выражения для списка портов может содержать мета-символы «*?[]!». Например:

apache*-1.3.[012345]

Заключение

Наша работа закончена, но жизнь продолжается... Мы рассмотрели основные возможности системы сборки портов. Однако далеко не для каждого порта требуется такое количество работы – для многих несложных программ порт от начала до конца, включая отсылку во FreeBSD Team, пишется за полдня. Система сборки портов обладает очень большими возможностями. Изучать их все нет необходимости – всегда можно заглянуть в bsd.port.mk, который и является главным справочником по ее возможностям. В начале файла идет громадный блок комментария, в котором перечислены все переменные, которые можно использовать и даны к ним краткие описания, для чего они предназначены. Число программ, которые работают под FreeBSD постоянно увеличивается, порты для них пишутся, как мы теперь видим обычными людьми, и создавая новый порт для программы, которая там в данный момент отсутствует, мы не только облегчаем себе жизнь, но и помогаем сообществу.

Внешние ссылки и литература

  1. Руководство FreeBSD по созданию портов. http://www.ru.freebsd.org/doc/ru_RU.KOI8-R/books/porters-handbook/index.html

  2. Сайт копмании «Инфра-Ресурс», распространяющей офисный пакет «OpenOffice.org Pro» - http://www.i-rs.ru

Добавить документ в свой блог или на сайт

Похожие:

Статья 12. Приобретение гражданства Российской Федерации по рождению...
О применении части первой статьи 12 см. Определение Конституционного Суда РФ от 24. 05. 2005 n 235-О

Любой художник должен уметь создавать всё, что он видит или может...
Любой художник должен уметь создавать всё, что он видит или может представить. В первой части познакомились с основными понятиями....

Уроках, так и во внеурочное время
В первой части проекта ребята познакомились с понятием погода, научились вести календарь природы и труда, наблюдать за

Урока: обучающая
«Функции и их графики», изучить графические возможности системы Maxima, научиться выполнять построения графиков различных функций...

Тема урока : Состав слова. Роль каждой части слова в языке
Бурдина Наталья Сергеевна, учитель начальных классов первой квалификационной категории

-
Вп СССР общественная инициатива некоторой части тех людей, кто ознакомился с материалами Концепции общественной безопасности (коб)...

Workout – что это
Поскольку для многих Воркаут ассоциируется в большей степени с первой частью предложения, во второй части статьи я более подробно...

1. 2Scope Данный документ описывает архитектуру всей серверной части...
Цель данного документа – рассмотрение архитектуры системы с нескольких сторон отражающих различные аспекты системы. Данный документ...

Scope Данный документ описывает архитектуру всей серверной части...
Цель данного документа – рассмотрение архитектуры системы с нескольких сторон отражающих различные аспекты системы. Данный документ...

Подпрограмма «Развитие системы общего и дополнительного образования детей» Паспорт подпрограммы
В ходе выполнения Целевой программы "Модернизация системы образования Никифоровского района на 2010 2012 годы" реализованы мероприятия...

Вы можете разместить ссылку на наш сайт:
Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
odtdocs.ru
Главная страница