-----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-----