On Mon, 4 Mar 2013 11:02:40 +0100
Alexis Ballier <aball...@gentoo.org> wrote:

> On Sun, 3 Mar 2013 23:25:03 +0100
> Michał Górny <mgo...@gentoo.org> wrote:
> 
> > On Sun, 3 Mar 2013 18:18:12 +0100
> > Alexis Ballier <aball...@gentoo.org> wrote:
> > 
> > > On Sun, 3 Mar 2013 17:58:26 +0100
> > > Michał Górny <mgo...@gentoo.org> wrote:
> > > 
> > > > What do we need that wrapper for? What does the wrapper do? Does
> > > > it just rely on custom 'ABI' variable?
> > > 
> > > yes -- it must perform some checks though.
> > 
> > What kind of checks?
> 
> you are called with ABI=sth argv[0] = your name

I'm afraid that's the first potential point of failure. Relying
on argv[0] is a poor idea and means that any application calling exec()
with changed argv[0] on a wrapped binary will fail terribly.

> if argv[0] = abiwrapper -> print some information and exit
> getenv ABI -> if nothing then set ABI=$DEFAULT_ABI (hardcoded at
> buildtime of the wrapper)
> execvp(argv[0]_$ABI, argv)
> if execvp returns: print a warning, execvp argv[0]_$DEFAULT_ABI
> 
> 
> python-wrapper.c is very likely to have such a logic already.
> 
> btw, IMHO ABI is a too common name for such a variable, I'd better name
> it something like _GENTOO_MULTILIB_ABI so that collisions are much less
> likely.

I'm afraid you are actually starting to go the other way.

Global wrapper means that it is potentially useful to our users.
However I don't really see people who want to compile 32-bit
executables think of setting some custom variable like ABI.

Moreover, if we replace that with a specific, 'private' environment
variable like you suggested, we're actually discouraging people from
using it. So, we're force-installing wrappers which make things fragile
and at the same time provide no benefit for regular users.

> > > > Or maybe should it try to detect
> > > > whether it was called by a 64- or 32-bit app?
> > > 
> > > this wont work: think about a build system, your shell/make will
> > > likely be your default abi's but may call abi-specific tools
> > > depending on what you build _for_ not what you build _with_
> > 
> > That's one side of it. The other is that if it worked, it may be
> > something really unexpected. Do you expect things to work differently
> > when called by a 32-bit program?
> 
> That's why I asked for examples :)
> qmake may do it, I don't think its sane, but that's life for now.
> having glxinfo for each abi is useful from a user perspective (it does
> not need the wrapper a priori though)

Yep, I intended to just have the additional variant of glxinfo directly
callable, with a name chosen specifically by the X11 team. Wrapper
would be more confusing than beneficial here IMO.

> > > > What for?
> > > 
> > > in order to be transparent from the ebuild perspective.
> > 
> > That depends on what kind of transparency do we want. I prefer being
> > explicit here rather than assuming something you can't know for sure.
> 
> See it something like python-wrapper. EPYTHON=python3.2 python -> runs
> python3.2 :)

Err, python-wrapper respects quite complex logic involving EPYTHON,
and eselect-python. We don't really want people to have eselect-abi,
do we?

If we were to implement abi-wrapper, it will be much simpler than any
logic needed for Python.

> > I think we're starting to miss the point of multilib. Multilib was
> > intended as a cheap way of getting things working. I believe that we
> > should still consider it so, and keep it in cages rather than
> > believing that the world is more fun with tigers jumping around.
> > 
> > That said, I wouldn't say that making random executables in system
> > work differently on ${ABI} is a way to go. That leaves the tricky
> > imprint of multilib visible to users who shouldn't care about it. If
> > they do, they're looking for multilib-portage.
> 
> To some extent that's what happened to python too :) As a python
> maintainer, you could share your thoughts on the topic. python slotting
> was intended to make switching between python versions easy but has
> been needing wrappers for the python binary.

I'm doing just that. Any kind of wrapping is an increasing mess. I'm
still trying to find out good solutions for Python wrapping but there's
no such thing. It's always about choosing one evil over the other.

> > The whole 'switching' part of multilib should be kept part of our
> > build system -- eclasses, ebuilds or just some specificities like
> > libdir or pkg-config path switching.
> 
> Maybe, but that would involve perfectly working setups being "broken".
> It's like packages not respecting CC being broken for cross-compiling,
> those not respecting CFLAGS being broken for multilib, etc.

Just to make it clear, multilib.eclass overrides CC for multilib. It
does not rely on CFLAGS. I don't know the rationale, I can guess only.

> packages
> calling directly binaries having ABI specific output will be broken for
> multilib too (and I don't know of anyone checking for this while the
> other two have been long standing issues we tried to fix). We can fix
> this, but the fact is that we need multi-binary support for users, then
> the only choice to make is if we want to provide a wrapper so that we
> do not need to fix build systems or if we want to fix them. The latter
> is likely preferred but I do not know what kind of work it will involve.
> It'd help if tommy could provide a list of binaries he needed to wrap
> through the abiwrapper.

We don't want it for users in an automagic and fragile way. And ebuilds
we can fix while migrating.

-- 
Best regards,
Michał Górny

Attachment: signature.asc
Description: PGP signature

Reply via email to