RPM:从spec中查找子包名称

时间:2011-12-09 16:50:16

标签: packages rpm

我怎么知道spec文件的子包是什​​么? 有没有宏扩展到包+子包列表?

我不想使用grep,因为子包可以使用-n定义,甚至可以由另一个宏定义(这会导致重新评估它)

示例:

$ rpmbuild project.spec --eval '%packages_list'

4 个答案:

答案 0 :(得分:1)

一点点python将为你完成这项工作。我确信rpm-4.8也有与spec对象的python绑定(假设一个带有+ x set和name specinfo.py的文件):

#!/usr/bin/python                                                                                                        
import sys
import rpm
spec = rpm.spec(sys.argv[1])
for subpackages in spec.packages:
    print subpackages.header["name"]

可用于获取所有子包。您可以在与以下目录相同的目录中运行此命令:

python specinfo.py <spec file>

答案 1 :(得分:1)

rpm -q --queryformat =&#34;%{NAME} \ n&#34; --specfile project.spec

答案 2 :(得分:0)

嗯,我使用了一些sed,但是因为我还使用rpmspec来首先展开宏,所以这应该是相当不错的:

$ export SPEC_FILE=maven-surefire.spec
$ rpmspec -P $SPEC_FILE | grep '^%package' | sed "s/-n //;t end;s/^/${SPEC_FILE/.spec}-/;:end;s/%package //"

请注意,需要basename调用才能使用路径,否则应该具有很强的错误恢复能力。

答案 3 :(得分:0)

我通常使用简单的形式:

rpm -q --specfile FILENAME.SPEC