linux - 如何动态定义子包

标签 linux rpm rpmbuild rpm-spec

我的目标是提出一个动态定义子包的规范文件。

目前,我在 spec 文件中定义了一个宏,这样我就可以用不同的参数调用它来生成不同的 %package 部分。例如。

%define create_pkg(n:)\ %package -n 子包-%1\ 摘要:子包 %1\ ...\ %{nil}

%create_pkg sub1 %create_pkg sub2 %create_pkg sub3

但是,我只能在 specfile 中硬编码 create_pkg 宏的参数(sub1、sub2、sub3)。有没有办法让 specfile 读取一个单独的文件,其中包含我想要的子包的名称?例如。 subpackages.txt 将具有以下内容:

子1 子2 子3

spec 文件将读取 subpackages.txt 并使用从 txt 文件中读取的名称调用 %create_pkg。

最佳答案

回答我自己的问题。如果 rpm 有 lua 脚本内置(我认为这是一个构建时间选项),那么你可以在文件中使用 lua 脚本

1) 在单独的文件中定义子包,例如。目标.txt:

%define build_targets sub1 sub2 sub3

2) 在规范文件的开头包含 targets.txt:

%include targets.txt

3) 使用 lua 脚本遍历序言部分中的目标:

%{lua:
for target in string.gmatch(rpm.expand("%{build_targets}"), "[%w_-]+")
do
  print("%package "..target.."\n")
  print("Summary: subpackage "..target.."\n")
  ...
  print("%description "..target.."\n")
end

然后将动态生成子包的 %package 指令。

关于linux - 如何动态定义子包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7069511/

相关文章:

linux - Grepping 带小数位的数字

c++ - GHashTable 的大小/调整大小

linux - 如何替换两点之间的所有行并将其替换为sed中的一些文本

mongodb - 在没有 YUM 的 CentOs 7 上安装 MongoDB。有 rpm 文件但没有 tgz

linux - 如何使用现有的 RPM 构建离线 RPM 部署?

RPM Spec 文件已安装,但在 %doc 指令中未打包文件

linux - rpmbuild 规范文件和 rpm - 一些深刻的困惑

linux - 如果从 rc.local 而不是 SSH 调用,为什么这个 shell 不起作用?

compression - rpmbuild更改压缩格式

rpm - rpmbuild 时可以忽略某些特定的自动检测依赖项吗