summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'sys-devel/llvm/files/3.9.0/0008-cmake-Reintroduce-ldconfig-compatible-SOVERSIONs-on-.patch')
-rw-r--r--sys-devel/llvm/files/3.9.0/0008-cmake-Reintroduce-ldconfig-compatible-SOVERSIONs-on-.patch62
1 files changed, 62 insertions, 0 deletions
diff --git a/sys-devel/llvm/files/3.9.0/0008-cmake-Reintroduce-ldconfig-compatible-SOVERSIONs-on-.patch b/sys-devel/llvm/files/3.9.0/0008-cmake-Reintroduce-ldconfig-compatible-SOVERSIONs-on-.patch
new file mode 100644
index 000000000000..6634cdebe351
--- /dev/null
+++ b/sys-devel/llvm/files/3.9.0/0008-cmake-Reintroduce-ldconfig-compatible-SOVERSIONs-on-.patch
@@ -0,0 +1,62 @@
+From aeddc35a35c55f487977d7609060225e03e2028b Mon Sep 17 00:00:00 2001
+From: Michal Gorny <mgorny@gentoo.org>
+Date: Tue, 4 Oct 2016 06:09:18 +0000
+Subject: [PATCH] [cmake] Reintroduce (ldconfig-compatible) SOVERSIONs on
+ shared libraries
+
+Reintroduce versioning of shared libraries via SOVERSION, addressing
+the issues with the previous design, since Gentoo is relying
+on shared-split install of LLVM. The SOVERSIONs were originally
+introduced in r229720 for all libraries, and removed in r252093 in favor
+of custom SONAME. As far as I understand, the major concern with the old
+versioning was that the used versions were incompatible with ldconfig.
+
+Having considered that, this commit introduce SOVERSIONS with the
+following considerations:
+
+1. SOVERSIONs are formed of major & minor version concatenated -- i.e.
+for 4.0 its .so.40. This matches the common practice where the first
+version number indicates ABI breakage, and therefore fixes the issues
+with ldconfig. Additionally, VERSION with the remaining verion
+components appended is used, however this is not strictly necessary.
+
+2. The versioning is only applied to libraries with no explicit SONAME
+specified -- i.e. it won't apply to libLLVM but only to the split
+libraries. It will also apply to libraries installed by the subprojects.
+
+3. The versioning is only done on *nix systems, Darwin excluded. This
+matches the current use of SONAME.
+
+Differential Revision: https://reviews.llvm.org/D24757
+
+git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@283189 91177308-0d34-0410-b5e6-96231b3b80d8
+---
+ cmake/modules/AddLLVM.cmake | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/cmake/modules/AddLLVM.cmake b/cmake/modules/AddLLVM.cmake
+index 37b3b80..7cb1b0c 100644
+--- a/cmake/modules/AddLLVM.cmake
++++ b/cmake/modules/AddLLVM.cmake
+@@ -450,6 +450,18 @@ function(llvm_add_library name)
+ PREFIX ""
+ )
+ endif()
++
++ # Set SOVERSION on shared libraries that lack explicit SONAME
++ # specifier, on *nix systems that are not Darwin.
++ if(UNIX AND NOT APPLE AND NOT ARG_SONAME)
++ set_target_properties(${name}
++ PROPERTIES
++ # Concatenate the version numbers since ldconfig expects exactly
++ # one component indicating the ABI version, while LLVM uses
++ # major+minor for that.
++ SOVERSION ${LLVM_VERSION_MAJOR}${LLVM_VERSION_MINOR}
++ VERSION ${LLVM_VERSION_MAJOR}${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}${LLVM_VERSION_SUFFIX})
++ endif()
+ endif()
+
+ if(ARG_MODULE OR ARG_SHARED)
+--
+2.10.0
+