[devel] файловые зависимости на раскрытые альтернативы

Alexey Tourbin =?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Вт Авг 19 17:06:49 MSD 2008


On Tue, Aug 19, 2008 at 04:09:38PM +0400, Valery V. Inozemtsev wrote:
> собственно subj
> $ rpmquery -R kdebase-wm-3.5.9-alt10 | grep Term
> /usr/share/design/Terminal/kde/kicker/pics/kside.png
> /usr/share/design/Terminal/kde/kicker/pics/kside_tile.png
> /usr/share/design/Terminal/kde/ktip-wizard_small.png
> /usr/share/design/Terminal/kde/splash/pics
> 
> и в результате хотим design-graphics-terminal. ну и риторический вопрос - на 
> что повесить что нибудь неподъемное?

Собак на меня можно вешать.

Дело тут вот какое.  Когда идёт поиск зависимостей на относительные
симлинки, то сначала создаётся полный путь.  Потом идёт поиск
зависимостей по полному пути -- см. /usr/lib/rpm/symlinks.req

В kdedabse-wm имеем симлинк
/usr/share/apps/kdewizard/pics/wizard_small.png -> ../../../design-current/kde/ktip-wizard_small.png

Тогда создаётся путь
/usr/share/apps/kdewizard/pics/../../../design-current/kde/ktip-wizard_small.png

Каждый компонент пути пробивается на предмет альтернатив -- см.
/usr/lib/rpm/find-package

Происходит вот что:

+ '[' -L /usr/share/apps/kdewizard/pics/../../../design-current/kde/ktip-wizard_small.png ']'
+ p=/usr/share/apps/kdewizard/pics/../../../design-current/kde
+ set +x
+ '[' -L /usr/share/apps/kdewizard/pics/../../../design-current/kde ']'
+ p=/usr/share/apps/kdewizard/pics/../../../design-current
+ set +x
+ '[' -L /usr/share/apps/kdewizard/pics/../../../design-current ']'
+ p=/usr/share/apps/kdewizard/pics/../../..
+ set +x
+ '[' -L /usr/share/apps/kdewizard/pics/../../.. ']'
+ p=/usr/share/apps/kdewizard/pics/../..
+ set +x
+ '[' -L /usr/share/apps/kdewizard/pics/../.. ']'
+ p=/usr/share/apps/kdewizard/pics/..
+ set +x
+ '[' -L /usr/share/apps/kdewizard/pics/.. ']'
+ p=/usr/share/apps/kdewizard/pics
+ set +x
+ '[' -L /usr/share/apps/kdewizard/pics ']'
+ p=/usr/share/apps/kdewizard
+ set +x
+ '[' -L /usr/share/apps/kdewizard ']'
+ p=/usr/share/apps
+ set +x
+ '[' -L /usr/share/apps ']'
+ p=/usr/share
+ set +x
+ '[' -L /usr/share ']'
+ p=/usr
+ set +x
+ '[' -L /usr ']'
+ p=
+ set +x

Путь /usr/share/design-current является альтернативой.
Если бы сработала проверка 
[ -L /usr/share/apps/kdewizard/pics/../../../design-current ]

то вместо раскрытой зависимости на альтернативу типа
/usr/share/design/Terminal/kde/kicker/pics/kside.png
появилась бы всего лишь зависимость на альтернативный каталог
/usr/share/design-current

К сожалению, проверка 
[ -L /usr/share/apps/kdewizard/pics/../../../design-current ]
не срабатывает.  Легко понять, почему: промежуточных компонентов пути,
из которых мы потом выбираемся через ../.. , просто не существует.

$ [ -L /usr/share/apps/kdewizard/pics/../../../design-current ] || echo no
no
$ ls -l /usr/share/design-current
lrwxrwxrwx 1 root root 49 May  1 13:11 /usr/share/design-current -> /etc/alternatives/links/|usr|share|design-current/
$ l /usr/share/apps/kdewizard
ls: cannot access /usr/share/apps/kdewizard: No such file or directory
$

Мне казалось, что я придумал правильную стратегию разрешения путей
для поиске файловых зависимостей (с учетом альтернатив, отличия между
хост-системой и RPM_BUILD_ROOT, и т.д.), а всё-таки она лажается.
*Разводит руками*
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 197 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20080819/958a0d7a/attachment-0002.bin>


Подробная информация о списке рассылки Devel