mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-09-23 16:49:10 -07:00
sys-libs/libcxx: Bump to 4.0.1
This commit is contained in:
@@ -3,3 +3,4 @@ DIST libcxx-3.8.1.src.tar.xz 1074164 SHA256 77d7f3784c88096d785bd705fa1bab7031ce
|
||||
DIST libcxx-3.9.0.src.tar.xz 1198308 SHA256 d0b38d51365c6322f5666a2a8105785f2e114430858de4c25a86b49f227f5b06 SHA512 55d5c4adff378ee02b0b99d732bc9f326910f9e49ab8c320a588eccdd0362fe009bc9a6a4337d29faf6338420c91b10d0d7d67f66128268f01258d30502c4f4a WHIRLPOOL 3ee3519acfe95287a862a6c44e30ed52ced1204332913007797da4e4da40dfdc5991ae120f5686827cc208b559936da5bc5485dab75617bdd5cbbd9e95a6032a
|
||||
DIST libcxx-3.9.1.src.tar.xz 1209020 SHA256 25e615e428f60e651ed09ffd79e563864e3f4bc69a9e93ee41505c419d1a7461 SHA512 a5976e4096624a7307b3e43f4a22ac2dc74572226e0f57af9f3ef537a14c3cff1601b7042aef9dc40a0ee53ca76b08d72eb9c253dcf34f115d3153c302db7070 WHIRLPOOL cad439979570192b195338d752a24fb0ad8704c0c8efed3b6d7724437763eab7bc3b8baaf2f0e6fff55c6d9be211dff6f7baf18dec55e3a29ad3b8a423cefb1e
|
||||
DIST libcxx-4.0.0.src.tar.xz 1450376 SHA256 4f4d33c4ad69bf9e360eebe6b29b7b19486948b1a41decf89d4adec12473cf96 SHA512 6dad794c00919955e14710def169cdcde8a1743431479e993c4a6a3c87c2fd9f5dbd6e17542e524981eed0783dce70384c356b74ef3c6d70598c6ff03454b1dd WHIRLPOOL 2c5074087e306d100c96ae5b7175e1e1792f0317c7be6231692c80423ec716732c08293fe14fe6da5cd52d8709d6ce0a240009df24e717ab0eb9093ac7679af7
|
||||
DIST libcxx-4.0.1.src.tar.xz 1446380 SHA256 520a1171f272c9ff82f324d5d89accadcec9bc9f3c78de11f5575cdb99accc4c SHA512 91f3f397be606989be99865d0b279557f9afb93f7a74ed10c3a74f4440e38b5694ddf452bbf2f487cacd4391606dd5c7edfe5130f2de19e2acfd6cce619d028a WHIRLPOOL fe7c71e8dc2d17d14e94896837229c5ed872e7c04aea79a207e8fa98aa4539a7445e402b848d0c0d009f154f00d970159ad009d16bfdb9ae012ce5c7c6d9ba51
|
||||
|
||||
199
sys-libs/libcxx/libcxx-4.0.1.ebuild
Normal file
199
sys-libs/libcxx/libcxx-4.0.1.ebuild
Normal file
@@ -0,0 +1,199 @@
|
||||
# Copyright 1999-2017 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=6
|
||||
|
||||
# Ninja provides better scalability and cleaner verbose output, and is used
|
||||
# throughout all LLVM projects.
|
||||
: ${CMAKE_MAKEFILE_GENERATOR:=ninja}
|
||||
# (needed due to CMAKE_BUILD_TYPE != Gentoo)
|
||||
CMAKE_MIN_VERSION=3.7.0-r1
|
||||
PYTHON_COMPAT=( python2_7 )
|
||||
|
||||
inherit cmake-multilib llvm python-any-r1 toolchain-funcs
|
||||
|
||||
DESCRIPTION="New implementation of the C++ standard library, targeting C++11"
|
||||
HOMEPAGE="http://libcxx.llvm.org/"
|
||||
SRC_URI="http://releases.llvm.org/${PV/_//}/${P/_/}.src.tar.xz"
|
||||
|
||||
LICENSE="|| ( UoI-NCSA MIT )"
|
||||
SLOT="0"
|
||||
KEYWORDS="~amd64 ~arm64 ~x86"
|
||||
IUSE="elibc_glibc elibc_musl +libcxxabi libcxxrt +libunwind +static-libs test"
|
||||
REQUIRED_USE="libunwind? ( || ( libcxxabi libcxxrt ) )
|
||||
?? ( libcxxabi libcxxrt )"
|
||||
|
||||
RDEPEND="
|
||||
libcxxabi? ( ~sys-libs/libcxxabi-${PV}[libunwind=,static-libs?,${MULTILIB_USEDEP}] )
|
||||
libcxxrt? ( sys-libs/libcxxrt[libunwind=,static-libs?,${MULTILIB_USEDEP}] )
|
||||
!libcxxabi? ( !libcxxrt? ( >=sys-devel/gcc-4.7:=[cxx] ) )"
|
||||
# LLVM 4 required for llvm-config --cmakedir
|
||||
# clang-3.9.0 installs necessary target symlinks unconditionally
|
||||
# which removes the need for MULTILIB_USEDEP
|
||||
DEPEND="${RDEPEND}
|
||||
test? ( >=sys-devel/clang-3.9.0
|
||||
$(python_gen_any_dep 'dev-python/lit[${PYTHON_USEDEP}]') )
|
||||
app-arch/xz-utils
|
||||
>=sys-devel/llvm-4"
|
||||
|
||||
S=${WORKDIR}/${P/_/}.src
|
||||
|
||||
DOCS=( CREDITS.TXT )
|
||||
|
||||
PATCHES=(
|
||||
# Add link flag "-Wl,-z,defs" to avoid underlinking; this is needed in a
|
||||
# out-of-tree build.
|
||||
"${FILESDIR}/${PN}-3.9-cmake-link-flags.patch"
|
||||
)
|
||||
|
||||
# least intrusive of all
|
||||
CMAKE_BUILD_TYPE=RelWithDebInfo
|
||||
|
||||
python_check_deps() {
|
||||
has_version "dev-python/lit[${PYTHON_USEDEP}]"
|
||||
}
|
||||
|
||||
pkg_setup() {
|
||||
llvm_pkg_setup
|
||||
use test && python-any-r1_pkg_setup
|
||||
|
||||
if ! use libcxxabi && ! use libcxxrt && ! tc-is-gcc ; then
|
||||
eerror "To build ${PN} against libsupc++, you have to use gcc. Other"
|
||||
eerror "compilers are not supported. Please set CC=gcc and CXX=g++"
|
||||
eerror "and try again."
|
||||
die
|
||||
fi
|
||||
if tc-is-gcc && [[ $(gcc-version) < 4.7 ]] ; then
|
||||
eerror "${PN} needs to be built with gcc-4.7 or later (or other"
|
||||
eerror "conformant compilers). Please use gcc-config to switch to"
|
||||
eerror "gcc-4.7 or later version."
|
||||
die
|
||||
fi
|
||||
}
|
||||
|
||||
multilib_src_configure() {
|
||||
local cxxabi cxxabi_incs
|
||||
if use libcxxabi; then
|
||||
cxxabi=libcxxabi
|
||||
cxxabi_incs="${EPREFIX}/usr/include/libcxxabi"
|
||||
elif use libcxxrt; then
|
||||
cxxabi=libcxxrt
|
||||
cxxabi_incs="${EPREFIX}/usr/include/libcxxrt"
|
||||
else
|
||||
local gcc_inc="${EPREFIX}/usr/lib/gcc/${CHOST}/$(gcc-fullversion)/include/g++-v$(gcc-major-version)"
|
||||
cxxabi=libsupc++
|
||||
cxxabi_incs="${gcc_inc};${gcc_inc}/${CHOST}"
|
||||
fi
|
||||
|
||||
# we want -lgcc_s for unwinder, and for compiler runtime when using
|
||||
# gcc, clang with gcc runtime (or any unknown compiler)
|
||||
local extra_libs=() want_gcc_s=ON
|
||||
if use libunwind; then
|
||||
# work-around missing -lunwind upstream
|
||||
extra_libs+=( -lunwind )
|
||||
# if we're using libunwind and clang with compiler-rt, we want
|
||||
# to link to compiler-rt instead of -lgcc_s
|
||||
if tc-is-clang; then
|
||||
# get the full library list out of 'pretend mode'
|
||||
# and grep it for libclang_rt references
|
||||
local args=( $($(tc-getCC) -### -x c - 2>&1 | tail -n 1) )
|
||||
local i
|
||||
for i in "${args[@]}"; do
|
||||
if [[ ${i} == *libclang_rt* ]]; then
|
||||
want_gcc_s=OFF
|
||||
extra_libs+=( "${i}" )
|
||||
fi
|
||||
done
|
||||
fi
|
||||
fi
|
||||
|
||||
local libdir=$(get_libdir)
|
||||
local mycmakeargs=(
|
||||
-DLIBCXX_LIBDIR_SUFFIX=${libdir#lib}
|
||||
-DLIBCXX_ENABLE_SHARED=ON
|
||||
-DLIBCXX_ENABLE_STATIC=$(usex static-libs)
|
||||
-DLIBCXX_CXX_ABI=${cxxabi}
|
||||
-DLIBCXX_CXX_ABI_INCLUDE_PATHS=${cxxabi_incs}
|
||||
# we're using our own mechanism for generating linker scripts
|
||||
-DLIBCXX_ENABLE_ABI_LINKER_SCRIPT=OFF
|
||||
-DLIBCXX_HAS_MUSL_LIBC=$(usex elibc_musl)
|
||||
-DLIBCXX_HAS_GCC_S_LIB=${want_gcc_s}
|
||||
-DLIBCXX_INCLUDE_TESTS=$(usex test)
|
||||
-DCMAKE_SHARED_LINKER_FLAGS="${extra_libs[*]} ${LDFLAGS}"
|
||||
)
|
||||
|
||||
if use test; then
|
||||
mycmakeargs+=(
|
||||
# this can be any directory, it just needs to exist...
|
||||
# FIXME: remove this once https://reviews.llvm.org/D25093 is merged
|
||||
-DLLVM_MAIN_SRC_DIR="${T}"
|
||||
-DLIT_COMMAND="${EPREFIX}"/usr/bin/lit
|
||||
)
|
||||
fi
|
||||
cmake-utils_src_configure
|
||||
}
|
||||
|
||||
multilib_src_test() {
|
||||
local clang_path=$(type -P "${CHOST:+${CHOST}-}clang" 2>/dev/null)
|
||||
|
||||
[[ -n ${clang_path} ]] || die "Unable to find ${CHOST}-clang for tests"
|
||||
sed -i -e "/cxx_under_test/s^\".*\"^\"${clang_path}\"^" test/lit.site.cfg || die
|
||||
|
||||
cmake-utils_src_make check-libcxx
|
||||
}
|
||||
|
||||
# Usage: deps
|
||||
gen_ldscript() {
|
||||
local output_format
|
||||
output_format=$($(tc-getCC) ${CFLAGS} ${LDFLAGS} -Wl,--verbose 2>&1 | sed -n 's/^OUTPUT_FORMAT("\([^"]*\)",.*/\1/p')
|
||||
[[ -n ${output_format} ]] && output_format="OUTPUT_FORMAT ( ${output_format} )"
|
||||
|
||||
cat <<-END_LDSCRIPT
|
||||
/* GNU ld script
|
||||
Include missing dependencies
|
||||
*/
|
||||
${output_format}
|
||||
GROUP ( $@ )
|
||||
END_LDSCRIPT
|
||||
}
|
||||
|
||||
gen_static_ldscript() {
|
||||
local libdir=$(get_libdir)
|
||||
local cxxabi_lib=$(usex libcxxabi "libc++abi.a" "$(usex libcxxrt "libcxxrt.a" "libsupc++.a")")
|
||||
|
||||
# Move it first.
|
||||
mv "${ED}/usr/${libdir}/libc++.a" "${ED}/usr/${libdir}/libc++_static.a" || die
|
||||
# Generate libc++.a ldscript for inclusion of its dependencies so that
|
||||
# clang++ -stdlib=libc++ -static works out of the box.
|
||||
local deps="libc++_static.a ${cxxabi_lib} $(usex libunwind libunwind.a libgcc_eh.a)"
|
||||
# On Linux/glibc it does not link without libpthread or libdl. It is
|
||||
# fine on FreeBSD.
|
||||
use elibc_glibc && deps+=" libpthread.a libdl.a"
|
||||
|
||||
gen_ldscript "${deps}" > "${ED}/usr/${libdir}/libc++.a" || die
|
||||
}
|
||||
|
||||
gen_shared_ldscript() {
|
||||
local libdir=$(get_libdir)
|
||||
# libsupc++ doesn't have a shared version
|
||||
local cxxabi_lib=$(usex libcxxabi "libc++abi.so" "$(usex libcxxrt "libcxxrt.so" "libsupc++.a")")
|
||||
|
||||
mv "${ED}/usr/${libdir}/libc++.so" "${ED}/usr/${libdir}/libc++_shared.so" || die
|
||||
local deps="libc++_shared.so ${cxxabi_lib} $(usex libunwind libunwind.so libgcc_s.so)"
|
||||
|
||||
gen_ldscript "${deps}" > "${ED}/usr/${libdir}/libc++.so" || die
|
||||
}
|
||||
|
||||
multilib_src_install() {
|
||||
cmake-utils_src_install
|
||||
gen_shared_ldscript
|
||||
use static-libs && gen_static_ldscript
|
||||
}
|
||||
|
||||
pkg_postinst() {
|
||||
elog "This package (${PN}) is mainly intended as a replacement for the C++"
|
||||
elog "standard library when using clang."
|
||||
elog "To use it, instead of libstdc++, use:"
|
||||
elog " clang++ -stdlib=libc++"
|
||||
elog "to compile your C++ programs."
|
||||
}
|
||||
Reference in New Issue
Block a user