commit:     ebc8b4c9463f8d21a0e8c238240c60eefb81227e
Author:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Thu Feb 11 09:26:10 2016 +0000
Commit:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Thu Feb 11 09:26:10 2016 +0000
URL:        https://gitweb.gentoo.org/repo/proj/prefix.git/commit/?id=ebc8b4c9

sys-libs/libcxx: bump version

Package-Manager: portage-2.2.20-prefix

 sys-libs/libcxx/Manifest            |   1 +
 sys-libs/libcxx/libcxx-3.7.1.ebuild | 235 ++++++++++++++++++++++++++++++++++++
 2 files changed, 236 insertions(+)

diff --git a/sys-libs/libcxx/Manifest b/sys-libs/libcxx/Manifest
index af61856..15398c2 100644
--- a/sys-libs/libcxx/Manifest
+++ b/sys-libs/libcxx/Manifest
@@ -1,2 +1,3 @@
 DIST libcxx-3.5.1.src.tar.xz 912248 SHA256 
a16d0ae0c0cf2c8cebb94fafcb907022cd4f8579ebac99a4c9919990a37ad475 SHA512 
3be33787c79aa5d03a3f507be20ef986215d6008e4f0370e3c5906d76a620bf27c9ed4c35f4561c1ac507a1b217fa7fc7577611e7205f3f2433c677bf86b8632
 WHIRLPOOL 
725892f113a918168b8ae8b5e93401130ccb1080c207445ba943c4fc06e481002939d37cfbbb59dc2791f91ccd7c673274ee523ec96418ed04ca22c8d11e2bec
 DIST libcxx-3.6.2.src.tar.xz 944020 SHA256 
52f3d452f48209c9df1792158fdbd7f3e98ed9bca8ebb51fcd524f67437c8b81 SHA512 
1eb575921ca0d636c4b7ba21b3ad2c09468d779c69b3106ceefde294344cf20a48a03f9d38ea0db9f8b909f56f0fd1a56a255101305318e04d9f2d20af358ba6
 WHIRLPOOL 
ec225d10cbfe3ca5eba2ed5f16ac6c19914ee75d71db2a1d8ca30f326c9fd5576899361f4397f2ee5d09dd3e8abaca82080c63e303b90d6f19f755465a11a065
+DIST libcxx-3.7.1.src.tar.xz 995724 SHA256 
357fbd4288ce99733ba06ae2bec6f503413d258aeebaab8b6a791201e6f7f144 SHA512 
08d2399a8b36aa15290733256c896c9fa43f1a1223bc5c73bbcd014fddf8880e514d2a6dcc456bcf18b537c01fb6911b092e6d9958bccd8e64e9f375ed7a1ab9
 WHIRLPOOL 
19f77946abf48cbdd3e7ea21fd009ca3cc5f607dfe0512a44b102847044bb1d5ae4b16f503f18b14ebd9ea115256e87af07409907ba2a65f6061e217a502a359

diff --git a/sys-libs/libcxx/libcxx-3.7.1.ebuild 
b/sys-libs/libcxx/libcxx-3.7.1.ebuild
new file mode 100644
index 0000000..0fdf949
--- /dev/null
+++ b/sys-libs/libcxx/libcxx-3.7.1.ebuild
@@ -0,0 +1,235 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: $
+
+EAPI=5
+
+ESVN_REPO_URI="http://llvm.org/svn/llvm-project/libcxx/trunk";
+
+[ "${PV%9999}" != "${PV}" ] && SCM="subversion" || SCM=""
+
+inherit ${SCM} flag-o-matic toolchain-funcs multilib multilib-minimal
+
+DESCRIPTION="New implementation of the C++ standard library, targeting C++11"
+HOMEPAGE="http://libcxx.llvm.org/";
+if [ "${PV%9999}" = "${PV}" ] ; then
+       SRC_URI="mirror://gentoo/${P}.src.tar.xz
+               http://llvm.org/releases/${PV}/${P}.src.tar.xz";
+       S="${WORKDIR}"/"${P}".src
+else
+       SRC_URI=""
+fi
+
+LICENSE="|| ( UoI-NCSA MIT )"
+SLOT="0"
+if [ "${PV%9999}" = "${PV}" ] ; then
+       KEYWORDS="~x64-macos ~x86-macos"
+else
+       KEYWORDS=""
+fi
+IUSE="elibc_glibc +libcxxrt static-libs test"
+
+REQUIRED_USE="kernel_Darwin? ( libcxxrt !static-libs )"
+RDEPEND="!kernel_Darwin? (
+               libcxxrt? ( 
>=sys-libs/libcxxrt-0.0_p20130725[static-libs?,${MULTILIB_USEDEP}] )
+               !libcxxrt? ( >=sys-devel/gcc-4.7[cxx] ) )
+       kernel_Darwin? ( sys-libs/libcxx-headers sys-libs/libcxxabi 
sys-devel/clang )"
+DEPEND="${RDEPEND}
+       test? ( sys-devel/clang )
+       app-arch/xz-utils"
+
+DOCS=( CREDITS.TXT )
+
+pkg_setup() {
+       if [[ ${CHOST} == *darwin* ]] ; then
+               MY_CC=$(tc-getCC)
+               MY_CXX=$(tc-getCXX)
+               if [[ ${MY_CC} != *clang* || ${MY_CXX} != *clang++* ]] ; then
+                       eerror "${PN} needs to be built with clang++. Please do 
not override"
+                       eerror "CC ($MY_CC) and CXX ($MY_CXX)"
+                       eerror "or point them at clang and clang++ 
respectively."
+                       die
+               fi
+               return
+       fi
+       if ! use libcxxrt ; then
+               ewarn "You have disabled USE=libcxxrt. This will build ${PN} 
against"
+               ewarn "libsupc++. Please note that this is not well supported."
+               ewarn "In particular, static linking will not work."
+       fi
+       if [[ $(gcc-version) < 4.7 ]] && [[ $(tc-getCXX) != *clang++* ]] ; then
+               eerror "${PN} needs to be built with clang++ or gcc-4.7 or 
later."
+               eerror "Please use gcc-config to switch to gcc-4.7 or later 
version."
+               die
+       fi
+}
+
+src_prepare() {
+       cp -f "${FILESDIR}/Makefile" lib/ || die
+
+       if [[ ${CHOST} == *darwin* ]] ; then
+               epatch "${FILESDIR}"/${PN}-3.5.1-olddarwin.patch
+
+               [[ "${CHOST##*-darwin}" -le 10 ]] && \
+                       epatch "${FILESDIR}"/${PN}-3.5.1-cmath-conv.patch
+
+               # libc++abi needs stack unwinding functions provided by 
libSystem on
+               # Mac OS X >= 10.6. On < 10.6 they're in libgcc_s. So force link
+               # against that. Additionally, the crt1.o provided by our 
gcc-apple
+               # toolchain isn't universal. Since that's needed for linking any
+               # program on OS X < 10.7, universal support is effectively 
broken on
+               # those older OS Xes even if clang and libc++{,abi} were to 
support it.
+               # So we can just disable universal compilation.
+               gcc_s=gcc_s.1
+               [[ "${CHOST##*-darwin}" -eq 9 ]] && gcc_s=gcc_s.10.5
+               [[ "${CHOST##*-darwin}" -eq 8 ]] && gcc_s=gcc_s.10.4
+               [[ "${CHOST##*-darwin}" -le 9 ]]  && \
+                       sed -i -e "s,/usr/lib/libSystem.B.dylib,-lSystem 
-l${gcc_s},g" \
+                               -e "s,-arch i386 -arch x86_64,,g" \
+                               lib/buildit
+
+               if [[ "${CHOST##*-darwin}" -le 8 ]] ; then
+                       epatch "${FILESDIR}"/${PN}-3.5.1-availability.patch
+                       epatch "${FILESDIR}"/${PN}-3.5.1-eprintf.patch
+               fi
+
+               # fix library install names
+               sed -i \
+                       -e 
"s,/usr/lib/libc++abi\.dylib,${EPREFIX}/usr/lib/libc++abi.dylib,g" \
+                       -e 
"s,/usr/lib/libc++\.1\.dylib,${EPREFIX}/usr/lib/libc++.1.dylib,g" \
+                       lib/buildit
+       fi
+
+       multilib_copy_sources
+}
+
+src_configure() {
+       tc-export AR CC CXX
+
+       # on Darwin we're all set
+       [[ ${CHOST} == *darwin* ]] && return
+
+       export LIBS="-lpthread -lrt -lc -lgcc_s"
+       if use libcxxrt ; then
+               append-cppflags -DLIBCXXRT "-I${EPREFIX}/usr/include/libcxxrt/"
+               LIBS="-lcxxrt ${LIBS}"
+               cp "${EPREFIX}/usr/include/libcxxrt/"*.h "${S}/include"
+       else
+               # Very hackish, see $HOMEPAGE
+               # If someone has a clever idea, please share it!
+               local includes="$(echo | ${CHOST}-g++ -Wp,-v -x c++ - 
-fsyntax-only 2>&1 | grep -C 2 '#include.*<...>' | tail -n 2 | sed -e 's/^ 
/-I/' | tr '\n' ' ')"
+               local libcxx_gcc_dirs="$(echo | ${CHOST}-g++ -Wp,-v -x c++ - 
-fsyntax-only 2>&1 | grep -C 2 '#include.*<...>' | tail -n 2 | tr '\n' ' ')"
+               append-cppflags -D__GLIBCXX__ ${includes}
+               LIBS="-lsupc++ ${LIBS}"
+               local libsupcxx_includes="cxxabi.h bits/c++config.h 
bits/os_defines.h bits/cpu_defines.h bits/cxxabi_tweaks.h bits/cxxabi_forced.h"
+               for i in ${libsupcxx_includes} ; do
+                       local found=""
+                       [ -d "${S}/include/$(dirname ${i})/" ] || mkdir -p 
"${S}/include/$(dirname ${i})"
+                       for j in ${libcxx_gcc_dirs} ; do
+                               if [ -f "${j}/${i}" ] ; then
+                                       cp "${j}/${i}" "${S}/include/$(dirname 
${i})/" || die
+                                       found=yes
+                               fi
+                       done
+                       [ -n "${found}" ] || die "Header not found: ${i}"
+               done
+       fi
+
+       append-ldflags "-Wl,-z,defs" # make sure we are not underlinked
+}
+
+multilib_src_compile() {
+       cd "${BUILD_DIR}/lib" || die
+       if [[ ${CHOST} == *darwin* ]] ; then
+               TRIPLE=-apple- ./buildit || die
+               return
+       fi
+
+       emake shared
+       use static-libs && emake static
+}
+
+# Tests fail for now, if anybody is able to fix them, help is very welcome.
+multilib_src_test() {
+       cd "${BUILD_DIR}/test"
+       LD_LIBRARY_PATH="${BUILD_DIR}/lib:${LD_LIBRARY_PATH}" \
+               CC="clang++ $(get_abi_CFLAGS) ${CXXFLAGS}" \
+               HEADER_INCLUDE="-I${BUILD_DIR}/include" \
+               SOURCE_LIB="-L${BUILD_DIR}/lib" \
+               LIBS="-lm $(usex libcxxrt -lcxxrt "")" \
+               ./testit || die
+       # TODO: fix link against libsupc++
+}
+
+# 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() {
+       if use libcxxrt ; then
+               # Move it first.
+               mv "${ED}/usr/$(get_libdir)/libc++.a" 
"${ED}/usr/$(get_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="${EPREFIX}/usr/$(get_libdir)/libc++_static.a 
${EPREFIX}/usr/$(get_libdir)/libcxxrt.a"
+               # On Linux/glibc it does not link without libpthread or libdl. 
It is
+               # fine on FreeBSD.
+               use elibc_glibc && deps="${deps} 
${EPREFIX}/usr/$(get_libdir)/libpthread.a ${EPREFIX}/usr/$(get_libdir)/libdl.a"
+
+               gen_ldscript "${deps}" > "${ED}/usr/$(get_libdir)/libc++.a"
+       fi
+       # TODO: Generate a libc++.a ldscript when building against libsupc++
+}
+
+gen_shared_ldscript() {
+       if use libcxxrt ; then
+               mv "${ED}/usr/$(get_libdir)/libc++.so" 
"${ED}/usr/$(get_libdir)/libc++_shared.so" || die
+               local deps="${EPREFIX}/usr/$(get_libdir)/libc++_shared.so 
${EPREFIX}/usr/$(get_libdir)/libcxxrt.so"
+               gen_ldscript "${deps}" > "${ED}/usr/$(get_libdir)/libc++.so"
+       fi
+       # TODO: Generate the linker script for other confiurations too.
+}
+
+multilib_src_install() {
+       cd "${BUILD_DIR}/lib"
+       if [[ ${CHOST} == *darwin* ]] ; then
+               dolib.so libc++*dylib
+               return
+       fi
+
+       if use static-libs ; then
+               dolib.a libc++.a
+               gen_static_ldscript
+       fi
+       dolib.so libc++.so*
+       gen_shared_ldscript
+}
+
+multilib_src_install_all() {
+       einstalldocs
+       # libc++abi needs the libc++ headers and we need libc++abi so the 
headers
+       # are already installed
+       [[ ${CHOST} == *darwin* ]] && return
+       insinto /usr/include/c++/v1
+       doins -r include/*
+}
+
+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."
+}

Reply via email to