GLEP 29:USE 标记组

作者 Ciaran McCreesh <ciaranm@gentoo.org>
类型 标准跟踪
状态 已撤回
版本 1
创建日期 2004-08-19
最后修改日期 2019-11-07
发布历史 2004-08-21, 2004-10-18, 2004-10-25, 2005-07-24
GLEP 源码 glep-0029.rst

状态

应作者要求撤回。

摘要

目前,USE 标记必须逐个选择,这使得为机器的角色适当地设置 make.conf 变得非常耗时。

动机

许多软件包对其他软件包提供了可选支持(例如,Vim 文本编辑器可以选择性地支持 perl、python 和 ruby 解释器)。在 Gentoo 中,用户可以使用 USE 标记选择这些可选依赖项。这允许构建适合给定环境的系统——例如,服务器通常不应该具有 X11 服务器或声音支持,而这两个功能在大多数桌面系统上都是理想的。

由于有数百个 USE 标记可用,因此决定启用哪些 USE 标记并禁用哪些 USE 标记可能需要很长时间。尽管默认的 USE 标记设置是合理的,但它们显然不适用于每个系统。此外,使用 "-*" 禁用所有默认 USE 标记可能存在风险,因为某些 USE 标记通常不应关闭。此 GLEP 提出了一种将 USE 标记分组以简化选择并使 USE="-*" 不那么危险的机制。

规范

组规范

一个组应包含一个或多个标记。每个标记可以是 USE 标记、-USE 标记、对另一个组的引用或对另一个组的否定引用。

这些组在${PORTDIR}/profiles/use.groups中定义。建议仅对组使用大写名称,以使它们在视觉上与普通 USE 标记(几乎所有 USE 标记都小写)区分开来,尽管这不应该以编程方式强制执行。该文件格式应类似于现有的 use.* 文件。在以下内容中,SOME_GROUPOTHER_GROUP是组名,而flag1flag5是 USE 标记名

SOME_GROUP flag1 flag2 flag3
OTHER_GROUP flag2 flag4

组可以递归地包含其他组。为了与 GLEP 23 [1] 保持一致,建议在组名之前加上“at”符号 (@)。

GROUP1 flag1
GROUP2 flag2 flag3 @GROUP1
GROUP3 flag4
GROUP4 @GROUP2 @GROUP3 flag5

同一个标记最终可能在某个特定组中出现多次。

GROUP1 flag1 flag2
GROUP2 flag2 flag3
GROUP3 @GROUP1 @GROUP2 flag3 flag4

与类似文件一样,可以包含注释。以井号 (#) 开头的行是注释。

# This is a comment
FOO bar baz fnord

用户可以使用/etc/portage/use.groups创建自己的组。如果存在重复项,此文件将覆盖配置文件设置。

组应该可以指定 -use 标记,尽管由于下面讨论的原因,此功能不应普遍使用。语法相同。

# This group contains two negative flags
GROUP1 flag1 -flag2 -flag3 flag4

不能包含循环组引用。以下示例是非法的。

# Illegal circular references
GROUP1 @GROUP2 foo
GROUP2 @GROUP1 bar

组描述

组应与其关联的文本描述相同,就像 USE 标记一样。文件${PORTDIR}/profiles/use.groups.desc包含这些描述。

# This is a comment
DESKTOP Flags which are appropriate for most desktop systems
RECOMMENDED Flags which should be enabled on almost all systems

使用组

组可以在/etc/make.conf, /etc/portage/package.use以及其他通常指定 USE 标记的地方使用。它们不能IUSE` 中使用。和以前一样,@ 符号用于指示正在引用组。例如,用于 KDE 桌面系统的 ``make.conf可能类似于

USE="@DESKTOP @KDE perl alsa dvd"

组前面可以加 - 符号以反转其内容(即,所有“启用”use 标记都变成 -标记,所有 -标记都变成启用标记)。请注意,此功能可能会造成混淆(请参见下文)。示例用法

# We have the following groups defined...
GROUP1 foo bar
GROUP2 -bar baz -fnord
GROUP3 @GROUP1 -@GROUP2 -bar foo
GROUP4 -foo -bar

# And the following...
USE="-@GROUP3 @GROUP4 bar"

# which resolves to...
USE="-@GROUP1 @GROUP2 bar -foo -foo -bar bar"
USE="-foo -bar bar -baz fnord bar -foo -foo -bar bar"
USE="-baz fnord -foo bar"

-flags 和 -@GROUPS 的问题

此 GLEP 的早期草案不允许 -use 标记或 -@GROUPS。但是,由于收到诸如“我们不应该仅仅因为某些用户不理解而禁止功能”(例如,[3])之类的反馈,现在允许但建议避免使用这些功能。

这些问题最好通过示例来说明。假设我们定义了以下组:

KDE X kde qt
GNOME X gtk gtk2 gnome

想要 KDE 桌面但没有 GNOME 的用户可以执行以下操作:

USE="@KDE -@GNOME"

但是,这不会产生预期的效果——XUSE 标记最终将被禁用。

类似地,如果 -use 标记使用不当,可能会导致很多混乱。例如,如果 KDE 组关闭了 GNOME 相关内容,而 GNOME 组关闭了 KDE 相关内容

KDE X kde qt -gtk -gnome
GNOME X gtk gtk2 gnome -kde -qt

并且用户希望在一个系统上同时使用 KDE 和 GNOME,因此 USE 标记如下:

USE="@KDE @GNOME"

他们最终将得到

USE="X kde qt -gtk -gnome X gtk gtk2 gnome -kde -qt"

简化为

USE="X gtk gtk2 gnome -kde -qt"

这显然不是预期的效果。

添加新组

要创建的实际组超出了此 GLEP 的范围,此处包含的任何组名都应仅视为示例。根据现有的新全局 USE 标记策略,应在 gentoo-dev 邮件列表中讨论创建新组和更改组标记。

特别是,在实施任何涉及 -flags 的更改之前,必须进行彻底的讨论。

基本原理

USE 组将简化为系统选择一组合适的 USE 标记。

参考实现

待办事项

向后兼容性

用户无需进行任何更改即可保留其当前设置。未运行支持组的 Portage 版本的用户可以继续使用当前语法,而不会产生任何副作用。

一些与 make.conf 和/或 USE 标记一起使用的工具(例如,ufed)将需要更新以理解新的组语法。

Gentoo 网站上目前有一个可用的 USE 标记动态列表 [2]。为了保持一致性,将需要为 USE 组提供类似的列表。

参考文献

[1]GLEP 23:Portage 处理 ACCEPT_LICENSE (https://gentoolinux.cn/glep/glep-0023.html)
[2]https://gentoolinux.cn/dyn/use-index.xml
[3]gentoo-dev 邮件列表上的 GLEP 29 讨论,Message-ID 20041018225119.GK26288@mail.lieber.org (https://archives.gentoo.org/gentoo-dev/message/aba918fc38f72ff332de08b5e01e20e5)