Here is a plan on how to do so. It requires to modify dpkg but allows complete compatibility and no breakage of binaries (building with G++-2.95 would no longer work unless wrappers are written). 1. Create a new version of dpkg that does the following; In the postinst script it checks whether /usr/lib/g++-2.95 is present and if it isn't it scans symbols in all libraries to determine their ABI (symbols are mangled differently so this is possible) and moves all libraries with g++-2.95 mangled names in /usr/lib/g++-2.95 and modifies /var/lib/dpkg/info/<package>.list/shlibs accordingly. Then it scans all binaries in the same ways and automatically builds wrapper scripts that adjust LD_LIBRARY_PATH and modifies the .info files accordingly. At every package installation, it checks whether the package to install depends on either this new version of dpkg or libstdc++5 or if some dependency depends on either. If so, it installs it normally (checking ABIs wouldn't hurt, but it's slow). Otherwise it checks and moves libraries and binaries as above (before installing it to avoid conflicts). 2. Stop autobuilding of C++ programs and libraries and set GCC 3.2 to be the default. No GCC 3.1 libraries or binaries may be built or uploaded from this point in time unless they explicitly set the desired compiler and until their dependencies are also converted to GCC 3.2. The new gcc package must be dependent on the new dpkg. 3. Modify C++ library packages to have a 'c' suffix and make them pre-depend on the new dpkg (and must do so forever until the new version of dpkg is guaranteed to be installed). They must not conflict with the old ones. The pre-dependency is required so that the dpkg postinst script will prevent conflicts with old libraries by moving them to /usr/lib/g++-2.95 4. Recompile C++ binary packages. shlibs should automatically make them dependent on GCC 3.2 libraries. If the user wants to compile with g++-2.95 and extra c++ libraries or install g++-2.95 binary packages without using dpkg, he is responsible for taking the necessary steps himself. Alternatively scripts may be provided for this. IMHO this is the proper way to handle this, requires minimal intervention by maintainers and allows to automagically install any .deb or .rpm regardless of the ABI they use since dpkg will check and fix (for .rpm's the new dpkg must be manually installed beforehand - new alien versions should also depend on the new dpkg).
Attachment:
signature.asc
Description: This is a digitally signed message part