RPMFilesReqList

Материал из ALT Linux Wiki

Алексей Турбин сделал модульным механизм поиска зависимостей на каталоги. Теперь каждый может создать файл /usr/lib/rpm/%name-files.req.list (но желательно сначала написать об этом в рассылку devel).

Формат файла /usr/lib/rpm/%name-files.req.list следующий:

  1. Значащие строки начинаются со слеша '/'.
  2. Значащая строка может содержать одно поле: <каталог>
  3. или же два поля: <каталог> <пакет>

Здесь <каталог> означает тот каталог, на который будет выставляться зависимость; <пакет> в (3) означает пакет, который эксклюзивно владеет каталогом. Если указан эксклюзивный владелец каталога, то будет срабатывать проверка (чтобы никакой другой пакет не смог завладеть каталогом).

<каталог> может быть записан в форме с одним окончательным слешем (или без него), количество пробелов любое.

Если файл подпадает под два или более каталога (в таком случае один из каталогов является подкаталогом другого), то будет выбран самый длинный каталог.

Далее приведён пример, как реализовать зависимости на каталоги

  • /usr/lib/pkgconfig
  • /usr/lib64/pkgconfig
  • /usr/share/pkgconfig

при этом пакет pkg-config эксклюзивно владеет этими каталогами.

Интересно, что каталогом /usr/lib64/pkgconfig незаконно владеют ещё три пакета:

  • sphinxbase 0.3-alt1
  • libvolume_id-devel 124-alt1
  • libsynce-devel 0.11.1-alt1


commit ee38c43ae68a0a39b238abd3e8bb4f2121f75c50
Author: Alexey Tourbin <at на altlinux>
Date:   Mon Jun 16 12:39:54 2008 +0400

    spec: make %_rpmlibdir/pkgconfig-files.req.list

Full diff since common ancestor `0.23-alt1' follows:
diff --git a/pkg-config.spec b/pkg-config.spec
index 55ae32a..a90832b 100644
--- a/pkg-config.spec
+++ b/pkg-config.spec
@@ -8,6 +8,9 @@ Group: Development/Other
 Url: http://pkg-config.freedesktop.org/wiki/
 Packager: Dmitry V. Levin <ldv на altlinux>
 
+Provides: %_libdir/pkgconfig
+Provides: %_datadir/pkgconfig
+
 Provides: pkgconfig-reqprov, pkgconfig-recursion, pkgconfig = 1:%version-%release
 Obsoletes: pkgconfig
 
@@ -55,8 +58,17 @@ cat <<\EOF >%buildroot%_sysconfdir/buildreqs/files/ignore.d/%name
 ^(%_libdir|%_datadir)/pkgconfig/[^/]+\.pc$
 EOF
 
+mkdir -p %buildroot%_rpmlibdir
+cat <<\EOF >%buildroot%_rpmlibdir/pkgconfig-files.req.list
+# %name dirlist for %_rpmlibdir/files.req
+/usr/lib/pkgconfig	%name
+/usr/lib64/pkgconfig	%name
+/usr/share/pkgconfig	%name
+EOF
+
 %files
 %config %_sysconfdir/buildreqs/files/ignore.d/*
+%config %_rpmlibdir/*
 %_bindir/pkg-config
 %dir %_libdir/pkgconfig
 %dir %_datadir/pkgconfig