From a65e7a3014674d9b4b565186e219abe27b3efcae Mon Sep 17 00:00:00 2001 From: Funda Wang Date: Sat, 11 Oct 2025 18:33:16 +0800 Subject: [PATCH] describe on how to use pkg-config audit log --- ...30\346\233\264\350\256\260\345\275\225.md" | 48 +++++++++++++++++-- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git "a/oEEP/oEEP-0018 openEuler\345\205\250\345\261\200\346\236\204\345\273\272\345\217\202\346\225\260\345\217\230\346\233\264\350\256\260\345\275\225.md" "b/oEEP/oEEP-0018 openEuler\345\205\250\345\261\200\346\236\204\345\273\272\345\217\202\346\225\260\345\217\230\346\233\264\350\256\260\345\275\225.md" index 67a1f4d..99e92e4 100644 --- "a/oEEP/oEEP-0018 openEuler\345\205\250\345\261\200\346\236\204\345\273\272\345\217\202\346\225\260\345\217\230\346\233\264\350\256\260\345\275\225.md" +++ "b/oEEP/oEEP-0018 openEuler\345\205\250\345\261\200\346\236\204\345\273\272\345\217\202\346\225\260\345\217\230\346\233\264\350\256\260\345\275\225.md" @@ -6,7 +6,7 @@ 状态: 活跃 编号: oEEP-0018 创建日期: 2024-09-16 -修订日期: 2025-09-08 +修订日期: 2025-10-11 --- ## 背景说明 @@ -208,7 +208,7 @@ openEuler 创建初始时 `rpm` 包即支持 zstd,不会影响用户自老版 ## 生效版本 master ### 新增处理语义化版本的宏 -**作用** [语义化版本(Semantic Versioning)](https://semver.org/)是绝大多数软件包采用的版本管理模式。在 spec 编写过程中,经常需要对版本号进行分段处理。为此,新增多个 rpm 宏,以节省打包人员的工作量。 +**作用**:[语义化版本(Semantic Versioning)](https://semver.org/)是绝大多数软件包采用的版本管理模式。在 spec 编写过程中,经常需要对版本号进行分段处理。为此,新增多个 rpm 宏,以节省打包人员的工作量。 - `%version_major` 取得版本号中的 major 部分(`X.Y.Z`中的`X`) - `%version_minor` 取得版本号中的 minor 部分(`X.Y.Z`中的`Y`) @@ -225,7 +225,7 @@ openEuler 创建初始时 `rpm` 包即支持 zstd,不会影响用户自老版 ### 新增体现构建环境中上游包版本的宏 -**作用** 部分场景下,二进制包在运行时会对构建时安装的上游包版本产生强依赖。比如`libxslt`在运行时会检测当前`libxml2`的版本与编译时安装的`libxml2`版本是否为同一分支。为方便打包工程师处理此类情况,增加了名为`%installed_version_of`的宏。使用此宏的主要目的在于,将下游打包工程师从复杂的版本依赖关系书写中解放出来。 +**作用**:部分场景下,二进制包在运行时会对构建时安装的上游包版本产生强依赖。比如`libxslt`在运行时会检测当前`libxml2`的版本与编译时安装的`libxml2`版本是否为同一分支。为方便打包工程师处理此类情况,增加了名为`%installed_version_of`的宏。使用此宏的主要目的在于,将下游打包工程师从复杂的版本依赖关系书写中解放出来。 例: ``` @@ -241,3 +241,45 @@ Requires: openssl-libs >= %{installed_version_of openssl-libs} **参考链接** - https://gitee.com/src-openeuler/openEuler-rpm-config/pulls/289 + +### 新增`pkg-config`审计日志输出特性 +**作用**:`pkg-config` 是普遍使用的软件开发工具,它可以从基于`.pc`的数据库中查询有关库的信息。该程序自带的审计日志功能,可用于记录查询`.pc`文件的指令,以及查询的结果。这一审计日志可帮助维护者从软件源代码中分析依赖库的情况,以便撰写更加严谨完整的 spec 文件。 + +开启审计日志输出特性之后,RPM 构建过程的`%conf`和`%build`阶段开始时会通过环境变量`PKG_CONFIG_LOG`向`pkg-config`指示记录审计日志的文件名,并在`%build`阶段结束后显示该日志文件的内容。包维护者可以在 RPM 的构建记录中见到与以下内容类似的输出: + +``` +glib-2.0 [2.86.0] +glib-2.0 >= 2.56.0 [2.86.0] +gdk-pixbuf-2.0 [2.42.12] +gobject-2.0 >= 2.56.0 [2.86.0] +glib-2.0 >= 2.80.0 [2.86.0] +libpcre2-8 >= 10.32 [10.46] +libffi >= 3.0.0 [3.5.2] +libpng [1.6.50] +zlib [1.3.1] +libjpeg [3.1.0] +``` +中括号之前的内容,是`pkg-config`通过`pkg_check_modules`等类似命令收到的查询条件;中括号内的内容,代表根据该条件找到的实际版本。审计日志中出现的多行相同内容,是因为软件在构建过程中在不同阶段发起了多次查询。 + +包维护者可以根据`pkg-config`的审计日志撰写构建依赖。比如,上面列出的输出,可以转换为如下的构建依赖: +``` +# 包维护者需要手动处理重复行,以及同一个包的不同版本查询 +BuildRequires: pkgconfig(glib-2.0) >= 2.80.0 +BuildRequires: pkgconfig(gdk-pixbuf-2.0) +BuildRequires: pkgconfig(gobject-2.0) >= 2.56.0 +BuildRequires: pkgconfig(libpcre2-8) >= 10.32 +BuildRequires: pkgconfig(libffi) >= 3.0.0 +BuildRequires: pkgconfig(libpng) +BuildRequires: pkgconfig(zlib) +BuildRequires: pkgconfig(libjpeg) +``` + +考虑到此特性使用的场景比较单一,这一特性是默认关闭的。包维护者如果需要开启此特性,需要手动在 spec 文件中进行声明: +``` +# 默认为0,代表不开启此特性。设置为1代表开启此特性 +%global _auto_dump_pkgconfig_audit_log 1 +``` + +**参考链接** + +- https://gitee.com/src-openeuler/openEuler-rpm-config/pulls/298 -- Gitee