commit:     5c01167303f7baaec381a4a85ad5f4f3ca16c3c6
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Fri Nov 10 22:41:55 2017 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Thu Aug  9 11:52:57 2018 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=5c011673

sys-devel/llvm: Add custom SOVERSION suffix when linking to libc++

 sys-devel/llvm/llvm-9999.ebuild | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/sys-devel/llvm/llvm-9999.ebuild b/sys-devel/llvm/llvm-9999.ebuild
index 612f8a07e7b..d5404d204a0 100644
--- a/sys-devel/llvm/llvm-9999.ebuild
+++ b/sys-devel/llvm/llvm-9999.ebuild
@@ -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

Reply via email to