diff options
author | Fukang Chen <loader@FreeBSD.org> | 2007-10-02 02:56:37 +0000 |
---|---|---|
committer | Fukang Chen <loader@FreeBSD.org> | 2007-10-02 02:56:37 +0000 |
commit | 1ff8df67b61b98649236515a3e942733c2de7738 (patch) | |
tree | e3031ad62f7e49a4f283d12e555c16b9651947df /zh_CN.GB2312/books | |
parent | ce34fb853d18590c84c55217f1fca551659638a3 (diff) |
Notes
Diffstat (limited to 'zh_CN.GB2312/books')
-rw-r--r-- | zh_CN.GB2312/books/porters-handbook/book.sgml | 556 |
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> 变量设为不同的值 + — 请参见 <filename>editors/vim5</filename> 和 + <filename>editors/vim</filename> port, 以及 + <filename>www/apache*</filename> 系列, 以了解它的用法。 + 需要注意的是, 如何确定 <quote>主</quote> 版本 — + <quote>最流行</quote>、 <quote>受支持最好</quote>, + <quote>变动最少</quote>, 等等 — 已经超过了本书能够给出的建议范围; + 这里只是向您介绍在选定了一个 + <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 <bsd.port.post.mk></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=${PREFIX} + --infodir=${PREFIX}/${INFO_PATH} + --mandir=${MANPREFIX}/man ${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 <bsd.port.pre.mk> - -.if defined(WITH_QT) -BUILD_DEPENDS+= moc4:${PORTSDIR}/devel/qt4-moc -LIB_DEPENDS+= QtCore:${PORTSDIR}/devel/qt4-corelib -.endif - -.include <bsd.port.post.mk></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> <makevar>LOCALBASE</makevar> - 是错误的。 在您需要相对于 <makevar>DESTDIR</makevar> 的路径时, - 应使用 <makevar>LOCALBASE_REL</makevar>、 - <makevar>LINUXBASE_REL</makevar> 和 <makevar>X11BASE_REL</makevar>。 - 为了使脚本撰写过程不过分地繁琐, 可以用 <makevar>TARGETDIR</makevar> - 来代替 <makevar>DESTDIR</makevar> <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: <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: <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: <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: <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: <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> |