diff options
author | Xin LI <delphij@FreeBSD.org> | 2006-07-09 04:47:51 +0000 |
---|---|---|
committer | Xin LI <delphij@FreeBSD.org> | 2006-07-09 04:47:51 +0000 |
commit | 748e9c252dfad0575ba08979ac6fce307772f502 (patch) | |
tree | 96d2a8ffb2edc67c1a69e92e5480e67e3c981e60 /zh_CN.GB2312/books/porters-handbook | |
parent | 784aa12f19323390a95852879f5d06081a1ffe69 (diff) |
Notes
Diffstat (limited to 'zh_CN.GB2312/books/porters-handbook')
-rw-r--r-- | zh_CN.GB2312/books/porters-handbook/book.sgml | 276 |
1 files changed, 220 insertions, 56 deletions
diff --git a/zh_CN.GB2312/books/porters-handbook/book.sgml b/zh_CN.GB2312/books/porters-handbook/book.sgml index d8619dce3c..534515ef40 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.714 + Original Revision: 1.730 $FreeBSD$ --> @@ -339,8 +339,8 @@ PLIST_DIRS= lib/X11/oneko</programlisting> <title>用 <command>portlint</command> 来检查 port</title> <para>请使用 <command>portlint</command> 命令来检查您的 port - 是否符合我们的规范。 <filename role="package"> - devel/portlint</filename> 程序是 ports collection 的一部分。 + 是否符合我们的规范。 <filename role="package">devel/portlint</filename> + 程序是 ports 套件的一部分。 这个程序的主要功能是帮助您检查 <link linkend="porting-samplem">Makefile</link> 的样式是否符合规范, 以及 <link linkend="porting-pkgname">package</link> 的命名是否得体。</para> @@ -3635,12 +3635,20 @@ ${PREFIX}/man/ja/man4/baz.4.gz</programlisting> 必须在引用 <filename>bsd.port.pre.mk</filename> 之前定义。 而 <makevar>WITH_*</makevar> 和 <makevar>WITHOUT_*</makevar> 只有在引用了 - <filename>bsd.port.pre.mk</filename> 之后才能开始检测。 + <filename>bsd.port.pre.mk</filename> 之后才能开始检测。</para> + + <para> 由于基础支持框架的一些缺陷, 您只能使用 <makevar>WITH_*</makevar> 变量来检测那些默认值为 <literal>OFF</literal> 的选项, 而使用 <makevar>WITHOUT_*</makevar> 变量来检测那些默认值为 - <literal>ON</literal> 的选项。</para> + <literal>ON</literal> 的选项。 这样做的原因是: + 当定义了 <makevar>PACKAGE_BUILDING</makevar> 或 + <makevar>BATCH</makevar> 来联编 package 时, <command>config</command> + target 并不执行, 因此也就不会有选定的 <makevar>OPTIONS</makevar>。 + 这会导致 <command>make depends</command> 和 + <command>make describe</command> 在没有遵循前面规则的 port + 联编失败。</para> <sect3> <title>例子</title> @@ -3739,7 +3747,7 @@ PORTVERSION= 1.0</programlisting> <title>共享库</title> <para>如果您的port安装了一个或多个共享库,那么请定义一个 - <makevar>INSTALLS_SHLIB</makevar> make 变量, + <makevar>USE_LDCONFIG</makevar> make 变量, 在<maketarget>post-install</maketarget>标记把它注册进共享库 缓冲时会调用<filename>bsd.port.mk</filename>去运行 <literal>${LDCONFIG} -m</literal>来指向新库的安装目录。 @@ -3751,37 +3759,28 @@ PORTVERSION= 1.0</programlisting> 那么用户可以在安装后马上 就能使用,并且在卸载软件包后系统也不会认为这些共享库仍然存在。</para> + <programlisting>USE_LDCONFIG= yes</programlisting> + <para>如果您需要把共享库安装在缺省的位置之外, - 可以定义 <makevar>LDCONFIG_DIRS</makevar> - make 变量,它包含安装共享库的目录列表 - 例如: - 如果您的共享库安装到 + 可以通过定义 make 变量 <makevar>USE_LDCONFIG</makevar> + 来改变默认的安装路径, 它包含安装共享库的目录列表 + 例如: 如果您的共享库安装到 <filename><makevar>PREFIX</makevar>/lib/foo</filename> 和 <filename><makevar>PREFIX</makevar>/lib/bar</filename> directories目录,您可以在您的 <filename>Makefile</filename>中这样设置:</para> - <programlisting>INSTALLS_SHLIB= yes -LDCONFIG_DIRS= %%PREFIX%%/lib/foo %%PREFIX%%/lib/bar</programlisting> + <programlisting>USE_LDCONFIG= ${PREFIX}/lib/foo ${PREFIX}/lib/bar</programlisting> - <para>要时刻谨记, 非标准的目录不会在 (重) 启动时自动传递给 - &man.ldconfig.8; ! 如果有 port 真的需要这样做, 则需要像 - <filename role="package">x11/kdelibs3</filename> 那样安装一个启动脚本。 - 请务必仔细检查, 通常这是完全不必要的, + <para>请务必仔细检查, 通常这是完全不必要的, 或者可以通过 <literal>-rpath</literal> 或在连接时设置 <envar>LD_RUN_PATH</envar> 来避免 (参见 <filename role="package">lang/moscow_ml</filename> 给出的例子), 或者用一个 shell 封装程序来在执行可执行文件之前设置 <makevar>LD_LIBRARY_PATH</makevar>, 类似 <filename role="package">www/mozilla</filename> 那样。</para> - <para>值得注意的是这里 <makevar>LDCONFIG_DIRS</makevar> 的内 - 容就像 <filename>pkg-plist</filename> - 的其它部分一样要通过&man.sed.1;过滤,所 - 以 <makevar>PLIST_SUB</makevar> - 置换也会应用。我们推荐您使用 <literal>%%PREFIX%%</literal> 替换 - <makevar>PREFIX</makevar>,<literal>%%LOCALBASE%%</literal> - 替换<makevar>LOCALBASE</makevar>,<literal>%%X11BASE%%</literal> - 替换<makevar>X11BASE</makevar>.</para> + <para>当在 64-位系统上安装 32-位 的函数库时, 请使用 + <makevar>USE_LDCONFIG32</makevar>。</para> <para>尽量将共享库版本号保持为 <filename>libfoo.so.0</filename> 这样的格式。 @@ -4043,6 +4042,55 @@ LDCONFIG_DIRS= %%PREFIX%%/lib/foo %%PREFIX%%/lib/bar</programlisting> </tgroup> </table> </sect2> + + <sect2 id="using-scons"> + <title>使用 <command>scons</command></title> + + <para>如果您的 port 使用 <application>SCons</application>, 就需要定义 + <literal>USE_SCONS=yes</literal> 了。</para> + + <table frame="none"> + <title>使用 <command>scons</command> 的 port 会用到的变量</title> + + <tgroup cols="2"> + <thead> + <row> + <entry>变量</entry> + + <entry>含义</entry> + </row> + </thead> + + <tbody> + <row> + <entry><makevar>SCONS_ARGS</makevar></entry> + + <entry>当前 port 希望传给 SCons + 环境的参数。</entry> + </row> + + <row> + <entry><makevar>SCONS_BUILDENV</makevar></entry> + + <entry>希望在系统环境中设置的变量。</entry> + </row> + + <row> + <entry><makevar>SCONS_ENV</makevar></entry> + + <entry>希望在 SCons 环境中设置的变量。</entry> + </row> + + <row> + <entry><makevar>SCONS_TARGET</makevar></entry> + + <entry>传递给 SCons 的最后一个参数, 类似于 + <makevar>MAKE_TARGET</makevar>。</entry> + </row> + </tbody> + </tgroup> + </table> + </sect2> </sect1> <sect1 id="using-autotools"> @@ -4333,6 +4381,18 @@ LDCONFIG_DIRS= %%PREFIX%%/lib/foo %%PREFIX%%/lib/bar</programlisting> <sect1 id="using-perl"> <title>使用 <literal>perl</literal></title> + <para>如果 <makevar>MASTER_SITES</makevar> 设为 + <makevar>MASTER_SITE_PERL_CPAN</makevar>, 则应尽量把 + <makevar>MASTER_SITE_SUBDIR</makevar> 设置为顶级目录的名字。 + 例如, 对 <literal>p5-Module-Name</literal> + 而言推荐的名字是 <literal>Module</literal>。 + 您可以在 <ulink url="http://cpan.org/modules/by-module/">cpan.org</ulink> + 找到顶级目录的名字。 这可以确保在模块的作者发生变化时, + 保持 port 继续可用。</para> + + <para>以上规则有一个例外, 即对应目录不存在时, 允许使用作者的 id 作为 + <makevar>MASTER_SITE_SUBDIR</makevar>。</para> + <table frame="none"> <title>用于用到 <literal>perl</literal> 的 port 的变量</title> @@ -5293,7 +5353,7 @@ BUILD_DEPENDS+= Xvfb:${X_VFBSERVER_PORT} \ </row> <row> - <entry><makevar>BROKEN_WITH_PHP</makevar></entry> + <entry><makevar>IGNORE_WITH_PHP</makevar></entry> <entry>此 port 无法与给定版本的 PHP 一同工作。 可选值为 <literal>4</literal>、 @@ -5348,13 +5408,6 @@ BUILD_DEPENDS+= Xvfb:${X_VFBSERVER_PORT} \ <entry>希望使用 Apache 模块或 CGI 版本的 PHP。</entry> </row> - - <row> - <entry><makevar>WANT_PHP_PEAR</makevar></entry> - - <entry>希望使用 PEAR 框架。</entry> - </row> - </tbody> </tgroup> </table> @@ -5374,8 +5427,8 @@ BUILD_DEPENDS+= Xvfb:${X_VFBSERVER_PORT} \ 所有这里列出的文件都会自动安装到合适的位置, 并加入 <filename>pkg-plist</filename>。</para> - <para>在 <filename>Makefile</filename> 的最后一行引用 - <filename>${PORTSDIR}/devel/pear-PEAR/Makefile.common</filename>。</para> + <para>在 <filename>Makefile</filename> 文件的最后一行引入 + <filename>${PORTSDIR}/devel/pear/bsd.pear.mk</filename>。</para> <example id="pear-makefile"> <title>用于 PEAR 类的 Makefile 例子</title> @@ -5401,7 +5454,7 @@ DOCS= TODO _DOCSDIR= . .include <bsd.port.pre.mk> -.include "${PORTSDIR}/devel/pear-PEAR/Makefile.common" +.include "${PORTSDIR}/devel/pear/bsd.pear.mk" .include <bsd.port.post.mk></programlisting> </example> @@ -5738,6 +5791,88 @@ USE_SDL+= mixer </sect1> + <sect1 id="using-wx"> + <title>使用 wxWidgets</title> + + <para>如果您的 port 用到了跨平台工具套件 <application>wxWidgets</application>, + 则应定义 <literal>USE_WX=yes</literal>。 如果希望指定具体的版本, + 则可以设置为类似 + <literal>USE_WX=2.6</literal> 这样。 除此之外, + 还可以指定范围 (<literal>2.4-2.6</literal>) + 和开区间 (<literal>-2.4</literal>、 <literal>2.6+</literal>) + 这样的形式。</para> + + <para>所需的 wxWidgets 组件可以通过 + <makevar>WX_COMPS</makevar> 来设置。 除非另外指定, + port 将依赖于 wxWidgets 库 (<literal>wx</literal>)。 + 可用的组件包括:</para> + + <table frame="none"> + <title><makevar>WX_COMPS</makevar> 的可选值</title> + + <tgroup cols="2"> + <thead> + <row> + <entry>值</entry> + + <entry>意义</entry> + </row> + </thead> + + <tbody> + <row> + <entry><literal>wx</literal></entry> + + <entry>wxWidget 函数库</entry> + </row> + + <row> + <entry><literal>contrib</literal></entry> + + <entry>wxWidget 第三方函数库</entry> + </row> + + <row> + <entry><literal>python</literal></entry> + + <entry>wxPython</entry> + </row> + + <row> + <entry><literal>mozilla</literal></entry> + + <entry>wxMozilla (仅限于 2.4 以上版本)</entry> + </row> + + <row> + <entry><literal>svg</literal></entry> + + <entry>wxSVG (仅限于 2.6 以上版本)</entry> + </row> + </tbody> + </tgroup> + </table> + + <para>如果查找 wxWidget 函数库需要通过 <makevar>WX_CONFIG</makevar> 变量以外的 + configure 参数 来指定, 则应在 port 中设置 + <makevar>WX_CONF_ARGS</makevar>。 可选的值包括表示 + <literal>--with-wx-config=${WX_CONFIG}</literal> 的 + <literal>absolute</literal>, 以及表示 + <literal>--with-wx=${X11BASE}</literal> 的 + <literal>relative</literal>; 这些参数将作为 configure 的参数。</para> + + <para>如果您的 port 需要 Unicode 版本的 wxWidgets 函数库, 则应定义 + <literal>WX_UNICODE=yes</literal>。</para> + + <para>下面是一个表示 port 需要 Unicode 版本的 wxWidgets 2.6 和 + contrib 函数库的例子:</para> + + <programlisting>USE_WX= 2.6 +WX_COMPS= wx contrib +WX_UNICODE= yes</programlisting> + + </sect1> + <sect1 id="rc-scripts"> <title>启动和停止服务 (rc 脚本)</title> @@ -5751,7 +5886,7 @@ USE_SDL+= mixer <para>可以安装一或多个 rc 脚本:</para> - <programlisting>USE_RC_SUBR= doormand.sh</programlisting> + <programlisting>USE_RC_SUBR= doormand</programlisting> <para>这些脚本必须放到 <filename>files</filename> 目录, 并附加 <literal>.in</literal>。 @@ -6012,20 +6147,16 @@ etc/orbit.conf.sample <para>首先, 请确认已经基本上完成了 port 的工作, 仅缺 <filename>pkg-plist</filename>。</para> - <para>接下来, 建立一个临时的目录, 以便安装您的 port, - 首先在其中安装所有依赖的 port。 对于非 X 的 port, - <replaceable>port-type</replaceable> 应该是 <literal>local</literal>; - 而使用 XFree86 4.X 或 X.org 目录结构的对应则是 <literal>x11-4</literal>, - 最后, 如果 port 使用的是 XFree86 3.X, 则应使用 - <literal>x11</literal>。</para> + <para>接下来, 建立一个用于安装您的 port 的临时目录, + 并在其中安装它所依赖的所有其他软件包:</para> - <screen>&prompt.root; <userinput>mkdir /var/tmp/<replaceable>port-name</replaceable></userinput> -&prompt.root; <userinput>mtree -U -f /etc/mtree/BSD.<replaceable>port-type</replaceable>.dist -d -e -p /var/tmp/<replaceable>port-name</replaceable></userinput> -&prompt.root; <userinput>make depends PREFIX=/var/tmp/<replaceable>port-name</replaceable></userinput></screen> + <screen>&prompt.root; <userinput>mkdir /var/tmp/$(make -V PORTNAME)</userinput> +&prompt.root; <userinput>mtree -U -f $(make -V MTREE_FILE) -d -e -p /var/tmp/$(make -V PORTNAME)</userinput> +&prompt.root; <userinput>make depends PREFIX=/var/tmp/$(make -V PORTNAME)</userinput></screen> <para>将目录结构保存到一新文件中。</para> - <screen>&prompt.root; <userinput>(cd /var/tmp/<replaceable>port-name</replaceable> && find -d * -type d) | sort > OLD-DIRS</userinput></screen> + <screen>&prompt.root; <userinput>(cd /var/tmp/$(make -V PORTNAME) && find -d * -type d) | sort > OLD-DIRS</userinput></screen> <para>建立一空白 <filename>pkg-plist</filename> 文件:</para> @@ -6034,12 +6165,12 @@ etc/orbit.conf.sample <para>如果您的 port 遵循 <makevar>PREFIX</makevar> (应该如此) 则接下来应安装该 port 并创建装箱单。</para> - <screen>&prompt.root; <userinput>make install PREFIX=/var/tmp/<replaceable>port-name</replaceable></userinput> -&prompt.root; <userinput>(cd /var/tmp/<replaceable>port-name</replaceable> && find -d * \! -type d) | sort > pkg-plist</userinput></screen> + <screen>&prompt.root; <userinput>make install PREFIX=/var/tmp/$(make -V PORTNAME)</userinput> +&prompt.root; <userinput>(cd /var/tmp/$(make -V PORTNAME) && find -d * \! -type d) | sort > pkg-plist</userinput></screen> <para>此外还应把新建立的目录加入装箱单。</para> - <screen>&prompt.root; <userinput>(cd /var/tmp/<replaceable>port-name</replaceable> && find -d * -type d) | sort | comm -13 OLD-DIRS - | sort -r | sed -e 's#^#@dirrm #' >> pkg-plist</userinput></screen> + <screen>&prompt.root; <userinput>(cd /var/tmp/$(make -V PORTNAME) && find -d * -type d) | sort | comm -13 OLD-DIRS - | sort -r | sed -e 's#^#@dirrm #' >> pkg-plist</userinput></screen> <para>最后需要手工整理 packing list; 这一过程不是 <emphasis>完全</emphasis> 自动的。 联机手册应列入 port @@ -6062,12 +6193,12 @@ etc/orbit.conf.sample <command>make depends</command>。 然后构建和安装 port:</para> - <screen>&prompt.root; <userinput>make install PREFIX=/var/tmp/<replaceable>port-name</replaceable></userinput></screen> + <screen>&prompt.root; <userinput>make install PREFIX=/var/tmp/$(make -V PORTNAME)</userinput></screen> <para>然后让 <command>plist</command> 生成 <filename>pkg-plist</filename> 文件:</para> - <screen>&prompt.root; <userinput>/usr/ports/Tools/scripts/plist -Md -m /etc/mtree/BSD.<replaceable>port-type</replaceable>.dist /var/tmp/<replaceable>port-name</replaceable> > pkg-plist</userinput></screen> + <screen>&prompt.root; <userinput>/usr/ports/Tools/scripts/plist -Md -m $(make -V MTREE_FILE) /var/tmp/$(make -V PORTNAME) > pkg-plist</userinput></screen> <para>与前面类似, 如此生成的装箱单也需要手工进行一些清理工作。</para> @@ -6359,7 +6490,7 @@ as .putsy.conf and edit it.</programlisting> <filename>/usr/local</filename> 而非 <makevar>PREFIX</makevar>。 简单的测试步骤是:</para> - <screen>&prompt.root; <userinput>make clean; make package PREFIX=/var/tmp/<replaceable>port-name</replaceable></userinput></screen> + <screen>&prompt.root; <userinput>make clean; make package PREFIX=/var/tmp/$(make -V PORTNAME)</userinput></screen> <para>如果有文件安装到了 <makevar>PREFIX</makevar> 以外的地方, 打包过程将抱怨找不到这些文件。</para> @@ -6367,7 +6498,7 @@ as .putsy.conf and edit it.</programlisting> <!-- XXX This paragraph is confusing and poorly indented. --> <para>这一步骤并不能帮助发现内部引用, 或纠正在引用其它 port 中的文件时使用的 <makevar>LOCALBASE</makevar>。 您需要在 - <filename>/var/tmp/<replaceable>port-name</replaceable></filename> + <filename>/var/tmp/$(make -V PORTNAME)</filename> 中测试安装好的软件, 才能够达到这样的目的。</para> <para>除非真的需要, 否则不要设置 <makevar>USE_X_PREFIX</makevar> @@ -8485,6 +8616,18 @@ Reference: <http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-00 <entry>600105</entry> </row> <row> + <entry>6.1-RELEASE</entry> + <entry>601000</entry> + </row> + <row> + <entry>6.1-RELEASE 之后的 6.1-STABLE。</entry> + <entry>601100</entry> + </row> + <row> + <entry>引入 csup 之后的 6.1-STABLE。</entry> + <entry>601101</entry> + </row> + <row> <entry>7.0-CURRENT。</entry> <entry>700000</entry> </row> @@ -8940,6 +9083,7 @@ messagebus:*:556:556:D-BUS Daemon User:/nonexistent:/sbin/nologin avahi:*:558:558:Avahi Daemon User:/nonexistent:/sbin/nologin bnetd:*:700:700:Bnetd user:/nonexistent:/sbin/nologin bopm:*:717:717:Blitzed Open Proxy Monitor:/nonexistent:/bin/sh +openxpki:*:777:777:OpenXPKI Owner:/nonexistent:/usr/sbin/nologin bacula:*:910:910:Bacula Daemon:/var/db/bacula:/sbin/nologin</programlisting> <para>下面是目前预留的 GID。</para> @@ -9020,6 +9164,7 @@ realtime:*:557: avahi:*:558: bnetd:*:700: bopm:*:717: +openxpki:*:777: bacula:*:910:</programlisting> <para>如果您的 port 需要在这一范围内预留新的 UID 或 GID 的话, @@ -9194,9 +9339,13 @@ bacula:*:910:</programlisting> <itemizedlist> <listitem> <para><makevar>BROKEN</makevar> 专门用于表达目前无法正确编译、 - 安装或卸载这类问题。 如果是临时性的问题, 则可以使用它。 - 构建集群仍将尝试构建它, 以确认导致问题的深层问题是否已被解决。 - 举例来说, 当 port 发生下述情况时, 应使用 + 安装或卸载这类问题。 如果是临时性的问题, 则可以使用它。</para> + + <para>如果进行了相关的配置, 则构建集群仍将尝试构建它, + 以确认导致问题的深层问题是否已被解决。 (不过, 一般情况下, + 构建集群并不会这样做。)</para> + + <para>举例来说, 当 port 发生下述情况时, 应使用 <makevar>BROKEN</makevar>:</para> <itemizedlist> @@ -9380,6 +9529,21 @@ IGNORE=POINTYHAT is not supported </sect1> + <sect1 id="dads-sysctl"> + <title>对于 <filename>sysctl</filename> 的使用</title> + + <para>除了在 target 中之外, 是不鼓励使用 <filename>sysctl</filename> + 的。 这是因为计算 + <literal>makevar</literal>, 例如在 + <command>make index</command> 中所进行的那种, + 都不得不运行一条命令, 这会使这一操作变得更慢。</para> + + <para>在使用 <filename>sysctl</filename> 时, + 应务必使用完整路径即 <filename>/sbin/</filename>, + 因为某些用户可能并不在他们的 <envar>PATH</envar> + 中包含这个目录。</para> + </sect1> + <sect1 id="dads-workarounds"> <title>一些必要的 workaround</title> |