[devel] Re: %NotRequires/%NotProvides RPM macros
Alexey Tourbin
at на altlinux.ru
Ср Май 26 16:14:48 MSD 2004
On Wed, May 26, 2004 at 02:51:23PM +0400, Dmitry V. Levin wrote:
> > %NotRequires perl(warnings.pm) libz.so.1
> > %NotProvides perl(PerlIO/gzip.pm)
> - имена странные
Для сравнения.
В MDK нужно писать:
%define _requires_exceptions 'perl(warnings.pm)' libz.so.1
В PLD нужно писать:
%define _noautoreq 'perl(warnings.pm)' libz.so.1
По сравнению с MDK/PLD суть моих предложений в следующем:
- удобнее писать не %define, а использовать готовый макрос,
семантика которого очевидна из названия
- удобнее использовать shell patterns, а не `grep -v'
- удобнее использовать автоматическое кворитрование аргументов,
передаваемых скрипту
Т.е. получается больше похоже на тэги Requires и Provides, что
кажется мне более естественным.
> - так на shellе не пишут:
> strings=`"$@"`
> echo "$strings" | while read string; do
Я уже запутался, в каком порядке происходят substitutions, word
splitting и т.д., как это связано с субшеллами, backticks,
embedded newlines и т.п.
Заодно узнал, что в bash субшелл порождается для _правой_ части пайпа,
а левая часть пайпа остается работать в текущем шелле. (В zsh это
работает с точностью до наоборот.)
Поэтому в bourne shell не работает такой очевидный, казалось бы, код:
echo "$strings" | while read string; do
match=
echo "$patterns" | while read pattern; do
if [ -z "${string##$pattern}" ]; then
match=1
break
fi
done
if [ -z "$match" ]; then
echo "$string"
fi
done
Т.е. match=1 устанавливается в дочернем процессе, а по команде break
субшелл радостно прекращает свою работу. Чево только не узнаешь. :)
> --
> ldv
----------- следущая часть -----------
Было удалено вложение не в текстовом формате...
Имя : отсутствует
Тип : application/pgp-signature
Размер : 189 байтов
Описание: отсутствует
Url : http://lists.altlinux.ru/pipermail/devel/attachments/20040526/d4387967/attachment.bin
Подробная информация о списке рассылки Devel