aboutsummaryrefslogtreecommitdiff
path: root/zh_CN.GB2312/books
diff options
context:
space:
mode:
authorFukang Chen <loader@FreeBSD.org>2007-10-02 02:56:37 +0000
committerFukang Chen <loader@FreeBSD.org>2007-10-02 02:56:37 +0000
commit1ff8df67b61b98649236515a3e942733c2de7738 (patch)
treee3031ad62f7e49a4f283d12e555c16b9651947df /zh_CN.GB2312/books
parentce34fb853d18590c84c55217f1fca551659638a3 (diff)
Notes
Diffstat (limited to 'zh_CN.GB2312/books')
-rw-r--r--zh_CN.GB2312/books/porters-handbook/book.sgml556
1 files changed, 314 insertions, 242 deletions
diff --git a/zh_CN.GB2312/books/porters-handbook/book.sgml b/zh_CN.GB2312/books/porters-handbook/book.sgml
index 177a2f9f6b..0e24a355bc 100644
--- a/zh_CN.GB2312/books/porters-handbook/book.sgml
+++ b/zh_CN.GB2312/books/porters-handbook/book.sgml
@@ -2,7 +2,7 @@
The FreeBSD Documentation Project
The FreeBSD Simplified Chinese Project
- Original Revision: 1.825
+ Original Revision: 1.872
$FreeBSD$
-->
@@ -335,6 +335,12 @@ PLIST_DIRS= lib/X11/oneko</programlisting>
第三步以后, 检查是否所有新建的目录都被正确删除了。
在第四步以后, 试着运行一下所装的软件,
确保当它以 package 方式安装的时候也能正常工作。</para>
+
+ <para>自动化这些步骤最简单的方法是通过 <application>ports tinderbox</application>
+ 来进行测试。 它可以维护 <literal>jails</literal> 并在其中完成全部测试工作,
+ 而不会破坏正在运行的系统的状态。 请参见
+ <filename>ports/ports-mgmt/tinderbox</filename>
+ 以了解更多的信息。</para>
</sect1>
<sect1 id="porting-portlint">
@@ -1013,6 +1019,25 @@ PORTEPOCH= 1</programlisting>
<makevar>PORTNAME</makevar> 中。</para>
</sect2>
+ <sect2>
+ <title><makevar>LATEST_LINK</makevar></title>
+
+ <para>有时, 在 ports 套件中可能会存在同一程序的多个版本。
+ 索引和预编译包的联编系统都需要能够将它们视为不同的软件包, 尽管其
+ <makevar>PORTNAME</makevar>、 <makevar>PKGNAMEPREFIX</makevar>, 以及
+ even <makevar>PKGNAMESUFFIX</makevar> 可能是一模一样的。 遇到这种情况时,
+ 就需要将除了 <quote>主</quote> port 之外的其他 port
+ 中的 <makevar>LATEST_LINK</makevar> 变量设为不同的值
+ &mdash; 请参见 <filename>editors/vim5</filename> 和
+ <filename>editors/vim</filename> port, 以及
+ <filename>www/apache*</filename> 系列, 以了解它的用法。
+ 需要注意的是, 如何确定 <quote>主</quote> 版本 &mdash;
+ <quote>最流行</quote>、 <quote>受支持最好</quote>,
+ <quote>变动最少</quote>, 等等 &mdash; 已经超过了本书能够给出的建议范围;
+ 这里只是向您介绍在选定了一个
+ <quote>主</quote> port 之后如何指定其他 port 的版本。</para>
+ </sect2>
+
<sect2 id="porting-pkgname">
<title>包命名规则</title>
@@ -1051,16 +1076,28 @@ PORTEPOCH= 1</programlisting>
<listitem>
<para><filename>name</filename> 部分的首字母应该
- 小写。 (余下的部分能包含大写字母, 所以当您
+ 小写。 (余下的部分可以包含大写字母, 所以当您
要转换一个包含大写字母软件的名字时, 您需要
- 自己做出判断。) 对于<literal>perl 5</literal>
+ 自己做出判断。) 对于 <literal>Perl 5</literal>
模块的命名, 有个传统的规则是, 在前面
加上 <literal>p5-</literal>
并把两个冒号的部分改为连字号, 如:
- <literal>Data::Dumper</literal> 模块变成
- <literal>p5-Data-Dumper</literal>。
- 如果软件的名字里还有数字、 连字号、 下划线,
- 您也可以把这些包括进来 (例如 <literal>kinput2</literal>)。</para>
+ <literal>Data::Dumper</literal> 模块对应的名字, 就应该是
+ <literal>p5-Data-Dumper</literal>。</para>
+ </listitem>
+
+ <listitem>
+ <para>确认 port 的名字和版本之间有清晰的分隔, 并放入 <makevar>PORTNAME</makevar> 和
+ <makevar>PORTVERSION</makevar> 变量。 在
+ <makevar>PORTNAME</makevar> 中包含版本部分的唯一理由是上游软件包真的采用这样的命名方式,
+ 类似 <filename>textproc/libxml2</filename> 或
+ <filename>japanese/kinput2-freewnn</filename> port 这样。 否则,
+ 在 <makevar>PORTNAME</makevar> 中就不应包含任何版本信息。
+ 许多 port 采用同样的 <makevar>PORTNAME</makevar> 名字是很正常的,
+ <filename>www/apache*</filename> port 便是如此; 在这种情况下,
+ 不同的版本 (以及不同的索引项) 是由 <makevar>PKGNAMEPREFIX</makevar>、
+ <makevar>PKGNAMESUFFIX</makevar>, 以及
+ <makevar>LATEST_LINK</makevar> 的值的不同而有所区别的。</para>
</listitem>
<listitem>
@@ -1539,6 +1576,12 @@ PORTEPOCH= 1</programlisting>
</row>
<row>
+ <entry><filename>kld*</filename></entry>
+ <entry>可加载内核模块。</entry>
+ <entry></entry>
+ </row>
+
+ <row>
<entry><filename>korean</filename></entry>
<entry>韩语语言支持。</entry>
<entry></entry>
@@ -1861,6 +1904,12 @@ PORTEPOCH= 1</programlisting>
</row>
<row>
+ <entry><filename>x11-drivers</filename></entry>
+ <entry>X11 驱动程序。</entry>
+ <entry></entry>
+ </row>
+
+ <row>
<entry><filename>x11-fm</filename></entry>
<entry>X11 下的文件管理器。</entry>
<entry></entry>
@@ -1965,6 +2014,12 @@ PORTEPOCH= 1</programlisting>
</para>
</listitem>
+ <listitem>
+ <para>需要安装可加载内核模块的 port 应在其 <makevar>CATEGORIES</makevar>
+ 中归入虚拟分类 <filename>kld</filename>。
+ </para>
+ </listitem>
+
<listitem>
<para><filename>misc</filename>
分类的 port 不能有其它非虚拟的分类。
@@ -3495,10 +3550,21 @@ ${MANPREFIX}/man/de/man3/baz.3.gz</programlisting>
<sect1 id="makefile-info">
<title>Info 文件</title>
- <para>如果软件包需要安装 GNU 文件,
- 则需要在 <makevar>INFO</makevar> 变量中列出 (不需要指定
- <literal>.info</literal> 后缀), 这样安装/卸载代码就会自动地在注册包时将它们加入到
- <filename>pkg-plist</filename> 了。</para>
+ <para>如果软件包需要安装 GNU info 文件,
+ 则需要在 <makevar>INFO</makevar> 变量中一一列出 (不需要指定
+ <literal>.info</literal> 后缀)。 系统假定这些文件均会安装到
+ <filename><makevar>PREFIX</makevar>/<makevar>INFO_PATH</makevar></filename> 目录中。
+ 如果软件包有需要, 也可以通过修改 <makevar>INFO_PATH</makevar> 来指定不同的位置。
+ 不过, 并不推荐这样做。 所有列出的项目均是相对于
+ <filename><makevar>PREFIX</makevar>/<makevar>INFO_PATH</makevar></filename> 的文件路径。
+ 例如, <filename role="package">lang/gcc33</filename> 表示将
+ info 文件安装到
+ <filename><makevar>PREFIX</makevar>/<makevar>INFO_PATH</makevar>/gcc33</filename>,
+ 因此 <makevar>INFO</makevar> 应写成类似这样:
+ <programlisting>INFO= gcc33/cpp gcc33/cppinternals gcc33/g77 ...
+</programlisting>
+ 这样安装/卸载代码就会自动地在注册包之前将它们加入到临时的
+ <filename>pkg-plist</filename> 中了。</para>
</sect1>
<sect1 id="makefile-options">
@@ -3512,7 +3578,7 @@ ${MANPREFIX}/man/de/man3/baz.3.gz</programlisting>
支持这些特性可以让用户体验更好, 并达到事半功倍的效果。</para>
<sect2>
- <title>开关 (<makevar>KNOBS</makevar>)</title>
+ <title>开关 (Knobs)</title>
<sect3>
<title><makevar>WITH_<replaceable>*</replaceable></makevar> 和
@@ -3680,6 +3746,7 @@ ${MANPREFIX}/man/de/man3/baz.3.gz</programlisting>
而 <makevar>WITH_*</makevar> 和 <makevar>WITHOUT_*</makevar>
只有在引用了
<filename>bsd.port.pre.mk</filename> 之后才能开始检测。</para>
+ </sect3>
<sect3>
<title>例子</title>
@@ -3702,6 +3769,7 @@ RUN_DEPENDS+= bar:${PORTSDIR}/bar/bar
.include &lt;bsd.port.post.mk&gt;</programlisting></para>
</example>
+ </sect3>
</sect2>
@@ -3939,20 +4007,37 @@ PORTVERSION= 1.0</programlisting>
</listitem>
<listitem>
+ <para><makevar>DATADIR_REL</makevar> 会展开成
+ <filename>share/<makevar>PORTNAME</makevar></filename>。</para>
+ </listitem>
+
+ <listitem>
<para><makevar>DOCSDIR</makevar> 会展开成
<filename><makevar>PREFIX</makevar>/share/doc/<makevar>PORTNAME</makevar></filename>。</para>
</listitem>
<listitem>
+ <para><makevar>DOCSDIR_REL</makevar> 会展开成
+ <filename>share/doc/<makevar>PORTNAME</makevar></filename>。</para>
+ </listitem>
+
+ <listitem>
<para><makevar>EXAMPLESDIR</makevar> 会展开成
<filename><makevar>PREFIX</makevar>/share/examples/<makevar>PORTNAME</makevar></filename>。</para>
</listitem>
+
+ <listitem>
+ <para><makevar>EXAMPLESDIR_REL</makevar> 会展开成
+ <filename>share/examples/<makevar>PORTNAME</makevar></filename>。</para>
+ </listitem>
</itemizedlist>
<note>
- <para><makevar>NOPORTDOCS</makevar> 只控制将要装到 <makevar>DOCSDIR</makevar>
- 的那些文档, 而不应影响标准的联机手册、 info 手册, 以及应装到
- <makevar>DATADIR</makevar>、 <makevar>EXAMPLESDIR</makevar> 的文件。</para>
+ <para><makevar>NOPORTDOCS</makevar> 只控制将要安装到 <makevar>DOCSDIR</makevar>
+ 的那些文档, 而不应影响标准的联机手册以及 info 手册的安装。 安装到
+ <makevar>DATADIR</makevar> 和 <makevar>EXAMPLESDIR</makevar>
+ 的文件则相应地受 <makevar>NOPORTDATA</makevar> 和
+ <makevar>NOPORTEXAMPLES</makevar> 控制。</para>
</note>
<para>这些变量也会被导出到 <makevar>PLIST_SUB</makevar> 中。
@@ -3963,7 +4048,7 @@ PORTVERSION= 1.0</programlisting>
(更多的 <filename>pkg-plist</filename> 代换可以在
<link linkend="plist-sub">这里</link> 找到。)</para>
- <para>所有的安装的文档文件和目录,
+ <para>所有非无条件安装的文档文件和目录,
都应在 <filename>pkg-plist</filename> 出现, 并且使用
<literal>%%PORTDOCS%%</literal> 前缀, 例如:</para>
@@ -3988,6 +4073,11 @@ PORTVERSION= 1.0</programlisting>
<programlisting>PORTDOCS= README.* ChangeLog docs/*</programlisting>
<note>
+ <para>与 <makevar>PORTDOCS</makevar> 类似,
+ 对应于 <makevar>DATADIR</makevar> 和
+ <makevar>EXAMPLESDIR</makevar> 的变量分别是 <makevar>PORTDATA</makevar>
+ 和 <makevar>PORTEXAMPLES</makevar>。</para>
+
<para>您也可以使用 <filename>pkg-message</filename> 这个文件,
来在安装时显示一些信息。 参见 <link
linkend="porting-message">关于使用
@@ -4253,6 +4343,8 @@ PORTVERSION= 1.0</programlisting>
<literal>GNU_CONFIGURE=yes</literal>。
如果希望传额外的参数给 <command>configure</command> 脚本
(默认参数为 <literal>--prefix=&dollar;{PREFIX}
+ --infodir=&dollar;{PREFIX}/&dollar;{INFO_PATH}
+ --mandir=&dollar;{MANPREFIX}/man
&dollar;{CONFIGURE_TARGET}</literal>),
应通过 <makevar>CONFIGURE_ARGS</makevar> 来指定这些参数。
类似地, 可以通过
@@ -4410,12 +4502,10 @@ PORTVERSION= 1.0</programlisting>
<para>可以同时指定多个不同的工具, 可以在一行中指定, 也可以用
Makefile 的 <literal>+=</literal> 结构。</para>
- <para>在开始介绍其它工具之前, 需要强调的是, 这些结构只能用于构建 port。
- 如果希望进行跨平台的开发, 例如在 IDE 中, 则应使用
- <literal>devel/gnu-{automake,autoconf,libtool}</literal> 这些 port。 <filename
- role="package">devel/anjuta</filename> 以及 <filename
- role="package">devel/kdevelop</filename> (分别对应于 GNOME 和 KDE)
- 是关于如何做到这一点的良好范例。</para>
+ <para>最后, 可以使用一个特殊的名为
+ <literal>autotools</literal> 的工具,
+ 它会安装全部可用的 autotools 版本,
+ 以适应跨平台开发的需要。 您可以通过安装 <literal>devel/autotools</literal> port 来达到这一目的。</para>
</sect2>
@@ -4442,39 +4532,6 @@ PORTVERSION= 1.0</programlisting>
<para>如果指定了 <literal>:env</literal> 操作符, 则表示只设置环境,
而跳过其他的操作。</para>
- <informaltable frame="none">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>先前的写法</entry>
-
- <entry>新的 <makevar>USE_AUTOTOOLS</makevar> 结构</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><literal>USE_LIBTOOL_VER=15</literal></entry>
-
- <entry><literal>libtool:15</literal></entry>
- </row>
-
- <row>
- <entry><literal>USE_INC_LIBTOOL_VER=15</literal></entry>
-
- <entry>已不再使用</entry>
- </row>
-
- <row>
- <entry><literal>WANT_LIBTOOL_VER=15</literal></entry>
-
- <entry><literal>libtool:15:env</literal></entry>
- </row>
-
- </tbody>
- </tgroup>
- </informaltable>
-
<para>最后, <makevar>LIBTOOLFLAGS</makevar> 和
<makevar>LIBTOOLFILES</makevar> 可以用来替换最常修改的参数, 以及将被
<command>libtool</command> 修补的文件。 多数 port 不需要这样做。
@@ -4498,27 +4555,6 @@ PORTVERSION= 1.0</programlisting>
协助开发人员消除在 <makevar>USE_AUTOTOOLS</makevar> 框架以外的,
对于 autotools port 的依赖。 这个工具并不提供其它的操作符。</para>
- <informaltable frame="none">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>先前的写法</entry>
-
- <entry>新的 <makevar>USE_AUTOTOOLS</makevar> 结构</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><literal>USE_LIBLTDL=YES</literal></entry>
-
- <entry><literal>libltdl:15</literal></entry>
- </row>
-
- </tbody>
- </tgroup>
- </informaltable>
-
</sect2>
<sect2 id="using-autoconf">
@@ -4546,40 +4582,6 @@ PORTVERSION= 1.0</programlisting>
则表示只设置用于后续工作的环境。 如果不指定,
则会对 port 进行相应的修补和重新配置。</para>
- <informaltable frame="none">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>先前的写法</entry>
-
- <entry>新的 <makevar>USE_AUTOTOOLS</makevar> 结构</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><literal>USE_AUTOCONF_VER=213</literal></entry>
-
- <entry><literal>autoconf:213</literal></entry>
- </row>
-
- <row>
- <entry><literal>WANT_AUTOCONF_VER=259</literal></entry>
-
- <entry><literal>autoconf:259:env</literal></entry>
- </row>
-
- <row>
- <entry><literal>USE_AUTOHEADER_VER=253</literal></entry>
-
- <entry><literal>autoheader:253</literal> (implies
- <literal>autoconf:253</literal>)</entry>
- </row>
-
- </tbody>
- </tgroup>
- </informaltable>
-
<para>其它的可选变量, 如
<makevar>AUTOCONF_ARGS</makevar> 和
<makevar>AUTOHEADER_ARGS</makevar> 可以通过 port 的
@@ -4625,42 +4627,8 @@ PORTVERSION= 1.0</programlisting>
<literal>:env</literal> 操作符表示仅仅设置用于后续使用的环境,
如果不设置, 则会对 port 进行重新配置。</para>
- <informaltable frame="none">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>先前的写法</entry>
-
- <entry><makevar>USE_AUTOTOOLS</makevar> construct</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><literal>USE_AUTOMAKE_VER=14</literal></entry>
-
- <entry><literal>automake:14</literal></entry>
- </row>
-
- <row>
- <entry><literal>WANT_AUTOMAKE_VER=15</literal></entry>
-
- <entry><literal>automake:15:env</literal></entry>
- </row>
-
- <row>
- <entry><literal>USE_ACLOCAL_VER=19</literal></entry>
-
- <entry><literal>aclocal:19</literal> (implies
- <literal>automake:19</literal>)</entry>
- </row>
-
- </tbody>
- </tgroup>
- </informaltable>
-
- <para>As with
- <command>autoconf</command> 和 <command>autoheader</command>、
+ <para>对于
+ <command>autoconf</command> 和 <command>autoheader</command> 而言,
<command>automake</command> 和 <command>aclocal</command>
提供了对应的可选参数变量 <makevar>AUTOMAKE_ARGS</makevar> 和
<makevar>ACLOCAL_ARGS</makevar>, 如果需要的话,
@@ -4779,6 +4747,15 @@ PLIST_SUB+= NLS="@comment "
<para>以上规则有一个例外, 即对应目录不存在或源码包不在那个目录中时, 允许使用作者的 id 作为
<makevar>MASTER_SITE_SUBDIR</makevar>。</para>
+ <para>所有这些选项均同时接受 <literal>YES</literal>
+ 和版本串, 类似 <literal>5.8.0+</literal> 这样的写法。 使用
+ <literal>YES</literal> 表示 port 能够配合所有受支持的 <application>Perl</application> 版本来使用。
+ 如果 port 只能配合特定版本的 <application>Perl</application> 来使用,
+ 则可以用版本串来表示, 例如最低版本
+ (如 <literal>5.7.3+</literal>)、 最高版本 (如
+ <literal>5.8.0-</literal>) 或某个具体的版本 (如
+ <literal>5.8.3</literal>)。</para>
+
<table frame="none">
<title>用于用到 <literal>perl</literal> 的 port 的变量</title>
@@ -4903,7 +4880,44 @@ PLIST_SUB+= NLS="@comment "
<title>使用 X11</title>
<sect2 id="x11-variables">
- <title>变量定义</title>
+ <title>X.Org 组件</title>
+
+ <para>在 Ports 套件中提供的 X11 实现是 X.Org。
+ 如果您的应用程序用到了 X 组件, 则应将
+ <makevar>USE_XORG</makevar> 设为所需要的那些组件。
+ 目前可用的组件包括:</para>
+
+ <para><literal>bigreqsproto compositeproto damageproto dmx dmxproto
+ evieproto fixesproto fontcacheproto fontenc fontsproto fontutil
+ glproto ice inputproto kbproto libfs oldx printproto randrproto
+ recordproto renderproto resourceproto scrnsaverproto sm trapproto
+ videoproto x11 xau xaw xaw6 xaw7 xaw8 xbitmaps xcmiscproto xcomposite
+ xcursor xdamage xdmcp xevie xext xextproto xf86bigfontproto
+ xf86dgaproto xf86driproto xf86miscproto xf86rushproto
+ xf86vidmodeproto xfixes xfont xfontcache xft xi xinerama
+ xineramaproto xkbfile xkbui xmu xmuu xorg-server xp xpm xprintapputil
+ xprintutil xpr oto xproxymngproto xrandr xrender xres xscrnsaver xt
+ xtrans xtrap xtst xv xvmc xxf86dga xxf86misc xxf86vm</literal>.</para>
+
+ <para>最新的列表, 可以在
+ <filename>/usr/ports/Mk/bsd.xorg.mk</filename> 中找到。</para>
+
+ <para>The Mesa Project 是一个致力于自由的 OpenGL
+ 实现的计划。 您可以使用 <makevar>USE_GL</makevar> 变量来让 port 依赖其不同的组件。
+ 可用的选项包括: <literal>glut, glu, glw, gl</literal> 和
+ <literal>linux</literal>。 为了实现向前兼容,
+ 当使用 <literal>yes</literal> 时系统会自动将其映射为 <literal>glu</literal>。</para>
+
+ <example id="use-xorg-example">
+ <title>使用 USE_XORG 的例子</title>
+ <programlisting>USE_XORG= xrender xft xkbfile xt xaw
+USE_GL= glu</programlisting>
+ </example>
+
+ <para>许多 ports 会定义 <makevar>USE_XLIB</makevar>,
+ 这会导致 port 依赖 50 多个动态连接库。 由于它出现于 X.org
+ 模块化之前, 因此这个变量仅为向前兼容的原因提供,
+ 新的 port 不应再使用它。</para>
<table frame="none">
<title>用到 X 的 port 可以使用的变量</title>
@@ -4911,29 +4925,23 @@ PLIST_SUB+= NLS="@comment "
<tgroup cols="2">
<tbody>
<row>
- <entry><makevar>USE_X_PREFIX</makevar></entry>
-
- <entry>此 port 将文件安装到 <makevar>X11BASE_REL</makevar> 而非通常的
- <makevar>PREFIX</makevar>。</entry>
- </row>
-
- <row>
<entry><makevar>USE_XLIB</makevar></entry>
- <entry>此 port 用到了 X 库。</entry>
+ <entry>此 port 用到了 X 库。 已过时 - 您应使用 <makevar>USE_XORG</makevar> 变量列出用到的
+ X.Org 组件, 而不是使用这个变量。</entry>
</row>
<row>
- <entry><makevar>USE_MOTIF</makevar></entry>
+ <entry><makevar>USE_IMAKE</makevar></entry>
- <entry>此 port 使用 Motif 工具包。</entry>
+ <entry>此 port 用到了 <command>imake</command>。</entry>
</row>
<row>
- <entry><makevar>USE_IMAKE</makevar></entry>
+ <entry><makevar>USE_X_PREFIX</makevar></entry>
- <entry>此 port 用到了 <command>imake</command>。 这一变量也会自动设置
- <makevar>USE_X_PREFIX</makevar>。</entry>
+ <entry>已过时。 目前其作用与
+ <makevar>USE_XLIB</makevar> 相同, 并可以直接用后者替换。</entry>
</row>
<row>
@@ -5121,10 +5129,7 @@ USE_XLIB= yes</programlisting>
通过下面的官方 hack, 预编译包构建集群将启动采用虚拟帧缓存的
X server。 这样, 编译过程将有可用的 <envar>DISPLAY</envar>。</para>
- <programlisting>.if defined(PACKAGE_BUILDING)
-BUILD_DEPENDS+= Xvfb:${X_VFBSERVER_PORT} \
- ${X11BASE}/lib/X11/fonts/misc/8x13O.pcf.gz:${X_FONTS_MISC_PORT}
-.endif</programlisting>
+ <programlisting>USE_DISPLAY= yes</programlisting>
</sect2>
@@ -5328,11 +5333,17 @@ MAKE_ENV+= QMAKESPEC="${QMAKESPEC}"</programlisting>
<sect2 id="qt4-components">
<title>组件的选择 (仅限 Qt 4.x)</title>
- <para>当 <makevar>USE_QT_VER</makevar> 设为 4 时, 可以通过
- <makevar>QT_COMPONENTS</makevar> 变量来指定
- Qt4 工具和函数库。 下表中列出了最重要的一些组件 (全部组件可以在
- <filename>/usr/ports/Mk/bsd.kde.mk</filename> 中的
- <makevar>_QT_COMPONENTS_ALL</makevar> 变量中找到):</para>
+ <para>当把 <makevar>USE_QT_VER</makevar> 设为 4 时, 就可以通过
+ <makevar>QT_COMPONENTS</makevar> 变量来指定对
+ Qt4 工具和函数库的依赖了。 通过在组件的名称后面添加 <literal>_build</literal> 或 <literal>_run</literal>
+ 这样的后缀, 则可相应地将这依赖关系限于联编或运行时刻。
+ 在没有指定后缀时, 系统默认在联编和运行时刻均依赖该组件。
+ 通常情况下在指明函数库一类的组件时应不使用后缀,
+ 联编工具类组件应使用 <literal>_build</literal> 后缀,
+ 而插件类组件, 则应使用 <literal>_run</literal> 后缀。
+ 下表中列出了一些最常用的组件 (全部可用的组件, 则在
+ <filename>/usr/ports/Mk/bsd.qt.mk</filename>
+ 中的 <makevar>_QT_COMPONENTS_ALL</makevar> 列出):</para>
<table frame="none">
<title>可用的 Qt4 函数库组件</title>
@@ -5377,6 +5388,11 @@ MAKE_ENV+= QMAKESPEC="${QMAKESPEC}"</programlisting>
</row>
<row>
+ <entry><literal>script</literal></entry>
+ <entry>脚本函数库</entry>
+ </row>
+
+ <row>
<entry><literal>sql</literal></entry>
<entry>SQL 函数库</entry>
</row>
@@ -5407,24 +5423,26 @@ MAKE_ENV+= QMAKESPEC="${QMAKESPEC}"</programlisting>
<tbody>
<row>
<entry><literal>moc</literal></entry>
- <entry>元对象编译器 (几乎所有的 Qt 应用程序都需要这个)</entry>
+ <entry>元对象编译器 (几乎所有的 Qt 应用程序在联编过程中都需要它)</entry>
</row>
<row>
<entry><literal>qmake</literal></entry>
- <entry>用于 Qt 工程的联编工具</entry>
+ <entry>Makefile 生成器 / 联编工具</entry>
</row>
<row>
<entry><literal>rcc</literal></entry>
<entry>资源编译器 (如果应用程序中包含
<filename>*.rc</filename> 或 <filename>*.qrc</filename>
- 文件)</entry>
+ 文件, 就需要它)</entry>
</row>
<row>
<entry><literal>uic</literal></entry>
- <entry>用户界面编译器 (如果应用程序用到了 GUI)</entry>
+ <entry>用户界面编译器 (如果应用程序中包含使用 Qt Designer
+ 创建的 <filename>*.ui</filename> 文件时就需要它
+ - 一般说来 Qt 应用程序都会使用 GUI 的)</entry>
</row>
</tbody>
@@ -5461,12 +5479,17 @@ MAKE_ENV+= QMAKESPEC="${QMAKESPEC}"</programlisting>
<example id="qt4-components-example">
<title>选择 Qt4 组件</title>
- <para>下面是 port
- <filename role="package">editors/texmaker</filename> 中的一个片段,
- 它用到了 Qt4 图形用户界面函数库 (这时会默认使用核心函数库) 及联编工具:</para>
+ <para>在这个例子中, 我们将要移植的应用程序用到了
+ Qt4 图形用户界面函数库、 Qt4 核心 (core) 函数库、
+ 所有 Qt4 代码生成工具以及 Qt4 的
+ Makefile 生成器。 由于 gui 函数库会自动附带对核心函数库的依赖,
+ 因此并不需要明确指出需要 corelib 的依赖关系。 Qt4 代码生成工具 moc、
+ uic 和 rcc 以及 Makefile 生成器
+ qmake 只在联编过程中才会用到,
+ 因此可以指定 <literal>_build</literal> 后缀:</para>
<programlisting>USE_QT_VER= 4
-QT_COMPONENTS= gui moc qmake rcc uic</programlisting>
+QT_COMPONENTS= gui moc_build qmake_build rcc_build uic_build</programlisting>
</example>
</sect2>
@@ -5515,21 +5538,6 @@ do-configure:
</listitem>
</itemizedlist>
- <note>
- <para>目前, <filename>bsd.kde.mk</filename> 还不支持 pre/postmk,
- 也就是说, 在使用了 <filename>bsd.port.pre.mk</filename> 之后, 就不能再指定
- <makevar>USE_QT_VER</makevar> 和 <makevar>QT_COMPONENTS</makevar>
- 了。 如果您的 port 需要这样做, 请以传统方式编写依赖关系, 例如:</para>
-
- <programlisting>.include &lt;bsd.port.pre.mk&gt;
-
-.if defined(WITH_QT)
-BUILD_DEPENDS+= moc4:${PORTSDIR}/devel/qt4-moc
-LIB_DEPENDS+= QtCore:${PORTSDIR}/devel/qt4-corelib
-.endif
-
-.include &lt;bsd.port.post.mk&gt;</programlisting>
- </note>
</sect2>
</sect1>
@@ -6022,7 +6030,10 @@ LIB_DEPENDS+= QtCore:${PORTSDIR}/devel/qt4-corelib
<filename><makevar>PREFIX</makevar>/www/<replaceable>应用程序的名字</replaceable></filename>。
为方便起见, 这个路径在
<filename>Makefile</filename> 和 <filename>pkg-plist</filename>
- 均以 <makevar>WWWDIR</makevar> 变量的形式提供。</para>
+ 均以 <makevar>WWWDIR</makevar> 变量的形式提供。 在
+ <filename>Makefile</filename> 中可以使用
+ <makevar>WWWDIR_REL</makevar> 来表示包含了
+ <makevar>PREFIX</makevar> 的该变量值。</para>
<para>web 服务器进程所用的用户和用户组, 分别以
<makevar>WWWOWN</makevar> 和 <makevar>WWWGRP</makevar> 变量的形式提供,
@@ -6704,6 +6715,7 @@ USE_SDL+= mixer
</tbody>
</tgroup>
</table>
+ </sect2>
<sect2 id="wx-components">
<title>选择组件</title>
@@ -7805,6 +7817,10 @@ run_rc_command "$1"</programlisting>
<filename>Makefile</filename> 中使用。 最新版本的 &os; 并不为脚本名增加任何后缀,
但较早的版本则曾使用过
<filename>.sh</filename> 后缀。</para>
+ <note>
+ <para>新增的脚本均不应使用 <filename>.sh</filename>
+ 后缀。 未来, 仍然包含这一后缀的脚本将被批量改名。</para>
+ </note>
<sect2>
<title>卸载时停止服务</title>
@@ -8377,15 +8393,17 @@ as .putsy.conf and edit it.</programlisting>
实际上, port 会安装到
<makevar>DESTDIR</makevar>/<makevar>PREFIX</makevar>,
并注册到位于 <makevar>DESTDIR</makevar>/var/db/pkg
- 的预编译包数据库中。 在撰写 port 时, 遵循
- <makevar>DESTDIR</makevar> 的配置十分重要。</para>
+ 的预编译包数据库中。 由于 <makevar>DESTDIR</makevar> 是由
+ ports 框架藉由 &man.chroot.8; 来实现的, 您在撰写符合
+ <makevar>DESTDIR</makevar> 规范的 ports 时并不需要什么额外的工作。</para>
<para>一般而言 <makevar>PREFIX</makevar> 会设为
<makevar>LOCALBASE_REL</makevar> (默认是
<filename>/usr/local</filename>)。 如果设置了
<makevar>USE_X_PREFIX</makevar> 或 <makevar>USE_IMAKE</makevar>,
- 则 <makevar>PREFIX</makevar> 会设为 <makevar>X11BASE_REL</makevar> (默认是
- <filename>/usr/X11R6</filename>)。 如果设置了
+ 则 <makevar>PREFIX</makevar> 会设为 <makevar>X11BASE</makevar>
+ (为了向前兼容, 这个变量的默认值是 <makevar>LOCALBASE</makevar>,
+ 未来它将被删除)。 如果设置了
<makevar>USE_LINUX_PREFIX</makevar>, 则 <makevar>PREFIX</makevar>
会设为 <makevar>LINUXBASE_REL</makevar> (默认是
<filename>/compat/linux</filename>)。</para>
@@ -8435,47 +8453,6 @@ as .putsy.conf and edit it.</programlisting>
<literal>-DPAGER=\"/usr/local/bin/less\"</literal>。
这种方法能够增加在系统管理员把整个 <filename>/usr/local</filename>
目录挪到其它位置时安装成功的机会。</para>
-
- <para>请注意 <makevar>LOCALBASE</makevar>、
- <makevar>LINUXBASE</makevar>、 <makevar>X11BASE</makevar>、
- <makevar>DOCSDIR</makevar>、 <makevar>EXAMPLESDIR</makevar>、
- <makevar>DATADIR</makevar> 以及 <makevar>DESKTOPDIR</makevar>
- 这些变量中已经包含了 <makevar>DESTDIR</makevar>。 使用
- <makevar>DESTDIR</makevar>&nbsp;<makevar>LOCALBASE</makevar>
- 是错误的。 在您需要相对于 <makevar>DESTDIR</makevar> 的路径时,
- 应使用 <makevar>LOCALBASE_REL</makevar>、
- <makevar>LINUXBASE_REL</makevar> 和 <makevar>X11BASE_REL</makevar>。
- 为了使脚本撰写过程不过分地繁琐, 可以用 <makevar>TARGETDIR</makevar>
- 来代替 <makevar>DESTDIR</makevar>&nbsp;<makevar>PREFIX</makevar>。</para>
-
- <para>以下是一些正确的用法:</para>
-
- <programlisting>post-install:
- ${INSTALL_PROGRAM} ${WRKSRC}/helper ${TARGETDIR}/bin/helper
- ${INSTALL_DATA} ${WRKSRC}/guide.txt ${DOCSDIR}</programlisting>
-
- <para>在引用 port 的依赖关系时, 会用到
- <makevar>LOCALBASE</makevar>, 因为我们正在目标环境中进行工作。
- 如果必须在软件中将路径硬编码进去,
- 则应使用 <makevar>LOCALBASE_REL</makevar> 的值,
- 因为这些软件会在目标环境内使用。</para>
-
- <para>以下是一些正确的用法:</para>
-
- <programlisting>RUN_DEPENDS= ${LOCALBASE}/share/gonzo/launch.dat:${PORTSDIR}/games/gonzo
-
-post-patch:
- @${REINPLACE_CMD} -e 's|/usr/gonzo/launch.dat|${LOCALBASE_REL}/share/gonzo/launch.dat}' ${WRKSRC}/main.c
- @${REINPLACE_CMD} -e 's|/etc/game.conf|${PREFIX}/etc/game.conf|' ${WRKSRC}/loader.c
-
-post-install:
- @${INSTALL_DATA} ${WRKSRC}/example/conf ${TARGETDIR}/etc/game.conf</programlisting>
-
- <para>在装箱单和 <filename>pkg-*</filename> 脚本中,
- <literal>%%LOCALBASE%%</literal>、 <literal>%%LINUXBASE%%</literal>
- 和 <literal>%%X11BASE%%</literal> 在扩展时,
- 会自动剔除 <makevar>DESTDIR</makevar>,
- 因为这些文件都会在目标环境中使用。</para>
</sect1>
<sect1 id="testing-tinderbox">
@@ -8548,7 +8525,7 @@ post-install:
而这正是最需要志愿人员的领域。
(要了解关于维护者的任务描述, 请参见
<ulink url="&url.books.developers-handbook;/policies.html#POLICIES-MAINTAINER">
- Makefile 中的 MAINTAINER</ulink> 小节)。</para>
+ 开发手册中的相关部分</ulink>。)</para>
<para>将 diff 发送给我们的最佳方式是通过 &man.send-pr.1; (category 一栏写
<literal>ports</literal>)。 如果您正维护那个 port,
@@ -10562,6 +10539,11 @@ Reference: &lt;http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-00
<entry>601104</entry>
</row>
<row>
+ <entry>由于 802.11 修正变动了 IEEE80211_IOC_STA_INFO ioctl API
+ 之后的 6.1-STABLE。</entry>
+ <entry>601104</entry>
+ </row>
+ <row>
<entry>6.2-RELEASE</entry>
<entry>602000</entry>
</row>
@@ -10611,6 +10593,20 @@ Reference: &lt;http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-00
<entry>602109</entry>
</row>
<row>
+ <entry>MFC 了用于 amd64 和 i386 的 pmap_invalidate_cache()、
+ pmap_change_attr()、 pmap_mapbios()、 pmap_mapdev_attr()、
+ and pmap_unmapbios() 之后的 6.2-STABLE。</entry>
+ <entry>602110</entry>
+ </row>
+ <row>
+ <entry>由于 MFC 了 BOP_BDFLUSH 导致文件系统模块 KBI
+ 变化之后的 6.2-STABLE。</entry>
+ <entry>602111</entry>
+ <row>
+ <entry>一系列 libutil(3) MFC 之后的 6.2-STABLE。</entry>
+ <entry>602112</entry>
+ </row>
+ <row>
<entry>7.0-CURRENT。</entry>
<entry>700000</entry>
</row>
@@ -10620,7 +10616,7 @@ Reference: &lt;http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-00
<entry>700001</entry>
</row>
<row>
- <entry>为 dev_clone 处理出口函数中增加身份信息参数之后的
+ <entry>为 dev_clone 事件处理函数中增加身份信息参数之后的
7.0-CURRENT。</entry>
<entry>700002</entry>
</row>
@@ -10772,7 +10768,7 @@ Reference: &lt;http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-00
</row>
<row>
<entry>修改了 insmntque()、
- getnewvnode() 以及 vfs_hash_insert() 工作方式之后的 7.0-CURRENT。
+ getnewvnode() 以及 vfs_hash_insert() 工作方式之后的 7.0-CURRENT。
</entry>
<entry>700034</entry>
</row>
@@ -10787,9 +10783,85 @@ Reference: &lt;http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-00
</row>
<row>
<entry>新增了实现 Linux SCSI SG 直通设备 API 子集的 CAM 'SG'
- 设备之后的 7.0-CURRENT。</entry>
+ 设备之后的 7.0-CURRENT。</entry>
<entry>700037</entry>
</row>
+ <row>
+ <entry>将 &man.getenv.3;、 &man.putenv.3;、
+ &man.setenv.3; 和 &man.unsetenv.3; 改为符合 POSIX
+ 之后的 7.0-CURRENT。</entry>
+ <entry>700038</entry>
+ </row>
+ <row>
+ <entry>回退了 700038 中的变动之后的 7.0-CURRENT。</entry>
+ <entry>700039</entry>
+ </row>
+ <row>
+ <entry>在 libutil 中增加了 &man.flopen.3; 之后的 7.0-CURRENT。</entry>
+ <entry>700040</entry>
+ </row>
+ <row>
+ <entry>启用了符号版本, 并将 libthr 改为默认线程库之后的 7.0-CURRENT。</entry>
+ <entry>700041</entry>
+ </row>
+ <row>
+ <entry>引入了 gcc 4.2.0 之后的 7.0-CURRENT。</entry>
+ <entry>700042</entry>
+ </row>
+ <row>
+ <entry>将 RELENG_6 之后未修改过版本的共享库版本增加之后的 7.0-CURRENT。</entry>
+ <entry>700043</entry>
+ </row>
+ <row>
+ <entry>将 vn_open()/VOP_OPEN() 的参数由文件描述符数组下标改为
+ struct file * 之后的 7.0-CURRENT。</entry>
+ <entry>700044</entry>
+ </row>
+ <row>
+ <entry>修改 &man.pam.nologin.8; 使其向 PAM
+ 框架提供帐号管理功能而非身份验证功能之后的 7.0-CURRENT。</entry>
+ <entry>700045</entry>
+ </row>
+ <row>
+ <entry>更新 802.11 无线支持之后的 7.0-CURRENT。</entry>
+ <entry>700046</entry>
+ </row>
+ <row>
+ <entry>增加 TCP LRO 网络接口能力之后的 7.0-CURRENT。</entry>
+ <entry>700047</entry>
+ </row>
+ <row>
+ <entry>在 IPv4 协议栈中加入了 RFC 3678 API 支持之后的 7.0-CURRENT。
+ 先前 IP_MULTICAST_IF ioctl 的 RFC 1724 行为被删去;
+ 0.0.0.0/8 不再能够用于指定接口索引下标, 而应使用
+ struct ipmreqn 代替。</entry>
+ <entry>700048</entry>
+ </row>
+ <row>
+ <entry>引入 OpenBSD
+ 4.1 的 pf 之后的 7.0-CURRENT。</entry>
+ <entry>700049</entry>
+ </row>
+ <row>
+ <entry>为
+ FAST_IPSEC 增加 IPv6 支持, 删去 KAME IPSEC, 并将
+ FAST_IPSEC 更名为 IPSEC 之后的 7.0-CURRENT。</entry>
+ <entry>(未变动)</entry>
+ </row>
+ <row>
+ <entry>将 setenv/putenv/等等调用,
+ 从传统 BSD 改为 POSIX 标准之后的 7.0-CURRENT。</entry>
+ <entry>700050</entry>
+ </row>
+ <row>
+ <entry>增加新的 mmap/lseek/等等这些系统调用之后的 7.0-CURRENT。</entry>
+ <entry>700051</entry>
+ </row>
+ <row>
+ <entry>将 I4B 头文件移动到
+ include/i4b 之后的 7.0-CURRENT。</entry>
+ <entry>700052</entry>
+ </row>
</tbody>
</tgroup>