(子)包名称的 RPM 规范变量?

RPM spec variable for (sub)package name?

RPM 规范文件中有许多可用的特殊变量。这些变量中的任何一个是否公开了当前正在处理的包的名称?

对于单包 RPM,答案很明显,但一个规范也可以产生多个 RPM。是否有变量,例如 $RPM_PACKAGE_NAME,rpmbuild 会自动更新以与当前的 %files 或 %pre 或 %post 部分对齐?

我在 RPM 源代码中没有看到任何明显的内容。似乎没有可能使用 RPM 宏或正在构建的包头访问当前定义的子包列表,无论是使用 RPM 宏还是 Lua.

我们使用的是在 Lua 中生成整个包节,使用 built-in Lua interpreter. An example is in glibc.spec;搜索“语言数组”和 %package langpack-]]..lang..[[。请注意,Pagure 查看器中的语法突出显示有点不对劲,被这种跨语言嵌套弄糊涂了。

你不能用这个名字来做。包名称 %name 有一个宏,但它只包含主包的名称。但是,如果你真的需要这样做,并且愿意做一些肮脏的黑客,你可以这样做:

%package base
Summary: Filesystem for %{name}
Group: foo

%post base
echo %group

将打印 foo。与 %summary 类似,但 %group 是最安全的,因为组不用于任何有用的事情。

嗯,我有没有提到这是肮脏的骇客? Florian 的建议绝对是一种更清洁的方法。