diff options
Diffstat (limited to 'zh_CN.GB2312/books')
-rw-r--r-- | zh_CN.GB2312/books/porters-handbook/book.sgml | 510 |
1 files changed, 334 insertions, 176 deletions
diff --git a/zh_CN.GB2312/books/porters-handbook/book.sgml b/zh_CN.GB2312/books/porters-handbook/book.sgml index 9921e93736..1bd7616332 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.803 + Original Revision: 1.814 $FreeBSD$ --> @@ -3277,8 +3277,10 @@ ALWAYS_KEEP_DISTFILES= yes 在 <xref linkend="using-python"> 进行了讨论, 而关于 <application>Ruby</application> 的介绍, 则可以在 <xref linkend="using-ruby"> 中找到。 - 最后, <xref linkend="using-sdl"> 提供了用于 - <application>SDL</application> 应用程序的变量介绍。</para> + <xref linkend="using-sdl"> 提供了用于 + <application>SDL</application> 应用程序的变量介绍, 最后, + <xref linkend="using-xfce"> 包含了关于 + <application>Xfce</application> 的信息。</para> </sect2> @@ -3803,6 +3805,211 @@ PORTVERSION= 1.0</programlisting> </note> </sect1> + <sect1 id="install"> + <title>安装文件</title> + + <sect2 id="install-macros"> + <title>INSTALL_* 宏</title> + + <para>一定要使用由 <filename>bsd.port.mk</filename> + 提供的宏, 以确保在您自己的 + <maketarget>*-install</maketarget> target 中能够以正确的属主和权限模式安装文件。</para> + + <itemizedlist> + <listitem> + <para><makevar>INSTALL_PROGRAM</makevar> 是安装可执行二进制文件的命令。</para> + </listitem> + + <listitem> + <para><makevar>INSTALL_SCRIPT</makevar> 是安装可执行脚本文件的命令。</para> + </listitem> + + <listitem> + <para><makevar>INSTALL_DATA</makevar> 是安装可共享数据的命令。</para> + </listitem> + + <listitem> + <para><makevar>INSTALL_MAN</makevar> 是安装联机手册和其他文档的命令 + (注意它并不会执行压缩操作)。</para> + </listitem> + </itemizedlist> + + <para>这些宏展开后基本上都是包含适当参数的 <command>install</command> 命令。</para> + </sect2> + + <sect2 id="install-strip"> + <title>对可执行文件做脱模 (strip) 操作</title> + + <para>除非不得不进行, 否则不要手工对可执行文件作脱模操作。 + 所有文件在安装时都应脱模, 但 <maketarget>INSTALL_PROGRAM</maketarget> + 宏会在安装的同时对其进行脱模 (参见下一节的内容)。</para> + + <para>如果您需要对某一文件进行脱模, 但不希望使用 + <makevar>INSTALL_PROGRAM</makevar> 宏, 则应使用 + <makevar>${STRIP_CMD}</makevar> 来处理程序。 + 一般而言这应该在 <literal>post-install</literal> + target 中进行。 例如:</para> + + <programlisting>post-install: + ${STRIP_CMD} ${PREFIX}/bin/xdl</programlisting> + + <para>可以使用 &man.file.1; 命令来检查所安装的可执行文件是否进行过脱模。 + 如果它没有给出 <literal>not stripped</literal> 的提示, + 则表示已经做过脱模了。 另外, + &man.strip.1; 不会对已经脱模过的文件重新脱模, 它会直接退出的。</para> + </sect2> + + <sect2 id="install-copytree"> + <title>安装一个目录下的全部文件</title> + + <para>有时, 会有需要安装大量的文件, 并保持其层次结构, 例如, + 将整个目录结构从 <makevar>WRKSRC</makevar> 复制到 <makevar>PREFIX</makevar> 的目标目录。</para> + + <para>针对这种情况, 系统提供了两个宏。 使用这些宏, + 而不是直接使用 <command>cp</command> 的优势是它们能够确保目标文件的属主和权限正确。 第一个宏, + <makevar>COPYTREE_BIN</makevar> 将所有安装的文件视为可执行文件, 因而适合安装文件到 + <filename><makevar>PREFIX</makevar>/bin</filename>。 + 第二个宏, <makevar>COPYTREE_SHARE</makevar>, 则不会设置可执行权限, + 因此适合于将文件安装到 <filename><makevar>PREFIX</makevar>/share</filename> + 下。</para> + + <programlisting>post-install: + ${MKDIR} ${EXAMPLESDIR} + (cd ${WRKSRC}/examples/ && ${COPYTREE_SHARE} \* ${EXAMPLESDIR})</programlisting> + + <para>这个例子将原作者提供的整个 + <filename>examples</filename> 目录复制到您 port 指定的安装示范文件的位置。</para> + + <programlisting>post-install: + ${MKDIR} ${DATADIR}/summer + (cd ${WRKSRC}/temperatures/ && ${COPYTREE_SHARE} "June July August" ${DATADIR}/summer/)</programlisting> + + <para>这个例子将把夏季的三个月的数据, 复制到 + <filename><makevar>DATADIR</makevar></filename> 中的 + <filename>summer</filename> 子目录。</para> + + <para>需要注意的是, 这些宏并不能自动将所安装的文件加到 + <filename>pkg-plist</filename> 中, 您还是需要自行列出它们。</para> + + </sect2> + + <sect2 id="install-documentation"> + <title>安装附加的文档</title> + + <para>如果您的软件包含了标准的联机手册和 info 手册以外的文档, + 而且您认为它们对用户会有用, 请把这些文档安装到 + <filename><makevar>PREFIX</makevar>/share/doc</filename> 下。 + 和前面类似, 这也可以在 + <maketarget>post-install</maketarget> target 中完成。</para> + + <para>为您的 port 建立一个新的目录。 + 这个目录的名字应该反映它是属于哪个 port 的。 通常建议使用 + <makevar>PORTNAME</makevar>。 不过, 如果您认为不同版本的 port + 可能会同时安装, 也可以用完整的 + <makevar>PKGNAME</makevar>。</para> + + <para>另外, 应该让是否安装取决于变量 + <makevar>NOPORTDOCS</makevar> 的设置, 这样用户就能够在 + <filename>/etc/make.conf</filename> 中禁止安装它。 例如:</para> + + <programlisting>post-install: +.if !defined(NOPORTDOCS) + ${MKDIR} ${DOCSDIR} + ${INSTALL_MAN} ${WRKSRC}/docs/xvdocs.ps ${DOCSDIR} +.endif</programlisting> + + <para>这里是一些便于使用的变量, 以及它们在 + <filename>Makefile</filename> 中默认的展开方式:</para> + + <itemizedlist> + <listitem> + <para><makevar>DATADIR</makevar> 会展开成 + <filename><makevar>PREFIX</makevar>/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>EXAMPLESDIR</makevar> 会展开成 + <filename><makevar>PREFIX</makevar>/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> + </note> + + <para>这些变量也会被导出到 <makevar>PLIST_SUB</makevar> 中。 + 只要可能, 它们的值就将在那里以相对于 + <filename><makevar>PREFIX</makevar></filename> 的路径形式出现。 + 也就是说, <filename>share/doc/<makevar>PORTNAME</makevar></filename> + 在装箱单中默认情况下会替换掉 <literal>%%DOCSDIR%%</literal>, 等等。 + (更多的 <filename>pkg-plist</filename> 代换可以在 + <link linkend="plist-sub">这里</link> 找到。)</para> + + <para>所有的安装的文档文件和目录, + 都应在 <filename>pkg-plist</filename> 出现, 并且使用 + <literal>%%PORTDOCS%%</literal> 前缀, 例如:</para> + + <programlisting>%%PORTDOCS%%%%DOCSDIR%%/AUTHORS +%%PORTDOCS%%%%DOCSDIR%%/CONTACT +%%PORTDOCS%%@dirrm %%DOCSDIR%%</programlisting> + + <para>如果不希望在 <filename>pkg-plist</filename> 中逐个列举文档文件, port + 也可以将 <makevar>PORTDOCS</makevar> 设置为一组文件及其 shell glob + 模式, 通过这种方式来加入到最终的装箱单中。 + 这些名字应是相对于 <makevar>DOCSDIR</makevar> 的。 + 因此, 使用了 <makevar>PORTDOCS</makevar>, + 并将文档安装到非标准位置的 port, 应相应地设置 + <makevar>DOCSDIR</makevar>。 + 如果有在 <makevar>PORTDOCS</makevar> 中列出目录, + 或者这一变量中的 glob 模式匹配到了目录, 则整个子树中的文件和目录, + 都将被注册到最终的装箱单中。 如果定义了 <makevar>NOPORTDOCS</makevar>, 则 + <makevar>PORTDOCS</makevar> 中定义的文件和目录将不被安装或加入装箱单。 + 是否安装文档到前面所说的 <makevar>PORTDOCS</makevar> 仍取决于 port 本身。 + 下面是一个典型的使用 <makevar>PORTDOCS</makevar> 的例子:</para> + + <programlisting>PORTDOCS= README.* ChangeLog docs/*</programlisting> + + <note> + <para>您也可以使用 <filename>pkg-message</filename> 这个文件, + 来在安装时显示一些信息。 参见 <link + linkend="porting-message">关于使用 + <filename>pkg-message</filename> 的这一节</link> 以了解进一步的详情。 + 需要说明的是, 并不需要把 <filename>pkg-message</filename> 加到 + <filename>pkg-plist</filename> 中。</para> + </note> + </sect2> + + <sect2 id="install-subdirs"> + <title>子目录</title> + + <para>尽可能让 port 将它创建的文件, 放置到 + <makevar>PREFIX</makevar> 中正确的位置。 一些 port + 会把各式各样的东西混在一起, 并放到一个同名的目录中, 这是不对的。 + 另外, 许多 port 会把除了可执行文件、 头文件和联机手册之外的所有文件, + 全都一股脑地放到 <filename>lib</filename> 中, 这在和 BSD + 配合使用时会有问题。 多数文件, + 应被放到下列位置之一: <filename>etc</filename> + (安装/配置文件)、 <filename>libexec</filename> + (由系统内部调用的可执行文件)、 <filename>sbin</filename> + (为超级用户/管理员提供的可执行文件)、 <filename>info</filename> + (用于 info 浏览器的文档) 或 <filename>share</filename> + (平台无关的其它文件)。 请参见 &man.hier.7; 以了解进一步的详情; 针对 + <filename>/usr</filename> 的那些规则, 同样也适用于 + <filename>/usr/local</filename>。 例外情况是那些需要和 USENET + <quote>news</quote> 打交道的 port, 它们可以选择采用 + <filename><makevar>PREFIX</makevar>/news</filename> + 作为文件的目的地。</para> + </sect2> + + </sect1> + </chapter> <chapter id="special"> @@ -4152,6 +4359,17 @@ PORTVERSION= 1.0</programlisting> </tbody> </tgroup> </table> + + <para>如果希望让第三方的 <filename>SConstruct</filename> 尊重通过 <makevar>SCONS_ENV</makevar> + (其中最重要的是 + <makevar>CC/CXX/CFLAGS/CXXFLAGS</makevar> 配置) 传给 Scons 的配置, 则需要对 + <filename>SConstruct</filename> 进行修改, 使联编的 + <literal>Environment</literal> 按下列方式建立:</para> + + <programlisting>env = Environment(**ARGUMENTS)</programlisting> + + <para>其后, 可以通过 <literal>env.Append</literal> 和 + <literal>env.Replace</literal> 来对它进行修改。</para> </sect2> </sect1> @@ -5601,7 +5819,7 @@ LIB_DEPENDS+= QtCore:${PORTSDIR}/devel/qt4-corelib <para>无论您正制作哪一类的 port (库或者应用程序), 附加的文档都应安装到和其它 port - <link linkend="dads-documentation">同样的位置</link>。 + <link linkend="install-documentation">同样的位置</link>。 已经知道, JavaDoc 会根据 JDK 版本的不同而产生不同的文件。 对于那些不打算强制使用某一特定版本 JDK 的 port 而言, 这无疑提高了制作装箱单 @@ -5648,7 +5866,7 @@ LIB_DEPENDS+= QtCore:${PORTSDIR}/devel/qt4-corelib </sect1> <sect1 id="using-php"> - <title>使用 Apache 和 PHP</title> + <title>Web 应用, Apache 和 PHP</title> <sect2 id="using-apache"> <title>Apache</title> @@ -5784,11 +6002,25 @@ LIB_DEPENDS+= QtCore:${PORTSDIR}/devel/qt4-corelib </tbody> </tgroup> </table> + </sect2> + + <sect2 id="web-apps"> + <title>Web 应用</title> <para>Web 应用程序应安装到 - <makevar>PREFIX</makevar><filename>/www/<replaceable>应用程序的名字</replaceable></filename> - 并且不应假定 Apache 的存在, 除非它们必须使用 Apache。 - 用户可能会希望运行 Apache 以外的其它 Web 服务器。</para> + <filename><makevar>PREFIX</makevar>/www/<replaceable>应用程序的名字</replaceable></filename>。 + 为方便起见, 这个路径在 + <filename>Makefile</filename> 和 <filename>pkg-plist</filename> + 均以 <makevar>WWWDIR</makevar> 变量的形式提供。</para> + + <para>web 服务器进程所用的用户和用户组, 分别以 + <makevar>WWWOWN</makevar> 和 <makevar>WWWGRP</makevar> 变量的形式提供, + 如果您需要修改某些文件的属主的话。 这两个变量的默认值均为 <literal>www</literal>。 + 如果您的 port 希望使用其他值, 请使用 <literal>WWWOWN?= myuser</literal> 这种写法, + 以便让用户能够更容易地修改它。</para> + + <para>除非您的 port 必需使用 Apache, 否则不要将其写入依赖关系。 + 请尊重运行您的应用程序的用户选择 Apache 以外的其他 web 服务器的需求。</para> </sect2> @@ -7409,6 +7641,73 @@ CFLAGS+= -DLUA_VERSION_STRING="${VER_STR}" </sect2> </sect1> + <sect1 id="using-xfce"> + <title>使用 Xfce</title> + + <para><makevar>USE_XFCE</makevar> 变量可以用来自动配置使用基于 Xfce 库或应用程序, 如 + <filename role="package">x11-toolkits/libxfce4gui</filename> 和 + <filename role="package">x11-wm/xfce4-panel</filename> 的 port 的依赖关系。</para> + + <para>目前, 系统能够识别下列 Xfce 库和应用程序:</para> + + <itemizedlist> + <listitem> + <para>libexo:<filename role="package">x11/libexo</filename></para> + </listitem> + + <listitem> + <para>libgui:<filename role="package">x11-toolkits/libxfce4gui</filename></para> + </listitem> + + <listitem> + <para>libutil:<filename role="package">x11/libxfce4util</filename></para> + </listitem> + + <listitem> + <para>libmcs:<filename role="package">x11/libxfce4mcs</filename></para> + </listitem> + + <listitem> + <para>mcsmanager:<filename role="package">sysutils/xfce4-mcs-manager</filename></para> + </listitem> + + <listitem> + <para>panel:<filename role="package">x11-wm/xfce4-panel</filename></para> + </listitem> + + <listitem> + <para>thunar:<filename role="package">x11-fm/thunar</filename></para> + </listitem> + + <listitem> + <para>wm:<filename role="package">x11-wm/xfce4-wm</filename></para> + </listitem> + + <listitem> + <para>xfdev:<filename role="package">dev/xfce4-dev-tools</filename></para> + </listitem> + + </itemizedlist> + + <para>除此之外, 还能够使用下列参数:</para> + + <itemizedlist> + <listitem> + <para>configenv: 如果您的 port 需要使用特殊的 + <makevar>CONFIGURE_ENV</makevar> 来查找所需的库。 + <programlisting>-I${LOCALBASE}/include -L${LOCALBASE}/lib</programlisting> + 会加到 <makevar>CONFIGURE_ENV</makevar> 的 CPPFLAGS。</para> + </listitem> + + </itemizedlist> + + <para>因此, 如果 port 有到 + <filename role="package">sysutils/xfce4-mcs-manager</filename> 的依赖关系, + 并需要在 configure 的环境中指定特殊的饿 CPPFLAGS, 则所用的语法为:</para> + + <programlisting>USE_XFCE= mcsmanager configenv</programlisting> + </sect1> + <sect1 id="rc-scripts"> <title>启动和停止服务 (rc 脚本)</title> @@ -7534,7 +7833,7 @@ run_rc_command "$1"</programlisting> 是 <command>perl</command> 的版本去掉 patchlevel 的部分 (例如 <literal>5.005</literal>)。 许多其它与 port 文档文件有关的 <literal>%%<replaceable>变量</replaceable>%%</literal> 在 <link - linkend="dads-documentation">相应章节</link> 中进行了介绍。</para> + linkend="install-documentation">相应章节</link> 中进行了介绍。</para> <para>如果您还需要进行其它的替换, 可以通过将 <makevar>PLIST_SUB</makevar> 变量设置为一组 @@ -8716,58 +9015,6 @@ Reference: <http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-00 也能证明您清楚地了解如何完成这些工作。</para> </sect1> - <sect1 id="dads-strip"> - <title>对可执行文件做脱模 (strip) 操作</title> - - <para>除非不得不进行, 否则不要手工对可执行文件作脱模操作。 - 所有文件在安装时都应脱模, 但 <maketarget>INSTALL_PROGRAM</maketarget> - 宏会在安装的同时对其进行脱模 (参见下一节的内容)。</para> - - <para>如果您需要对某一文件进行脱模, 但不希望使用 - <makevar>INSTALL_PROGRAM</makevar> 宏, 则应使用 - <makevar>${STRIP_CMD}</makevar> 来处理程序。 - 一般而言这应该在 <literal>post-install</literal> - target 中进行。 例如:</para> - - <programlisting>post-install: - ${STRIP_CMD} ${PREFIX}/bin/xdl</programlisting> - - <para>可以使用 &man.file.1; 命令来检查所安装的可执行文件是否进行过脱模。 - 如果它没有给出 <literal>not stripped</literal> 的提示, - 则表示已经做过脱模了。 另外, - &man.strip.1; 不会对已经脱模过的文件重新脱模, 它会直接退出的。</para> - </sect1> - - <sect1 id="dads-install"> - <title>INSTALL_* 宏</title> - - <para>您应使用由 <filename>bsd.port.mk</filename> 提供的宏来完成操作, - 以确保您自己的 <maketarget>*-install</maketarget> target - 能够正确地设置属主和权限信息。</para> - - <itemizedlist> - <listitem> - <para><makevar>INSTALL_PROGRAM</makevar> 代表用于安装二进制的可执行文件的命令。</para> - </listitem> - - <listitem> - <para><makevar>INSTALL_SCRIPT</makevar> 代表用于安装可执行脚本的命令。</para> - </listitem> - - <listitem> - <para><makevar>INSTALL_DATA</makevar> 代表用于安装普通用户可访问的数据的命令。</para> - </listitem> - - <listitem> - <para><makevar>INSTALL_MAN</makevar> 代表用于安装联机手册, - 以及其它文档的命令 (注意, 它并不会对这些文件实施压缩操作)。</para> - </listitem> - </itemizedlist> - - <para>这些宏基本上就是给出了适当参数的 <command>install</command> 命令。 - 下面给出了如何使用它们的例子。</para> - </sect1> - <sect1 id="porting-wrkdir"> <title><makevar>WRKDIR</makevar> (构建时使用的临时目录)</title> @@ -10480,6 +10727,32 @@ Reference: <http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-00 7.0-CURRENT。</entry> <entry>700030</entry> </row> + <row> + <entry>修改了 bus_setup_intr() (newbus) 之后的 7.0-CURRENT。 + </entry> + <entry>700031</entry> + </row> + <row> + <entry>引入了 ipw(4) 和 iwi(4) 固件之后的 7.0-CURRENT。 + </entry> + <entry>700032</entry> + </row> + <row> + <entry>在 ncurses 中引入了宽字符支持之后的 7.0-CURRENT。 + </entry> + <entry>700033</entry> + </row> + <row> + <entry>修改了 insmntque()、 + getnewvnode() 以及 vfs_hash_insert() 工作方式之后的 7.0-CURRENT。 + </entry> + <entry>700034</entry> + </row> + <row> + <entry>增加 CPU 频率变动通知机制之后的 7.0-CURRENT。 + </entry> + <entry>700035</entry> + </row> </tbody> </tgroup> @@ -10623,121 +10896,6 @@ post-install: 而不是空格, 对吧? <!-- smiley -->:-)</para> </sect1> - <sect1 id="dads-documentation"> - <title>安装附加的文档</title> - - <para>如果您的软件包含了标准的联机手册和 info 手册以外的文档, - 而且您认为它们对用户会有用, 请把这些文档安装到 - <filename><makevar>PREFIX</makevar>/share/doc</filename> 下。 - 和前面类似, 这也可以在 - <maketarget>post-install</maketarget> target 中完成。</para> - - <para>为您的 port 建立一个新的目录。 - 这个目录的名字应该反映它是属于哪个 port 的。 通常建议使用 - <makevar>PORTNAME</makevar>。 不过, 如果您认为不同版本的 port - 可能会同时安装, 也可以用完整的 - <makevar>PKGNAME</makevar>。</para> - - <para>另外, 应该让是否安装取决于变量 - <makevar>NOPORTDOCS</makevar> 的设置, 这样用户就能够在 - <filename>/etc/make.conf</filename> 中禁止安装它。 例如:</para> - - <programlisting>post-install: -.if !defined(NOPORTDOCS) - ${MKDIR} ${DOCSDIR} - ${INSTALL_MAN} ${WRKSRC}/docs/xvdocs.ps ${DOCSDIR} -.endif</programlisting> - - <para>这里是一些便于使用的变量, 以及它们在 - <filename>Makefile</filename> 中默认的展开方式:</para> - - <itemizedlist> - <listitem> - <para><makevar>DATADIR</makevar> 会展开成 - <filename><makevar>PREFIX</makevar>/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>EXAMPLESDIR</makevar> 会展开成 - <filename><makevar>PREFIX</makevar>/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> - </note> - - <para>这些变量也会被导出到 <makevar>PLIST_SUB</makevar> 中。 - 只要可能, 它们的值就将在那里以相对于 - <filename><makevar>PREFIX</makevar></filename> 的路径形式出现。 - 也就是说, <filename>share/doc/<makevar>PORTNAME</makevar></filename> - 在装箱单中默认情况下会替换掉 <literal>%%DOCSDIR%%</literal>, 等等。 - (更多的 <filename>pkg-plist</filename> 代换可以在 - <link linkend="plist-sub">这里</link> 找到。)</para> - - <para>所有的安装的文档文件和目录, - 都应在 <filename>pkg-plist</filename> 出现, 并且使用 - <literal>%%PORTDOCS%%</literal> 前缀, 例如:</para> - - <programlisting>%%PORTDOCS%%%%DOCSDIR%%/AUTHORS -%%PORTDOCS%%%%DOCSDIR%%/CONTACT -%%PORTDOCS%%@dirrm %%DOCSDIR%%</programlisting> - - <para>如果不希望在 <filename>pkg-plist</filename> 中逐个列举文档文件, port - 也可以将 <makevar>PORTDOCS</makevar> 设置为一组文件及其 shell glob - 模式, 通过这种方式来加入到最终的装箱单中。 - 这些名字应是相对于 <makevar>DOCSDIR</makevar> 的。 - 因此, 使用了 <makevar>PORTDOCS</makevar>, - 并将文档安装到非标准位置的 port, 应相应地设置 - <makevar>DOCSDIR</makevar>。 - 如果有在 <makevar>PORTDOCS</makevar> 中列出目录, - 或者这一变量中的 glob 模式匹配到了目录, 则整个子树中的文件和目录, - 都将被注册到最终的装箱单中。 如果定义了 <makevar>NOPORTDOCS</makevar>, 则 - <makevar>PORTDOCS</makevar> 中定义的文件和目录将不被安装或加入装箱单。 - 是否安装文档到前面所说的 <makevar>PORTDOCS</makevar> 仍取决于 port 本身。 - 下面是一个典型的使用 <makevar>PORTDOCS</makevar> 的例子:</para> - - <programlisting>PORTDOCS= README.* ChangeLog docs/*</programlisting> - - <note> - <para>您也可以使用 <filename>pkg-message</filename> 这个文件, - 来在安装时显示一些信息。 参见 <link - linkend="porting-message">关于使用 - <filename>pkg-message</filename> 的这一节</link> 以了解进一步的详情。 - 需要说明的是, 并不需要把 <filename>pkg-message</filename> 加到 - <filename>pkg-plist</filename> 中。</para> - </note> - </sect1> - - <sect1 id="dads-subdirs"> - <title>子目录</title> - - <para>尽可能让 port 将它创建的文件, 放置到 - <makevar>PREFIX</makevar> 中正确的位置。 一些 port - 会把各式各样的东西混在一起, 并放到一个同名的目录中, 这是不对的。 - 另外, 许多 port 会把除了可执行文件、 头文件和联机手册之外的所有文件, - 全都一股脑地放到 <filename>lib</filename> 中, 这在和 BSD - 配合使用时会有问题。 多数文件, - 应被放到下列位置之一: <filename>etc</filename> - (安装/配置文件)、 <filename>libexec</filename> - (由系统内部调用的可执行文件)、 <filename>sbin</filename> - (为超级用户/管理员提供的可执行文件)、 <filename>info</filename> - (用于 info 浏览器的文档) 或 <filename>share</filename> - (平台无关的其它文件)。 请参见 &man.hier.7; 以了解进一步的详情; 针对 - <filename>/usr</filename> 的那些规则, 同样也适用于 - <filename>/usr/local</filename>。 例外情况是那些需要和 USENET - <quote>news</quote> 打交道的 port, 它们可以选择采用 - <filename><makevar>PREFIX</makevar>/news</filename> - 作为文件的目的地。</para> - </sect1> - <sect1 id="dads-sh-exec"> <title>在 wrapper 脚本中使用 <function>exec</function> 语句</title> |