MULTILIB-BUILD.ECLASS

部分: eclass-manpages (5)
更新: 2024 年 11 月
索引 返回主内容

名称

multilib-build.eclass - 用于构建多库软件包的标志和实用程序函数

描述

multilib-build.eclass 导出 USE 标志和实用程序函数,这些函数对于以干净且统一的方式构建多库软件包是必要的。

请注意,多库功能依赖项的依赖项规范应使用 ${MULTILIB_USEDEP} 中的 USE 依赖项字符串来正确请求启用多库。

支持的 EAPIS

7 8

函数

multilib_get_enabled_abis
如果启用了多库构建,则返回已启用 ABI 的有序列表。最佳(最优选)ABI 将排在最后。

如果禁用了多库,则将返回默认 ABI 以强制与多库代码进行一致的测试。

multilib_get_enabled_abi_pairs
如果启用了多库构建,则返回已启用 <use-flag>.<ABI> 对的有序列表。最佳(最优选)ABI 将排在最后。

如果禁用了多库,则将返回默认 ABI 以及空的 <use-flag>。

multilib_foreach_abi <argv>...
如果启用了多库支持,则为每个支持的 ABI 设置工具链,以及 ABI 变量和正确的 BUILD_DIR,并使用它们运行给定的命令。

如果禁用了多库支持,它只会运行命令。不会进行任何设置。

multilib_parallel_foreach_abi <argv>...
如果启用了多库支持,则为每个支持的 ABI 设置工具链,以及 ABI 变量和正确的 BUILD_DIR,并使用它们运行给定的命令。

如果禁用了多库支持,它只会运行命令。不会进行任何设置。

此函数用于并行运行多个命令。现在它只是对 multilib_foreach_abi 的一个已弃用别名。

multilib_check_headers
检查头文件在不同 ABI 之间是否一致。

此函数需要在每个 ABI 的安装阶段之后调用。它获取头文件校验和,并将它们与之前的运行(如果有)进行比较。如果头文件不同,则退出。

multilib_copy_sources
为每个启用的 ABI 创建软件包源代码的单个副本。

源代码始终从初始 BUILD_DIR(或未设置时为 S)复制到与 multilib_foreach_abi() 使用的 BUILD_DIR 匹配的特定于 ABI 的构建目录。

multilib_prepare_wrappers [<install-root>]
为当前 ABI 执行所有类型的包装器准备。此函数应在将要包装的文件安装到每个 ABI 之后调用一次。

接受一个可选的自定义 <install-root>,从中使用文件。如果未指定根目录,则使用 ${ED}。

要包装的文件使用单独的变量指定,例如 MULTILIB_WRAPPED_HEADERS。这些变量在对 multilib_prepare_wrappers 和 multilib_install_wrappers 的连续调用之间不应更改。

在所有包装器准备就绪后,应调用 multilib_install_wrappers 将它们提交到安装树。

multilib_install_wrappers [<install-root>]
安装先前准备的包装器。此函数应在所有包装器准备就绪后调用一次。

接受一个可选的自定义 <install-root>,将包装器安装到该位置。如果未指定根目录,则使用 ${ED}。无需使用与准备包装器时相同的根目录。

要包装的文件使用单独的变量指定,例如 MULTILIB_WRAPPED_HEADERS。这些变量在对 multilib_prepare_wrappers 和 multilib_install_wrappers 的调用之间不应更改。

multilib_is_native_abi
确定当前构建的 ABI 是否为配置文件的原生 ABI。如果为真,则返回真状态(0),否则返回假状态(1)。
multilib_native_use <flag>
类似于标准 use 命令,但只有在 multilib_is_native_abi 和 use <flag> 为真时才产生真值,否则为假。
multilib_native_usev <flag> [<opt-value>]
类似于标准 usev 命令,但只有在 multilib_is_native_abi 和 usev <flag> 为真时才打印输出。
multilib_native_use_with <flag> [<opt-name> [<opt-value>]]
类似于 use_with 输出 --with 配置选项,如果 USE <flag> 已启用并且正在构建可执行文件(multilib_is_native_abi 为真)。否则,输出 --without 配置选项。参数与 EAPI 中的 use_with 相同。
multilib_native_use_enable <flag> [<opt-name> [<opt-value>]]
类似于 use_enable 输出 --enable 配置选项,如果 USE <flag> 已启用并且正在构建可执行文件(multilib_is_native_abi 为真)。否则,输出 --disable 配置选项。参数与 EAPI 中的 use_enable 相同。
multilib_native_enable <opt-name> [<opt-value>]
如果正在构建可执行文件(multilib_is_native_abi 为真),则输出 --enable 配置选项。否则,输出 --disable 配置选项。
multilib_native_with <opt-name> [<opt-value>]
如果正在构建可执行文件(multilib_is_native_abi 为真),则输出 --with 配置选项。否则,输出 --without 配置选项。
multilib_native_usex <flag> [<true1> [<false1> [<true2> [<false2>]]]]
如果 USE <flag> 已启用并且正在构建可执行文件(multilib_is_native_abi 为真),则输出 <true1>(如果未指定,则为 'yes')和 <true2> 的串联。否则,输出 <false1>(如果未指定,则为 'no')和 <false2> 的串联。参数与 EAPI 中的 usex 相同。

ECLASS 变量

MULTILIB_COMPAT
ebuild 支持的多库 ABI 列表。如果未设置,则默认为 eclass 支持的所有 ABI。

此变量旨在用于预构建的多库软件包,这些软件包只能为有限的 ABI 集提供二进制文件。如果由于源代码中的错误需要限制 ABI,则应使用 package.use.mask。与 MULTILIB_COMPAT 一样,KEYWORDS 应包含 '-*'。

请注意,设置此变量实际上禁用了对所有其他 ABI 的支持,包括其他体系结构。例如,指定 abi_x86_{32,64} 会禁用对 MIPS 的支持。

MULTILIB_COMPAT 的值决定了 IUSE 的值。如果设置,它还会启用 REQUIRED_USE 约束。

示例用法

# Upstream provides binaries for x86 & amd64 only
MULTILIB_COMPAT=( abi_x86_{32,64} )
MULTILIB_USEDEP (ECLASS 生成的)
要对需要也支持多库的依赖项(库)使用的 USE 依赖项。

示例用法

RDEPEND="dev-libs/libfoo[${MULTILIB_USEDEP}]
        net-libs/libbar[ssl,${MULTILIB_USEDEP}]"
MULTILIB_ABI_FLAG (ECLASS 生成的)
完整的 ABI 名称。类似于 USE 标志名称。

这在 multilib_foreach_abi()、multilib_parallel_foreach_abi() 和 multilib-minimal 子阶段函数中设置。

当构建在不受 USE 标志控制的 ABI 上执行时(例如,在非多库架构上或使用多库 portage 时),它可能为 null(空)。然后构建将始终针对单个 ABI 执行。

示例值

abi_x86_64
MULTILIB_WRAPPED_HEADERS
要包装以支持多库的头文件列表。列出的头文件将被移动到非标准位置,并替换为一个包含这些头文件的条件文件,以适应当前的 ABI。

此变量必须是一个 bash 数组。路径应相对于安装根目录 (${ED}),并命名正则文件。不支持递归包装。

请注意,*不鼓励* 包装头文件。最好将所有头文件安装在 libdir 的子目录中,并使用 pkg-config 来定位头文件。一些 C 预处理器无法与包装的头文件一起使用。

示例

MULTILIB_WRAPPED_HEADERS=(
        /usr/include/foobar/config.h
)
MULTILIB_CHOST_TOOLS
要为每个多库 ABI 保留的工具可执行文件列表。列出的可执行文件将被重命名为 ${CHOST}-${basename},而原生变体将被符号链接到通用名称。

此变量必须是一个 bash 数组。路径应相对于安装根目录 (${ED}),并命名正则文件或指向正则文件的符号链接。不支持递归包装。

如果传递了符号链接,则符号链接路径和符号链接目标都将更改。因此,预计符号链接目标也将被包装(通过列出在 MULTILIB_CHOST_TOOLS 中或外部包装)。

请注意,*不鼓励* 包装工具。最好为每个 ABI 安装 pkg-config 文件,并要求反向依赖项使用它。

正确搜索工具的软件包(例如,使用 AC_PATH_TOOL 宏)将自动找到包装的可执行文件。其他软件包将需要显式覆盖工具路径。

示例

MULTILIB_CHOST_TOOLS=(
        /usr/bin/foo-config
)

作者

作者: Michał Górny <[email protected]>

维护者

Michał Górny <[email protected]>

报告错误

请通过 https://bugs.gentoo.org/ 报告错误

文件

multilib-build.eclass

另请参见

ebuild(5)
https://gitweb.gentoo.org/repo/gentoo.git/log/eclass/multilib-build.eclass


索引

名称
描述
支持的 EAPIS
函数
ECLASS 变量
作者
维护者
报告错误
文件
另请参见

此文档由 man2html 使用手册页创建。
时间: 2024 年 11 月 12 日,格林威治时间 03:27:01