如何动态定义子包

时间:2011-08-15 19:13:26

标签: linux rpm rpmbuild rpm-spec

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

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

%定义create_pkg(n:)\ %package -n subpackage-%1 \ 摘要:子包%1 \ ... \ %{零}

%create_pkg sub1 %create_pkg sub2 %create_pkg sub3

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

SUB1 SUB2 SUB3

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

1 个答案:

答案 0 :(得分:3)

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

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

%define build_targets sub1 sub2 sub3

2)在spec文件的开头包含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指令。