On 01.07.2017 16:27, coypu%sdf.org@localhost wrote: > My understanding is the following: > > libstdc++ is mostly backwards compatible, but nowhere near forward > compatible. If we ever use more than one libstdc++, we want to use the > newest for all dependencies. > > If it's a leaf C++ package, it's easy - just use the newer GCC to build > it too, and by using g++ it will pull in the newer libstdc++ always. > Most packages that needed it were probably like this. Also, leaf > packages being broken is easy to miss. > > If it's a C package, it becomes problematic. using a newer GCC isn't > sufficient to guarantee that a newer libstdc++ will be picked, and it > depends on the link order. > > Now we have packages like icu and MesaLib requiring it, which have very > many dependencies, so the chance of encountering the broken scenario is > likely. > > NetBSD specifically has an extra complication because it major bumped > libstdc++ in base but pkgsrc GCC still creates the old soname. > I think libstdc++.so.7 and libstdc++.so.6 appear as different libraries? > That should probably be fixed. > > I should restore the change to make MesaLib not use the dri option for > older compilers, but luckily it is also controllable by options. > I propose to evaluate a different approach to GCC_REQD. 1. Mark packages requiring minimal GCC/Clang version and just set them as BROKEN in case of insufficient compiler. No longer bootstrapping a newer GCC for pkgsrc own purposes, with exception of bootstrapping gcc packages by self when needed. 2. Abandon the current paradigm of automatically bootstrapping newer C or C++ compiler to build certain packages. Temporarily no changes in Fortran handling. 3. Set GCC_REQD when set USE_LANGUAGES. 4. Promote/prepare bootstrap kits with newer toolchain for pkgsrc platforms. This is task for supported platforms maintainers. In recent years newer GCC/Clang means newer standard of the C++ language and incompatible C++ runtime library. As of now and we are now heading for C++17.. and new set of incompatibilities. I think this approach is already done by the SmartOS team. I'm doing it right now to dogfood Clang+ccache on NetBSD with GCC in the base. PKGSRC_COMPILER= ccache clang CCACHE_BASE= /usr/local CCACHE_DIR= /public/ccache_tmp CCACHE_LOGFILE= /tmp/ccache.txt PKG_CC= clang PKG_CXX= clang++ CLANGBASE= /usr/local HAVE_LLVM= yes
Attachment:
signature.asc
Description: OpenPGP digital signature