aboutsummaryrefslogtreecommitdiff
path: root/zh_CN.GB2312/books/porters-handbook/book.sgml
diff options
context:
space:
mode:
Diffstat (limited to 'zh_CN.GB2312/books/porters-handbook/book.sgml')
-rw-r--r--zh_CN.GB2312/books/porters-handbook/book.sgml934
1 files changed, 741 insertions, 193 deletions
diff --git a/zh_CN.GB2312/books/porters-handbook/book.sgml b/zh_CN.GB2312/books/porters-handbook/book.sgml
index 2d101c94c1..1e36a5c006 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.996
+ Original Revision: 1.1052
$FreeBSD$
-->
@@ -32,6 +32,7 @@
<year>2007</year>
<year>2008</year>
<year>2009</year>
+ <year>2010</year>
<holder role="mailto:doc@FreeBSD.org">The FreeBSD Documentation
Project</holder>
</copyright>
@@ -48,6 +49,8 @@
<year>2006</year>
<year>2007</year>
<year>2008</year>
+ <year>2009</year>
+ <year>2010</year>
<holder>&cnproj.freebsd.org;</holder>
</copyright>
@@ -268,7 +271,7 @@ PLIST_DIRS= lib/X11/oneko</programlisting>
<para>如果下载的文件的校验和经常变化,
而您又能确保它们的来源可靠 (比如, 来自于CD制造商,
- 或每天构建生成的文档文件), 就应该在 <makevar>IGNOREFILES</makevar>
+ 或每天联编生成的文档文件), 就应该在 <makevar>IGNOREFILES</makevar>
里面标明这些文件。 这样, 再运行
<command>make makesum</command> 的时候便不会把这些标记
<literal>IGNORE</literal> 的文件计算在内了。
@@ -1112,7 +1115,7 @@ PORTEPOCH= 1</programlisting>
<listitem>
<para>如果 port 可以使用不同的 <link
linkend="makefile-masterdir">硬编码默认配置</link>
- 进行构建 (通常是一系列 port 的一部分目录名), 则
+ 进行联编 (通常是一系列 port 的一部分目录名), 则
<replaceable>-compiled.specifics</replaceable>
部分就应该明示编译进去的默认值 (此处连字号是可选的)。
通常的用例包括纸型和不同的字体尺寸。</para>
@@ -1575,12 +1578,11 @@ PORTEPOCH= 1</programlisting>
<row>
<entry><filename>java</filename></entry>
- <entry>有关 Java 编程语言的软件。</entry>
- <entry><filename>java</filename> 分类对于一个
- port 来说并不是唯一的分类。
- 最好用来放和 Java 语言相关的 port,
- 而且我们鼓励不要把 <filename>java</filename>
- 做为一个 port 的主分类。</entry>
+ <entry>与 Java&trade; 编程语言有关的软件。</entry>
+ <entry><filename>java</filename> 分类对 port 而言不应是其唯一的分类。
+ 除了直接与 Java 语言相关的 port 之外,
+ 开发人员应尽量避免使用 <filename>java</filename> 作为
+ port 的主分类。</entry>
</row>
<row>
@@ -2077,7 +2079,7 @@ PORTEPOCH= 1</programlisting>
<step>
<para>由于这是一项影响 ports 基础设施的变动,
它不仅涉及 repo-copy 的使用,
- 而且也可能会影响构建集群的衰退测试操作,
+ 而且也可能会影响联编集群的回归测试操作,
因此这类 PR 应分派给 &a.portmgr;。</para>
</step>
@@ -2108,7 +2110,7 @@ PORTEPOCH= 1</programlisting>
<sect1 id="makefile-distfiles">
<title>源码包文件</title>
- <para>在 <filename>Makefile</filename> 中的第二部分是描述用于构建 port
+ <para>在 <filename>Makefile</filename> 中的第二部分是描述用于联编 port
所必需下载的文件, 以及到什么地方去下载它们。</para>
<sect2>
@@ -2947,7 +2949,7 @@ PATCHFILES= patch1:test</programlisting>
<para>如果您的 port 采用的是预编译的包,
但却采用了某种要求源代码必须与预编译版本一同提供的授权,
例如 GPL, 则应使用 <makevar>ALWAYS_KEEP_DISTFILES</makevar>
- 来告诉 &os; 构建集群保留一份在 <makevar>DISTFILES</makevar>
+ 来告诉 &os; 联编集群保留一份在 <makevar>DISTFILES</makevar>
中文件的副本。 一般来说这些 port 的用户并不需要这些文件,
因此, 只在定义了
<makevar>PACKAGE_BUILDING</makevar> 符的时候,
@@ -3038,13 +3040,13 @@ ALWAYS_KEEP_DISTFILES= yes
<para>这个变量用于指定 port 所依赖的共享库。 其内容是由一系列
<replaceable>lib</replaceable>:<replaceable>dir</replaceable><optional><replaceable>:target</replaceable></optional>
元组构成的表, 其中 <replaceable>lib</replaceable> 是共享库的名字,
- 而 <replaceable>dir</replaceable> 则是在找不到时应该从哪里构建和安装,
+ 而 <replaceable>dir</replaceable> 则是在找不到时应该从哪里联编和安装,
最后, <replaceable>target</replaceable> 用于指定在那个目录中调用的
target。 例如,
<programlisting>LIB_DEPENDS= jpeg.9:${PORTSDIR}/graphics/jpeg</programlisting>
会检测主版本号为 9 的 jpeg 共享库, 如果它不存在,
则会进入到您的 ports 目录中的 <filename>graphics/jpeg</filename>
- 子目录, 并构建和安装它。 如果您指定的 <replaceable>target</replaceable>
+ 子目录, 并联编和安装它。 如果您指定的 <replaceable>target</replaceable>
就是 <makevar>DEPENDS_TARGET</makevar> (默认是
<literal>install</literal>), 则可以略去不写。</para>
@@ -3076,7 +3078,7 @@ ALWAYS_KEEP_DISTFILES= yes
<replaceable>path</replaceable>:<replaceable>dir</replaceable><optional><replaceable>:target</replaceable></optional>
元组的列表, 这里, <replaceable>path</replaceable> 时所需的可执行,
或者资源文件的名字, <replaceable>dir</replaceable> 是在无法找到这些文件或目录时,
- 去什么地方完成构建和安装以便获得这些文件; 而
+ 去什么地方完成联编和安装以便获得这些文件; 而
<replaceable>target</replaceable> 则用来指定在这个目录中所调用的
target 的名字。 假如 <replaceable>path</replaceable> 以斜线
(<literal>/</literal>) 开始, 则会当作普通文件,
@@ -3096,7 +3098,7 @@ ALWAYS_KEEP_DISTFILES= yes
系统也会检查是否能够在搜索路径中找到名为 <command>xmlcatmgr</command>
的文件, 如果找不到的话, 则会进入 ports 目录中的
<filename>textproc/xmlcatmgr</filename> 子目录,
- 并进行构建和安装的操作。</para>
+ 并进行联编和安装的操作。</para>
<note>
<para>这种情况下, <command>innd</command> 实际上是一个可执行文件;
@@ -3104,7 +3106,7 @@ ALWAYS_KEEP_DISTFILES= yes
</note>
<note>
- <para>ports 构建集群上官方的搜索 <envar>PATH</envar> 是</para>
+ <para>ports 联编集群上官方的搜索 <envar>PATH</envar> 是</para>
<programlisting>/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/X11R6/bin</programlisting>
</note>
@@ -3119,16 +3121,16 @@ ALWAYS_KEEP_DISTFILES= yes
</sect2>
<sect2>
- <title><makevar>BUILD_DEPENDS</makevar> (依赖的构建环境)</title>
+ <title><makevar>BUILD_DEPENDS</makevar> (依赖的联编环境)</title>
- <para>此变量用于指定用来构建 port 的可执行文件或资源文件。
+ <para>此变量用于指定用来联编 port 的可执行文件或资源文件。
与 <makevar>RUN_DEPENDS</makevar> 类似, 它是一个
<replaceable>path</replaceable>:<replaceable>dir</replaceable><optional><replaceable>:target</replaceable></optional>
元组的列表。 例如, <programlisting> BUILD_DEPENDS=
unzip:${PORTSDIR}/archivers/unzip</programlisting> 将检测名为
<command>unzip</command> 的可执行文件是否存在, 如果不存在,
则会进入到您的 ports 目录中的 <filename>archivers/unzip</filename>
- 并完成构建和安装工作。</para>
+ 并完成联编和安装工作。</para>
<note>
<para>这里的 <quote>build</quote> 表示从解压缩到编译的全部过程。
@@ -3148,7 +3150,7 @@ ALWAYS_KEEP_DISTFILES= yes
ncftp2:${PORTSDIR}/net/ncftp2</programlisting>
将检测名为 <command>ncftp2</command> 的可执行文件是否存在,
如果找不到, 则将进入到您 ports 目录中的
- <filename>net/ncftp2</filename> 子目录并加以构建和安装。</para>
+ <filename>net/ncftp2</filename> 子目录并加以联编和安装。</para>
<para>这个依赖关系是在
<maketarget>fetch</maketarget> target 过程中检查的。
@@ -3166,7 +3168,7 @@ ALWAYS_KEEP_DISTFILES= yes
unzip:${PORTSDIR}/archivers/unzip</programlisting> 将检查名为
<command>unzip</command> 的可执行文件是否存在, 如果不存在,
则会进入到您的 ports 目录中的 <filename>archivers/unzip</filename>
- 子目录, 予以构建和安装。</para>
+ 子目录, 予以联编和安装。</para>
<para>这个依赖关系是在
<maketarget>extract</maketarget> target 的过程中检查的。 如果与
@@ -3215,12 +3217,12 @@ ALWAYS_KEEP_DISTFILES= yes
这样的变量。</para>
<note>
- <para><emphasis>任何</emphasis> 情况下, 都不应在
- <filename>/etc/make.conf</filename> 中配置
+ <para>在 <emphasis>任何</emphasis> 情况下,
+ 都不应在 <filename>/etc/make.conf</filename> 中配置任何
<makevar>USE_<replaceable>*</replaceable></makevar>。
- 例如, 设置 <programlisting>USE_GCC=3.2</programlisting>
- 将导致每一个 port 都依赖于 gcc32, 甚至包括
- gcc32 本身!</para>
+ 例如, 设置 <programlisting>USE_GCC=3.4</programlisting>
+ 将导致每个 port 都依赖 gcc34, 甚至包括
+ gcc34 本身!</para>
</note>
<table frame="none">
@@ -3254,7 +3256,7 @@ ALWAYS_KEEP_DISTFILES= yes
<row>
<entry><makevar>USE_BISON</makevar></entry>
- <entry>此 port 在构建时使用 <command>bison</command>。</entry>
+ <entry>此 port 在联编时使用 <command>bison</command>。</entry>
</row>
<row>
@@ -3271,9 +3273,9 @@ ALWAYS_KEEP_DISTFILES= yes
<entry>此 port 需要使用某一特定版本的
<command>gcc</command> 才能完成编译。
- 可以使用类似 <literal>3.2</literal> 这样的值来精确指定版本。
+ 可以使用类似 <literal>3.4</literal> 这样的值来精确指定版本。
如果希望使用不低于某一版本的编译器, 则可以用
- <literal>3.2+</literal> 这样的形式。 如果与所希望的版本吻合,
+ <literal>3.4+</literal> 这样的形式。 如果与所希望的版本吻合,
则将使用基本系统中所提供的 <command>gcc</command>, 反之,
系统会从 ports 中安装所希望版本的 <command>gcc</command>,
并调整 <makevar>CC</makevar> 以及
@@ -3339,7 +3341,7 @@ ALWAYS_KEEP_DISTFILES= yes
<para>当您输入 <command>make clean</command> 时, 其依赖的 port
也会自动进行清理。 如果您不希望如此, 应定义环境变量
<makevar>NOCLEANDEPENDS</makevar>。 如果 port
- 依赖一些重新构建需要花费很长时间的 port 时, 例如 KDE, GNOME
+ 依赖一些重新联编需要花费很长时间的 port 时, 例如 KDE, GNOME
或 Mozilla 时, 这一方法会非常有用。</para>
<para>要无条件地依赖某个 port, 可以使用 <makevar>${NONEXISTENT}</makevar>
@@ -3360,7 +3362,7 @@ ALWAYS_KEEP_DISTFILES= yes
<para>不要在 ports tree 中引入任何循环依赖关系!</para>
</important>
- <para>ports 构建技术不能够容忍循环依赖关系。 如果您引入了这样的关系,
+ <para>ports 联编技术不能够容忍循环依赖关系。 如果您引入了这样的关系,
就一定会有人安装的 FreeBSD 会因此而损坏, 而且这种现象会越来越多。
这些情形很难检测; 如果有疑虑, 在进行这样的修改之前, 务必执行:
<command>cd /usr/ports; make index</command>。 这个过程在旧的机器上会很慢,
@@ -3374,7 +3376,7 @@ ALWAYS_KEEP_DISTFILES= yes
<title><makevar>MASTERDIR</makevar> (主 port 所在的目录)</title>
<para>如果 port 需要依某些变量的设置 (举例来说, 分辨率或纸型)
- 来构建略有不同的预编译包, 则可以为每一个这样的包建立不同的目录,
+ 来联编略有不同的预编译包, 则可以为每一个这样的包建立不同的目录,
这样可以让用户更容易地看到他们想要安装的版本, 但又能在这些 port
之间共用尽可能多的文件。 一般情况下, 如果运用得当, 除主目录之外都只需要很短的
<filename>Makefile</filename>。 这些 <filename>Makefile</filename> 中,
@@ -3402,7 +3404,7 @@ RESOLUTION?= 300
<para><filename role="package">japanese/xdvi300</filename> 也提供了全部常规的补丁,
以及打包用到的文件等等内容。 如果您在那里输入 <command>make</command>,
- 它将使用默认的分辨率值 (300) 并正常地构建 port。</para>
+ 它将使用默认的分辨率值 (300) 并正常地联编 port。</para>
<para>对于其它分辨率而言, 以下是 <emphasis>完整的</emphasis>
<filename>xdvi118/Makefile</filename>:</para>
@@ -3421,7 +3423,7 @@ MASTERDIR= ${.CURDIR}/../xdvi300
<filename>xdvi300</filename> 中查找。 <literal>RESOLUTION=118</literal>
这行将覆盖在 <filename>xdvi300/Makefile</filename> 中所作的
<literal>RESOLUTION=300</literal> 设置, 从而 port
- 将以分辨率为 118 的设置来构建。</para>
+ 将以分辨率为 118 的设置来联编。</para>
</sect1>
<sect1 id="makefile-manpages">
@@ -3433,7 +3435,8 @@ MASTERDIR= ${.CURDIR}/../xdvi300
<filename>pkg-plist</filename> 中列出联机手册 &mdash; 参见 <link
linkend="plist-sub">PLIST 的生成</link> 来了解更多细节)。 此外,
这也会让安装阶段自动地根据在 <filename>/etc/make.conf</filename>
- 中所作的 <makevar>NOMANCOMPRESS</makevar> 设置来自动对联机手册文件执行压缩或解压缩操作。</para>
+ 中所作的 <makevar>NO_MANCOMPRESS</makevar>
+ 设置来自动对联机手册文件执行压缩或解压缩操作。</para>
<para>如果 port 尝试通过使用符号连接或硬连接将联机手册安装为多个名字,
就必须使用 <makevar>MLINKS</makevar> 变量来予以明示。
@@ -3447,7 +3450,7 @@ MASTERDIR= ${.CURDIR}/../xdvi300
<literal>maybe</literal> 之一。 <literal>yes</literal>
表示联机手册已经以压缩的形式安装, <literal>no</literal> 表示还没有,
而 <literal>maybe</literal> 则表示所安装的软件会尊重
- <makevar>NOMANCOMPRESS</makevar> 的设置值, 因此
+ <makevar>NO_MANCOMPRESS</makevar> 的设置值, 因此
<filename>bsd.port.mk</filename> 不需要特别做什么事情。</para>
<para>如果设置了 <makevar>USE_IMAKE</makevar> 而未定义
@@ -3521,11 +3524,11 @@ ${MANPREFIX}/man/de/man3/baz.3.gz</programlisting>
如果软件包有需要, 也可以通过修改 <makevar>INFO_PATH</makevar> 来指定不同的位置。
不过, 并不推荐这样做。 所有列出的项目均是相对于
<filename><makevar>PREFIX</makevar>/<makevar>INFO_PATH</makevar></filename> 的文件路径。
- 例如, <filename role="package">lang/gcc33</filename> 表示将
+ 例如, <filename role="package">lang/gcc34</filename> 表示将
info 文件安装到
- <filename><makevar>PREFIX</makevar>/<makevar>INFO_PATH</makevar>/gcc33</filename>,
+ <filename><makevar>PREFIX</makevar>/<makevar>INFO_PATH</makevar>/gcc34</filename>,
因此 <makevar>INFO</makevar> 应写成类似这样:
- <programlisting>INFO= gcc33/cpp gcc33/cppinternals gcc33/g77 ...
+ <programlisting>INFO= gcc34/cpp gcc34/cppinternals gcc34/g77 ...
</programlisting>
这样安装/卸载代码就会自动地在注册包之前将它们加入到临时的
<filename>pkg-plist</filename> 中了。</para>
@@ -3534,11 +3537,11 @@ ${MANPREFIX}/man/de/man3/baz.3.gz</programlisting>
<sect1 id="makefile-options">
<title>Makefile 选项</title>
- <para>某些大型应用程序可以在构建时使用一系列配置选项,
+ <para>某些大型应用程序可以在联编时使用一系列配置选项,
用以在系统中已经安装了某些库或应用程序时增加一些功能。
例如, 选择某种自然 (人类的) 语言, GUI 或命令行界面,
由于并不是所有的用户都希望使用这些库或者应用程序, port
- 系统提供了一组方便的机制, 来让 port 的作者控制构建时的配置。
+ 系统提供了一组方便的机制, 来让 port 的作者控制联编时的配置。
支持这些特性可以让用户体验更好, 并达到事半功倍的效果。</para>
<sect2>
@@ -3610,9 +3613,9 @@ ${MANPREFIX}/man/de/man3/baz.3.gz</programlisting>
<entry><makevar>WITHOUT_X11</makevar></entry>
<entry>如果 port 能够在是否包含
- X 支持的情况下分别构建, 则一般情况应该默认以包含
- X 支持的配置来构建。 如果定义了这一变量,
- 则应构建不包含 X 支持的版本。</entry>
+ X 支持的情况下分别联编, 则一般情况应该默认以包含
+ X 支持的配置来联编。 如果定义了这一变量,
+ 则应联编不包含 X 支持的版本。</entry>
</row>
</tbody>
</tgroup>
@@ -3675,20 +3678,22 @@ ${MANPREFIX}/man/de/man3/baz.3.gz</programlisting>
<literal>OFF</literal> 之一。 这种三元组可以使用多次。</para>
<para>定义 <makevar>OPTIONS</makevar> 变量的值,
- 必须在引用 <filename>bsd.port.pre.mk</filename> 之前定义。
+ 必须在引入 <filename>bsd.port.options.mk</filename> 之前进行。
而 <makevar>WITH_*</makevar> 和 <makevar>WITHOUT_*</makevar>
- 只有在引用了
- <filename>bsd.port.pre.mk</filename> 之后才能开始检测。</para>
- </sect3>
+ 变量则只能在引入了
+ <filename>bsd.port.options.mk</filename> 之后才可以进行检测。 使用
+ <filename>bsd.port.pre.mk</filename> 也可以达到同样的目的,
+ 在系统开始提供 <filename>bsd.port.options.mk</filename> 之前的许多
+ port 都在使用这种用法。 不过, 请注意
+ <filename>bsd.port.pre.mk</filename> 会要求某些变量已经进行过定义, 如
+ <makevar>USE_*</makevar> 等。</para>
- <sect3>
- <title>例子</title>
<example id="ports-options-simple-use">
<title>简单的 <makevar>OPTIONS</makevar> 用法</title>
<para><programlisting>OPTIONS= FOO "启用 foo 选项" On \
BAR "支持 bar 功能" Off
-.include &lt;bsd.port.pre.mk&gt;
+.include &lt;bsd.port.options.mk&gt;
.if defined(WITHOUT_FOO)
CONFIGURE_ARGS+= --without-foo
@@ -3700,10 +3705,24 @@ CONFIGURE_ARGS+= --with-foo
RUN_DEPENDS+= bar:${PORTSDIR}/bar/bar
.endif
+.include &lt;bsd.port.mk&gt;</programlisting></para>
+ </example>
+
+ <example id="ports-options-old-style-use">
+ <title>Old style use of <makevar>OPTIONS</makevar></title>
+ <para><programlisting>OPTIONS= FOO "Enable option foo" On
+
+.include &lt;bsd.port.pre.mk&gt;
+
+.if defined(WITHOUT_FOO)
+CONFIGURE_ARGS+= --without-foo
+.else
+CONFIGURE_ARGS+= --with-foo
+.endif
+
.include &lt;bsd.port.post.mk&gt;</programlisting></para>
</example>
</sect3>
-
</sect2>
<sect2>
@@ -3761,7 +3780,7 @@ PORTVERSION= 1.0</programlisting>
<para>如果这不是所希望的情形, 您可以修改一系列变量的设置。</para>
<sect2>
- <title><makevar>WRKSRC</makevar> (开始构建操作的目录名)</title>
+ <title><makevar>WRKSRC</makevar> (开始联编操作的目录名)</title>
<para>这个变量给出了在应用程序的源代码包解压缩之后所生成的目录的名字。
如果我们之前的例子解压缩生成一个叫做 <filename>foo</filename> (而不是
@@ -3775,7 +3794,7 @@ PORTVERSION= 1.0</programlisting>
</sect2>
<sect2>
- <title><makevar>NO_WRKSUBDIR</makevar> (不需要临时的构建目录)</title>
+ <title><makevar>NO_WRKSUBDIR</makevar> (不需要临时的联编目录)</title>
<para>如果 port 完全不需要写入到某个子目录中,
您应设置 <makevar>NO_WRKSUBDIR</makevar> 以明示这一点。</para>
@@ -4214,7 +4233,27 @@ PORTVERSION= 1.0</programlisting>
</sect1>
<sect1 id="building">
- <title>构建机制</title>
+ <title>联编机制</title>
+
+ <sect2 id="parallel-builds">
+ <title>Ports 的并行联编</title>
+
+ <para>&os; ports 框架支持使用多个 <command>make</command> 子进程来进行并行编译,
+ 在 <acronym>SMP</acronym> 上这可以全面地利用系统的
+ <acronym>CPU</acronym> 计算能力, 令 port 的联编过程更快、 更有效率。</para>
+
+ <para>目前这是通过向原作者的代码传递
+ &man.make.1; 参数 <makevar>-jX</makevar> 来实现的。
+ 遗憾的是, 并不是所有的 port 都能够很好地处理这个选项。
+ 因此, 必须通过明确地在 <filename>Makefile</filename> 中指定
+ <literal>MAKE_JOBS_SAFE=yes</literal> 来启用这一功能。</para>
+
+ <para>从 port 监护人的角度还有一个控制的方法是设置
+ <makevar>MAKE_JOBS_UNSAFE=yes</makevar> 变量。
+ 这个变量主要是用于已知不能与 <makevar>-jX</makevar>
+ 配合使用的 port, 即使用户在 <filename>/etc/make.conf</filename> 中定义了
+ <literal>FORCE_MAKE_JOBS=yes</literal> 变量, 系统也不会使用并行编译。</para>
+ </sect2>
<sect2 id="using-make">
<title><command>make</command>、 <command>gmake</command>, 以及
@@ -4240,7 +4279,7 @@ PORTVERSION= 1.0</programlisting>
<entry><makevar>USE_GMAKE</makevar></entry>
<entry>此 port 需要使用 <command>gmake</command>
- 来完成构建过程。</entry>
+ 来完成联编过程。</entry>
</row>
<row>
@@ -4257,7 +4296,7 @@ PORTVERSION= 1.0</programlisting>
<application>imake</application> 根据
<filename>Imakefile</filename> 文件来生成
<filename>Makefile</filename>, 则应设置
- <literal>USE_IMAKE=yes</literal>。 这会使构建过程中的配置
+ <literal>USE_IMAKE=yes</literal>。 这会使联编过程中的配置
(configure) 阶段自动执行 <command>xmkmf -a</command>。
如果 <option>-a</option> 标志会给您的 port 带来麻烦, 则需设置
<literal>XMKMF=xmkmf</literal>。 如果 port 用到了
@@ -4265,7 +4304,7 @@ PORTVERSION= 1.0</programlisting>
<maketarget>install.man</maketarget> target, 则应设置
<literal>NO_INSTALL_MANPAGES=yes</literal>。</para>
- <para>如果 port 源文件的 <filename>Makefile</filename> 的主构建
+ <para>如果 port 源文件的 <filename>Makefile</filename> 的主联编
target 是 <maketarget>all</maketarget> 以外的名字,
应对应地设置 <makevar>ALL_TARGET</makevar>。
对于 <maketarget>install</maketarget> 而言, 对应的变量是
@@ -4318,7 +4357,7 @@ PORTVERSION= 1.0</programlisting>
<row>
<entry><makevar>GNU_CONFIGURE</makevar></entry>
- <entry>此 port 需要用 <command>configure</command> 脚本来准备构建。</entry>
+ <entry>此 port 需要用 <command>configure</command> 脚本来准备联编。</entry>
</row>
<row>
@@ -4421,7 +4460,7 @@ PORTVERSION= 1.0</programlisting>
<sect2 id="using-autotools-introduction">
<title>入门</title>
- <para>众多 GNU autotools 提供了一种在多重操作系统和机器架构之上构建软件的抽象机制。
+ <para>众多 GNU autotools 提供了一种在多重操作系统和机器架构之上联编软件的抽象机制。
在 Ports Collection 中, port 可以通过简单的方法来使用这些工具:</para>
<programlisting>USE_AUTOTOOLS= <replaceable>工具</replaceable>:<replaceable>版本</replaceable>[:<replaceable>操作</replaceable>] ...</programlisting>
@@ -4451,7 +4490,7 @@ PORTVERSION= 1.0</programlisting>
<sect2 id="using-libtool">
<title><command>libtool</command></title>
- <para>使用 GNU 构建框架的共享库通常会使用
+ <para>使用 GNU 联编框架的共享库通常会使用
<command>libtool</command> 来调整共享库的编译和安装,
以便与所运行的操作系统相匹配。 通常的做法是使用应用程序所附带的
<command>libtool</command> 副本。
@@ -4462,9 +4501,9 @@ PORTVERSION= 1.0</programlisting>
<para>如果不使用额外的操作符,
<literal>libtool:<replaceable>版本</replaceable></literal>
- 表示希望构建框架使用 configure 脚本来对系统所安装的 <command>libtool</command>
+ 表示希望联编框架使用 configure 脚本来对系统所安装的 <command>libtool</command>
进行修补。 这会暗含地定义 <makevar>GNU_CONFIGURE</makevar>。
- 更进一步, 构建框架还会设置一系列 make 和 shell
+ 更进一步, 联编框架还会设置一系列 make 和 shell
变量用于 port 后续的操作。 请参见
<filename>bsd.autotools.mk</filename> 了解进一步的详情。</para>
@@ -4540,7 +4579,7 @@ PORTVERSION= 1.0</programlisting>
<command>configure</command> 来生成实际的
<filename>Makefile</filename>。</para>
- <para>类似地, 偶尔会有一些软件包不提供构建所需的
+ <para>类似地, 偶尔会有一些软件包不提供联编所需的
<filename>aclocal.m4</filename> 文件。
这些文件可以通过使用 <command>aclocal</command>
来扫描 <filename>configure.ac</filename> 或
@@ -4711,13 +4750,13 @@ PLIST_SUB+= NLS="@comment "
<row>
<entry><makevar>USE_PERL5</makevar></entry>
- <entry>表示 port 将 <literal>perl 5</literal> 用于构建和运行。</entry>
+ <entry>表示 port 将 <literal>perl 5</literal> 用于联编和运行。</entry>
</row>
<row>
<entry><makevar>USE_PERL5_BUILD</makevar></entry>
- <entry>表示 port 将 <literal>perl 5</literal> 用于构建。</entry>
+ <entry>表示 port 将 <literal>perl 5</literal> 用于联编。</entry>
</row>
<row>
@@ -4744,7 +4783,7 @@ PLIST_SUB+= NLS="@comment "
<row>
<entry><makevar>PERL_MODBUILD</makevar></entry>
- <entry>使用 Module::Build 进行配置、 构建并安装。
+ <entry>使用 Module::Build 进行配置、 联编并安装。
这一变量隐含设置 <makevar>PERL_CONFIGURE</makevar>。</entry>
</row>
</tbody>
@@ -4895,7 +4934,7 @@ USE_GL= glu</programlisting>
<row>
<entry><makevar>X_IMAKE_PORT</makevar></entry>
- <entry>用以提供 <command>imake</command> 以及许多其它用于构建
+ <entry>用以提供 <command>imake</command> 以及许多其它用于联编
X11 的工具的 port。</entry>
</row>
@@ -5105,43 +5144,10 @@ USE_XORG= x11 xpm</programlisting>
</sect1>
- <sect1 id="using-kde">
- <title>使用 KDE</title>
-
- <sect2 id="kde-variables">
- <title>变量及其含义</title>
-
- <table frame="none">
- <title>用于使用 KDE 的 port 的变量</title>
-
- <tgroup cols="2">
- <tbody>
- <row>
- <entry><makevar>USE_KDELIBS_VER</makevar></entry>
-
- <entry>表示 port 用到了 KDE 库。 这个变量可以指定使用的 KDE 的主版本,
- 如果定义了这个变量, 则系统会自动将
- <makevar>USE_QT_VER</makevar> 设为适当的值。
- 目前唯一一个可用的值是
- <literal>3</literal>。</entry>
- </row>
-
- <row>
- <entry><makevar>USE_KDEBASE_VER</makevar></entry>
+ <sect1 id="using-qt">
+ <title>使用 Qt</title>
- <entry>表示 port 要用到 KDE 的基本系统。 这个变量可以指定使用的 KDE 的主版本,
- 如果定义了这个变量, 则系统会自动将
- <makevar>USE_QT_VER</makevar> 设为适当的值。
- 目前唯一一个可用的值是
- <literal>3</literal>。</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- </sect2>
-
- <sect2 id="kde-qt">
+ <sect2 id="qt-common">
<title>在 port 中使用 Qt</title>
<table frame="none">
@@ -5474,20 +5480,167 @@ do-configure:
</sect1>
+ <sect1 id="using-kde">
+ <title>使用 KDE</title>
+
+ <sect2 id="kde-variables">
+ <title>变量定义 (只用于 KDE 3.x)</title>
+
+ <table frame="none">
+ <title>用于使用 KDE 3.x 的 port 的变量</title>
+
+ <tgroup cols="2">
+ <tbody>
+ <row>
+ <entry><makevar>USE_KDELIBS_VER</makevar></entry>
+
+ <entry>表示 port 用到了 KDE 库。
+ 这个变量可以指定希望使用的 KDE 主版本号,
+ 如果设置了这个变量, 则系统也会将
+ <makevar>USE_QT_VER</makevar> 设为适当的版本。
+ 该变量目前唯一有效的值是
+ <literal>3</literal>。</entry>
+ </row>
+
+ <row>
+ <entry><makevar>USE_KDEBASE_VER</makevar></entry>
+
+ <entry>表示 port 用到了 KDE 的基本系统。
+ 这个变量可以指定希望使用的 KDE 主版本号,
+ 如果设置了这个变量, 则系统也会将
+ <makevar>USE_QT_VER</makevar> 设为适当的版本。
+ 该变量目前唯一有效的值是 <literal>3</literal>。</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ </sect2>
+
+ <sect2 id="kde4-variables">
+ <title>用于 KDE 4 的变量定义</title>
+
+ <para>如果您的应用程序需要使用 KDE 4.x, 则应将 <makevar>USE_KDE4</makevar>
+ 设为所需组件的列表。 下面列出一些最常用到的组件
+ (最新的组件列表位于 <filename>/usr/ports/Mk/bsd.kde4.mk</filename>
+ 中的 <makevar>_USE_KDE4_ALL</makevar>):</para>
+
+ <table frame="none">
+ <title>可用的 KDE4 组件</title>
+
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>名称</entry>
+ <entry>说明</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry><literal>akonadi</literal></entry>
+ <entry>个人信息管理 (PIM)存储服务</entry>
+ </row>
+
+ <row>
+ <entry><literal>automoc4</literal></entry>
+ <entry>令 port 使用 automoc4 联编工具集</entry>
+ </row>
+
+ <row>
+ <entry><literal>kdebase</literal></entry>
+ <entry>基本的 KDE 应用程序 (Konqueror、 Dolphin、 Konsole)</entry>
+ </row>
+
+ <row>
+ <entry><literal>kdeexp</literal></entry>
+ <entry>试验性的 KDE 库 (包含尚未完全确定不变的 API)</entry>
+ </row>
+
+ <row>
+ <entry><literal>kdehier</literal></entry>
+ <entry>常用的 KDE 目录层次结构</entry>
+ </row>
+
+ <row>
+ <entry><literal>kdelibs</literal></entry>
+ <entry>基本 KDE 库</entry>
+ </row>
+
+ <row>
+ <entry><literal>kdeprefix</literal></entry>
+ <entry>如果设置了这个选项, 则 port 将安装到
+ <literal>&dollar;{KDE4_PREFIX}</literal>
+ 而不是 <literal>&dollar;{LOCALBASE}</literal></entry>
+ </row>
+
+ <row>
+ <entry><literal>pimlibs</literal></entry>
+ <entry>PIM 函数库</entry>
+ </row>
+
+ <row>
+ <entry><literal>workspace</literal></entry>
+ <entry>用于组成桌面的应用程序和函数库 (Plasma、 KWin)</entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </table>
+
+ <para>KDE 4.x port 会安装到 <literal>&dollar;{KDE4_PREFIX}</literal>,
+ 目前是 <filename>/usr/local/kde4</filename>,
+ 以避免与 KDE 3.x ports 冲突。 这是通过指定 <literal>kdeprefix</literal>
+ 组件来实现的, 它表示替换默认的 <makevar>PREFIX</makevar>。 不过,
+ port 仍会遵循通过 <envar>MAKEFLAGS</envar> 环境变量设置的
+ <makevar>PREFIX</makevar> 以及其它 <application>make</application> 参数。</para>
+
+ <para>KDE 4.x ports 有可能和 KDE 3.x ports 冲突, 因此如果启用了
+ <literal>kdeprefix</literal> 组件, 它们会安装到
+ <literal>&dollar;{KDE4_PREFIX}</literal>。 目前
+ <literal>KDE4_PREFIX</literal> 的默认值是
+ <filename>/usr/local/kde4</filename>。 也可以将 KDE 4.x ports
+ 安装到自定义的 <literal>PREFIX</literal>。 当
+ <literal>PREFIX</literal> 是通过 <envar>MAKEFLAGS</envar>
+ 环境变量, 或直接在 <application>make</application> 命令行指定时,
+ 它会替换 <literal>kdeprefix</literal> 提供的配置。</para>
+
+ <example id="kde4-components-example">
+ <title><makevar>USE_KDE4</makevar> 示例</title>
+
+ <para>下面是一个简单的 KDE 4 port。 <makevar>USE_CMAKE</makevar>
+ 指定 port 使用 <application>CMake</application> &mdash;
+ 许多 KDE 4 项目所使用的配置工具。
+ <makevar>USE_KDE4</makevar> 则引入 KDE 函数库, 并令 port 在联编阶段使用
+ <application>automoc4</application>。 需要的 KDE 组件,
+ 以及其他依赖的组件可以从 configure 的日志中获知。
+ <makevar>USE_KDE4</makevar> 并不会自动设置 <makevar>USE_QT_VER</makevar>。
+ 如果 port 需要使用某些 Qt4 组件, 则需要设置 <makevar>USE_QT_VER</makevar>
+ 并指定所需要的组件。 </para>
+
+ <programlisting>USE_CMAKE= yes
+USE_KDE4= automoc4 kdelibs kdeprefix
+USE_QT_VER= 4
+QT_COMPONENTS= qmake_build moc_build rcc_build uic_build</programlisting>
+ </example>
+ </sect2>
+
+ </sect1>
+
<sect1 id="using-java">
<title>使用 Java</title>
<sect2 id="java-variables">
<title>变量定义</title>
- <para>如果您的 port 需要 Java&trade; 开发包 (JDK) 来完成构建、
+ <para>如果您的 port 需要 Java&trade; 开发包 (JDK&trade;) 来完成联编、
支持运行, 甚至完成解开源代码包这样的工作,
就应该定义 <makevar>USE_JAVA</makevar>。</para>
<para>在 Ports Collection 中有许多不同的 JDK, 它们的版本各不相同,
或是来自不同的供应商。 如果您的 port 必须使用其中的某个特定的版本,
也可以予以定义。 最新的稳定版本是
- <filename role="package">java/jdk15</filename>。</para>
+ <filename role="package">java/jdk16</filename>。</para>
<table frame="none">
<title>用到 Java 的 port 可以使用的变量</title>
@@ -5527,7 +5680,7 @@ do-configure:
<row>
<entry><makevar>JAVA_BUILD</makevar></entry>
- <entry>设置这个变量表示所选的 JDK port 应被列入 port 的构建依赖关系。</entry>
+ <entry>设置这个变量表示所选的 JDK port 应被列入 port 的联编依赖关系。</entry>
</row>
<row>
@@ -5543,13 +5696,13 @@ do-configure:
<row>
<entry><makevar>USE_JIKES</makevar></entry>
<entry>port 是否应使用
- <command>jikes</command> bytecode 编译器进行构建。
+ <command>jikes</command> bytecode 编译器进行联编。
如果没有设置, 则 port 将在
- <command>jikes</command> 可用的情况下在构建时使用它。
+ <command>jikes</command> 可用的情况下在联编时使用它。
您也可以明确地禁止使用或要求使用
<command>jikes</command> (通过将这个变量设置为 <literal>'no'</literal>
或 <literal>'yes'</literal>)。 后一种情形中, <filename
- role="package">devel/jikes</filename> 将加入 port 的构建依赖关系。
+ role="package">devel/jikes</filename> 将加入 port 的联编依赖关系。
任何情况下, 如果 <command>jikes</command>
被作为 <command>javac</command> 使用, 则
<filename>bsd.java.mk</filename> 会定义
@@ -5619,21 +5772,21 @@ do-configure:
<row>
<entry><makevar>JAVAC</makevar></entry>
<entry>所用 Java 编译器的完整路径 (例如
- <filename>'/usr/local/jdk1.1.8/bin/javac'</filename> 或
+ <filename>'/usr/local/jdk1.3.1/bin/javac'</filename> 或
<filename>'/usr/local/bin/jikes'</filename>)。</entry>
</row>
<row>
<entry><makevar>JAR</makevar></entry>
<entry>所用 <command>jar</command> 工具的完整路径 (例如
- <filename>'/usr/local/jdk1.2.2/bin/jar'</filename> 或
+ <filename>'/usr/local/jdk1.3.1/bin/jar'</filename> 或
<filename>'/usr/local/bin/fastjar'</filename>)。</entry>
</row>
<row>
<entry><makevar>APPLETVIEWER</makevar></entry>
<entry>所用 <command>appletviewer</command> 工具的完整路径 (例如
- <filename>'/usr/local/linux-jdk1.2.2/bin/appletviewer'</filename>)。</entry>
+ <filename>'/usr/local/linux-jdk1.3.1/bin/appletviewer'</filename>)。</entry>
</row>
<row>
@@ -5660,8 +5813,7 @@ do-configure:
<row>
<entry><makevar>JAVA_KEYTOOL</makevar></entry>
- <entry>所用 <command>keytool</command> 工具的完整路径。
- 只有当 JDK 是 Java 1.2 或更高版本时才可用。</entry>
+ <entry>所用 <command>keytool</command> 工具的完整路径。</entry>
</row>
<row>
@@ -5671,8 +5823,7 @@ do-configure:
<row>
<entry><makevar>JAVA_POLICYTOOL</makevar></entry>
- <entry>所用 <command>policytool</command> 程序的完整路径。
- 只有当 JDK 是 Java 1.2 或更高版本时才可用。</entry>
+ <entry>所用 <command>policytool</command> 程序的完整路径。</entry>
</row>
<row>
@@ -5694,23 +5845,19 @@ do-configure:
<row>
<entry><makevar>RMID</makevar></entry>
- <entry>所用 RMI 服务程序 <command>rmid</command> 的完整路径。
- 只有当 JDK 是 Java 1.2 或更高版本时才可用。</entry>
+ <entry>所用 RMI 服务程序 <command>rmid</command> 的完整路径。</entry>
</row>
<row>
<entry><makevar>JAVA_CLASSES</makevar></entry>
<entry>所用 JDK 类文件目录的完整路径。
- 对 JDK 1.2 和更高版本的环境而言, 这应该是
- <filename>${JAVA_HOME}/jre/lib/rt.jar</filename>。 更早版本的
- JDK 则使用
- <filename>${JAVA_HOME}/lib/classes.zip</filename>。</entry>
+ <filename>${JAVA_HOME}/jre/lib/rt.jar</filename>。</entry>
</row>
<row>
<entry><makevar>HAVE_JIKES</makevar></entry>
<entry>随 <command>jikes</command> 是否将被应用于 port
- 的构建过程而定 (参见前述 <makevar>USE_JIKES</makevar>)。</entry>
+ 的联编过程而定 (参见前述 <makevar>USE_JIKES</makevar>)。</entry>
</row>
</tbody>
</tgroup>
@@ -5763,19 +5910,19 @@ do-configure:
</sect2>
<sect2 id="java-building-with-ant">
- <title>采用 Ant 进行构建</title>
+ <title>采用 Ant 进行联编</title>
- <para>如果 port 采用 Apache Ant 进行构建,
+ <para>如果 port 采用 Apache Ant 进行联编,
则需要定义 <makevar>USE_ANT</makevar>。 如是, 则 Ant
将作为 子-make 命令来使用。 如果 port 未定义 <literal>do-build</literal>
target, 则将默认依 <makevar>MAKE_ENV</makevar>、
- <makevar>MAKE_ARGS</makevar> 和 <makevar>ALL_TARGETS</makevar>.
+ <makevar>MAKE_ARGS</makevar> 和 <makevar>ALL_TARGET</makevar>。
的设置执行 Ant。 这类似于 <xref linkend="building"> 中介绍的关于
<makevar>USE_GMAKE</makevar> 的机制。</para>
<para>若 <command>jikes</command> 被作为
<command>javac</command> 使用 (参见 <xref linkend="java-variables"> 中的
- <makevar>USE_JIKES</makevar>), 则 Ant 会自动将其用于 port 的构建过程。</para>
+ <makevar>USE_JIKES</makevar>), 则 Ant 会自动将其用于 port 的联编过程。</para>
</sect2>
@@ -5821,10 +5968,10 @@ do-configure:
<filename>pkg-plist</filename> 中直接使用
<literal>%%DATADIR%%</literal>。</para>
- <para>撰写本文时, 对是应该从源代码构建, 还是直接安装预编译的
+ <para>撰写本文时, 对是应该从源代码联编, 还是直接安装预编译的
Java ports 安装包并没有明确的规定。 尽管如此, <ulink
url="http://www.freebsd.org/java/">&os; Java Project</ulink>
- 的开发人员仍鼓励移植软件的开发者在不麻烦的情况下尽可能从源代码完成构建。</para>
+ 的开发人员仍鼓励移植软件的开发者在不麻烦的情况下尽可能从源代码完成联编。</para>
<para>本节中所介绍的全部特性, 均是在 <filename>bsd.java.mk</filename>
中实现的。 如果您感觉自己的 port 需要更为复杂的 Java 支持,
@@ -6045,7 +6192,7 @@ do-configure:
<row>
<entry><makevar>USE_PHPIZE</makevar></entry>
- <entry>此 port 将作为 PHP 扩展模块进行构建。</entry>
+ <entry>此 port 将作为 PHP 扩展模块进行联编。</entry>
</row>
<row>
@@ -6058,7 +6205,7 @@ do-configure:
<row>
<entry><makevar>USE_PHP_BUILD</makevar></entry>
- <entry>构建依赖于 PHP。</entry>
+ <entry>联编依赖于 PHP。</entry>
</row>
<row>
@@ -7896,8 +8043,11 @@ CFLAGS+= -DLUA_VERSION_STRING="${VER_STR}"
<programlisting>#!/bin/sh
+# &dollar;FreeBSD&dollar;
+#
# PROVIDE: doormand
# REQUIRE: LOGIN
+# KEYWORD: shutdown
#
# 在 /etc/rc.conf.local 或 /etc/rc.conf 中增加下述设置可以启用这一服务:
#
@@ -7906,7 +8056,7 @@ CFLAGS+= -DLUA_VERSION_STRING="${VER_STR}"
# doormand_config (path): 默认设为 %%PREFIX%%/etc/doormand/doormand.cf。
#
-. %%RC_SUBR%%
+. /etc/rc.subr
name="doormand"
rcvar=${name}_enable
@@ -7923,6 +8073,15 @@ command_args="-p $pidfile -f $doormand_config"
run_rc_command "$1"</programlisting>
+ <para>除非有很站得住脚的理由提前启动服务,所有的 ports 脚本应使用
+ <programlisting>REQUIRE: LOGIN</programlisting>。
+ 如果服务需要以特定用户 (除 root 之外) 身份启动, 则必须这样做。
+ 在前面的例子中, 我们还使用了
+ <programlisting>KEYWORD: shutdown</programlisting>
+ 以便让 mythical port 在系统停机的过程中以正常的方式终止,
+ 因为它需要在系统引导过程中启动服务。 如果脚本没有启动任何服务,
+ 则并不需要这样做。</para>
+
<para>这里, 对变量的默认赋值方法应采用 &quot;=&quot;,
而非 &quot;:=&quot; 这样的形式。 这是因为,
前一种赋值方法只有在变量未被设置时才设置默认值,
@@ -7939,6 +8098,7 @@ run_rc_command "$1"</programlisting>
<filename>Makefile</filename> 中使用。 最新版本的 &os; 并不为脚本名增加任何后缀,
但较早的版本则曾使用过
<filename>.sh</filename> 后缀。</para>
+
<note>
<para>新增的脚本均不应使用 <filename>.sh</filename>
后缀。 未来, 仍然包含这一后缀的脚本将被批量改名。</para>
@@ -7960,6 +8120,32 @@ run_rc_command "$1"</programlisting>
<makevar>USE_RC_SUBR</makevar> 变量的内容匹配。</para>
</sect2>
</sect1>
+
+ <sect1 id="users-and-groups">
+ <title>添加用户和用户组</title>
+
+ <para>一些 port 需要在安装的系统中创建特定的用户或用户组。
+ 如果有这种情况, 请从 50 到 999 之间选择一个尚未使用的 UID, 并在
+ <filename>ports/UIDs</filename> (针对用户) 或
+ <filename>ports/GIDs</filename> (针对组) 中予以记录。
+ 请务必确保您没有使用系统中已经在其他 ports 中使用的 UID。</para>
+
+ <para>如果您的 port 需要创建新用户或用户组,
+ 请在提交补丁的时候一并提交这两个文件的补丁。</para>
+
+ <para>接下来, 可以在您的 <filename>Makefile</filename> 中使用
+ <makevar>USERS</makevar> 和 <makevar>GROUPS</makevar>
+ 这两个变量, 系统会在安装时自动创建用户或组。</para>
+
+ <programlisting>USERS= pulse
+GROUPS= pulse pulse-access pulse-rt</programlisting>
+
+ <para>现有的保留 UID 和 GID 列表,
+ 可以在 <filename>ports/UIDs</filename> 和
+ <filename>ports/GIDs</filename> 找到。</para>
+
+ </sect1>
+
</chapter>
<chapter id="plist">
@@ -8000,6 +8186,23 @@ PLIST_SUB= OCTAVE_VERSION=${OCTAVE_VERSION}</programlisting>
就不需要再到 <filename>pkg-plist</filename> 中修改那几十 (或者,
有时甚至是上百) 行的内容了。</para>
+ <para>如果您的 port 需要根据一定的配置来有条件地安装一些文件,
+ 通常的做法是在 <filename>pkg-plist</filename> 中列出这些文件时,
+ 在对应行的开头加上 <literal>%%TAG%%</literal>,
+ 并将 <literal>TAG</literal> 写到 <filename>Makefile</filename>
+ 中的 <makevar>PLIST_SUB</makevar> 变量中, 根据需要替换掉, 或替换为
+ <literal>@comment</literal>, 后者表示让打包工具忽略这行:</para>
+
+ <programlisting>.if defined(WITH_X11)
+PLIST_SUB+= X11=""
+.else
+PLIST_SUB+= X11="@comment "
+.endif</programlisting>
+
+ <para>与之对应, 在 <filename>pkg-plist</filename> 中:</para>
+
+ <programlisting>%%X11%%bin/foo-gui</programlisting>
+
<para>这一替换过程 (以及加入 <link
linkend="makefile-manpages">联机手册</link> 的过程),
会在 <maketarget>pre-install</maketarget> 和
@@ -8199,7 +8402,7 @@ etc/orbit.conf.sample
<para>开始的步骤和上面的前三行一样, 也就是
<command>mkdir</command>, <command>mtree</command> 并
- <command>make depends</command>。 然后构建和安装
+ <command>make depends</command>。 然后联编和安装
port:</para>
<screen>&prompt.root; <userinput>make install PREFIX=/var/tmp/$(make -V PORTNAME)</userinput></screen>
@@ -8513,8 +8716,8 @@ as .putsy.conf and edit it.</programlisting>
<para><makevar>PREFIX</makevar> 能够决定 port 安装时的目的位置。
一般情况下这个位置是 <filename>/usr/local</filename>
- 或 <filename>/opt</filename>。 用户可以将 <makevar>PREFIX</makevar>
- 设为其希望的任意值。 您的 port 则必须遵循这个变量。</para>
+ 或 <filename>/opt</filename>, 但也可以设为其它的任意值。
+ 您的 port 则必须遵循这个变量。</para>
<para>除此之外, 如果用户配置了 <makevar>DESTDIR</makevar>,
则表示希望将 port 安装到另一个环境, 通常是 jail
@@ -8581,7 +8784,7 @@ as .putsy.conf and edit it.</programlisting>
<title>Tinderbox</title>
<para>如果您是非常热心的 ports 参与者, 则可以看看 <application>Tinderbox</application>。
- 这是一个强大的用于构建和测试 ports 的系统, 它基于
+ 这是一个强大的用于联编和测试 ports 的系统, 它基于
<link linkend="build-cluster">Pointyhat</link> 的脚本。 您可以使用
<filename role="package">ports-mgmt/tinderbox</filename> port 来安装
<application>Tinderbox</application>。 请一定仔细阅读随它安装的文档,
@@ -8730,7 +8933,7 @@ as .putsy.conf and edit it.</programlisting>
<para>在漏洞被修正之后, 一定要同时增加 port 的修订版本号。
这样, 规律性地升级安装的 package 的用户就能够看到他们需要进行升级。
- 另外, 还应构建预编译的安装包, 并通过 FTP 和 WWW 镜像发布,
+ 另外, 还应联编预编译的安装包, 并通过 FTP 和 WWW 镜像发布,
以取代有漏洞的版本。 注意要增加
<makevar>PORTREVISION</makevar> 数字, 除非在修正问题时
<makevar>PORTVERSION</makevar> 发生了变化。 一般来说,
@@ -8843,7 +9046,7 @@ as .putsy.conf and edit it.</programlisting>
&lt;dates&gt;
&lt;discovery&gt;2010-05-25&lt;/discovery&gt; <co id="co-vx-dsc">
&lt;entry&gt;2010-07-13&lt;/entry&gt; <co id="co-vx-ent">
- &lt;modified&gt;2010-09-17&lt;/entry&gt; <co id="co-vx-mod">
+ &lt;modified&gt;2010-09-17&lt;/modified&gt; <co id="co-vx-mod">
&lt;/dates&gt;
&lt;/vuln&gt;</programlisting>
@@ -9126,13 +9329,13 @@ Reference: &lt;http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-00
</sect1>
<sect1 id="porting-wrkdir">
- <title><makevar>WRKDIR</makevar> (构建时使用的临时目录)</title>
+ <title><makevar>WRKDIR</makevar> (联编时使用的临时目录)</title>
<para>任何时候都不要在
<makevar>WRKDIR</makevar> 以外的位置写文件。 <makevar>WRKDIR</makevar>
- 是在 port 构建过程中唯一的一处一定可写的地方 (参见
+ 是在 port 联编过程中唯一的一处一定可写的地方 (参见
<ulink url="&url.books.handbook;/ports-using.html#PORTS-CD">如何从
- CDROM 安装 port</ulink> 以了解从只读的目录中构建和安装 port 的例子)。
+ CDROM 安装 port</ulink> 以了解从只读的目录中联编和安装 port 的例子)。
如果您需要改变 <filename>pkg-<replaceable>*</replaceable></filename>
文件, 请按照 <link
linkend="porting-pkgfiles">重新定义某个变量</link> 介绍的方法,
@@ -9140,7 +9343,7 @@ Reference: &lt;http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-00
</sect1>
<sect1 id="porting-wrkdirprefix">
- <title><makevar>WRKDIRPREFIX</makevar> (用于构建的临时目录的父目录名)</title>
+ <title><makevar>WRKDIRPREFIX</makevar> (用于联编的临时目录的父目录名)</title>
<para>一定要确保您的 port 尊重 <makevar>WRKDIRPREFIX</makevar> 的设置。
绝大多数 port 并不需要担心这个。 具体说来,
@@ -9799,7 +10002,7 @@ Reference: &lt;http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-00
<row>
<entry>450005</entry>
<entry>April 27, 2002</entry>
- <entry>默认将 XFree86 4 用于预编译包构建之后的 4.5-STABLE</entry>
+ <entry>默认将 XFree86 4 用于预编译包联编之后的 4.5-STABLE</entry>
</row>
<row>
@@ -10512,7 +10715,7 @@ Reference: &lt;http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-00
<row>
<entry>502106</entry>
<entry>March 8, 2004</entry>
- <entry>pf 连入构建和安装过程之后的 5.2-CURRENT
+ <entry>pf 连入联编和安装过程之后的 5.2-CURRENT
</entry>
</row>
@@ -11765,6 +11968,72 @@ Reference: &lt;http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-00
</row>
<row>
+ <entry>702000</entry>
+ <entry>April 15, 2009</entry>
+ <entry>7.2-RELEASE</entry>
+ </row>
+
+ <row>
+ <entry>702100</entry>
+ <entry>April 15, 2009</entry>
+ <entry>7.2-RELEASE 之后的 7.2-STABLE。</entry>
+ </row>
+
+ <row>
+ <entry>702101</entry>
+ <entry>May 15, 2009</entry>
+ <entry>ichsmb(4) 改为使用左邻接辅编址来保持与其它
+ SMBus 控制器驱动一致性之后的 7.2-STABLE。</entry>
+ </row>
+
+ <row>
+ <entry>702102</entry>
+ <entry>May 28, 2009</entry>
+ <entry>MFC 了
+ <function>fdopendir</function> 函数之后的 7.2-STABLE。</entry>
+ </row>
+
+ <row>
+ <entry>702103</entry>
+ <entry>June 06, 2009</entry>
+ <entry>MFC 了 PmcTools 之后的 7.2-STABLE。</entry>
+ </row>
+
+ <row>
+ <entry>702104</entry>
+ <entry>July 14, 2009</entry>
+ <entry>MFC 了
+ <function>closefrom</function> 系统调用之后的 7.2-STABLE。</entry>
+ </row>
+
+ <row>
+ <entry>702105</entry>
+ <entry>July 31, 2009</entry>
+ <entry>MFC 了 SYSVIPC ABI
+ 改动之后的 7.2-STABLE。</entry>
+ </row>
+
+ <row>
+ <entry>702106</entry>
+ <entry>September 14, 2009</entry>
+ <entry>MFC 了 x86 PAT
+ 增强, 并新增了 d_mmap_single() 以及
+ scatter/gather 型 VM 对象类型之后的 7.2-STABLE。</entry>
+ </row>
+
+ <row>
+ <entry>703000</entry>
+ <entry>February 9, 2010</entry>
+ <entry>7.3-RELEASE</entry>
+ </row>
+
+ <row>
+ <entry>703100</entry>
+ <entry>February 9, 2010</entry>
+ <entry>7.3-RELEASE 之后的 7.3-STABLE。</entry>
+ </row>
+
+ <row>
<entry>800000</entry>
<entry>October 11, 2007</entry>
<entry>8.0-CURRENT。 分拆了宽字符和单字节字符
@@ -12217,7 +12486,305 @@ Reference: &lt;http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-00
<entry>March 18, 2009</entry>
<entry>实现了 rpath 动态字符替换之后的 8.0-CURRENT.</entry>
</row>
-
+ <row>
+ <entry>800074</entry>
+ <entry>March 24, 2009</entry>
+ <entry>引入了 tcpdump 4.0.0 和
+ libpcap 1.0.0 之后的 8.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>800075</entry>
+ <entry>April 6, 2009</entry>
+ <entry>修改了 structs vnet_net、
+ vnet_inet 和 vnet_ipfw 结构布局之后的 8.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>800076</entry>
+ <entry>April 9, 2009</entry>
+ <entry>为 dummynet 新增了延迟评估工具之后的 8.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>800077</entry>
+ <entry>April 14, 2009</entry>
+ <entry>删去了 VOP_LEASE() 和
+ vop_vector.vop_lease 之后的 8.0-CURRENT</entry>
+ </row>
+ <row>
+ <entry>800078</entry>
+ <entry>April 15, 2009</entry>
+ <entry>在 struct rt_metrics 和 struct
+ rt_metrics_lite 中添加了 rt_weight 字段,
+ 导致其结构发生变化之后的 8.0-CURRENT。
+ 此后 RTM_VERSION 增加, 但又回退了。</entry>
+ </row>
+ <row>
+ <entry>800079</entry>
+ <entry>April 15, 2009</entry>
+ <entry>在 struct route 和 struct_in6 中添加了
+ struct llentry 指针之后的 8.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>800080</entry>
+ <entry>April 15, 2009</entry>
+ <entry>改变了 struct inpcb 布局之后的 8.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>800081</entry>
+ <entry>April 19, 2009</entry>
+ <entry>改变了 malloc_type 布局之后的 8.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>800082</entry>
+ <entry>April 21, 2009</entry>
+ <entry>改变了 struct ifnet 布局, 并增加了 if_ref()
+ 和 if_rele() 引用计数维护功能之后的 8.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>800083</entry>
+ <entry>April 22, 2009</entry>
+ <entry>实现了底层蓝牙 HCI API 之后的 8.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>800084</entry>
+ <entry>April 29, 2009</entry>
+ <entry>修改了 IPv6 SSM 和 MLDv2
+ 之后的 8.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>800085</entry>
+ <entry>April 30, 2009</entry>
+ <entry>启用了包括一个活跃映像的 VIMAGE 内核支持之后的
+ 8.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>800086</entry>
+ <entry>May 8, 2009</entry>
+ <entry>为 patch(1) 增加任意长输入行支持之后的 8.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>800087</entry>
+ <entry>May 11, 2009</entry>
+ <entry>修改了一些 VFS KPI 之后的 8.0-CURRENT。
+ VFS 的 FSD 部分中删去了线程参数。
+ <function>VFS_*</function> 函数并不需要这些上下文信息,
+ 因为它总是与
+ <varname>curthread</varname> 相关。
+ 在某些特殊情况中, 则保留了原先的行为。</entry>
+ </row>
+ <row>
+ <entry>800088</entry>
+ <entry>May 20, 2009</entry>
+ <entry>对 net80211 监视模式进行调整之后的 8.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>800089</entry>
+ <entry>May 23, 2009</entry>
+ <entry>增加了 UDP 控制块支持之后的 8.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>800090</entry>
+ <entry>May 23, 2009</entry>
+ <entry>将网络接口克隆虚拟化之后的 8.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>800091</entry>
+ <entry>May 27, 2009</entry>
+ <entry>增加了层次式 jail 并取消全局 securelevel
+ 之后的 8.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>800092</entry>
+ <entry>May 29, 2009</entry>
+ <entry>修改了
+ <function>sx_init_flags()</function> KPI 之后的 8.0-CURRENT。
+ <constant>SX_ADAPTIVESPIN</constant> 退役,
+ 而新增的 <constant>SX_NOADAPTIVE</constant> 标志则表达相反语义。</entry>
+ </row>
+ <row>
+ <entry>800093</entry>
+ <entry>May 29, 2009</entry>
+ <entry>为 struct mount 增加 mnt_xflag 之后的 8.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>800094</entry>
+ <entry>May 30, 2009</entry>
+ <entry>新增了
+ &man.VOP.ACCESSX.9; 之后的 8.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>800095</entry>
+ <entry>May 30, 2009</entry>
+ <entry>调整轮询 KPI (polling KPI) 之后的 8.0-CURRENT。
+ 轮询处理程序会返回处理过的包的数量。 新增的
+ <constant>IFCAP_POLLING_NOCOUNT</constant>
+ 则表示返回值不重要, 并跳过计数。</entry>
+ </row>
+ <row>
+ <entry>800096</entry>
+ <entry>June 1, 2009</entry>
+ <entry>对新的 netisr 进行了改进, 并调整了保存和存取 FIB
+ 方式之后的 8.0-CURRENT。</entry>
+ <!--
+ Had been 96 and 97 but were folded because we are
+ running out of numbers.
+ -->
+ </row>
+ <row>
+ <entry>800097</entry>
+ <entry>June 8, 2009</entry>
+ <entry>引入了 vnet 析构挂钩和相关基础设施之后的 8.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>800097</entry>
+ <entry>June 11, 2009</entry>
+ <entry>引入了 netgraph 输出到输入路径调用检测和排队机制,
+ 并调整了 struct thread 布局之后的 8.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>800098</entry>
+ <entry>June 14, 2009</entry>
+ <entry>引入了 OpenSSL 0.9.8k 之后的 8.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>800099</entry>
+ <entry>June 22, 2009</entry>
+ <entry>更新了 NGROUPS 并将路由虚拟化挪到它自己的
+ VImage 模块之后的 8.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>800100</entry>
+ <entry>June 24, 2009</entry>
+ <entry>修改了 SYSVIPC ABI 之后的 8.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>800101</entry>
+ <entry>June 29, 2009</entry>
+ <entry>删去了与网络接口一一对应的
+ /dev/net/* 字符设备之后的 8.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>800102</entry>
+ <entry>July 12, 2009</entry>
+ <entry>在 struct sackhint、 struct tcpcb 以及 struct
+ tcpstat 上增加占位元素之后的 8.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>800103</entry>
+ <entry>July 13, 2009</entry>
+ <entry>将 TOE 驱动接口中的 struct tcpopt
+ 替换为 TCP syncache 中的 struct toeopt 之后的 8.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>800104</entry>
+ <entry>July 14, 2009</entry>
+ <entry>新增了基于 linker-set 的 per-vnet
+ 分配器之后的 8.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>800105</entry>
+ <entry>July 19, 2009</entry>
+ <entry>递增了所有未使用符号版本的动态连接库版本之后的
+ 8.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>800106</entry>
+ <entry>July 24, 2009</entry>
+ <entry>引入 VM 对象类型 OBJT_SG 之后的 8.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>800107</entry>
+ <entry>August 2, 2009</entry>
+ <entry>通过加入 newbus sxlock 使 newbus 子系统不再使用
+ Giant, 以及 8.0-RELEASE。</entry>
+ </row>
+ <row>
+ <entry>800108</entry>
+ <entry>November 21, 2009</entry>
+ <entry>实现了 EVFILT_USER kevent 过滤器之后的 8.0-STABLE。</entry>
+ </row>
+ <row>
+ <entry>800500</entry>
+ <entry>January 7, 2010</entry>
+ <entry>令 <command>pkg_add -r</command>
+ 使用 packages-8-stable 的 <literal>__FreeBSD_version</literal>
+ 版本变化的 8.0-STABLE。</entry>
+ </row>
+ <row>
+ <entry>800501</entry>
+ <entry>January 24, 2010</entry>
+ <entry>调整了
+ <function>scandir(3)</function> 和
+ <function>alphasort(3)</function> 函数原型,
+ 使其符合 SUSv4 之后的 8.0-STABLE。</entry>
+ </row>
+ <row>
+ <entry>800502</entry>
+ <entry>January 31, 2010</entry>
+ <entry>新增了
+ <function>sigpause(3)</function> 之后的 8.0-STABLE。</entry>
+ </row>
+ <row>
+ <entry>900000</entry>
+ <entry>August 22, 2009</entry>
+ <entry>9.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>900001</entry>
+ <entry>September 8, 2009</entry>
+ <entry>引入了 x86emu, 来自 OpenBSD 的 x86 CPU
+ 实模式模拟器之后的 9.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>900002</entry>
+ <entry>September 23, 2009</entry>
+ <entry>实现了 EVFILT_USER kevent 过滤器之后的 9.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>900003</entry>
+ <entry>December 2, 2009</entry>
+ <entry>新增了
+ <function>sigpause(3)</function> 以及 csu 的 PIE
+ 支持之后的 9.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>900004</entry>
+ <entry>December 6, 2009</entry>
+ <entry>新增了 libulog 及其 libutempter 兼容接口之后的 9.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>900005</entry>
+ <entry>December 12, 2009</entry>
+ <entry>新增了用于查询指定休眠队列上等待者数量的
+ <function>sleepq_sleepcnt()</function> 函数之后的 9.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>900006</entry>
+ <entry>January 4, 2010</entry>
+ <entry>调整了
+ <function>scandir(3)</function> 和
+ <function>alphasort(3)</function> 函数原型,
+ 使其符合 SUSv4 之后的 9.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>900007</entry>
+ <entry>January 13, 2010</entry>
+ <entry>删去了 utmp(5) 并增加了 utmpx (参阅
+ <function>getutxent(3)</function>)
+ 以改善用户登录日志和系统事件支持之后的 9.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>900008</entry>
+ <entry>January 20, 2010</entry>
+ <entry>9.0-CURRENT 引入了 BSD 授权的 bc/dc
+ 并将 GNU bc/dc 标注为过时之后的 9.0-CURRENT。</entry>
+ </row>
+ <row>
+ <entry>900009</entry>
+ <entry>January 26, 2010</entry>
+ <entry>新增了用于管理网络接口说明的 SIOCGIFDESCR
+ 和 SIOCSIFDESCR ioctl 之后的 9.0-CURRENT。
+ 这组接口受到了 OpenBSD 的启发。</entry>
+ </row>
</tbody>
</tgroup>
</table>
@@ -12370,25 +12937,6 @@ exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"</programlisting>
</sect1>
- <sect1 id="dads-uid-and-gids">
- <title>UID 和 GID</title>
-
- <para>最新的预留 UID 和 GID 可以在 <filename>ports/UIDs</filename> 和
- <filename>ports/GIDs</filename> 这两个文件中找到。</para>
-
- <para>如果您的 port 安装到系统上之前需要一些用户,
- 请使用 <filename>pkg-install</filename> 脚本来调用
- <command>pw</command> 以便自动地创建它们。 请参见
- <filename role="package">sysutils/symon</filename> 提供的例子。
- 您的 port 必须使用固定的 用户/组 ID 号,
- 必须在 50 到 999 之间选择一个未用的 UID 并在
- <filename>ports/UIDs</filename> (用于用户) 或
- <filename>ports/GIDs</filename> (用于组) 中进行注册。</para>
-
- <para>如果您的 port 需要在这一范围内预留新的 UID 或 GID 的话,
- 请同时提交修改这两个文件的补丁。</para>
- </sect1>
-
<sect1 id="dads-rational">
<title>理性行事</title>
@@ -12417,7 +12965,7 @@ exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"</programlisting>
和 <makevar>CXX</makevar> 变量的设置。
这也就是说, port 不应使用绝对的方式来设置这个变量的值,
而罔顾已经存在的设置; 与此相反, 它应该在其值后加入需要的其它值。
- 这样, 就可以设置全局的构建选项, 令其影响所有的 port 构建过程了。</para>
+ 这样, 就可以设置全局的联编选项, 令其影响所有的 port 联编过程了。</para>
<para>如果实在无法这样做, 请在 <filename>Makefile</filename>
中加入 <literal>NO_PACKAGE=ignores
@@ -12452,7 +13000,7 @@ exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"</programlisting>
<para>您的 port 应遵循 <makevar>CFLAGS</makevar> 变量的设置。
这也就是说, port 不应使用绝对的方式来设置这个变量的值,
而罔顾已经存在的设置; 与此相反, 它应该在其值后加入需要的其它值,
- 这样, 就可以设置全局的构建选项, 令其影响所有的 port 构建过程了。</para>
+ 这样, 就可以设置全局的联编选项, 令其影响所有的 port 联编过程了。</para>
<para>如果实在无法这样做, 请在 <filename>Makefile</filename>
中加入 <literal>NO_PACKAGE=ignores
@@ -12505,7 +13053,7 @@ exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"</programlisting>
<note>
<para>如果设置了 <makevar>PTHREAD_LIBS</makevar>,
- 而在构建时出现 <literal>unrecognized
+ 而在联编时出现 <literal>unrecognized
option '-pthread'</literal> 这样的错误, 可能需要通过将
<makevar>CONFIGURE_ENV</makevar> 设为 <literal>LD=${CC}</literal>
来使用
@@ -12545,7 +13093,7 @@ exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"</programlisting>
<command>make</command> 的值, 将是在用户试图安装时得到的提示信息。
务请使用正确的 <command>make</command> 变量,
因为每一个都表达了截然不同的意义, 而且许多自动化系统, 例如
- <link linkend="build-cluster">port 构建集群</link>、
+ <link linkend="build-cluster">port 联编集群</link>、
<link linkend="freshports">FreshPorts</link>, 以及
<link linkend="portsmon">portsmon</link>, 都依赖于
<filename>Makefile</filename> 的正确性。</para>
@@ -12558,9 +13106,9 @@ exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"</programlisting>
<para><makevar>BROKEN</makevar> 专门用于表达目前无法正确编译、
安装或卸载这类问题。 如果是临时性的问题, 则可以使用它。</para>
- <para>如果进行了相关的配置, 则构建集群仍将尝试构建它,
+ <para>如果进行了相关的配置, 则联编集群仍将尝试联编它,
以确认导致问题的深层问题是否已被解决。 (不过, 一般情况下,
- 构建集群并不会这样做。)</para>
+ 联编集群并不会这样做。)</para>
<para>举例来说, 当 port 发生下述情况时, 应使用
<makevar>BROKEN</makevar>:</para>
@@ -12604,9 +13152,9 @@ exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"</programlisting>
<listitem>
<para><makevar>IGNORE</makevar> 用来表示 port
- 由于某些其它原因不应予以构建。 如果认为发生了结构性的问题,
+ 由于某些其它原因不应予以联编。 如果认为发生了结构性的问题,
则应使用它。 任何情况下,
- 构建集群都不会构建标记为
+ 联编集群都不会联编标记为
<makevar>IGNORE</makevar> 的 port。 以下是使用
<makevar>IGNORE</makevar> 的一些例子:</para>
@@ -12620,7 +13168,7 @@ exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"</programlisting>
</listitem>
<listitem>
- <para>构建时需要 &os; 内核的源代码,
+ <para>联编时需要 &os; 内核的源代码,
但用户没有安装它们</para>
</listitem>
@@ -12718,7 +13266,7 @@ exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"</programlisting>
<para>目前还没有确切的关于需要给出多少通知的政策。
当前的实践是, 对于与安全有关的问题为一个月,
- 而与构建有关的问题则为两个月。 这也让有兴趣的 committer
+ 而与联编有关的问题则为两个月。 这也让有兴趣的 committer
能够有一点时间来修正问题。</para>
</sect1>
@@ -12726,14 +13274,14 @@ exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"</programlisting>
<title>避免使用 <literal>.error</literal> 结构</title>
<para>在 <filename>Makefile</filename> 中给出信号,
- 表示由于某种外界因素 (例如, 用户指定了无效的构建选项)
+ 表示由于某种外界因素 (例如, 用户指定了无效的联编选项)
而无法安装的方法是将变量
<makevar>IGNORE</makevar> 设为一非空值。 这个值将被格式化,
并在用户执行 <command>make install</command> 是给出提示。</para>
<para>用 <literal>.error</literal> 实现这一目的是一种常见的误用。
这样做的问题是, 许多在 ports 树上运行的自动化工具会因此而失败。
- 最常见的情况见于构建 <filename>/usr/ports/INDEX</filename> 的过程
+ 最常见的情况见于联编 <filename>/usr/ports/INDEX</filename> 的过程
(参见 <xref linkend="make-describe">)。 然而, 即使十分普通的命令,
例如 <command>make -V maintainer</command>,
在这种情况下也会失败。 这是不可接受的。</para>
@@ -12869,7 +13417,7 @@ EXTRACT_SUFX= .tar.Z
PATCH_SITES= ftp://ftp.sra.co.jp/pub/X11/japanese/
PATCHFILES= xdvi-18.patch1.gz xdvi-18.patch2.gz
-[监护人(maintainer); *必须有*! 这是某个资源处理 port 更新、 构建失败,
+[监护人(maintainer); *必须有*! 这是某个资源处理 port 更新、 联编失败,
以及回答用户直接提问或汇报 bug 的人。 为了保证 Ports Collection
有尽可能高的品质, 我们不再接受指定给 "ports@FreeBSD.org" 的新 port。]
MAINTAINER= asami@FreeBSD.org
@@ -12888,7 +13436,7 @@ WRKSRC= ${WRKDIR}/xdvi-new
PATCH_DIST_STRIP= -p1
[如果需要运行由 GNU autoconf 生成的 "configure" 脚本]
GNU_CONFIGURE= yes
-[如果需要使用 GNU make, 而不是 /usr/bin/make 来完成构建...]
+[如果需要使用 GNU make, 而不是 /usr/bin/make 来完成联编...]
USE_GMAKE= yes
[如果是一个 X 应用程序, 并使用 "xmkmf -a" 来运行...]
USE_IMAKE= yes
@@ -12968,16 +13516,16 @@ pre-install:
<sect1 id="build-cluster">
<title>位于 <hostid role="hostname">pointyhat.FreeBSD.org</hostid>
- 的 &os; Port 构建集群</title>
+ 的 &os; Port 联编集群</title>
<para>&os; 的一个最不为人所知的强项是,
- 它拥有一个专用于持续构建 Ports Collection 的集群,
- 这个集群会构建所有主要的 OS 版本在每一个 Tier-1 架构上的 package。
+ 它拥有一个专用于持续联编 Ports Collection 的集群,
+ 这个集群会联编所有主要的 OS 版本在每一个 Tier-1 架构上的 package。
您可以在
<ulink url="http://pointyhat.FreeBSD.org/">package
- 构建和错误日志</ulink> 找到其结果。</para>
+ 联编和错误日志</ulink> 找到其结果。</para>
- <para>每一个 port 都会被构建,
+ <para>每一个 port 都会被联编,
除非标记为 <makevar>IGNORE</makevar>。
标记了 <makevar>BROKEN</makevar> 的 port 仍然会被继续尝试,
以了解是否某些依赖关系的变动解决了其问题
@@ -12987,15 +13535,15 @@ pre-install:
</sect1>
<sect1 id="distfile-survey">
- <title>&os; 的 Port Distfile 普查</title>
+ <title>&os; 的 Ports Distfile 扫描器</title>
- <para>构建集群是一组专门用于构建所有 ports 的最新的版本的机器,
- 其上已经下载所有的 distfile。 然而, 由于 Internet 在持续地发生变化,
+ <para>联编集群是一组专门用于联编所有 port 最新版本的机器,
+ 其上已经下载了所有的 distfiles。 然而, 由于 Internet 在持续地发生变化,
distfile 可能很快就消失了。 <ulink
- url="http://people.FreeBSD.org/~fenner/portsurvey/">FreeBSD
- Ports distfiles 普查</ulink> 试图查询每一个 port 的所有下载站点,
+ url="http://www.portscout.org">FreeBSD
+ Ports distfile 扫描器</ulink> 试图查询每一个 port 的所有下载站点,
以期找出这些文件是否依然存在。 维护者应规律性地检查这些报告,
- 这不仅会提高用户构建的速度, 同时也避免了浪费那些镜像了全部
+ 这不仅会提高用户联编的速度, 同时也避免了浪费那些镜像了全部
distfile 的志愿者的带宽。</para>
</sect1>
@@ -13010,7 +13558,7 @@ pre-install:
<literal>portsmon</literal>)。
这个系统包含了一个处理若干信息来源的数据库,
并提供了一个可以通过 web 方式浏览的界面。 目前,
- 它利用到了和 ports 有关的问题报告 (PR)、 来自构建集群的错误日志,
+ 它利用到了和 ports 有关的问题报告 (PR)、 来自联编集群的错误日志,
以及来自 Ports Collection 的文件所提供的信息。
未来, 还会对它进行进一步的扩展, 从而提供包括 distfile 普查,
以及其它来源在内的更多信息。</para>
@@ -13024,7 +13572,7 @@ pre-install:
有时并不在 Synopsis (概要) 中指明 port 的名字,
尽管我们希望他们这样做)。 因此, <literal>portsmon</literal>
在您想要查找是否有人提交某个现存的 port 的 PR,
- 以及它的构建是否出现了错误; 或在您创建新的 port
+ 以及它的联编是否出现了错误; 或在您创建新的 port
之前想要查找一下是否已经有人提交过时, 就非常有用了。</para>
</sect1>