diff --git a/zh_CN.GB2312/books/porters-handbook/book.sgml b/zh_CN.GB2312/books/porters-handbook/book.sgml index 4e08447b72..41c5fecaef 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.762 + Original Revision: 1.769 $FreeBSD$ --> @@ -3352,8 +3352,8 @@ PKGNAMESUFFIX= ${RESOLUTION} RESOLUTION?= 300 .if ${RESOLUTION} != 118 && ${RESOLUTION} != 240 && \ ${RESOLUTION} != 300 && ${RESOLUTION} != 400 - @${ECHO} "Error: invalid value for RESOLUTION: \"${RESOLUTION}\"" - @${ECHO} "Possible values are: 118, 240, 300 (default) and 400." + @${ECHO_MSG} "Error: invalid value for RESOLUTION: \"${RESOLUTION}\"" + @${ECHO_MSG} "Possible values are: 118, 240, 300 (default) and 400." @${FALSE} .endif @@ -4948,7 +4948,7 @@ BUILD_DEPENDS+= Xvfb:${X_VFBSERVER_PORT} \ 在 Ports Collection 中有许多不同的 JDK, 它们的版本各不相同, 或是来自不同的供应商。 如果您的 port 必须使用其中的某个特定的版本, 也可以予以定义。 最新的稳定版本是 - java/jdk14 + java/jdk15用到 Java 的 port 可以使用的变量 @@ -5887,84 +5887,1093 @@ USE_SDL+= mixer - 使用 wxWidgets + 使用 <application>wxWidgets</application> - 如果您的 port 用到了跨平台工具套件 wxWidgets, - 则应定义 USE_WX。 此外, 必须通过类似 - USE_WX=2.6 这样的形式来指定具体的版本。 除此之外, - 还可以指定范围 (2.4-2.6) - 和开区间 (-2.42.6+) - 这样的形式。 + 这一节介绍了在 ports tree 中的 + wxWidgets 库的现状, + 以及它与 ports 系统的集成。 - 所需的 wxWidgets 组件可以通过 - WX_COMPS 来设置。 除非另外指定, - port 将依赖于 wxWidgets 库 (wx)。 - 可用的组件包括: + + 介绍 -
- <makevar>WX_COMPS</makevar> 的可选值 + 许多不同版本的 + wxWidgets 库之间是存在相互冲突的 (它们会安装同名的文件) + 在 ports 系统中, 这一问题是通过将不同的版本以包含版本号后缀的名字安装来解决的。 - - - - + 这样做的一个最明显的缺点是, 应用程序必须进行修改, 才能找到所希望的版本。 + 幸运的是, 多数应用程序会调用 wx-config 脚本来确定需要的编译器和连接器选项。 + 这个脚本会随可用的版本不同而有不同的名字。 主要的应用程序都会尊重环境变量的配置, + 或提供一个 configure 参数, 用以指定调用哪个 wx-config。 + 如果不是这样的话, 就需要对应用程序打补丁了。 + - 意义 - - + + 版本的选择 - - - wx + 为了让您的 port 使用指定版本的 + wxWidgets, 可以定义两个变量 (如果只定义了一个, + 则另一个会取默认值): - wxWidget 函数库 - +
+ 用于选择 <application>wxWidgets</application> + 版本的变量 - - contrib + + + + 变量 - wxWidget 第三方函数库 - + 说明 - - python + 默认值 + + - wxPython - + + + USE_WX - - mozilla + 列出这个 port 能使用的版本 - wxMozilla (仅限于 2.4 以上版本) - + 全部版本 + - - svg + + USE_WX_NOT - wxSVG (仅限于 2.6 以上版本) - - - -
+ 列出这个 port 不能使用的版本 - 如果查找 wxWidget 函数库需要通过 WX_CONFIG 变量以外的 - configure 参数 来指定, 则应在 port 中设置 - WX_CONF_ARGS。 可选的值包括表示 - --with-wx-config=${WX_CONFIG} 的 - absolute, 以及表示 - --with-wx=${X11BASE} --with-wx-config=${WX_CONFIG} 的 - relative; 这些参数将作为 configure 的参数。 + + + + + - 如果您的 port 需要 Unicode 版本的 wxWidgets 函数库, 则应定义 - WX_UNICODE=yes + 下面是可用的 + wxWidgets 版本, 以及对应的 + ports: - 下面是一个表示 port 需要 Unicode 版本的 wxWidgets 2.6 和 - contrib 函数库的例子: + + 可用的 <application>wxWidgets</application> + versions - USE_WX= 2.6 -WX_COMPS= wx contrib -WX_UNICODE= yes + + + + 版本 + Port + + + + + + 2.4 + + x11-toolkits/wxgtk24 + + + + 2.6 + + x11-toolkits/wxgtk26 + + + +
+ + + 2.6 版也提供了一个 Unicode + 版本, 这个版本可以通过 slave port x11-toolkits/wxgtk26-unicode 来安装, + 但这也是通过变量来指定的 (参见 )。 + + + 中的变量, + 可以设为下列值或由空格分隔的组合: + + + <application>wxWidgets</application> 版本 + + + + + 说明 + + 例子 + + + + + + 单个版本 + + 2.4 + + + + 某版本以上版本 + + 2.4+ + + + + 某版本以下版本 + + 2.6- + + + + 某段版本 (版本号较小的必须在前) + + 2.4-2.6 + + + +
+ + 除此之外, 还有一些用以从可用的本那本中选择所希望的版本的变量。 + 这种变量也可以设为一组版本, 而靠前的版本的优先级更高。 + + + 用于选择希望的版本的 + <application>wxWidgets</application> versions + + + + + 变量名 + + 用于 + + + + + + WANT_WX_VER + + port + + + + WITH_WX_VER + + 用户 + + + +
+ + + 选择组件 + + 也有一些其他应用, 尽管它们本身并不是 + wxWidgets 库, 但却与之相关。 + 这些应用程序可以在 + WX_COMPS 变量中使用, 以下是可用的组件: + + + 可用的 <application>wxWidgets</application> + 组件 + + + + + 名称 + + 说明 + + 版本限制 + + + + + + wx + + 主库 + + + + + + contrib + + 第三方库 + + + + + + python + + wxPython + (Python 绑定) + + + + + + mozilla + + wxMozilla + + 2.4 + + + + svg + + wxSVG + + 2.6 + + + +
+ + 您可以为每个依赖的组件, 通过冒号分隔的后缀指定其类型。 + 如果没有指定, 则会使用默认的依赖类型 (参见 )。 + 下面是可用的类型: + + + 可用的 <application>wxWidgets</application> 依赖类型 + + + + + 名称 + + 说明 + + + + + + build + + 联编时需要该组件, 相当于 + BUILD_DEPENDS + + + + run + + 运行时需要该组件, 相当于 + RUN_DEPENDS + + + + lib + + 联编和运行时均需要该组件, + 相当于 LIB_DEPENDS + + + +
+ + 组件的默认依赖关系类型, 如下表所示: + + + 默认的 <application>wxWidgets</application> 依赖关系类型 + + + + + 组件 + + 依赖关系类型 + + + + + + wx + + lib + + + + contrib + + lib + + + + python + + run + + + + mozilla + + lib + + + + svg + + lib + + + +
+ + + 选择 <application>wxWidgets</application> + 组件 + + 下面的片段展示了使用 + wxWidgets 版本 + 2.4 及第三方库的方法。 + + USE_WX= 2.4 +WX_COMPS= wx contrib + +
+ + Unicode + + wxWidgets 库从其 2.5 + 版开始支持 Unicode 了。 在 ports 系统中, 这两种版本均有提供, + 并可以通过下列变量来选择: + + + 用以在 Unicode 版本的 + <application>wxWidgets</application> + 的变量 + + + + + 变量 + + 说明 + + 作用 + + + + + + WX_UNICODE + + 该 port 只能 配合 + Unicode 版本使用 + + port + + + + WANT_UNICODE + + port 能够与两种版本配合使用, 但希望使用 + Unicode 版本 + + port + + + + WITH_UNICODE + + 令 port 使用 Unicode 版本 + + 用户 + + + + WITHOUT_UNICODE + + 令 port 使用普通版本, + 如果支持的话 (即未定义 WX_UNICODE) + + 用户 + + + +
+ + + 如果 port 同时支持 Unicode 和普通版本, + 请不要使用 WX_UNICODE。 如果希望默认启用 + Unicode, 应定义 WANT_UNICODE + +
+ + + 检测已安装的版本 + + 要检测系统中安装的版本, 就需要定义 + WANT_WX。 如果没有将其设置为特定的版本, + 则组件将包含版本后缀。 + HAVE_WX 变量在检测完成后会自动填入内容。 + + + 检测已安装的 <application>wxWidgets</application> + 版本和组件 + + 下面的片段可以在安装 + wxWidgets 的系统中令 port 使用它, + 反之则作为一项选项提供。 + + WANT_WX= yes + +.include <bsd.port.pre.mk> + +.if defined(WITH_WX) || ${HAVE_WX:Mwx-2.4} != "" +USE_WX= 2.4 +CONFIGURE_ARGS+=--enable-wx +.endif + + 下面的片段在系统中有安装过时启用 + wxPython 支持, + 或在没有安装时作为选项提供; 对 + wxWidgets 也是如此办理, 版本皆为 + 2.6 + + USE_WX= 2.6 +WX_COMPS= wx +WANT_WX= 2.6 + +.include <bsd.port.pre.mk> + +.if defined(WITH_WXPYTHON) || ${HAVE_WX:Mpython} != "" +WX_COMPS+= python +CONFIGURE_ARGS+=--enable-wxpython +.endif + + + + + 定义的变量 + + 以下是一些可以在 port 中使用的变量 + (这之前需要定义 中的至少一个变量)。 + + + 为使用 + <application>wxWidgets</application> 的 port 定义的变量 + + + + + 变量名 + + 说明 + + + + + + WX_CONFIG + + wxWidgets + wx-config 脚本的路径 (名字会随版本不同而不同) + + + WXRC_CMD + + wxWidgets + wxrc 程序的路径 (名字会随版本不同而不同) + + + WX_VERSION + + 将要用到的 wxWidgets 版本 + (例如, 2.6) + + + + WX_UNICODE + + 如果没有定义, 而将会使用 Unicode 时, 系统将自动定义此变量。 + + + +
+
+ + + 在 <filename>bsd.port.pre.mk</filename> 中进行处理 + + 如果您需要在引用了 bsd.port.pre.mk 之后立即对一些变量进行处理, + 则需要定义 WX_PREMK + + + 如果定义了 WX_PREMK, 则在此 + 之后 定义的依赖关系、 组件和变量将不会生效, + 您在引用 bsd.port.pre.mk + 之前的 wxWidgets port 变量将直接起作用。 + + + + 在命令中使用 <application>wxWidgets</application> 变量 + + 下面的片段以执行 + wx-config 脚本来得到完整的版本号, + 将其赋值到变量中, 并传递给一个程序举例说明了 + WX_PREMK 的用法。 + + USE_WX= 2.4 +WX_PREMK= yes + +.include <bsd.port.pre.mk> + +.if exists(${WX_CONFIG}) +VER_STR!= ${WX_CONFIG} --release + +PLIST_SUB+= VERSION="${VER_STR}" +.endif + + + + 在 target 中的 wxWidgets 变量可以直接使用, + 而无需 WX_PREMK 的参与。 + + + + + + 使用 <application>Lua</application> + + 这一节描述了在 ports 系统中的 + Lua 库的现状, 以及它与 ports 系统的集成。 + + + 介绍 + + 许多不同版本的 Lua + 库和相关的解释器之间是相互冲突的 (它们会安装同名的文件)。 + 在 ports 系统中, 这一问题是通过将不同版本的文件以不同的版本号作为后缀名解决的。 + + 这样做最大的一个问题是, 每个程序都需要进行修改才能找到它所需要的版本。 + 不过, 通过将适当的参数传给编译器和连接器很容易解决这个问题。 + + + + 选择版本 + + 要让您的 port 使用指定版本的 + Lua, + 可以定义两个变量的值 (如果只定义了其中的一个, 则另一个会使用默认值): + + + 用于选择 <application>Lua</application> + 版本的变量 + + + + + 变量 + + 说明 + + 默认值 + + + + + + USE_LUA + + port 能够使用的 Lua 版本列表 + + 全部可用版本 + + + + USE_LUA_NOT + + 与 port 不兼容的版本列表 + + + + + +
+ + 下面是目前 ports 系统提供的可用 + Lua 版本和对应的目录: + + + 可用的 <application>Lua</application> 版本 + + + + + 版本 + + Port + + + + + + 4.0 + + lang/lua4 + + + + 5.0 + + lang/lua50 + + + + 5.1 + + lang/lua + + + +
+ + 中的变量, + 可以设置为下面的版本之一, 或用空格分隔的若干版本: + + + 指定 <application>Lua</application> 版本 + + + + + 说明 + + 例子 + + + + + + 一个版本 + + 4.0 + + + + 某个版本或更高版本 + + 5.0+ + + + + 不高于某个版本 + + 5.0- + + + + 版本范围 (低版本必须在前) + + 5.0-5.1 + + + +
+ + 除此之外, 也有一些用来从可用版本中选择推荐版本的其它变量。 这些变量也可以设置为一组版本, + 而前面的版本优先级较高。 + + + 用于选择推荐 <application>Lua</application> + 版本的变量 + + + + + 变量名 + + 用于 + + + + + + WANT_LUA_VER + + port + + + + WITH_LUA_VER + + 用户 + + + +
+ + + 选择 <application>Lua</application> 版本 + + 下面是一个用到 + Lua 版本 5.0 或 + 5.1, 并默认使用 5.0 + 的 port 的片段。 这个默认值可以通过 + WITH_LUA_VER 来另外指定。 + + USE_LUA= 5.0-5.1 +WANT_LUA_VER= 5.0 + +
+ + + 组件的选择 + + 也有一些其它的应用, 尽管本身并不是 + Lua 库, 但却与它们相关。 + 这些应用可以通过 LUA_COMPS + 变量来指定。 可用的组件如下: + + + 可用的 <application>Lua</application> 组件 + + + + + 名字 + + 说明 + + 版本限制 + + + + + + lua + + 主库 + + + + + + tolua + + 用于访问 C/C++ 代码的库 + + 4.0-5.0 + + + + ruby + + Ruby 绑定 + + 4.0-5.0 + + + +
+ + + 还有一些其它的组件, 但这些组件是由解释器, + 而不是由应用程序使用的 (也就是不被其它模块使用)。 + + + 每个组件的依赖关系类型可以通过手工添加分隔符为冒号的后缀来指定。 + 如果不指定, 则会采用默认类型 (请参见 )。 + 以下是可用的依赖关系类型: + + + 可用的 <application>Lua</application> 依赖关系类型 + + + + + 名字 + + 说明 + + + + + + build + + 这个组件是联编过程所必需的, 相当于 + BUILD_DEPENDS + + + + run + + 在运行时需要这个组件, 相当于 + RUN_DEPENDS + + + + lib + + 这个组件在联编和运行时都需要, + 相当于 LIB_DEPENDS + + + +
+ + 组件的默认依赖关系类型如下: + + + 默认的 <application>Lua</application> 依赖关系类型 + + + + + 组件 + + 依赖关系类型 + + + + + + lua + + 对于 4.0-5.0lib + (动态连接) 而对于 5.1 则是 + build (静态连接) + + + + tolua + + build (静态连接) + + + + ruby + + lib (动态连接) + + + +
+ + + 选择 <application>Lua</application> 组件 + + 下面是一个使用了 + Lua 版本 4.0 + 及其 Ruby 绑定的 port 片段。 + + USE_LUA= 4.0 +LUA_COMPS= lua ruby + +
+ + + 检测系统中已安装的版本 + + 要检测系统中已安装的版本, 您必须定义 + WANT_LUA。 如果没有将其设定为具体的版本, + 则组件会包含版本后缀。 在检测之后, + HAVE_LUA 变量将设为检测到的版本。 + + + 检测已安装的 <application>Lua</application> 版本和组件 + + 下面是一个如果系统中有安装 + Lua 或选择了选项时使用它的 port 片段。 + + WANT_LUA= yes + +.include <bsd.port.pre.mk> + +.if defined(WITH_LUA5) || ${HAVE_LUA:Mlua-5.[01]} != "" +USE_LUA= 5.0-5.1 +CONFIGURE_ARGS+=--enable-lua5 +.endif + + 下面的这段 port 在系统中已经有安装, 或用户选择了 + tolua 和 + Lua 支持时加以安装, 版本均选择 + 4.0 + + USE_LUA= 4.0 +LUA_COMPS= lua +WANT_LUA= 4.0 + +.include <bsd.port.pre.mk> + +.if defined(WITH_TOLUA) || ${HAVE_LUA:Mtolua} != "" +LUA_COMPS+= tolua +CONFIGURE_ARGS+=--enable-tolua +.endif + + + + + 定义的变量 + + 在 port 中可以使用下列变量 (在定义了 + 中至少一个变量之后)。 + + + 为用到 + <application>Lua</application> 的 port 定义的变量 + + + + + 变量名 + + 说明 + + + + + + LUA_VER + + 将要使用的 Lua 版本。 + (例如, 5.1) + + + + LUA_VER_SH + Lua 动态连接库的主版本 + (例如, 1) + + + + LUA_VER_STR + + 不带点的 Lua 版本 + (例如, 51) + + + + LUA_PREFIX + + 安装 Lua (及其组件) 使用的后缀 + + + + LUA_SUBDIR + + ${PREFIX}/bin、 + ${PREFIX}/share 和 + ${PREFIX}/lib 中用于安装 + Lua 的子目录 + + + + LUA_INCDIR + + 用以安装 Lua 和 + tolua 头文件的目录 + + + + LUA_LIBDIR + + 用以安装 Lua 和 + tolua 库文件的目录 + + + + LUA_MODLIBDIR + + 用以安装 Lua + 模块动态连接库 (.so) 的目录 + + + + LUA_MODSHAREDIR + + 用以安装 Lua + 模块 (.lua) 的目录 + + + + LUA_PKGNAMEPREFIX + + Lua 模块包的后缀名 + + + LUA_CMD + + Lua + 解释器的路径 + + + LUAC_CMD + + Lua + 编译器的路径 + + + TOLUA_CMD + + tolua + 程序的路径 + + + +
+ + + 告诉 port 到什么地方去找 + <application>Lua</application> + + 下面的 port 片段展示了如何告诉使用的 + configure 脚本去什么地方查找 Lua + 的头文件和库文件。 + + +USE_LUA= 4.0 +GNU_CONFIGURE= yes +CONFIGURE_ENV= CPPFLAGS="-I${LUA_INCDIR}" LDFLAGS="-L${LUA_LIBDIR}" + +
+ + + 在 <filename>bsd.port.pre.mk</filename> 时进行处理 + + 如果您需要在使用引用 bsd.port.pre.mk 之后就得到变量, + 以便将其用于执行一些命令, 需要定义 LUA_PREMK + + + 如果您定义了 LUA_PREMK, 则在您引用 + bsd.port.pre.mk 之后, + 即使修改了 Lua port 变量, + 版本和依赖关系也都不会随之发生变化了。 + + + + 在命令中使用 <application>Lua</application> 变量 + + 下面的片段展示了如何利用 + LUA_PREMK, 并运行 + Lua 解释器得到完整的版本串, + 将其赋值给一个变量, 并传递给程序。 + + USE_LUA= 5.0 +LUA_PREMK= yes + +.include <bsd.port.pre.mk> + +.if exists(${LUA_CMD}) +VER_STR!= ${LUA_CMD} -v + +CFLAGS+= -DLUA_VERSION_STRING="${VER_STR}" +.endif + + + + 在 target 中的 Lua 变量可以在命令中安全的使用, + 而无需使用 + LUA_PREMK + +
@@ -6317,6 +7326,23 @@ etc/orbit.conf.sample 这一特性通常可以用于在 &man.pkg.add.1; 之后显示一些附加的安装步骤, 或显示关于授权的信息。 + 当需要显示一些编译开关或警告时, + 请使用 ECHO_MSG。 + pkg-message 文件只是为显示安装后的执行操作指导使用的。 + 类似地, 还需要留意 + ECHO_MSGECHO_CMD + 之间的区别。 前一个是在屏幕上显示消息性的文字, 而后一个则用于在执行命令时使用管道。 + + 下面是用到了这两个宏的例子 + shells/bash2/Makefile + + update-etc-shells: + @${ECHO_MSG} "updating /etc/shells" + @${CP} /etc/shells /etc/shells.bak + @( ${GREP} -v ${PREFIX}/bin/bash /etc/shells.bak; \ + ${ECHO_CMD} ${PREFIX}/bin/bash) >/etc/shells + @${RM} /etc/shells.bak + pkg-message 文件, 并不需要明确地加到 pkg-plist 中。 @@ -8932,6 +9958,10 @@ Reference: <http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-00 汇入 OpenSSL 0.9.8d 之后的 7.0-CURRENT。 700024 + + 加入了 libelf 之后的 7.0-CURRENT。 + 700025 +