[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