commit:     8fd5ec6ed78c005139cc7ef4aab6bd7e6798e26d
Author:     Lei Zhang <zhanglei.april <AT> gmail <DOT> com>
AuthorDate: Sat Jul 16 09:45:54 2016 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Mon Aug  1 21:49:26 2016 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=8fd5ec6e

sys-libs/libcxx: bump to 3.8.1, support libunwind & musl (#589352)

With USE=libunwind, libcxx will be built against libunwind (either
sys-libs/libunwind or sys-libs/llvm-libunwind), instead of libgcc_s.
In addition, a patch will be applied when building libcxx against musl.

Package-Manager: portage-2.2.28

 sys-libs/libcxx/Manifest                           |  1 +
 .../libcxx/files/libcxx-3.8.1-musl-support.patch   | 15 ++++++++++++++
 .../{libcxx-9999.ebuild => libcxx-3.8.1.ebuild}    | 23 ++++++++++++++--------
 sys-libs/libcxx/libcxx-9999.ebuild                 | 16 ++++++++++-----
 sys-libs/libcxx/metadata.xml                       |  1 +
 5 files changed, 43 insertions(+), 13 deletions(-)

diff --git a/sys-libs/libcxx/Manifest b/sys-libs/libcxx/Manifest
index c39b7c2..8e2fb79 100644
--- a/sys-libs/libcxx/Manifest
+++ b/sys-libs/libcxx/Manifest
@@ -1,3 +1,4 @@
 DIST libcxx-3.7.0.src.tar.xz 994580 SHA256 
c18f3c8333cd7e678c1424a57fe5e25efe740ca7caf62ac67152b4723f3ad08e SHA512 
e71d04efa0fafab129a97ca6f4fd7b5f185258de7455c7a25d0964f459bc6068c69c5d67199f6d7cd3541bdce630106cbaf3b7099e4737dddbdd57c77a3fe054
 WHIRLPOOL 
26672e3f6e0772504e7ee174c37e5fc20079c730ac8bd0d2563d5415ca9589360aa3be42a8aac15eb5a63c69227bd4911aa822b158b9a35e3d74ec0d71bb1300
 DIST libcxx-3.7.1.src.tar.xz 995724 SHA256 
357fbd4288ce99733ba06ae2bec6f503413d258aeebaab8b6a791201e6f7f144 SHA512 
08d2399a8b36aa15290733256c896c9fa43f1a1223bc5c73bbcd014fddf8880e514d2a6dcc456bcf18b537c01fb6911b092e6d9958bccd8e64e9f375ed7a1ab9
 WHIRLPOOL 
19f77946abf48cbdd3e7ea21fd009ca3cc5f607dfe0512a44b102847044bb1d5ae4b16f503f18b14ebd9ea115256e87af07409907ba2a65f6061e217a502a359
 DIST libcxx-3.8.0.src.tar.xz 1062884 SHA256 
36804511b940bc8a7cefc7cb391a6b28f5e3f53f6372965642020db91174237b SHA512 
3a9f0c9b4b0c22757028800b28c5fd7b28fc79d0cbf33cad2087de493dc778c93f2df4b919f162638d883069f60a633f36ddc18d7da8ae00c6af409266a05e6b
 WHIRLPOOL 
6f1328c8b220f91d15f6644e34dd74e3d204ee0ee56769df4442d14b884e31626a289e6ab5e7d075438c7527b2efde92763b362791914bcd18c269405c9c7c8e
+DIST libcxx-3.8.1.src.tar.xz 1074164 SHA256 
77d7f3784c88096d785bd705fa1bab7031ce184cd91ba8a7008abf55264eeecc SHA512 
782ff3cdb85d02e92404e943474d0266ff601725c202f0667d60e7807f1ba3cfdebbdb062e27a52fec96be1c99339044be93a88ba7e396682f98d99c9ac175b2
 WHIRLPOOL 
a729c44060972edee79b0019fd4c6c23fa56dd625e564f4c5965682d9fc79be4094df0643f67c5d2ffa3ae3c743c892c3c9ba19719b2307aada35775f64ed104

diff --git a/sys-libs/libcxx/files/libcxx-3.8.1-musl-support.patch 
b/sys-libs/libcxx/files/libcxx-3.8.1-musl-support.patch
new file mode 100644
index 0000000..ef86254
--- /dev/null
+++ b/sys-libs/libcxx/files/libcxx-3.8.1-musl-support.patch
@@ -0,0 +1,15 @@
+diff --git a/include/__config b/include/__config
+index db5a832..f463557 100644
+--- a/include/__config
++++ b/include/__config
+@@ -11,6 +11,10 @@
+ #ifndef _LIBCPP_CONFIG
+ #define _LIBCPP_CONFIG
+ 
++// Normally this definition is handled by cmake; but since we're not using
++// cmake, we have to hardcode it here.
++#define _LIBCPP_HAS_MUSL_LIBC
++
+ #if defined(_MSC_VER) && !defined(__clang__)
+ #define _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER
+ #endif

diff --git a/sys-libs/libcxx/libcxx-9999.ebuild 
b/sys-libs/libcxx/libcxx-3.8.1.ebuild
similarity index 84%
copy from sys-libs/libcxx/libcxx-9999.ebuild
copy to sys-libs/libcxx/libcxx-3.8.1.ebuild
index 92689d8..e0fb610 100644
--- a/sys-libs/libcxx/libcxx-9999.ebuild
+++ b/sys-libs/libcxx/libcxx-3.8.1.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2015 Gentoo Foundation
+# Copyright 1999-2016 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 # $Id$
 
@@ -26,9 +26,10 @@ if [ "${PV%9999}" = "${PV}" ] ; then
 else
        KEYWORDS=""
 fi
-IUSE="elibc_glibc +libcxxrt +static-libs test"
+IUSE="elibc_glibc elibc_musl +libcxxrt libunwind +static-libs test"
+REQUIRED_USE="libunwind? ( libcxxrt )"
 
-RDEPEND="libcxxrt? ( 
>=sys-libs/libcxxrt-0.0_p20130725[static-libs?,${MULTILIB_USEDEP}] )
+RDEPEND="libcxxrt? ( 
>=sys-libs/libcxxrt-0.0_p20130725[libunwind=,static-libs?,${MULTILIB_USEDEP}] )
        !libcxxrt? ( >=sys-devel/gcc-4.7:=[cxx] )"
 DEPEND="${RDEPEND}
        test? ( sys-devel/clang )
@@ -42,20 +43,22 @@ pkg_setup() {
                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."
+       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
 }
 
 src_prepare() {
        cp -f "${FILESDIR}/Makefile" lib/ || die
+       use elibc_musl && epatch "${FILESDIR}/${P}-musl-support.patch"
        multilib_copy_sources
 }
 
 src_configure() {
-       export LIBS="-lpthread -lrt -lc -lgcc_s"
+       export LIBS="-lpthread -lrt -lc -l$(usex libunwind unwind gcc_s)"
        if use libcxxrt ; then
                append-cppflags -DLIBCXXRT "-I${EPREFIX}/usr/include/libcxxrt/"
                LIBS="-lcxxrt ${LIBS}"
@@ -131,6 +134,9 @@ gen_static_ldscript() {
                # fine on FreeBSD.
                use elibc_glibc && deps="${deps} 
${EPREFIX}/usr/$(get_libdir)/libpthread.a ${EPREFIX}/usr/$(get_libdir)/libdl.a"
 
+               # unlike libgcc_s, libunwind is not implicitly linked
+               use libunwind && deps="${deps} 
${EPREFIX}/usr/$(get_libdir)/libunwind.a"
+
                gen_ldscript "${deps}" > "${ED}/usr/$(get_libdir)/libc++.a"
        fi
        # TODO: Generate a libc++.a ldscript when building against libsupc++
@@ -140,9 +146,10 @@ 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"
+               use libunwind && deps="${deps} 
${EPREFIX}/usr/$(get_libdir)/libunwind.so"
                gen_ldscript "${deps}" > "${ED}/usr/$(get_libdir)/libc++.so"
        fi
-       # TODO: Generate the linker script for other confiurations too.
+       # TODO: Generate the linker script for other configurations too.
 }
 
 multilib_src_install() {

diff --git a/sys-libs/libcxx/libcxx-9999.ebuild 
b/sys-libs/libcxx/libcxx-9999.ebuild
index 92689d8..06a6211 100644
--- a/sys-libs/libcxx/libcxx-9999.ebuild
+++ b/sys-libs/libcxx/libcxx-9999.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2015 Gentoo Foundation
+# Copyright 1999-2016 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 # $Id$
 
@@ -26,9 +26,10 @@ if [ "${PV%9999}" = "${PV}" ] ; then
 else
        KEYWORDS=""
 fi
-IUSE="elibc_glibc +libcxxrt +static-libs test"
+IUSE="elibc_glibc elibc_musl +libcxxrt libunwind +static-libs test"
+REQUIRED_USE="libunwind? ( libcxxrt )"
 
-RDEPEND="libcxxrt? ( 
>=sys-libs/libcxxrt-0.0_p20130725[static-libs?,${MULTILIB_USEDEP}] )
+RDEPEND="libcxxrt? ( 
>=sys-libs/libcxxrt-0.0_p20130725[libunwind?,static-libs?,${MULTILIB_USEDEP}] )
        !libcxxrt? ( >=sys-devel/gcc-4.7:=[cxx] )"
 DEPEND="${RDEPEND}
        test? ( sys-devel/clang )
@@ -51,11 +52,12 @@ pkg_setup() {
 
 src_prepare() {
        cp -f "${FILESDIR}/Makefile" lib/ || die
+       use elibc_musl && epatch "${FILESDIR}/${P}-musl-support.patch"
        multilib_copy_sources
 }
 
 src_configure() {
-       export LIBS="-lpthread -lrt -lc -lgcc_s"
+       export LIBS="-lpthread -lrt -lc -l$(usex libunwind unwind gcc_s)"
        if use libcxxrt ; then
                append-cppflags -DLIBCXXRT "-I${EPREFIX}/usr/include/libcxxrt/"
                LIBS="-lcxxrt ${LIBS}"
@@ -131,6 +133,9 @@ gen_static_ldscript() {
                # fine on FreeBSD.
                use elibc_glibc && deps="${deps} 
${EPREFIX}/usr/$(get_libdir)/libpthread.a ${EPREFIX}/usr/$(get_libdir)/libdl.a"
 
+               # unlike libgcc_s, libunwind is not implicitly linked
+               use libunwind && deps="${deps} 
${EPREFIX}/usr/$(get_libdir)/libunwind.a"
+
                gen_ldscript "${deps}" > "${ED}/usr/$(get_libdir)/libc++.a"
        fi
        # TODO: Generate a libc++.a ldscript when building against libsupc++
@@ -140,9 +145,10 @@ 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"
+               use libunwind && deps="${deps} 
${EPREFIX}/usr/$(get_libdir)/libunwind.so"
                gen_ldscript "${deps}" > "${ED}/usr/$(get_libdir)/libc++.so"
        fi
-       # TODO: Generate the linker script for other confiurations too.
+       # TODO: Generate the linker script for other configurations too.
 }
 
 multilib_src_install() {

diff --git a/sys-libs/libcxx/metadata.xml b/sys-libs/libcxx/metadata.xml
index 77398bd..cd53c38 100644
--- a/sys-libs/libcxx/metadata.xml
+++ b/sys-libs/libcxx/metadata.xml
@@ -13,5 +13,6 @@
   </maintainer>
   <use>
          <flag name="libcxxrt">Build on top of <pkg>sys-libs/libcxxrt</pkg> 
instead of gcc's libsupc++ (avoids depending on gcc).</flag>
+         <flag name="libunwind">Use libunwind instead of libgcc_s for stack 
unwinding, thus avoiding dependence on gcc.</flag>
   </use>
 </pkgmetadata>

Reply via email to