RPM: найти имена подпакетов из спецификации - PullRequest
2 голосов
/ 09 декабря 2011

Как я мог узнать, какие подпакеты в спецификационном файле? Есть какой-нибудь макрос, расширяющийся до списка package + subpackages?

Я не хочу использовать grep, поскольку подпакеты могут быть определены с помощью -n или даже определены другим макросом (что приводит к его повторному вычислению)

Пример:

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

Ответы [ 4 ]

1 голос
/ 02 октября 2015

rpm -q --queryformat = "% {NAME} \ n" --specfile project.spec

1 голос
/ 22 октября 2012

Немного Python сделает всю работу за вас. Я уверен, что rpm-4.8 также имел привязки python к объекту spec (предположим, файл с + x set и именем 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>
0 голосов
/ 20 января 2015

Я обычно использую простую форму:

rpm -q --specfile FILENAME.SPEC
0 голосов
/ 30 марта 2012

Ну, я использовал немного 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 вызовработать с путями, но в остальном должен быть достаточно устойчивым к ошибкам.

...