[devel] оптимизация сборочных зависимостей
Alexey Tourbin
=?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Вс Сен 3 10:34:41 MSD 2006
On Sun, Sep 03, 2006 at 08:36:15AM +0400, Alexey Tourbin wrote:
> Я вижу два подхода, которые в большей или меньшей степени способствуют,
> с одной стороны, более агрессивной оптимизации, с другой -- избавлению
> от нечестного паттерна.
>
> 1) Низкоуровневый подход (в меньшей степени). Добавить и использовать
> специальную опцию в packageof. Для каждого заданного файла, помимо
> того, чтобы пробивать его по rpmdb, нужно специальным образом
> обрабатывать симлинки. А именно, для каждого симлинка делать realpath()
> и полученный путь ещё раз пробивать по rpmdb.
С другой стороны, вклиниваться в packageof некорректно в том отношении,
что правила /etc/buildreqs/files/ignore.d к этому моменту уже отработали,
а раскрытие симлинков может дать новый повод для применения этих правил.
Таким образом, проблема декомпозиции оказывается сложнее -- вклинивать
обработку симлинков нужно раньше. Вот "модельный" патч, который
показывает, что, может быть, в действительности стоит сделать.
--- /usr/bin/filereq- 2006-09-03 00:03:03 +0000
+++ /usr/bin/filereq 2006-09-03 05:58:00 +0000
@@ -67,3 +67,9 @@
while [ -f "$LOCKFILE" ]; do
usleep 100000
done
+
+while read -r file; do
+ readlink -ms "$file" || echo "$file"
+ readlink -es "$file" ||:
+done <"$unsorted" >"$unsorted$$"
+mv "$unsorted$$" "$unsorted"
Здесь решаются две разные проблемы.
1) Предварительная каноникализация путей. Это нужно для того, чтобы
правила /etc/buildreqs/files/ignore.d работали всегда, а не от случая
к случаю (т.е. не зависели от путей типа /usr/bin/../lib/... -- такие
пути делает gcc! -- и т.п.).
2) Окончательная каноникализация путей. Это нужно для того, о чем я
писал в процитированном письме: чтобы требование на симлинки дополнительно
переходило в требование на файлы, на которые симлинки смотрят.
Проблема с этим патчем одна -- readlink'и в цикле будут работать долго.
Приходится ждать заметное время даже на мощной машине (порядка двух
секунд при линковке с -lSDL). Кстати, оптимизация {esound,libSDL-devel}
с этим патчем работает агрессивно.
К сожалению, readlink не работает с xargs (а xargs в свою очередь всегда
делает word splitting, что критически плохо для имен файлов). Также и
awk не умеет делать ничего вроде readlink или realpath. Остается только
перл. :)
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20060903/a13d0889/attachment-0001.bin>
Подробная информация о списке рассылки Devel