跳到主要内容

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 表达式部分为可选。例如:curlcurl[http2]curl:x64-windowscurl[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),确定需要测试的端口。