SpecTips/ReqProvFilter
Материал из ALT Linux Wiki
(Различия между версиями)
м (переименовал «SpecTips/FiltrProvides» в «SpecTips/ReqProvFilter»: re{adability,write}) |
м (Отмена правки 17921 участника MichaelShigorin (обсуждение)) |
||
Строка 1: | Строка 1: | ||
[[Category:RPM spec]] | [[Category:RPM spec]] | ||
+ | {{MovedFromFreesourceInfo|AltLinux/Sisyphus/devel/SpecTips/FiltrProvides}} | ||
== Фильтрация Provides/Requires == | == Фильтрация Provides/Requires == | ||
- | + | Пока нашёл следующие: | |
- | + | ||
- | + | # [http://lists.altlinux.ru/pipermail/devel/2004-May/011087.html [devel] %NotRequires/%NotProvides RPM macros] -- предлагаются (если правильно понял) макросы: | |
- | + | :<pre>%define NotRequires() %global __find_requires /usr/lib/rpm/filter.sh `echo "%*"` -- %__find_requires | |
+ | %define NotProvides() %global __find_provides /usr/lib/rpm/filter.sh `echo "%*"` -- %__find_provides | ||
- | + | Примеры использования: | |
- | + | ||
- | + | %NotRequires perl(warnings.pm) libz.so.1 | |
- | + | %NotProvides perl(PerlIO/gzip.pm)</pre> | |
- | + | : | |
- | $ | + | :Где <tt>/usr/lib/rpm/filter.sh</tt>: |
+ | :<pre>#!/bin/sh -e | ||
+ | |||
+ | while :; do | ||
+ | case "$1" in | ||
+ | --) shift; break | ||
+ | ;; | ||
+ | *) patterns="$1 | ||
+ | $patterns" | ||
+ | shift | ||
+ | ;; | ||
+ | esac | ||
+ | done | ||
+ | |||
+ | strings=`"$@"` | ||
+ | |||
+ | echo "$strings" | while read string; do | ||
+ | if [ -z "$string" ]; then | ||
+ | continue | ||
+ | fi | ||
+ | echo "$patterns" | { | ||
+ | match= | ||
+ | while read pattern; do | ||
+ | if [ -z "$pattern" ]; then | ||
+ | continue | ||
+ | fi | ||
+ | if [ -z "${string##$pattern}" ]; then | ||
+ | match=1 | ||
+ | break | ||
+ | fi | ||
+ | if [ -z "${string##$pattern *}" ]; then | ||
+ | match=1 | ||
+ | break | ||
+ | fi | ||
+ | done | ||
+ | if [ -z "$match" ]; then | ||
+ | echo "$string" | ||
+ | fi | ||
+ | } | ||
+ | done</pre> | ||
+ | |||
+ | ''NB: <tt>/usr/lib/rpm/filter.sh</tt> в комплекте не поставляется'' | ||
+ | |||
+ | |||
+ | # [http://lists.altlinux.ru/pipermail/python-devel/2005-June/000112.html [Python-devel] К вопросу о новых фичах в rpm-build-python] -- цитата: | ||
+ | :<pre>Как показали эксперименты, способ вида | ||
+ | |||
+ | Provides: $(find_provides /usr/lib/python2.4/site-packages/_xmlplus | sed -e "s/_xmlplus/xml/g" ) | ||
+ | не прокатил. К сожалению. | ||
+ | Так как поля означиваются до выполнения операции install. | ||
+ | |||
+ | Тем не менее, если это действительно ценно только для PyXML ^), и по крмре на некий переходный | ||
+ | периол (пока не пропатчим соотв. пакеты) можно сделать так: | ||
+ | |||
+ | find_povides /usr/lib/python2.4/site-packages/_xmlplus | sed -e "s/_xmlplus/xml/g" >PyXML-X.X.X-provides.lst | ||
+ | |||
+ | SourceN: PyXML-X.X.X-provides.lst | ||
+ | Provides: $(cat %SOURCEN)</pre> | ||
+ | |||
+ | |||
+ | PS: [[altbug:8093]] | ||
+ | |||
+ | |||
+ | <pre>> Valentin Lavrinenko wrote: | ||
+ | |||
+ | > > формулировал, не знаю. Дело в том, что у меня вылазит зависимость, | ||
+ | > > которой вроде бы быть не должно, и от которой я очень хочу избавиться. | ||
+ | > Сам нашел, как это сделать, делюсь опытом: | ||
+ | > $ rpm -bp <spec> | ||
+ | > $ rpm -bc <spec> | ||
+ | > // что должно быть в <buildroot>? Я написал ~/RPM/BUILD/<project>, | ||
+ | > сработало... | ||
+ | > $ export RPM_BUILD_ROOT=<buildroot> | ||
+ | > $ export RPM_FINDREQ_METHOD=all | ||
+ | > $ find ~/RPM/BUILD/<project> | /bin/sh -x /usr/lib/rpm/find-requires | ||
+ | > >~/log 2>&1 | ||
+ | > После чего ищем в логе интересующую нас зависимость и | ||
+ | > где-то перед ней видим, какой файл ее породил. | ||
+ | > | ||
+ | |||
+ | |||
+ | $ RPM_SCRIPTS_DEBUG=1 rpmbuild -bi specfile &>logfile | ||
+ | - включает трассировку скриптов, которые вычисляют зависимости. | ||
+ | //ldv//</pre> |
Версия 19:31, 15 февраля 2011
Фильтрация Provides/Requires
Пока нашёл следующие:
- [devel %NotRequires/%NotProvides RPM macros] -- предлагаются (если правильно понял) макросы:
%define NotRequires() %global __find_requires /usr/lib/rpm/filter.sh `echo "%*"` -- %__find_requires
%define NotProvides() %global __find_provides /usr/lib/rpm/filter.sh `echo "%*"` -- %__find_provides
Примеры использования:
%NotRequires perl(warnings.pm) libz.so.1
%NotProvides perl(PerlIO/gzip.pm)- Где /usr/lib/rpm/filter.sh:
#!/bin/sh -e
NB: /usr/lib/rpm/filter.sh в комплекте не поставляется
- [Python-devel К вопросу о новых фичах в rpm-build-python] -- цитата:
Как показали эксперименты, способ вида
Provides: $(find_provides /usr/lib/python2.4/site-packages/_xmlplus | sed -e "s/_xmlplus/xml/g" ) не прокатил. К сожалению. Так как поля означиваются до выполнения операции install.
Тем не менее, если это действительно ценно только для PyXML ^), и по крмре на некий переходный периол (пока не пропатчим соотв. пакеты) можно сделать так:
find_povides /usr/lib/python2.4/site-packages/_xmlplus | sed -e "s/_xmlplus/xml/g" >PyXML-X.X.X-provides.lst
SourceN: PyXML-X.X.X-provides.lst
Provides: $(cat %SOURCEN)
PS: altbug:8093
> Valentin Lavrinenko wrote: > > формулировал, не знаю. Дело в том, что у меня вылазит зависимость, > > которой вроде бы быть не должно, и от которой я очень хочу избавиться. > Сам нашел, как это сделать, делюсь опытом: > $ rpm -bp <spec> > $ rpm -bc <spec> > // что должно быть в <buildroot>? Я написал ~/RPM/BUILD/<project>, > сработало... > $ export RPM_BUILD_ROOT=<buildroot> > $ export RPM_FINDREQ_METHOD=all > $ find ~/RPM/BUILD/<project> | /bin/sh -x /usr/lib/rpm/find-requires > >~/log 2>&1 > После чего ищем в логе интересующую нас зависимость и > где-то перед ней видим, какой файл ее породил. > $ RPM_SCRIPTS_DEBUG=1 rpmbuild -bi specfile &>logfile - включает трассировку скриптов, которые вычисляют зависимости. //ldv//