[devel] pkgconfiglib.req

Alexey Tourbin =?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Вт Авг 28 23:55:29 MSD 2007


On Tue, Aug 28, 2007 at 09:11:00PM +0400, Alexey M. Tourbin wrote:
> Иногда бывает так, что с новым devel-пакетом перестает что-то собираться
> из-за добавившихся библиотек для линковки в *.pc файле.  Здесь есть два
> подхода.  Первый подход -- это, если добавленные библиотеки на самом
> деле излишни, то мы получаем ценную информацию, чтобы дать кому-то
> подзатыльник (точнее, чтобы убрать ненужные библиотеки из Libs в новом
> пакете).  С другой стороны, раздача подзатыльников методом поломки
> репозитария не кажется мне вполне технологичным развлечением.
> 
> Второй подход -- это, если добавленные библиотеки на самом деле не
> лишние, добить новых *-devel зависимостей на соответствующие пакеты.
> Кроме всего прочего, этот подход относительно легко перепоручить
> автоматике.
> 
> Поэтому предлагаю замыкать зависимости между *-devel пакетами по
> содержимому поля Libs в *.pc файлах.

Взялся проанализировать содержимое noarch пакетов.

$ pwd
/ALT/Sisyphus/files/noarch/RPMS
$ rpmfile . |grep $'\\.pc\t' 
gnome-doc-utils-0.10.3-alt2.noarch.rpm  /usr/share/pkgconfig/gnome-doc-utils.pc 100644  ASCII text
gnome-doc-utils-0.10.3-alt2.noarch.rpm  /usr/share/pkgconfig/xml2po.pc  100644  ASCII text
gnome-icon-theme-2.18.0-alt1.noarch.rpm /usr/share/pkgconfig/gnome-icon-theme.pc        100644  ASCII English text
gnome-mime-data-2.18.0-alt1.noarch.rpm  /usr/share/pkgconfig/gnome-mime-data-2.0.pc     100644  ASCII text
gtk-doc-1.8-alt1.noarch.rpm     /usr/share/pkgconfig/gtk-doc.pc 100644  ASCII text
i386-mingw32msvc-SDL-devel-1.2.11-alt1.noarch.rpm       /usr/i386-mingw32msvc/lib/pkgconfig/sdl.pc      100644  ASCII text
i386-mingw32msvc-libogg-devel-1.1.2-alt3.noarch.rpm     /usr/i386-mingw32msvc/lib/pkgconfig/ogg.pc      100644  ASCII text
i386-mingw32msvc-libpng-devel-1.2.8-alt2.noarch.rpm     /usr/lib/pkgconfig/i386-mingw32msvc-libpng.pc   120777  symbolic link to `i386-mingw32msvc-libpng12.pc'
i386-mingw32msvc-libpng-devel-1.2.8-alt2.noarch.rpm     /usr/lib/pkgconfig/i386-mingw32msvc-libpng12.pc 100644  ASCII text
i386-mingw32msvc-libssl-devel-0.9.8a-alt1.noarch.rpm    /usr/i386-mingw32msvc/lib/pkgconfig/libcrypto.pc        100644  ASCII text
i386-mingw32msvc-libssl-devel-0.9.8a-alt1.noarch.rpm    /usr/i386-mingw32msvc/lib/pkgconfig/libssl.pc   100644  ASCII text
i386-mingw32msvc-libssl-devel-0.9.8a-alt1.noarch.rpm    /usr/i386-mingw32msvc/lib/pkgconfig/openssl.pc  100644  ASCII text
i386-mingw32msvc-libvorbis-devel-1.1.0-alt2.noarch.rpm  /usr/i386-mingw32msvc/lib/pkgconfig/vorbis.pc   100644  ASCII English text
i386-mingw32msvc-libvorbis-devel-1.1.0-alt2.noarch.rpm  /usr/i386-mingw32msvc/lib/pkgconfig/vorbisenc.pc        100644  ASCII text
i386-mingw32msvc-libvorbis-devel-1.1.0-alt2.noarch.rpm  /usr/i386-mingw32msvc/lib/pkgconfig/vorbisfile.pc       100644  ASCII text
i386-mingw32msvc-libxml2-devel-2.6.20-alt1.noarch.rpm   /usr/i386-mingw32msvc/lib/pkgconfig/libxml-2.0.pc       100644  ASCII text
i386-mingw32msvc-libxslt-devel-1.1.14-alt1.noarch.rpm   /usr/i386-mingw32msvc/lib/pkgconfig/libexslt.pc 100644  ASCII text
i386-mingw32msvc-libxslt-devel-1.1.14-alt1.noarch.rpm   /usr/i386-mingw32msvc/lib/pkgconfig/libxslt.pc  100644  ASCII text
icon-naming-utils-0.8.2-alt1.noarch.rpm /usr/share/pkgconfig/icon-naming-utils.pc       100644  ASCII English text
iso-codes-devel-0.58-alt1.noarch.rpm    /usr/share/pkgconfig/iso-codes.pc       100644  ASCII text
libice-sharp-devel-3.2.0-alt1.noarch.rpm        /usr/lib/pkgconfig/glacier2cs.pc        100644  ASCII text
libice-sharp-devel-3.2.0-alt1.noarch.rpm        /usr/lib/pkgconfig/iceboxcs.pc  100644  ASCII text
libice-sharp-devel-3.2.0-alt1.noarch.rpm        /usr/lib/pkgconfig/icecs.pc     100644  ASCII text
libice-sharp-devel-3.2.0-alt1.noarch.rpm        /usr/lib/pkgconfig/icegridcs.pc 100644  ASCII text
libice-sharp-devel-3.2.0-alt1.noarch.rpm        /usr/lib/pkgconfig/icepatch2cs.pc       100644  ASCII text
libice-sharp-devel-3.2.0-alt1.noarch.rpm        /usr/lib/pkgconfig/icestormcs.pc        100644  ASCII text
xorg-x11-bitmaps-1.0.1-alt2.1.noarch.rpm        /usr/share/pkgconfig/xbitmaps.pc        100644  ASCII text
$

Хочу заметить, что в pkgconfig.req.files отбираются только файлы
в %_libdir/pkgconfig и /usr/share/pkgconfig, так что
/usr/i386-mingw32msvc/**/*.pc не создаст ложных зависимостей,
эти файлы просто не будут обрабатываться.

ОБРАТИМ ВНИМАНИЕ НА ИСПОЛЬЗОВАНИЕ /usr/lib/pkgconfig/ в noarch пакетах.
БУДЕТ ЛИ ЭТО РАБОТАТЬ НА x86_64?

[at на hint1 ~]$ hsh --init
[at на hint1 ~]$ hsh-install libice-sharp-devel
...
[at на hint1 ~]$ hsh-shell --rooter
[root на hint1 .in]# grep -i ^name /usr/lib/pkgconfig/icestormcs.pc
name = icestormcs
Name: ${name}
[root на hint1 .in]# pkg-config --print-errors --modversion icestormcs
Package icestormcs was not found in the pkg-config search path.
Perhaps you should add the directory containing `icestormcs.pc'
to the PKG_CONFIG_PATH environment variable
No package 'icestormcs' found
[root на hint1 .in]# mv /usr/lib/pkgconfig/*.pc /usr/lib64/pkgconfig/
[root на hint1 .in]# pkg-config --print-errors --modversion icestormcs
3.2.0
[root на hint1 .in]# 

ВОТ ТАК ТАК!  В noarch ПАКЕТАХ НЕ ДОЛЖНО БЫТЬ /usr/lib/pkgconfig!
Прошу maintainer'а pkg-config прокомментировать эту ситуацию.

Теперь делаю такой финт ушами чтобы посмотреть что лежит внутри
этих *.pc файлов:

$ rpmfile . |grep $'\\.pc\t' |cut -f1 |sort -u |xargs -n1 -I RPM rpmpeek RPM find ./usr -name '*.pc' -exec egrep -iH '^(req|libs)' {} \;
./usr/share/pkgconfig/xml2po.pc:Requires: libxml-2.0
./usr/share/pkgconfig/gnome-icon-theme.pc:Requires:
./usr/share/pkgconfig/gnome-icon-theme.pc:Libs:
./usr/share/pkgconfig/gnome-mime-data-2.0.pc:Requires:
./usr/share/pkgconfig/gnome-mime-data-2.0.pc:Libs:
./usr/i386-mingw32msvc/lib/pkgconfig/sdl.pc:Requires:
./usr/i386-mingw32msvc/lib/pkgconfig/sdl.pc:Libs: -L${libdir}  -lmingw32 -lSDLmain -lSDL  -mwindows
./usr/i386-mingw32msvc/lib/pkgconfig/ogg.pc:Requires:
./usr/i386-mingw32msvc/lib/pkgconfig/ogg.pc:Libs: -L${libdir} -logg
./usr/lib/pkgconfig/i386-mingw32msvc-libpng12.pc:Libs: -lpng12
./usr/lib/pkgconfig/i386-mingw32msvc-libpng.pc:Libs: -lpng12
./usr/i386-mingw32msvc/lib/pkgconfig/openssl.pc:Requires:
./usr/i386-mingw32msvc/lib/pkgconfig/openssl.pc:Libs: -L${libdir} -lssl -lcrypto -lwsock32 -lgdi32 -lz
./usr/i386-mingw32msvc/lib/pkgconfig/libssl.pc:Requires:
./usr/i386-mingw32msvc/lib/pkgconfig/libssl.pc:Libs: -L${libdir} -lssl -lcrypto -lwsock32 -lgdi32 -lz
./usr/i386-mingw32msvc/lib/pkgconfig/libcrypto.pc:Requires:
./usr/i386-mingw32msvc/lib/pkgconfig/libcrypto.pc:Libs: -L${libdir} -lcrypto -lwsock32 -lgdi32 -lz
./usr/i386-mingw32msvc/lib/pkgconfig/vorbisfile.pc:Requires: vorbis ogg
./usr/i386-mingw32msvc/lib/pkgconfig/vorbisfile.pc:Libs: -L${libdir} -lvorbisfile
./usr/i386-mingw32msvc/lib/pkgconfig/vorbisenc.pc:Requires: vorbis
./usr/i386-mingw32msvc/lib/pkgconfig/vorbisenc.pc:Libs: -L${libdir} -lvorbisenc
./usr/i386-mingw32msvc/lib/pkgconfig/vorbis.pc:Requires: ogg
./usr/i386-mingw32msvc/lib/pkgconfig/vorbis.pc:Libs: -L${libdir} -lvorbis
./usr/i386-mingw32msvc/lib/pkgconfig/libxml-2.0.pc:Requires:
./usr/i386-mingw32msvc/lib/pkgconfig/libxml-2.0.pc:Libs: -L${libdir} -lxml2  -lz  -liconv
./usr/i386-mingw32msvc/lib/pkgconfig/libxslt.pc:Requires: libxml-2.0
./usr/i386-mingw32msvc/lib/pkgconfig/libxslt.pc:Libs: -L${libdir} -lxslt  -L/usr/i386-mingw32msvc/lib -lxml2 -lz -liconv
./usr/i386-mingw32msvc/lib/pkgconfig/libexslt.pc:Requires: libxml-2.0
./usr/i386-mingw32msvc/lib/pkgconfig/libexslt.pc:Libs: -L${libdir} -lexslt -lxslt  -L/usr/i386-mingw32msvc/lib -lxml2 -lz -liconv
./usr/share/pkgconfig/icon-naming-utils.pc:Requires:
./usr/share/pkgconfig/icon-naming-utils.pc:Libs:
./usr/lib/pkgconfig/icestormcs.pc:Libs: -r:${mono_root}/lib/mono/gac/${name}/${version}.0__1f998c50fec78381/${name}.dll
./usr/lib/pkgconfig/icestormcs.pc:Requires: icecs = ${version}
./usr/lib/pkgconfig/icepatch2cs.pc:Libs: -r:${mono_root}/lib/mono/gac/${name}/${version}.0__1f998c50fec78381/${name}.dll
./usr/lib/pkgconfig/icepatch2cs.pc:Requires: icecs = ${version}
./usr/lib/pkgconfig/icegridcs.pc:Libs: -r:${mono_root}/lib/mono/gac/${name}/${version}.0__1f998c50fec78381/${name}.dll
./usr/lib/pkgconfig/icegridcs.pc:Requires: icecs = ${version}
./usr/lib/pkgconfig/icecs.pc:Libs: -r:${mono_root}/lib/mono/gac/${name}/${version}.0__1f998c50fec78381/${name}.dll
./usr/lib/pkgconfig/iceboxcs.pc:Libs: -r:${mono_root}/lib/mono/gac/${name}/${version}.0__1f998c50fec78381/${name}.dll
./usr/lib/pkgconfig/iceboxcs.pc:Requires: icecs = ${version}
./usr/lib/pkgconfig/glacier2cs.pc:Libs: -r:${mono_root}/lib/mono/gac/${name}/${version}.0__1f998c50fec78381/${name}.dll
./usr/lib/pkgconfig/glacier2cs.pc:Requires: icecs = ${version}
./usr/share/pkgconfig/xbitmaps.pc:Libs:
$

К счастью, библиотек нигде нет (кроме i386-mingw32msvc и mono).
Однако интересно, что xml2po.pc (gnome-doc-utils) требует libxml-2.0.
Это как раз та проблема семантики pkg-config зависимостей, которую
я недвано упоминал.  По видимому, смысл в том, что gnome-doc-utils
требует пакет xml-utils (который собирается из libxml2).  Но, таким
образом, ЗАВИСИМОСТИ pkg-config НЕ ЯВЛЯЕТСЯ чисто devel ЗАВИСИМОСТЯМИ
для сборки других пакетов.  То есть это плохая, допотопная система
зависимостей, в которой BuildRequires, Requires: lib%name.so.0 и
Requires: lib%name-devel свалено всё в одну кучу.  Единственный
приемлемый способ отражать эту систему зависимостей в rpm, это
переместить все *.pc файлы в *-devel пакеты.  Но и в *-devel
пакетах в Libs находятся левые библиотеки, которые использовались
только для сборки самого этого пакта.  Такие библиотеки нужно переносить
в Libs.private.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?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/20070828/efa47e1c/attachment-0001.bin>


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