On Tue, Feb 19, 2008 at 03:41:22AM +0300, Alexey Tourbin wrote: > On Tue, Feb 19, 2008 at 03:10:40AM +0300, Dmitry V. Levin wrote: [...] > > Что за причины помещать временные файлы в %buildroot? > > Вот две причины: > > 1) На стадии find-requires rpm не переходит в сборочный каталог > пакета, а только в ~/RPM/BUILD. Это значит, что на стадии find-requires > нельзя "подсмотреть" в сборочный каталог пакета, Тем более что его, вообще говоря, может и не быть. > а, выходит, если нужно > передать какой-то хинт в поиск зависимостей, то это можно сделать только > через %buildroot. > По этой причине иногда создаётся файл %buildroot/.perl.req. > > 2) Иногда желательно знать список файлов, запакованных в пакет. > Опять же, выходит дёшево и сердито писать этот список файлов > в $RPM_BUILD_ROOT/.files:$RPM_SUBPACKAGE_NAME, и тогда все > заинтересованные скрипты смогут прямо или косвенно туда подсмотреть. > > В общем, программирование на шелле (и, в частности, то что делается > в rpm-build) навязывает сильное разделение данных и жесткий data flow. > Мы считаем, что мы можем искать "искать зависимости данного типа > в данном файле". Реально же контесты бывают сложнее: в shell.req > приходится фактически обрабатывать не по одному файлу, а все сразу, > чтобы удалить зависимости на функции, которые определены в других > файлах. В find-package для ослабления зависимостей на каталоги > приходится проверять, не запакованы ли какие-то файлы в этих каталогах > (тогда каталог гарантированно существует). В случае с shell.req удаётся > обойтись без "обмена данных" за пределами скрипта, а в find-package > нужно уже знать внешний по отношению к задаче контекст. Можно завести автоматически создаваемый на время поиска зависимостей каталог где-нибудь в %_tmppath (рядом с %buildroot). Это не будет выглядеть хаком. -- ldv