-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

On 18/12/13 02:54 AM, Michał Górny wrote:
> Hello, folks.
> 
> As some of you are already aware, the C++11 standard brought a few
>  changes to the C++ standard library. As a result, the standard 
> library used in C++11 mode has a different ABI than the one used
> in pre-C++11 mode. And this means that libraries that use some of 
> standard C++ types in their APIs also have different ABIs
> depending on the C++ standard used to build them. This is somehow
> explained in [1].
> 
> As a result, if a single library suffers that, its reverse 
> dependencies need to be built with the same C++ standard. And
> then, those can force even more dependencies and you may guess
> where this is going.
> 
> Basically, I've hit this with sys-devel/llvm. A user has requested 
> lldb support to be enabled in the ebuild [2]. Sadly, lldb requires 
> C++11 to be used, and this means that whole LLVM needs to become 
> C++11 enabled. And then, it would be at least recommended that all 
> reverse deps become C++11 enabled as well.
> 
> [1]:http://gcc.gnu.org/wiki/Cxx11AbiCompatibility 
> [2]:https://bugs.gentoo.org/show_bug.cgi?id=464354
> 
> 
> This raises the following question: how do we want to do it? I see 
> two possibilities:
> 
> a) adding USE=c++11 and USE-deps to all the packages in question,
> 
> b) doing the switch via synchronous version bump and matching 
> dependencies.
> 
> 
> I think that the variant a) is simpler. It goes like this:
> 
> 1) we add 'sys-devel/llvm[-c++11(-)]' deps to everything that uses 
> it,
> 
> 2) we add USE=c++11 to llvm,
> 
> 3) we add USE=c++11 and 'sys-devel/llvm[c++11=(-)]' deps to newest
>  version of everything that uses it.
> 
> The advantage is that plain users may just keep USE=c++11 disabled 
> as it is by default, and avoid hitting some issues with non-tree 
> packages and so on.
> 
> At some point, we'll probably want to remove non-C++11 support 
> completely. Then we could start by use.forcing the flag, changing 
> deps in packages and so on.
> 
> 


I think variant A is probably a better solution all around, not least
because this type of choice is almost a profile-level decision and a
global USE flag setting seems an appropriate way to ensure it works.
Plus, the use flag method allows those that want to fiddle with it
per-package to be able to do so while still guaranteeing the deptree
is properly synchronized as per the version.

variant B does offer the nice ability to just force it and therefore
not give end-users this new flag to worry about, but I forsee that we
will have conflicts with upgrading/downgrading package between the
pre- and post-C++11 border.  If we were a versioned distro this would
be the way to go, but....



-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.22 (GNU/Linux)

iF0EAREIAAYFAlKxsOsACgkQ2ugaI38ACPAW7wD49p8JqopRARN4h6lB8+Z5bXs2
VB8Gb0wPMJouAuwpaAD8CDAa4L7w9KP9QXXaSnJrojdBmk9bZQ0GDJL26/5sqf4=
=01b1
-----END PGP SIGNATURE-----

Reply via email to