|
|
Строка 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>
| |
Фильтрация Provides/Requires
Сильнодействующее средство:
%filter_from_requires /^debug.*(libodbc.*\.so)/d
Его можно улучшить:
%filter_from_requires /^debug.*(libodbc.*\.so)/s/\.so)/.so.1)/
Вот другой рецепт, который может пригодиться:
%filter_from_requires s/^\(lib.*odbc.*\.so\)\((.*\)\? >= \(.*\)/\1\2 \1.1\2 >= \3/
Пример проверки:
$ 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
$