有三个不同的变量来注册包和ports之间的冲突: CONFLICTS , CONFLICTS_INSTALL 和 CONFLICTS_BUILD 。
当移除几个冲突的ports之一时,建议在其他ports中保留 CONFLICTS 几个月,以迎合那些偶尔更新一次的用户。
CONFLICTS_INSTALL
如果软件包无法与其他软件包共存(因为文件冲突、运行时不兼容等)。在构建阶段之后、安装阶段之前进行 CONFLICTS_INSTALL 检查。
CONFLICTS_BUILD
如果port在其他特定ports已安装时无法构建。构建冲突不记录在生成的软件包中。
CONFLICTS
如果port在某个特定port已安装的情况下无法构建,并且生成的软件包无法与其他软件包共存。在构建阶段和安装阶段之前进行 CONFLICTS 检查。
CONFLICTS* 变量值中的每个以空格分隔的项目都会与除正在
但是以下命令会报告冲突,因为安装的软件包基本名称是 git-lite ,而 git 将被构建,但不能与 git-lite 一起安装:
没有该功能,Makefile 将需要为每个风味列出一个 _flavor__CONFLICTS_INSTALL ,列出每个其他风味。
这些变量中最常见的内容是另一个port的软件包基名。软件包基名是没有附加版本的软件包名称,可以通过运行 make -V PKGBASE 获得。
示例 46. CONFLICTS* 的基本用法
如果 dns/bind910 存在,则无法安装 dns/bind99,因为它们安装相同的文件。首先收集要使用的软件包基础:
然后将其添加到 dns/bind99 的 Makefile 中:
将内容添加到 dns/bind910 的 Makefile 文件中:
有时,只有另一个 port 的特定版本是不兼容的。在这种情况下,使用完整的包名称,包括版本号。如有必要,使用 shell 通配符,如 * 和 ? ,以便匹配所有必要的版本。
示例 47. 使用通配符 CONFLICTS* 。
从版本 2.0 及更高版本到 2.4.1_2,deskutils/gnotime 曾经安装一个捆绑版本的 databases/qof。
为了反映这一过去,databases/qof 的 Makefile 包含:
第一个条目匹配版本 2.0 到 2.3 ,第二个匹配所有的 2.4.0 版本修订,第三个精确匹配 2.4.1 版本,最后一个匹配 2.4.1 版本的第一和第二个修订。
deskutils/gnotime 没有任何冲突行,因为其当前版本与其他任何东西都不冲突。
当制作不受冲突影响的目标时,可以暂时设置变量 DISABLE_CONFLICTS 。这个变量不能在port Makefiles 中设置。