Today I tried to upgrade qt. emerge gives: # emerge -pv1 qt These are the packages that I would merge, in order: Calculating dependencies ...done! [ebuild U ] x11-libs/qt-3.3.4-r8 [3.3.4-r3] +cups -debug +doc -examples +firebird +gif -immqt -immqt-bc +ipv6 +mysql +nas +odbc +opengl +postgres -sqlite +xinerama 0 kB [ebuild N ] dev-db/qt-unixODBC-3.3.4-r1 0 kB Total size of downloads: 0 kB # emerge -pv1 qt-unixODBC These are the packages that I would merge, in order: Calculating dependencies ...done! [ebuild N ] dev-db/qt-unixODBC-3.3.4-r1 0 kB Total size of downloads: 0 kB emerge -B qt succeeded, but # emerge -K1 qt Calculating dependencies - !!! There are no packages available to satisfy: "~dev-db/qt-unixODBC-3.3.4" !!! Either add a suitable binary package or compile from an ebuild. qt-unixODBC pdepends on qt, and qt depends on qt-unixODBC. So the expected sequence is qt first, then qt-unixODBC, but portage seems to treat the PDEPEND in qt as an RDEPEND and insists on merging qt-unixODBC first, which is wrong. Portage 2.0.51.22-r2 (default-linux/x86/2005.0, gcc-3.3.5-20050130, glibc-2.3.4.20041102-r1, 2.6.11.11 i686) ================================================================= System uname: 2.6.11.11 i686 Intel(R) Pentium(R) 4 Mobile CPU 1.70GHz Gentoo Base System version 1.6.13 dev-lang/python: 2.3.5-r2 sys-apps/sandbox: 1.2.12 sys-devel/autoconf: 2.13, 2.59-r6 sys-devel/automake: 1.4_p6, 1.5, 1.6.3, 1.7.9-r1, 1.8.5-r3, 1.9.6 sys-devel/binutils: 2.15.92.0.2-r10 sys-devel/libtool: 1.5.18-r1 virtual/os-headers: 2.6.8.1-r4 ACCEPT_KEYWORDS="x86" AUTOCLEAN="yes" CBUILD="i586-pc-linux-gnu" CFLAGS="-march=i586 -O2 -Os -fomit-frame-pointer -pipe" CHOST="i586-pc-linux-gnu" CONFIG_PROTECT="/etc /usr/kde/2/share/config /usr/kde/3.1/share/config /usr/kde/3/share/config /usr/lib/X11/xkb /usr/share/config /usr/share/texmf/dvipdfm/config/ /usr/share/texmf/dvips/config/ /usr/share/texmf/tex/generic/config/ /usr/share/texmf/tex/platex/config/ /usr/share/texmf/xdvi/ /var/qmail/control" CONFIG_PROTECT_MASK="/etc/gconf /etc/terminfo /etc/env.d" CXXFLAGS="-march=i586 -O2 -Os -fomit-frame-pointer -pipe" DISTDIR="/gentoo/distfiles" FEATURES="autoconfig buildpkg collision-protect distlocks sandbox sfperms strict userpriv usersandbox" GENTOO_MIRRORS="http://mirrors.sec.informatik.tu-darmstadt.de/gentoo http://gentoo.oregonstate.edu http://www.ibiblio.org/pub/Linux/distributions/gentoo" LANG="en_US.utf8" PKGDIR="/gentoo/packages" PORTAGE_TMPDIR="/tmp/gentoo/tmp" PORTDIR="/gentoo/portage" PORTDIR_OVERLAY="/gentoo/overlay" SYNC="rsync://rsync.europe.gentoo.org/gentoo-portage" USE="x86 X X509 Xaw3d aalib acl acpi activefilter adns alsa apm async avi berkdb bidi bitmap-fonts caps cdr chroot crypt cscope cspoe cups curl dga directfb doc dvb dvd dvdr eds emboss encode erandom ethereal evo f77 fam fbcon firebird flac flash foomaticdb fortran freetds freetype gb gcj gd gdbm ggi gif gphoto2 gpm gps gstreamer gtk gtk2 hbci imagemagick imap imlib imlib2 informix innodb ipv6 java jbig jikes jpeg junit ladcca lcms ldap libg++ libwww lirc mad mailwrapper mcal md5sum mikmod motif mozilla mozsvg mp3 mpeg mpi mysql nas ncurses nhc98 nls nntp nptl oav oci8 odbc ogg oggvorbis opengl oss pam pcmcia pda pdflib pg-hier pg-intdatetime pg-vacuumdelay pic pie plotutils png pnp postgres ppds prebuilt quicktime readline samba sasl scanner sdl slang slp snmp socks5 speex spell ssl svga tcpd tetex threads tiff truetype truetype-fonts type1-fonts unicode usb vanilla vorbis wavelan wmf xface xine xinerama xml xml2 xmms xv zlib userland_GNU kernel_linux elibc_glibc" Unset: ASFLAGS, CTARGET, LC_ALL, LDFLAGS, LINGUAS, MAKEOPTS
(In reply to comment #0) > # emerge -pv1 qt > > [ebuild U ] x11-libs/qt-3.3.4-r8 [3.3.4-r3] +cups -debug +doc -examples > +firebird +gif -immqt -immqt-bc +ipv6 +mysql +nas +odbc +opengl +postgres > -sqlite +xinerama 0 kB > [ebuild N ] dev-db/qt-unixODBC-3.3.4-r1 0 kB qt upgrade followed by qt-unixODBC new install. > # emerge -pv1 qt-unixODBC > > [ebuild N ] dev-db/qt-unixODBC-3.3.4-r1 0 kB qt-unixODBC new install only because your currently installed qt version satisfies qt-unixODBC's dependency. > # emerge -K1 qt > !!! There are no packages available to satisfy: "~dev-db/qt-unixODBC-3.3.4" > !!! Either add a suitable binary package or compile from an ebuild. You have no binary package for qt-unixODBC. > qt-unixODBC pdepends on qt, and qt depends on qt-unixODBC. So the expected > sequence is qt first, then qt-unixODBC This logic is correct. > but portage seems to treat the PDEPEND in qt as an RDEPEND and insists on > merging qt-unixODBC first, which is wrong. Nothing in the samples you have given shows this. In the past it was a DEPEND both ways, which triggered portage's mishandling of circular dependencies and caused the behaviour you are describing. However, if qt-unixODBC now PDEPENDs on qt what you are describing should not be possible.
Ok, my assumption that portage wanted to emerge qt-unixODBC first was wrong. Nonetheless, "emerge -K qt" should have simply merged qt and finished without error. After all, PDEPEND is just advisory. (At least in this specific case, or is it not?) Accordingly, "emerge -k qt" merged qt and _only then_ started to _build_ qt-unixODBC. After interrupting the build I get "dev-db/qt-unixODBC-3.3.4-r1" in "emerge -ubkDvp world" so portage can handle the fact that a pdepended package is not installed quite well. Questions: 1. Is PDEPEND a mandatory dependency (in general), in the sense that the package is broken without the pdepended packages? 2. Same question for the specific case: Is qt broken without qt-unixODBC? 3. If PDEPEND is not only advisory (Answer to question 1 is yes) and qt-unixODBC is not required for qt to function correctly (Answer to question 2 is no) then why is qt-unixODBC pdepended on? 4. If PDEPEND is only advisory (Answer to question 1 is no) then why does "emerge -K qt" fail? When I see the light in this matter I'll change the bug summary to more clearly describe the issue.
Still more questions: Could I simply drop the odbc USE flag from qt and emerge qt-unixODBC manually to end up with exactly the same result? If yes, is this no abuse of USE flags? /etc/make.conf.example states: "The USE variable is used to enable optional build-time functionality." What is the "build-time functionality" in this case?
no, PDEPEND is not advisory you used -K which means you were allowing only binary packages ... portage was unable to find a binary package for qt unixodbc thus it rightly aborted use --nodeps if you want to force it to be emerged