[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