kmpkg x-test-features
本节介绍的是实验性功能,可能随时发生变更或被移除。
命令概要
kmpkg x-test-features [options] <package>...
命令描述
通过清单模式测试一个包的所有功能(特性)。该命令专为验证包的所有功能是否能正常工作而设计。 执行的测试包含以下内容:
- 禁用默认功能的前提下安装
core功能 - 禁用默认功能的前提下,逐个安装每一项功能
- 安装所有功能的组合版本
在 --ci-feature-baseline 中标记为 unsupported(不支持)或 cascade(级联)的功能会被跳过。
示例
$ ./kmpkg x-test-features curl
正在计算 23 个安装计划...
正在计算所有 ABI 哈希值...
检测三元组 x64-linux 的编译器哈希值...
找到编译器:/usr/bin/c++
检查二进制缓存...
功能测试 [1/23] curl[core]:x64-linux
功能测试 [2/23] curl[core,non-http]:x64-linux
功能测试 [3/23] curl[core,tool]:x64-linux
...
命令选项
所有 kmpkg 命令均支持一组通用选项。
--ci-feature-baseline
ci.feature.baseline.txt 文件的路径。用于跳过指定端口并检测回归问题。
该文件的每一行都会将一个端口规格映射到一个状态。以 # 开头的行(视为注释)和空行会被忽略。端口规格的格式为
port-name[features]:triplet(supports-expression),其中功能(features)、三元组(triplet)和 supports
表达式部分为可选。例如:curl、curl[http2]、curl:x64-windows 或 curl[http2](!windows)。
状态说明:
- fail - 该端口在 CI 系统中构建时预期会失败。
这与开发者本地机器的构建预期可能不一致,因为失败可能由机器配置差异导致。 - skip - 不在 CI 系统中构建该端口。
该状态适用于可能出现不稳定问题、或与其他端口存在冲突的端口。建议为跳过的端口添加注释说明原因,以便问题解决后移除该状态。 - cascade - 该端口依赖的某个端口构建失败,或被依赖项的supports 表达式排除,但该端口自身声明可构建。为端口添加此状态可检测“隐藏的”未测试端口。
可为特定功能指定额外状态:
- feature-fails - 列出的功能无法构建。因此这些功能会被排除在“组合功能测试”之外(组合测试也会直接失败)。
- combination-fails - 列出的功能组合在构建时会失败。
- no-separate-feature-test - 列出的功能不参与“单独功能测试”。
- options - 列出的功能互斥,无法同时选择。列表中的第一个功能会被添加到所有测试组合中;若希望所有测试组合都不附加额外功能,可将
core功能作为第一个选项。注意:一般情况下,kmpkg 官方维护的注册表中不接受新增此类功能形式的端口。
可通过三元组或 supports 表达式筛选端口:
curl[wchar]:x64-osx = feature-fails # wchar 功能在非 Windows 系统上无法正常工作curl[wchar](!windows) = feature-fails # 使用 supports 表达式通常比枚举所有三元组更简洁
其他示例:
qt3d[extras] = options # extras 功能会始终添加到测试组合中(当前为必选要求)curl[core,openssl,wolfssl] = options # openssl 和 wolfssl 是互斥的 SSL 后端,且无需强制选择其中一个libgit2[pcre,pcre2] = options # 必须选择 pcre 或 pcre2(二选一)libcanberra[gtk3](osx) = combination-fails # 该功能在“组合功能测试”中可正常工作vlpp[tools](osx) = feature-fails # 错误:使用了未声明的标识符 'PATH_MAX'entt[experimental] = skip # 需要基于最新源码(head)构建realsense2[openni2](!windows) = cascade # cpkg-tool-lessmsi[core] 仅支持 native 和 windows 平台-
# 单独测试所有目标耗时过长,故跳过:
halide[target-amdgpu,target-arm,target-d3d12compute,target-hexagon,target-metal,target-mips,target-nvptx,target-opencl,target-powerpc,target-riscv,target-x86] = no-separate-feature-test
--all
测试所有端口。
--no-core
跳过 core 功能的测试。
--no-separated
跳过每个功能的单独测试。
--no-combined
跳过所有功能的组合测试。
--failure-logs
指定失败日志的复制目标目录。
--failing-abi-log
指定文件路径,用于写入构建失败的端口的 ABI 信息。
--for-merge-with [ref]
通过对比当前 Git 仓库与 ref 的合并基准(merge-base),确定需要测试的端口。