doc/ru/gnome/docs/porting.sgml
Hiroki Sato 5305bb945d www cleanup mega commit:
- Move includes.nav*.sgml to share/sgml/navibar.ent and
   <lang>/share/sgml/navibar.l10n.ent.

 - Move includes.sgml and includes.xsl to
   share/sgml/common.ent, share/sgml/header.ent, <lang>/share/sgml/l10n.ent,
   and <lang>/share/sgml/header.l10n.ent.

 - Move most of XSLT libraries to share/sgml/*.xsl and
   <lang>/share/sgml/*.xsl.

 - Move news.xml and other *.xml files for the similar purpose
   to share/sgml/*.xml and <lang>/share/sgml/*.xml.

 - Switch to use a custom DTD for HTML document.  Now we use
   "-//FreeBSD//DTD HTML 4.01 Transitional-Based Extension", which is
   HTML 4.01 + some entities previously pulled via
   "<!ENTITY % includes SYSTEM "includes.sgml"> %includes;" line.
   The location of entity file will be resolved by using catalog file.

 - Add DOCTYPE declearation to XML documents.  This makes the followings
   possible:

   * Use of &foo; entities for SGML in an XML file instead of defining
     {$foo} as the same content.

   * &symbolic; entities for Latin characters.

 - Duplicated information between SGML and XML, or English and
   translated doc, has been removed as much as possible.
2006-08-19 21:26:51 +00:00

307 lines
12 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!--
The FreeBSD Russian Documentation Project
$FreeBSDru: frdp/www/ru/gnome/docs/porting.sgml,v 1.4 2004/09/21 07:31:07 den Exp $
Original revision: 1.34
-->
<!DOCTYPE HTML PUBLIC "-//FreeBSD//DTD HTML 4.01 Transitional-Based Extension//EN" [
<!ENTITY base CDATA "../..">
<!ENTITY date "$FreeBSD: www/ru/gnome/docs/porting.sgml,v 1.4 2005/10/05 20:59:53 simon Exp $">
<!ENTITY title "Проект FreeBSD GNOME: Как создать порт">
<!ENTITY % navinclude.developers "INCLUDE">
<!ENTITY % gnomeincludes SYSTEM "../includes.sgml"> %gnomeincludes;
]>
<html>
&header;
<p>В этом документе предполагается, что вы уже знаете, как работает система
портов, и поэтому здесь даётся только специфичные для GNOME советы и
замечания. Инструкции общего характера можно найти в <a
href="http://www.freebsd.org/doc/ru_RU.KOI8-R/books/porters-handbook/index.html">
Руководстве по созданию портов FreeBSD</a>.</p>
<h2>Макросы GNOME для Makefile</h2>
<p>Приложения GNOME во FreeBSD используют инфраструктуру <b>USE_GNOME</b>.
Для указания того, какие компоненты системы GNOME нужны вашему порту для
построения, просто перечислите их все списком через пробел. Например:</p>
<pre>
USE_X_PREFIX= yes
USE_GNOME= gnomeprefix gnomehack libgnomeui
</pre>
<p>Компоненты <b>USE_GNOME</b> делятся на две следующие категории:</p>
<ul>
<li><p><a href="gnome2_porting.html">Компоненты GNOME 2</a></p></li>
<li><p><a href="gnome_porting.html">Компоненты GNOME 1</a></p></li>
</ul>
<!-- I'm not sold on the utility of this section -->
<p>Если вашему порту нужны только библиотеки <b>GTK2</b>, то кратчайшим
способом указать на это является следующий:</p>
<pre>
USE_X_PREFIX= yes
USE_GNOME= gtk20
</pre>
<p>Если вашему порту требуются только библиотеки <b>GTK1</b>, то кратчайшим
способом указать на это является следующий:</p>
<pre>
USE_X_PREFIX= yes
USE_GNOME= gtk12
</pre>
<p>Даже если ваше приложение требует только библиотеки GTK, другие компоненты
<b>USE_GNOME</b> могут оказаться полезными. Пожалуйста, просмотрите весь
список, чтобы удостовериться в том, что ваш порт использует все нужные
компоненты.</p>
<!-- end questionable section -->
<p>Как только вы закончите работу над своим портом, не помешает проверить,
что он зависит от правильного списка компонентов. Чтобы увидеть перечень
пакаджей, от которых действительно зависит ваш порт, воспользуйтесь
командой <tt>make package-depends</tt>, которую нужно выдать из каталога
вашего порта.</p>
<p>В облегчении создания перечня необходимых компонентов может помочь анализ
выдачи команды <tt>make configure</tt>. В конце списка
<tt>checking for...</tt> будет находиться строка вроде следующей:</p>
<pre>
checking for libgnomeui-2.0 >= 2.0.0 cspi-1.0 >= 1.1.7
libspi-1.0 >= 1.1.7 libbonobo-2.0 >= 2.0.0 atk >= 1.0.0
gtk+-2.0 >= 2.0.0 gail libwnck-1.0 esound... yes
</pre>
<p>Это список компонентов, которые используются приложением при построении.
Обратите особое внимание на иерархический характер системы
<b>USE_GNOME</b>; многие компоненты включаются из других директив
<b>USE_GNOME</b>. В примере выше <tt>USE_GNOME= libgnomeui</tt>
подразумевает использование <tt>libbonoboui</tt>, что приводит к
использованию <tt>libgnomecanvas</tt>, что приводит к использованию
<tt>libglade2</tt>, которая использует <tt>gtk20</tt>. Таким образом, даже
если <tt>gtk+-2.0</tt> появляется в списке необходимых компонентов,
<tt>gtk20</tt> можно исключить из списка <b>USE_GNOME</b>. Имеется
некоторое количество других таких случаев избыточности, которые можно
исключить из этого списка.</p>
<p>Для списка выше (взятого из <tt>sysutils/gok</tt>), в <tt>Makefile</tt>
определено следующее:
<pre>
USE_GNOME= gnomehack gnomeprefix libgnomeui atspi libwnck
</pre>
<h2>Оболочка GNOME 1 против Оболочки GNOME 2</h2>
<p>Изначально была только <tt>GNOME 1</tt>. Когда появилась оболочка
<tt>GNOME 2</tt>, была обеспечена максимальная совместимость с предыдущей
версией, по понятным причинам. Приложения <tt>GNOME 1</tt> могли нормально
работать в оболочке <tt>GNOME 2</tt>, при условии, что они не используют
специфичную для оболочки <tt>GNOME 1</tt> функциональность.</p>
<p>Оболочка <tt>GNOME 1</tt> и все приложения, которые не работали в оболочке
<tt>GNOME 2</tt>, были удалены из дерева портов.</p>
<p>Для вас, как создателя порта приложения, это означает, что вы просто не
должны добавлять приложения, специфичные для <tt>GNOME 1</tt>, в дерево
портов.</p>
<p>Если вы хотите определить, какая версия оболочки GNOME используется на
машине пользователя, вы можете проверить значение переменной
<b>GNOME_DESKTOP_VERSION</b>. Значение этой переменной устанавливается в
значение <tt>"1"</tt> или <tt>"2"</tt>, в зависимости от того, установлена
ли версия оболочки <tt>GNOME 1</tt> или <tt>GNOME 2</tt>.</p>
<h2>Опциональные зависимости GNOME</h2>
<p>Если ваш порт может опционально использовать GNOME, вы должны задать
<tt>WANT_GNOME= yes</tt> в вашем файле Makefile, а затем проверить, задана
ли переменная <tt>HAVE_GNOME</tt> для каждого компонента из списка выше,
которые может использовать ваш порт. Так как это проверка выполнения
условия, вам нужно поместить её между <tt>bsd.port.pre.mk</tt> и
<tt>bsd.port.post.mk</tt>. Например:</p>
<pre>
WANT_GNOME= yes
.include &lt;bsd.port.pre.mk&gt;
.if ${HAVE_GNOME:Mgnomepanel}!=""
USE_GNOME+= gnomeprefix gnomepanel
CONFIGURE_ARGS+= --with-gnome
PKGNAMESUFFIX= -gnome
PLIST_SUB= DATADIR="share/gnome"
.else
CONFIGURE_ARGS+= --without-gnome
PLIST_SUB= DATADIR="share"
.endif
.include &lt;bsd.port.post.mk&gt;
</pre>
<p>Здесь <tt>WANT_GNOME</tt> указывает системе портов на проверку
существования различных компонент GNOME, перечисленных выше. Для каждого
найденного компонента его имя добавляется к <tt>HAVE_GNOME</tt>. Так как
этот порт может использовать <tt>gnomepanel</tt>, мы проверяем переменную
<tt>HAVE_GNOME</tt> на предмет включения в неё <tt>gnomepanel</tt> (для
выяснения более полной информации о синтаксисе make-строки
:M<tt>pattern</tt>, пожалуйста, обратитесь к <a
href="http://www.freebsd.org/cgi/man.cgi?query=make&amp;apropos=0&amp;sektion=0&amp;manpath=FreeBSD+4.6-stable&amp;format=html">
страницам справочника о make(1)</a>). Если будет найден компонент
<tt>gnomepanel</tt>, то он будет добавлен к списку зависимостей
<tt>USE_GNOME</tt>, и будут переданы специфичные для порта
<tt>--with-gnome</tt> <tt>CONFIGURE_ARG</tt>. В старой инфраструктуре
GNOME переменная <tt>PKGNAMESUFFIX</tt> автоматически перенастраивалась
на полноценный макрос <tt>USE_*</tt>. Теперь это отдано человеку,
создающему порт. В нашем примерном порте к его имени добавляется
<tt>-gnome</tt> для указания на то, что он строится с поддержкой GNOME.
То же самое имеет место и для <tt>DATADIR</tt> <tt>PLIST_SUB</tt>.
Создатель порта должен решить, когда выполнять подстановку
<tt>DATADIR</tt>. Хорошим правилом является добавление <tt>DATADIR</tt>
<tt>PLIST_SUB</tt> при использовании компонента <tt>gnomeprefix</tt>.</p>
<p><b>Замечание:</b> Вы не можете добавлять дополнительные компоненты
<tt>USE_GNOME</tt>, используемые по умолчанию, после
<tt>.include &lt;bsd.port.pre.mk&gt;</tt>. Поэтому следующее использование
будет <font color="#FF0000"><b>неправильным</b></font>:</p>
<pre>
.include &lt;bsd.port.pre.mk&gt;
.if ${HAVE_GNOME:Mgnomelibs}!=""
USE_GNOME+= libgnome
.else
USE_GNOME+= gtk12 # ОШИБКА!
.endif
</pre>
<p>Это заставит систему построения думать, что требуется использование GNOME,
и тогда <tt>pkg-plist</tt> будет изменён соответствующим образом, что
приведёт к ошибке при построении пакаджа. Если вы хотите добавить
используемые по умолчанию компоненты <tt>USE_GNOME</tt>, сделайте это
<b>перед</b> строкой <tt> .include &lt;bsd.port.pre.mk&gt;</tt>.</p>
<p>Чтобы принудительно вызвать безусловное использование опциональных
зависимостей GNOME, вы можете добавить <tt>WITH_GNOME= yes</tt> в файл
<tt>/etc/make.conf</tt> или в командную строку make. При этом при проверке
зависимости от GNOME будет всегда возвращаться возвращаться положительное
значение. Если вы хотите, чтобы система всегда возвращала отрицательный
результат при проверке на зависимость от GNOME, вы можете добавить
<tt>WITHOUT_GNOME= yes</tt> в <tt>/etc/make.conf</tt> или командную строку
make.</p>
<p>Дополнительную информацию об инфраструктуре USE_GNOME можно найти при
просмотре исходных текстов и комментариев в файле
<tt>${PORTSDIR}/Mk/bsd.gnome.mk</tt>.</p>
<!-- End GNOME-related Makefile macros -->
<!-- Begin GNOME OMF -->
<h2>Установка OMF</h2>
<p>Большое количество приложений GNOME (особенно приложения GNOME 2)
устанавливают файлы Open Source Metadata Framework (OMF), которые содержат
информацию о файлах справки для этих приложений, Эти OMF-файлы требуют
особой обработки через ScrollKeeper для того, чтобы такие приложения, как
Yelp могли находить справочную документацию. Для выполнения полноценной
регистрации этих файлов OMF при установке приложений GNOME из пакаджей
вы должны проверить, что файл <tt>pkg-plist</tt> вашего порта имеет
следующие описания для <em>каждого</em> перечисленного файла OMF.</p>
<pre>
@exec scrollkeeper-install -q \
%D/path/to/help_file.omf \
2&gt;/dev/null || /usr/bin/true
@unexec scrollkeeper-uninstall -q \
%D/path/to/help_file.omf \
2&gt;/dev/null || /usr/bin/true
</pre>
<p>К примеру:</p>
<pre>
@exec scrollkeeper-install -q \
%D/share/gnome/bug-buddy/bug-buddy-C.omf \
2&gt;/dev/null || /usr/bin/true
@unexec scrollkeeper-uninstall -q \
%D/share/gnome/bug-buddy/bug-buddy-C.omf \
2&gt;/dev/null || /usr/bin/true
</pre>
<!-- End GNOME OMF -->
<!-- Begin GNOME libtool -->
<h2>Проблемы с libtool</h2>
<p>Большинство, если не все, приложений GNOME зависит от GNU libtool. Они
также используют систему конфигурации GNU configure. Если ваш порт
устанавливает совместно используемые библиотеки, вы должны добавить строку
<tt>USE_LIBTOOL= yes</tt> к Makefile вашего порта. При этом будут учтены
все требования при использовании libtool, но это не избавит от таких вещей,
как установка файлов .la. Для обеспечения корректной установки совместно
используемой библиотеки не забудьте также добавить следующую строку в
скрипт <tt>configure</tt> вашего порта непосредственно после строки
<tt>LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"</tt>:</p>
<pre>
$ac_aux_dir/ltconfig $LIBTOOL_DEPS
</pre>
<p>Это отменит установку файлов .la и обеспечит передачу параметра
<tt>${PTHREAD_LIBS}</tt> компоновщику.</p>
<!-- End GNOME libtool -->
<!-- Begin GNOME distfiles -->
<h2>Дистрибутивные файлы</h2>
<p>Для отделения дистрибутивных файлов GNOME 2 от дистрибутивных файлов GNOME
1 и для обеспечения чистоты каталога с дистрибутивными файлами, порты GNOME
1, которые сгружают свои дистрибутивные файлы с
<tt>${MASTER_SITE_GNOME}</tt>, должны иметь следующую строку в своём
Makefile:</p>
<pre>
DIST_SUBDIR= gnome
</pre>
<p>Порты GNOME 2, которые сгружают свои дистрибутивные файлы с
<tt>${MASTER_SITE_GNOME}</tt>, должны иметь следующую строку в своём
Makefile:</p>
<pre>
DIST_SUBDIR= gnome2
</pre>
<p>Некоторые дистрибутивные файлы GNOME распространяются как в формате
tar gzip, так и tar bzip2. Для экономии времени при сгрузке дистрибутивных
файлов по медленным каналам связи вы должны использовать дистрибутивные
файлы bzip2 там, где это возможно. Для этого добавьте следующую строку
в Makefile вашего порта:</p>
<pre>
USE_BZIP2= yes
</pre>
<!-- End GNOME distfiles -->
<p>Если вам нужна помощь при работе с портом, для примера взгляните на
некоторые из <a href="/ports/gnome.html">существующих портов</a>. К вашим
услугам также и <a href="mailto:&email;@FreeBSD.org">список рассылки
freebsd-gnome</a>.</p>
&footer;
</body>
</html>