From: Alexey Tourbin <at@altlinux.ru>
To: devel@lists.altlinux.org
Subject: Re: [devel] pkgconfiglib.req
Date: Tue, 28 Aug 2007 23:55:29 +0400
Message-ID: <20070828195529.GH24207@solemn.turbinal> (raw)
In-Reply-To: <20070828171100.GE24207@solemn.turbinal>
[-- Attachment #1: Type: text/plain, Size: 9751 bytes --]
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.
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
next prev parent reply other threads:[~2007-08-28 19:55 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-08-28 17:11 Alexey M. Tourbin
2007-08-28 19:55 ` Alexey Tourbin [this message]
2007-08-28 20:12 ` [devel] /usr/lib/pkgconfig vs noarch Dmitry V. Levin
2007-08-28 20:47 ` Alexey Tourbin
2007-08-28 21:07 ` Alexey Tourbin
2007-08-28 21:32 ` [devel] sisyphus_check noarch Alexey Tourbin
2007-09-01 13:12 ` [devel] /usr/lib/pkgconfig vs noarch Денис Смирнов
2007-08-29 15:56 ` Dmitry V. Levin
2007-08-29 17:05 ` [devel] giter-factory Alexey Tourbin
2007-08-29 19:29 ` Dmitry V. Levin
2007-08-29 19:37 ` Alexey Tourbin
2007-08-29 21:02 ` Alexey Tourbin
2007-08-29 21:11 ` Dmitry V. Levin
2007-08-29 21:47 ` Alexey Tourbin
2007-08-29 21:55 ` Dmitry V. Levin
2007-08-29 22:26 ` Alexey Tourbin
2007-08-30 8:40 ` Kirill A. Shutemov
2007-09-01 23:47 ` Alexey Tourbin
2007-08-30 8:53 ` Kirill A. Shutemov
2007-09-16 21:13 ` Michael Shigorin
2007-09-16 21:36 ` Alexey Tourbin
2007-09-16 21:32 ` Aleksey Avdeev
2007-09-16 22:15 ` [devel] giter-factory idea Alexey Tourbin
2007-09-16 23:01 ` Aleksey Avdeev
2007-09-17 5:42 ` Alexey Tourbin
2007-09-17 10:41 ` Aleksey Avdeev
2007-09-18 9:32 ` [devel] giter-factory Michael Shigorin
2007-08-28 20:29 ` [devel] pkgconfiglib.req Alexey I. Froloff
2007-08-28 20:46 ` Alexey Rusakov
2007-08-29 13:51 ` Igor Zubkov
2007-09-16 21:17 ` Michael Shigorin
2007-09-16 22:50 ` Alexey Rusakov
2007-09-17 5:36 ` Alexey Tourbin
2007-09-18 10:09 ` [devel] UQ: git-clone git.alt: unable to chdir or not a git archive Michael Shigorin
2007-09-18 10:09 ` Pavlov Konstantin
2007-09-18 10:15 ` [devel] отбой, спасибо, сам дурак Michael Shigorin
2007-09-18 11:44 ` [devel] pkgconfiglib.req Michael Shigorin
2007-09-18 11:49 ` Alexey Rusakov
2007-09-19 22:22 ` [devel] *.pc -devel Alexey Tourbin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070828195529.GH24207@solemn.turbinal \
--to=at@altlinux.ru \
--cc=devel@lists.altlinux.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
ALT Linux Team development discussions
This inbox may be cloned and mirrored by anyone:
git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
public-inbox-index devel
Example config snippet for mirrors.
Newsgroup available over NNTP:
nntp://lore.altlinux.org/org.altlinux.lists.devel
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git