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.