Могу ли я использовать rpm для расширения макросов в specfile? - PullRequest
19 голосов
/ 03 сентября 2010

Конкретным примером является то, что у меня есть множество specfiles с Source0: или другими Source строками, содержащими макросы. Как я могу развернуть эти макросы, не запуская сборку в specfile и не записывая собственный анализатор?

Ответы [ 5 ]

31 голосов
/ 26 октября 2011

С rpm 4.9 вы можете использовать:

rpmspec -P <spec_file>

Это выведет расширенный файл спецификации на стандартный вывод

12 голосов
/ 18 апреля 2011

Если анализируются только исходные строки, spectool сделает это за вас.Это часть Fedora rpmdevtools .

$ spectool ./mg.spec 
Source0: http://homepage.boetes.org/software/mg/mg-20110120.tar.gz
$ 

Вот экран справки

Usage: spectool [<options>] <specfile>
Options:
operating mode:
-l, --lf, --list-files        lists the expanded sources/patches (default)
-g, --gf, --get-files         gets the sources/patches that are listed with
                              a URL
-h, --help                    display this help screen

files on which to operate:
-A, --all                     all files, sources and patches (default)
-S, --sources                 all sources
-P, --patches                 all patches
-s, --source x[,y[,...]]      specified sources
-p, --patch a[,b[,...]]       specified patches

misc:
-d, --define 'macro value'    defines RPM macro 'macro' to be 'value'
-C, --directory dir           download into specified directory (default '.')
-R, --sourcedir               download into rpm's %{_sourcedir}
-n, --dryrun, --dry-run       don't download anything, just show what would be
                              done
-D, --debug                   output debug info, don't clean up when done
2 голосов
/ 23 июня 2012

Если вы посмотрите на скрипт /usr/bin/spectool в rpmdevtools, о котором говорит @mmckinst, вы увидите, что это просто сложный хак.Он создает файл спецификации tmp, который, по сути, делает то, что делает скрипт ниже.Это то, что мы используем для расширения файла спецификации, а затем grep для нужных нам частей файла.В нашем случае мы хотели больше, чем исходники и патчи.

Вот пример сценария bash, который имитирует это поведение.Все макросы будут расширены до раздела %prep.

#!/bin/bash
spec_file="$1" # pass in the path to the spec file as the first argument
tmp_spec="/tmp/eval-$$.spec"
cat "$spec_file" | sed '/^%prep/,$d' > "$tmp_spec"
echo '%prep' >> "$tmp_spec"
echo 'cat<<__EOF__' >> $tmp_spec
cat "$spec_file" | sed '/^%prep/,$d' >> "$tmp_spec"
echo '__EOF__' >> "$tmp_spec"
rpmbuild -bp "$tmp_spec" 2>/dev/null
rm -f "$tmp_spec"  
0 голосов
/ 19 сентября 2011

Развернуть макросы в скриптах

Если вас интересует, как выглядят сценарии в вашем RPM после расширения макроса, вы можете просто построить RPM и затем получить RPM для извлечения сценариев:

rpmbuild -bi my-package.spec
rpm -qp --scripts my-package.rpm

Это работает, потому что RPM расширяет макросы во время сборки.

0 голосов
/ 12 сентября 2010

Вы можете использовать grep для получения строк Source, sed для извлечения строки, содержащей макрос, а затем rpm --eval 'string' для его оценки.Обратите внимание, что это будет расширять только глобальные макросы, а не те, которые определены в этой спецификации.

Чтобы расширить их, вам, вероятно, потребуется grep для них и передать их в rpm в качестве файла пользовательских макросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...