Search code examples
linuxrpmrpmbuildrpm-spec

How to dynamically define sub packages


My goal is to come up with a spec file that defines subpackages dynamically.

Currently, I have a macro defined in the spec file so that I can call it with different parameters to generate different %package sections. Eg.

%define create_pkg(n:)\ %package -n subpackage-%1\ Summary: Subpackage %1\ ...\ %{nil}

%create_pkg sub1 %create_pkg sub2 %create_pkg sub3

However, I can only hard-code the parameters (sub1, sub2, sub3) of the create_pkg macro in the specfile. Is there a way to make the specfile read a separate file, which would contain the names of the subpackages I want? eg. subpackages.txt would have the following:

sub1 sub2 sub3

and the spec file would read subpackages.txt and call %create_pkg with the names read from the txt file.


Solution

  • Answering my own question. If the rpm has lua script build-in (it's a build time option I think), then you can use lua scripts in the file

    1) define the sub packages in a separate file, eg. targets.txt:

    %define build_targets sub1 sub2 sub3
    

    2) include targets.txt at the beginning of the spec file:

    %include targets.txt
    

    3) use lua script to iterate through the targets in the preamble section:

    %{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
    

    then the %package directive for the sub packages will be dynamically generated.