sys-devel/llvm: Add custom SOVERSION suffix when linking to libc++
authorMichał Górny <mgorny@gentoo.org>
Fri, 10 Nov 2017 22:41:55 +0000 (23:41 +0100)
committerMichał Górny <mgorny@gentoo.org>
Thu, 9 Aug 2018 11:52:57 +0000 (13:52 +0200)
sys-devel/llvm/llvm-9999.ebuild

index 612f8a07e7b8cb8d1e3dc0854ef6db27b21e9b78..d5404d204a078b0cf727510574177f73c96c7bae 100644 (file)
@@ -89,6 +89,18 @@ src_prepare() {
        cmake-utils_src_prepare
 }
 
+# Is LLVM being linked against libc++?
+is_libcxx_linked() {
+       local code='#include <ciso646>
+#if defined(_LIBCPP_VERSION)
+       HAVE_LIBCXX
+#endif
+'
+       local out=$($(tc-getCXX) ${CXXFLAGS} ${CPPFLAGS} -x c++ -E -P - <<<"${code}") || return 1
+
+       [[ ${out} == *HAVE_LIBCXX* ]]
+}
+
 multilib_src_configure() {
        local ffi_cflags ffi_ldflags
        if use libffi; then
@@ -132,6 +144,15 @@ multilib_src_configure() {
                -DOCAMLFIND=NO
        )
 
+       if is_libcxx_linked; then
+               # Smart hack: alter version suffix -> SOVERSION when linking
+               # against libc++. This way we won't end up mixing LLVM libc++
+               # libraries with libstdc++ clang, and the other way around.
+               mycmakeargs+=(
+                       -DLLVM_VERSION_SUFFIX="libcxx"
+               )
+       fi
+
 #      Note: go bindings have no CMake rules at the moment
 #      but let's kill the check in case they are introduced
 #      if ! multilib_is_native_abi || ! use go; then