Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 438990 - sys-libs/uclibc: pita to set up a profile where iconv is provided by dev-libs/libiconv and not uclibc[iconv]
Summary: sys-libs/uclibc: pita to set up a profile where iconv is provided by dev-libs...
Status: RESOLVED WONTFIX
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: [OLD] Core system (show other bugs)
Hardware: All Linux
: Normal normal
Assignee: Anthony Basile
URL:
Whiteboard:
Keywords:
Depends on:
Blocks: 457648
  Show dependency tree
 
Reported: 2012-10-19 21:41 UTC by Anthony Basile
Modified: 2013-07-25 11:43 UTC (History)
4 users (show)

See Also:
Package list:
Runtime testing required: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Anthony Basile gentoo-dev 2012-10-19 21:41:38 UTC
Okay so here's the situation.  uclibc is highly configurable and we can build it without iconv.  We can still have a system with iconv support using dev-libs/libiconv the way fbsd does.  Why?  Because uclibc's iconv support is incomplete -- if your buidling a system via cross compile its fine, but on a uclibc system building uclibc itself, it fails.  Its as yet incomplete.

However, virtual/libiconv doesn't encode this option.  It just says:

RDEPEND="!elibc_glibc? ( !elibc_uclibc? ( dev-libs/libiconv ) )"

which doesn say "use dev-libs/libiconv if uclibc is buidl with USE=-iconv".  Okay so we tried:

RDEPEND="
	!elibc_glibc? (
		elibc_uclibc? || ( dev-libs/libiconv sys-libs/uclibc[iconv] )
		!elibc_uclibc? ( dev-libs/libiconv )
	)"

Only to discover that portage reasons something like this ... if USE=elibc_uclibc, then either dev-libs/libiconv or sys-libs/uclibc[iconv].  But as soon as it matches on the package uclibc, it says, okay now I want you to unmask iconv, which is not what we want.

Okay so we tried

DEPEND="
    !elibc_glibc?
    (
        elibc_uclibc? ( !iconv? ( dev-libs/libiconv ) )
        !elibc_uclibc? ( dev-libs/libiconv )
    )
"

but this means importing IUSE=inconv to the virtual and i'm not sure that's a good idea because you may want iconv on everywhere except uclibc.

The best solution so far is to modify the uclibc ebuild to encode a logic like this: if you don't want me to generate iconv then you can still get it by post depending on dev-libs/libiconv.  So just add

PDEPEND="!inconv? ( dev-libs/libiconv )"

This will force the extra package if !iconv, so if you really want you can add iconv-ext to say, I want you to provide inconv externally:

PDEPEND="!iconv? ( iconv-ext ( dev-libs/libiconv ) )"

the latter smacks of useflag bloat.


Finally, where does this really hit home?  When trying to build with catalyst, stage1 misses dev-libs/libiconv even if it is in some packages file because its a stage1.  (Maybe profile/package.build can help here, but I had no luck.)



Reproducible: Always
Comment 1 Zac Medico gentoo-dev 2012-10-20 01:25:22 UTC
(In reply to comment #0)
> Finally, where does this really hit home?  When trying to build with
> catalyst, stage1 misses dev-libs/libiconv even if it is in some packages
> file because its a stage1.  (Maybe profile/package.build can help here, but
> I had no luck.)

The file name is "packages.ebuild", not "package.ebuild". Does it work if you spell it right?
Comment 2 Zac Medico gentoo-dev 2012-10-20 01:26:11 UTC
I mean "packages.build", not "package.build".
Comment 3 Anthony Basile gentoo-dev 2012-10-20 01:30:08 UTC
(In reply to comment #2)
> I mean "packages.build", not "package.build".

I only spelled it wrong here.  It does work.  I still can't help but wonder if this logic shouldn't be in uclibc ebuild itself.
Comment 4 SpanKY gentoo-dev 2012-10-24 22:40:03 UTC
(In reply to comment #0)

i don't think uclibc should be depending on libiconv at all.  i certainly run systems w/out iconv and don't have a problem.  like my personal server -- apache (including php), git, openvpn, ssh, and more.  the lack of iconv isn't preventing this, and this is a fairly "full" build.
Comment 5 Anthony Basile gentoo-dev 2012-10-27 16:22:17 UTC
(In reply to comment #4)
> (In reply to comment #0)
> 
> i don't think uclibc should be depending on libiconv at all.  i certainly
> run systems w/out iconv and don't have a problem.  like my personal server
> -- apache (including php), git, openvpn, ssh, and more.  the lack of iconv
> isn't preventing this, and this is a fairly "full" build.

Its at least python 3.2 that caused the issue.  I had to bring in iconv support.  I'll check later if this is coming from wide-unicode support or what.

uclibc-amd64 ~ # ldd /usr/bin/python3.2 
checking sub-depends for '/usr/lib/libpython3.2.so.1.0'
checking sub-depends for '/usr/lib/gcc/x86_64-gentoo-linux-uclibc/4.6.3/libgcc_s.so.1'
checking sub-depends for '/lib/libpthread.so.0'
checking sub-depends for '/lib/libc.so.0'
checking sub-depends for '/usr/lib/libintl.so.8'
checking sub-depends for '/lib/libdl.so.0'
checking sub-depends for '/lib/libutil.so.0'
checking sub-depends for '/lib/libm.so.0'
checking sub-depends for '/lib/libiconv.so.2'
	libpython3.2.so.1.0 => /usr/lib/libpython3.2.so.1.0 (0x00000000)
	libgcc_s.so.1 => /usr/lib/gcc/x86_64-gentoo-linux-uclibc/4.6.3/libgcc_s.so.1 (0x00000000)
	libpthread.so.0 => /lib/libpthread.so.0 (0x00000000)
	libc.so.0 => /lib/libc.so.0 (0x00000000)
	libintl.so.8 => /usr/lib/libintl.so.8 (0x00000000)
	libdl.so.0 => /lib/libdl.so.0 (0x00000000)
	libutil.so.0 => /lib/libutil.so.0 (0x00000000)
	libm.so.0 => /lib/libm.so.0 (0x00000000)
	libiconv.so.2 => /lib/libiconv.so.2 (0x00000000)
	not a dynamic executable
Comment 6 Anthony Basile gentoo-dev 2013-07-25 11:43:02 UTC
this is a result of my uclibc config file and the way i've been doing things on the stage3 under /experimental/<arch>/uclibc.  using the breakout library does mean having to add CFLAGS=-liconv and this works okay for all the bugs related to this.