SpecTips/ReqProvFilter

Материал из ALT Linux Wiki

< SpecTips(Различия между версиями)
Перейти к: навигация, поиск
(Import from freesource.info)
м (re-adding, silly me)
 
(4 промежуточные версии не показаны)
Строка 1: Строка 1:
-
[[Category:Devel]]
+
[[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
+
Аналогично <tt>%filter_from_provides</tt>
-
case "$1" in
+
-
--) shift; break
+
-
;;
+
-
*) patterns="$1
+
-
$patterns"
+
-
shift
+
-
;;
+
-
esac
+
-
done
+
-
strings=`"$@"`
+
== Ссылки ==
-
 
+
* http://lists.altlinux.org/pipermail/devel/2011-February/188598.html
-
echo "$strings" | while read string; do
+
* https://bugzilla.altlinux.org/show_bug.cgi?id=8093
-
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:40, 15 февраля 2011


Фильтрация 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
$

Аналогично %filter_from_provides

Ссылки

 
Личные инструменты