sys-libs/compiler-rt: Add slotted version
authorMichał Górny <mgorny@gentoo.org>
Mon, 30 Jan 2017 08:02:05 +0000 (09:02 +0100)
committerMichał Górny <mgorny@gentoo.org>
Wed, 15 Feb 2017 12:47:16 +0000 (13:47 +0100)
Introduce a slotted variant of compiler-rt libraries with the slot
matching the clang version. This will make it possible to install a new
compiler-rt version before upgrading clang to the corresponding version,
therefore preserving a working compiler through (even minor) clang
upgrades.

The alternative was to replace the complete version number with the
major version in the runtime directory path. However, software (e.g.
Mesa) hardcodes the default path and therefore breaks when it is
changed.

sys-libs/compiler-rt/compiler-rt-4.0.0_rc1-r1.ebuild [moved from sys-libs/compiler-rt/compiler-rt-4.0.0_rc1.ebuild with 76% similarity]
sys-libs/compiler-rt/compiler-rt-9999.ebuild

similarity index 76%
rename from sys-libs/compiler-rt/compiler-rt-4.0.0_rc1.ebuild
rename to sys-libs/compiler-rt/compiler-rt-4.0.0_rc1-r1.ebuild
index 49f12b097ebb760fed09ba0b4a6c8940b4ae56e1..43560c2edd59e43cee063b3f8f97f5734a77272f 100644 (file)
@@ -17,16 +17,16 @@ HOMEPAGE="http://llvm.org/"
 SRC_URI="http://www.llvm.org/pre-releases/${PV/_//}/${P/_/}.src.tar.xz"
 
 LICENSE="|| ( UoI-NCSA MIT )"
-SLOT="0/${PV%.*}"
+SLOT="${PV%_*}"
 KEYWORDS="~amd64 ~arm64 ~x86"
 IUSE="test"
 
-RDEPEND="
-       !<sys-devel/llvm-4"
+LLVM_SLOT=${SLOT%%.*}
+RDEPEND="!=sys-libs/compiler-rt-${SLOT}*:0"
 # llvm-4 needed for --cmakedir
-DEPEND="${RDEPEND}
+DEPEND="
        >=sys-devel/llvm-4
-       test? ( ~sys-devel/clang-${PV} )
+       test? ( =sys-devel/clang-${PV%_*}*:${LLVM_SLOT} )
        ${PYTHON_DEPS}"
 
 S=${WORKDIR}/${P/_/}.src
@@ -51,14 +51,11 @@ src_configure() {
                fi
        fi
 
-       local llvm_version=$(llvm-config --version) || die
-       local clang_version=$(get_version_component_range 1-3 "${llvm_version}")
-       local libdir=$(get_libdir)
        local mycmakeargs=(
-               -DCOMPILER_RT_INSTALL_PATH="${EPREFIX}/usr/lib/clang/${clang_version}"
+               -DCOMPILER_RT_INSTALL_PATH="${EPREFIX}/usr/lib/clang/${SLOT}"
                # use a build dir structure consistent with install
                # this makes it possible to easily deploy test-friendly clang
-               -DCOMPILER_RT_OUTPUT_DIR="${BUILD_DIR}/lib/clang/${clang_version}"
+               -DCOMPILER_RT_OUTPUT_DIR="${BUILD_DIR}/lib/clang/${SLOT}"
 
                # currently lit covers only sanitizer tests
                -DCOMPILER_RT_INCLUDE_TESTS=OFF
@@ -69,22 +66,15 @@ src_configure() {
        cmake-utils_src_configure
 }
 
-run_tests_for_abi() {
-       local ABI=${1}
-}
-
 src_test() {
        # prepare a test compiler
-       local llvm_version=$(llvm-config --version) || die
-       local clang_version=$(get_version_component_range 1-3 "${llvm_version}")
-
        # copy clang over since resource_dir is located relatively to binary
        # therefore, we can put our new libraries in it
-       mkdir -p "${BUILD_DIR}"/{bin,$(get_libdir),lib/clang/"${clang_version}"/include} || die
-       cp "${EPREFIX}/usr/bin/clang" "${EPREFIX}/usr/bin/clang++" \
-               "${BUILD_DIR}"/bin/ || die
-       cp "${EPREFIX}/usr/lib/clang/${clang_version}/include"/*.h \
-               "${BUILD_DIR}/lib/clang/${clang_version}/include/" || die
+       mkdir -p "${BUILD_DIR}"/lib/{llvm/${LLVM_SLOT}{/bin,$(get_libdir)},clang/${SLOT}/include} || die
+       cp "${EPREFIX}"/usr/lib/llvm/${LLVM_SLOT}/bin/clang{,++} \
+               "${BUILD_DIR}"/lib/llvm/${LLVM_SLOT}/bin/ || die
+       cp "${EPREFIX}/usr/lib/clang/${SLOT}/include"/*.h \
+               "${BUILD_DIR}/lib/clang/${SLOT}/include/" || die
 
        # builtins are not converted to lit yet, so run them manually
        local tests=() f
@@ -120,7 +110,7 @@ src_test() {
                einfo "Running tests for ABI=${ABI}"
                # use -k to run all tests even if some fail
                emake -k \
-                       CC="${BUILD_DIR}/bin/clang" \
+                       CC="${BUILD_DIR}/lib/llvm/${LLVM_SLOT}/bin/clang" \
                        CFLAGS="$(get_abi_CFLAGS)" \
                        CPPFLAGS='-I../../../lib/builtins' \
                        LDFLAGS='-rtlib=compiler-rt' \
index 4f6d080ee475426b98587a9bf7f54a09142e219a..450177ae5cf7626f794c994f1c49cbac163d05e8 100644 (file)
@@ -19,16 +19,16 @@ EGIT_REPO_URI="http://llvm.org/git/compiler-rt.git
        https://github.com/llvm-mirror/compiler-rt.git"
 
 LICENSE="|| ( UoI-NCSA MIT )"
-SLOT="0/${PV%.*}"
+# Note: this needs to be updated to match version of clang-9999
+SLOT="5.0.0"
 KEYWORDS=""
 IUSE="test"
 
-RDEPEND="
-       !<sys-devel/llvm-4"
+LLVM_SLOT=${SLOT%%.*}
 # llvm-4 needed for --cmakedir
-DEPEND="${RDEPEND}
+DEPEND="
        >=sys-devel/llvm-4
-       test? ( ~sys-devel/clang-${PV} )
+       test? ( =sys-devel/clang-${PV%_*}*:${LLVM_SLOT} )
        ${PYTHON_DEPS}"
 
 # least intrusive of all
@@ -51,14 +51,11 @@ src_configure() {
                fi
        fi
 
-       local llvm_version=$(llvm-config --version) || die
-       local clang_version=$(get_version_component_range 1-3 "${llvm_version}")
-       local libdir=$(get_libdir)
        local mycmakeargs=(
-               -DCOMPILER_RT_INSTALL_PATH="${EPREFIX}/usr/lib/clang/${clang_version}"
+               -DCOMPILER_RT_INSTALL_PATH="${EPREFIX}/usr/lib/clang/${SLOT}"
                # use a build dir structure consistent with install
                # this makes it possible to easily deploy test-friendly clang
-               -DCOMPILER_RT_OUTPUT_DIR="${BUILD_DIR}/lib/clang/${clang_version}"
+               -DCOMPILER_RT_OUTPUT_DIR="${BUILD_DIR}/lib/clang/${SLOT}"
 
                # currently lit covers only sanitizer tests
                -DCOMPILER_RT_INCLUDE_TESTS=OFF
@@ -69,22 +66,15 @@ src_configure() {
        cmake-utils_src_configure
 }
 
-run_tests_for_abi() {
-       local ABI=${1}
-}
-
 src_test() {
        # prepare a test compiler
-       local llvm_version=$(llvm-config --version) || die
-       local clang_version=$(get_version_component_range 1-3 "${llvm_version}")
-
        # copy clang over since resource_dir is located relatively to binary
        # therefore, we can put our new libraries in it
-       mkdir -p "${BUILD_DIR}"/{bin,$(get_libdir),lib/clang/"${clang_version}"/include} || die
-       cp "${EPREFIX}/usr/bin/clang" "${EPREFIX}/usr/bin/clang++" \
-               "${BUILD_DIR}"/bin/ || die
-       cp "${EPREFIX}/usr/lib/clang/${clang_version}/include"/*.h \
-               "${BUILD_DIR}/lib/clang/${clang_version}/include/" || die
+       mkdir -p "${BUILD_DIR}"/lib/{llvm/${LLVM_SLOT}{/bin,$(get_libdir)},clang/${SLOT}/include} || die
+       cp "${EPREFIX}"/usr/lib/llvm/${LLVM_SLOT}/bin/clang{,++} \
+               "${BUILD_DIR}"/lib/llvm/${LLVM_SLOT}/bin/ || die
+       cp "${EPREFIX}/usr/lib/clang/${SLOT}/include"/*.h \
+               "${BUILD_DIR}/lib/clang/${SLOT}/include/" || die
 
        # builtins are not converted to lit yet, so run them manually
        local tests=() f
@@ -120,7 +110,7 @@ src_test() {
                einfo "Running tests for ABI=${ABI}"
                # use -k to run all tests even if some fail
                emake -k \
-                       CC="${BUILD_DIR}/bin/clang" \
+                       CC="${BUILD_DIR}/lib/llvm/${LLVM_SLOT}/bin/clang" \
                        CFLAGS="$(get_abi_CFLAGS)" \
                        CPPFLAGS='-I../../../lib/builtins' \
                        LDFLAGS='-rtlib=compiler-rt' \