*/*: Clean PYTHON_COMPAT of obsolete impls
[gentoo.git] / sys-libs / llvm-libunwind / llvm-libunwind-8.0.1.ebuild
1 # Copyright 1999-2020 Gentoo Authors
2 # Distributed under the terms of the GNU General Public License v2
3
4 EAPI=6
5
6 : ${CMAKE_MAKEFILE_GENERATOR:=ninja}
7 # (needed due to CMAKE_BUILD_TYPE != Gentoo)
8 CMAKE_MIN_VERSION=3.7.0-r1
9 PYTHON_COMPAT=( python{2_7,3_6} )
10 inherit cmake-multilib llvm multiprocessing python-any-r1
11
12 MY_P=libunwind-${PV/_/}.src
13 LIBCXX_P=libcxx-${PV/_/}.src
14 LIBCXXABI_P=libcxxabi-${PV/_/}.src
15
16 DESCRIPTION="C++ runtime stack unwinder from LLVM"
17 HOMEPAGE="https://github.com/llvm-mirror/libunwind"
18 SRC_URI="https://github.com/llvm/llvm-project/releases/download/llvmorg-${PV}/${MY_P}.tar.xz
19         test? (
20                 https://github.com/llvm/llvm-project/releases/download/llvmorg-${PV}/${LIBCXX_P}.tar.xz
21                 https://github.com/llvm/llvm-project/releases/download/llvmorg-${PV}/${LIBCXXABI_P}.tar.xz )"
22
23 LICENSE="|| ( UoI-NCSA MIT )"
24 SLOT="0"
25 KEYWORDS="amd64 arm arm64 x86"
26 IUSE="debug +static-libs test"
27 RESTRICT="!test? ( test )"
28
29 RDEPEND="!sys-libs/libunwind"
30 # llvm-6 for new lit options
31 DEPEND="
32         >=sys-devel/llvm-6
33         test? ( >=sys-devel/clang-3.9.0
34                 $(python_gen_any_dep 'dev-python/lit[${PYTHON_USEDEP}]') )"
35
36 S=${WORKDIR}/${MY_P}
37
38 # least intrusive of all
39 CMAKE_BUILD_TYPE=RelWithDebInfo
40
41 python_check_deps() {
42         has_version "dev-python/lit[${PYTHON_USEDEP}]"
43 }
44
45 pkg_setup() {
46         use test && python-any-r1_pkg_setup
47 }
48
49 src_unpack() {
50         default
51
52         if use test; then
53                 mv "${LIBCXX_P}" libcxx || die
54                 mv "${LIBCXXABI_P}" libcxxabi || die
55         fi
56 }
57
58 multilib_src_configure() {
59         local libdir=$(get_libdir)
60
61         local mycmakeargs=(
62                 -DLLVM_LIBDIR_SUFFIX=${libdir#lib}
63                 -DLIBUNWIND_ENABLE_ASSERTIONS=$(usex debug)
64                 -DLIBUNWIND_ENABLE_STATIC=$(usex static-libs)
65                 -DLLVM_INCLUDE_TESTS=$(usex test)
66
67                 # support non-native unwinding; given it's small enough,
68                 # enable it unconditionally
69                 -DLIBUNWIND_ENABLE_CROSS_UNWINDING=ON
70         )
71         if use test; then
72                 local clang_path=$(type -P "${CHOST:+${CHOST}-}clang" 2>/dev/null)
73                 local jobs=${LIT_JOBS:-$(makeopts_jobs "${MAKEOPTS}" "$(get_nproc)")}
74
75                 [[ -n ${clang_path} ]] || die "Unable to find ${CHOST}-clang for tests"
76
77                 mycmakeargs+=(
78                         -DLLVM_EXTERNAL_LIT="${EPREFIX}/usr/bin/lit"
79                         -DLLVM_LIT_ARGS="-vv;-j;${jobs};--param=cxx_under_test=${clang_path}"
80                         -DLIBUNWIND_LIBCXX_PATH="${WORKDIR}"/libcxx
81                 )
82         fi
83
84         cmake-utils_src_configure
85 }
86
87 build_libcxxabi() {
88         local -x LDFLAGS="${LDFLAGS} -L${BUILD_DIR}/$(get_libdir)"
89         local CMAKE_USE_DIR=${WORKDIR}/libcxxabi
90         local BUILD_DIR=${BUILD_DIR}/libcxxabi
91         local mycmakeargs=(
92                 -DLIBCXXABI_LIBDIR_SUFFIX=
93                 -DLIBCXXABI_ENABLE_SHARED=ON
94                 -DLIBCXXABI_ENABLE_STATIC=OFF
95                 -DLIBCXXABI_USE_LLVM_UNWINDER=ON
96                 -DLIBCXXABI_INCLUDE_TESTS=OFF
97
98                 -DLIBCXXABI_LIBCXX_INCLUDES="${WORKDIR}"/libcxx/include
99                 -DLIBCXXABI_LIBUNWIND_INCLUDES="${S}"/include
100         )
101
102         cmake-utils_src_configure
103         cmake-utils_src_compile
104 }
105
106 build_libcxx() {
107         local -x LDFLAGS="${LDFLAGS} -L${BUILD_DIR}/libcxxabi/lib -L${BUILD_DIR}/$(get_libdir)"
108         local CMAKE_USE_DIR=${WORKDIR}/libcxx
109         local BUILD_DIR=${BUILD_DIR}/libcxx
110         local mycmakeargs=(
111                 -DLIBCXX_LIBDIR_SUFFIX=
112                 -DLIBCXX_ENABLE_SHARED=ON
113                 -DLIBCXX_ENABLE_STATIC=OFF
114                 -DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=OFF
115                 -DLIBCXXABI_USE_LLVM_UNWINDER=ON
116                 -DLIBCXX_CXX_ABI=libcxxabi
117                 -DLIBCXX_CXX_ABI_INCLUDE_PATHS="${WORKDIR}"/libcxxabi/include
118                 -DLIBCXX_ENABLE_ABI_LINKER_SCRIPT=OFF
119                 -DLIBCXX_HAS_MUSL_LIBC=$(usex elibc_musl)
120                 -DLIBCXX_HAS_GCC_S_LIB=OFF
121                 -DLIBCXX_INCLUDE_TESTS=OFF
122         )
123
124         cmake-utils_src_configure
125         cmake-utils_src_compile
126 }
127
128 multilib_src_test() {
129         # build local copies of libc++ & libc++abi for testing to avoid
130         # circular deps
131         build_libcxxabi
132         build_libcxx
133         mv "${BUILD_DIR}"/libcxx*/lib/libc++* "${BUILD_DIR}/$(get_libdir)/" || die
134
135         cmake-utils_src_make check-unwind
136 }
137
138 multilib_src_install() {
139         cmake-utils_src_install
140
141         # install headers like sys-libs/libunwind
142         doheader "${S}"/include/*.h
143 }