FreeBSD Porter 手册
上一页 |  | 下一页

# 第7章 　高级 `pkg-plist` 用法

# 7.1 根据 make 变量对 `pkg-plist` 进行修改

某些 port， 特别是 `p5-` port， 会需要根据配置选项 (或对于 `p5-` port 而言， `perl` 的版本) 来修改它们的 `pkg-plist`。 为简化这一工作， 在 `pkg-plist` 中的 `%%OSREL%%`、 `%%PERL_VER%%`， 以及 `%%PERL_VERSION%%` 将自动进行相应的替换。 其中， `%%OSREL%%` 的值是操作系统以数值表示的版本 (例如 `4.9`)。 `%%PERL_VERSION%%` 和 `%%PERL_VER%%` 是 `perl` 的完整版本号 (例如 `5.8.9`)。许多其它与 port 文档文件有关的 `%%`变量`%%` 在 相应章节 中进行了介绍。

如果您还需要进行其它的替换， 可以通过将 `PLIST_SUB` 变量设置为一组 ``变量`=`值`` 对来实现。 其中， `%%`VAR`%%` 表示在 `pkg-plist` 中将被 `值` 替换的那些文字。

举例来说， 如果 port 需要把很多文件放到和版本有关的目录中， 可以在 `Makefile` 中按照类似下面的例子：

    OCTAVE_VERSION= 2.0.13
    PLIST_SUB=      OCTAVE_VERSION=${OCTAVE_VERSION}

并在 `pkg-plist` 中将具体的版本替换为 `%%OCTAVE_VERSION%%`。 这样， 在升级 port 时， 就不需要再到 `pkg-plist` 中修改那几十 (或者， 有时甚至是上百) 行的内容了。

如果您的 port 需要根据一定的配置来有条件地安装一些文件， 通常的做法是在 `pkg-plist` 中列出这些文件时， 在对应行的开头加上 `%%TAG%%`， 并将 `TAG` 写到 `Makefile` 中的 `PLIST_SUB` 变量中， 根据需要替换掉， 或替换为 `@comment`， 后者表示让打包工具忽略这行：

    .if defined(WITH_X11)
    PLIST_SUB+= X11=""
    .else
    PLIST_SUB+= X11="@comment "
    .endif

与之对应， 在 `pkg-plist` 中：

    %%X11%%bin/foo-gui

这一替换过程 (以及加入 联机手册 的过程)， 会在 `pre-install` 和 `do-install` 两个 target 之间， 通过读取 ``PLIST`` 并写入 ``TMPPLIST`` (默认情况下， 是： ``WRKDIR`/.PLIST.mktmp`) 来完成。 因此， 如果您的 port 动态生成 ``PLIST``， 就需要在 `pre-install` 之前完成。 另外， 如果您的 port 需要编辑所生成的文件， 则需要在 `post-install` 中操作名为 ``TMPPLIST`` 的那个文件。

另一种可行的修改装箱单的方法， 则是根据 `PLIST_FILES` 和 `PLIST_DIRS` 这两个变量的设置来进行。 它们的值会作为目录名连同 ``PLIST`` 的内容一起写入 ``TMPPLIST``。 在 `PLIST_FILES` 和 `PLIST_DIRS` 中列出的名字， 会经历前面所介绍的 `%%`变量`%%` 替换过程。 除此之外， 在 `PLIST_FILES` 中列出的文件， 会不加任何修改第出现在最终的装箱单中， 而 `@dirrm` 将作为前缀加到 `PLIST_DIRS` 所列的名字之前。 为了达到目的， `PLIST_FILES` 和 `PLIST_DIRS` 必须在写 ``TMPPLIST`` 之前， 也就是在 `pre-install` 或更早的阶段进行设置。

上一页 | 起始页 | 下一页
依赖内核源代码的 Ports |  | 空目录

若您有关于 FreeBSD ports 系统的问题， 请发送电子邮件至 <ports@FreeBSD.org>。
关于此文档的任何问题， 请致函 <doc@FreeBSD.org>。