某些时候会需要阻止用户安装某个 port。 想要告诉用户某个 port 不应被安装, 有许多可以在 port 的 Makefile 中使用的 make 变量。 下列 make 的值, 将是在用户试图安装时得到的提示信息。 务请使用正确的 make 变量, 因为每一个都表达了截然不同的意义, 而且许多自动化系统, 例如 port 联编集群、 FreshPorts, 以及 portsmon, 都依赖于 Makefile 的正确性。
BROKEN 专门用于表达目前无法正确编译、 安装或卸载这类问题。 如果是临时性的问题, 则可以使用它。
如果进行了相关的配置, 则联编集群仍将尝试联编它, 以确认导致问题的深层问题是否已被解决。 (不过, 一般情况下, 联编集群并不会这样做。)
举例来说, 当 port 发生下述情况时, 应使用 BROKEN:
无法编译 (does not compile)
无法正确进行配置或安装操作
在 ${LOCALBASE} 以外的地方安装文件
卸载时无法删除所安装的全部文件 (不过, 留下用户改过的文件可接受的, 因为可能希望这样作)
FORBIDDEN 用于表示 ports 中包含安全漏洞, 或者可能会给安装了这个 port 的 FreeBSD 系统带来严重的安全隐患 (例如: 一个很不安全的程序, 或包含了能够被轻易攻陷的服务的软件)。 如果发现了安全漏洞, 而其作者没有发布升级版本, 则应立即把那个 port 标记为 FORBIDDEN。 理想情况下, 包含安全漏洞的 port 应被尽快升级, 以便减少包含漏洞的 FreeBSD 主机的数量 (我们希望保持良好的安全记录), 然而, 有时在安全漏洞的披露和软件更新之间可能会有一个间隔, 此时应予以说明。 除了安全之外, 请不要以任何其它理由将 port 标记为 FORBIDDEN。
IGNORE 用来表示 port 由于某些其它原因不应予以联编。 如果认为发生了结构性的问题, 则应使用它。 任何情况下, 联编集群都不会联编标记为 IGNORE 的 port。 以下是使用 IGNORE 的一些例子:
能够编译但无法正常运行
无法与运行的 FreeBSD 版本一同工作
联编时需要 FreeBSD 内核的源代码, 但用户没有安装它们
由于授权原因, 必须手工下载 distfile
无法与的某个已安装的 port 一同工作 (例如, port 依赖于 www/apache21 而安装的则是 www/apache13)
注意: 如果 port 与某个已经安装的 port 冲突 (例如, 它们在同一位置安装同名但功能不同的文件), 则应 使用 CONFLICTS 来标记它。 CONFLICTS 将自动地设置 IGNORE。
如果 port 只应在某些平台上标记为 IGNORE, 还有另外两个方便使用的 IGNORE 变量可供选择: ONLY_FOR_ARCHS 和 NOT_FOR_ARCHS。 例如:
ONLY_FOR_ARCHS= i386 amd64
NOT_FOR_ARCHS= alpha ia64 sparc64
可以使用 ONLY_FOR_ARCHS_REASON 和 NOT_FOR_ARCHS_REASON 来配置定制的 IGNORE 消息。 此外, 还可以使用 ONLY_FOR_ARCHS_REASON_ARCH 和 NOT_FOR_ARCHS_REASON_ARCH 来分别指定与具体平台有关的信息。
如果 port 会下载并安装用于 i386 的预编译二进制文件, 则应设置 IA32_BINARY_PORT。 如果设置了这个变量, 则系统会检查是否已经在 /usr/lib32 目录中安装了 IA32 版本的函数库, 以及内核是否提供了 IA32 兼容支持。 如果这些依赖条件不满足, 则会自动设置 IGNORE。
这些字串不应使用引号括起来。 此外, 由于显示给用户的方式不同, 这些字串的措辞也应有所不同。 例如:
BROKEN= this port is unsupported on FreeBSD 5.x
IGNORE= is unsupported on FreeBSD 5.x
它们分别会在 make describe 时产生下面的输出:
===> foobar-0.1 is marked as broken: this port is unsupported on FreeBSD 5.x.
===> foobar-0.1 is unsupported on FreeBSD 5.x.