|
|
Строка 1: |
Строка 1: |
| [[Category:RPM spec]] | | [[Category:RPM spec]] |
- | {{MovedFromFreesourceInfo|AltLinux/Sisyphus/devel/SpecTips/FiltrProvides}}
| |
| | | |
| == Фильтрация Provides/Requires == | | == Фильтрация Provides/Requires == |
| | | |
- | Пока нашёл следующие:
| + | Сильнодействующее средство: |
| + | %filter_from_requires /^debug.*(libodbc.*\.so)/d |
| | | |
- | # [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
| + | %filter_from_requires /^debug.*(libodbc.*\.so)/s/\.so)/.so.1)/ |
- | %define NotProvides() %global __find_provides /usr/lib/rpm/filter.sh `echo "%*"` -- %__find_provides
| + | |
| | | |
- | Примеры использования:
| + | Вот другой рецепт, который может пригодиться: |
| + | %filter_from_requires s/^\(lib.*odbc.*\.so\)\((.*\)\? >= \(.*\)/\1\2 \1.1\2 >= \3/ |
| | | |
- | %NotRequires perl(warnings.pm) libz.so.1
| + | Пример проверки: |
- | %NotProvides perl(PerlIO/gzip.pm)</pre>
| + | $ echo 'libodbc.so()(64bit) >= set:xxx' |sed 's/^\(lib.*odbc.*\.so\)\((.*\)\? >= \(.*\)/\1\2 \1.1\2 >= \3/' |
- | :
| + | libodbc.so()(64bit) libodbc.so.1()(64bit) >= set:xxx |
- | :Где <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>
| + | |