summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexis Ballier <aballier@gentoo.org>2013-06-17 18:18:47 +0000
committerAlexis Ballier <aballier@gentoo.org>2013-06-17 18:18:47 +0000
commitd099314aa6f7e4ae1019271e4ac9a9f9399d0922 (patch)
tree588acfbf3b4eb366b5a3be75b691f36398e5c391 /sys-libs/libcxx
parentUnmask llvm/clang 3.3_rc since llvm 3.2 does not build with clang++ -stdlib=l... (diff)
downloadhistorical-d099314aa6f7e4ae1019271e4ac9a9f9399d0922.tar.gz
historical-d099314aa6f7e4ae1019271e4ac9a9f9399d0922.tar.bz2
historical-d099314aa6f7e4ae1019271e4ac9a9f9399d0922.zip
Generate a libc++.a ldscript for clang++ -stdlib=libc++ -static to work out of the box.
Package-Manager: portage-2.2.0_alpha180/cvs/Linux x86_64 Manifest-Sign-Key: 0x160F534A
Diffstat (limited to 'sys-libs/libcxx')
-rw-r--r--sys-libs/libcxx/ChangeLog9
-rw-r--r--sys-libs/libcxx/Manifest11
-rw-r--r--sys-libs/libcxx/libcxx-0.0_p20130531-r1.ebuild133
-rw-r--r--sys-libs/libcxx/libcxx-9999.ebuild40
4 files changed, 183 insertions, 10 deletions
diff --git a/sys-libs/libcxx/ChangeLog b/sys-libs/libcxx/ChangeLog
index ba38e76dd441..cb4cf94b7e0c 100644
--- a/sys-libs/libcxx/ChangeLog
+++ b/sys-libs/libcxx/ChangeLog
@@ -1,6 +1,13 @@
# ChangeLog for sys-libs/libcxx
# Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/sys-libs/libcxx/ChangeLog,v 1.17 2013/05/31 15:57:41 aballier Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-libs/libcxx/ChangeLog,v 1.18 2013/06/17 18:18:34 aballier Exp $
+
+*libcxx-0.0_p20130531-r1 (17 Jun 2013)
+
+ 17 Jun 2013; Alexis Ballier <aballier@gentoo.org>
+ +libcxx-0.0_p20130531-r1.ebuild, libcxx-9999.ebuild:
+ Generate a libc++.a ldscript for clang++ -stdlib=libc++ -static to work out
+ of the box.
*libcxx-0.0_p20130531 (31 May 2013)
diff --git a/sys-libs/libcxx/Manifest b/sys-libs/libcxx/Manifest
index e7f9e8151c9e..34ee0013f46c 100644
--- a/sys-libs/libcxx/Manifest
+++ b/sys-libs/libcxx/Manifest
@@ -7,14 +7,15 @@ AUX prepare_snapshot.sh 427 SHA256 9ebf22257a2e296dee41a56b0a721cd1ba459c620009c
DIST libcxx-0.0_p20130218.tar.xz 795520 SHA256 18bb8e4670e97e4e270c153ae7ba5d9861e0b28088db447e124694aee89f800c SHA512 1d3a5a4615e9b2070f1d2f47b4738a59e35aa5ea99bba92761094e90fc8ac382fcb9c2181db201e88cdc5c3c15661ce67314494747e95aba6830d2d94769381e WHIRLPOOL eef2d8ebe21a2f52457f5cf9385df75b9c2f689bbc991e7f82d97b15f0b933ba2bc311f4c0d4ea396ce34e4e971f3480a77fa534f75cce0f19c3a9a7196e83bf
DIST libcxx-0.0_p20130531.tar.xz 804716 SHA256 41c3d40d37378f4d3f065f884df6b3e0c4f0e517fffeadb1f9e31cac781d4a79 SHA512 4e8ce8c3b21ebf742efe37d074d9b55eaa43f428270463956238e078416d1d6bba2cec26e630b077af6c249d4454d78823ac67e7f59648be255feb8ed46d374f WHIRLPOOL 2e4433581fb6f4b9d3fc99c06ec575373f1e1ed0212b5f1bee0f6ef9bcd198f5b27c380abecfbf2cb6ffc5be58ef9cebd9de7c7d3d738fa5e144d180ffc8a694
EBUILD libcxx-0.0_p20130218.ebuild 1762 SHA256 73ec38dcc52bb2e35172dcb99ae667a976ade6a672b6c6e0e3e503460866b3ae SHA512 57abd59e833f5594b19505363e492efaef70872d0e8e31d8fca1667380f21fe67d266b6b7dab1a6b3aeb906039d93e51081da85b0c43e1f4e1c4f65b3d4d75f7 WHIRLPOOL 94de3f70ba4083e95b85a81d3518c5d0af5655547f389cc87ed917e424b22e671850191efaf3bafc997b8d24c569ec6b39b6d72886c9e75c570d86e451264de8
+EBUILD libcxx-0.0_p20130531-r1.ebuild 4121 SHA256 5416696b08c140c0f398becb96b86270dbc5926a556ef490658fe92d7d2ec10b SHA512 b464d9058e452fcc4793ed4dfbb55f630d68b258b9e904334cf6539296e7f0537e7e11137dad909d59b20caecdec7717a994e8cdd4297e71d94d8a2ad527b5c9 WHIRLPOOL 38e7c8d82242113b205e19677f02d156bc5e9b8b367df0c09381b195f8795889547ed53c48ab0c85be0aa4cb54f3c191aa2e4ca7cbcbbe1b0d118dc964e3d2c0
EBUILD libcxx-0.0_p20130531.ebuild 2872 SHA256 46ec7affff2212776a32ee9c4879016f8b07cf942f55f45e374c5594ae48d5e4 SHA512 63808230eff4b71bec89e003c89987da83429bdaf5975b257860ed0a48dc0a6b7c9de409e5783a0c87d2b67b9e112cc9d90e74cba46629fbb35960b5e98234db WHIRLPOOL b9497c69346d2e3f4220bdb545373f2a9012bc6e7da8c23a97e4ac8fb54d482c0e0d7d898c53e0e10fdb907d7a44552d1f5fd166c02c7111044ceced747edad2
-EBUILD libcxx-9999.ebuild 2863 SHA256 283b4e8a6c1962b8c85d793ab8ec34a8aea55962c475c157069e39273e3414f2 SHA512 39eb08a88b4c88fa38c8118eb3a2174ad7f217576a267adc9ccb09efe7f2d66cf4cf64d0dafe38001c1eafe2904b2811aaa8b393b0f076b88acf43c73ef34291 WHIRLPOOL 2a034766bfb4e513e00bc99b43877b4f880762a12a8b7b4aca83a8ab855059ed3ed54168bc9b59c37ab919906deda5291c038ef452e6259ef687ea94ac1998ba
-MISC ChangeLog 2591 SHA256 ae5d770232da948afe07aeadd69b98c1396b1fbea8c01c46f8f3c25d39562fbb SHA512 a173f4ab8a7304a57044320da61fd9cef100053a017b56d526dfce5dda5eef712bd50d6d6050477802b496f23ab44d63b1f932df049f13b32cbff34a6d74afe2 WHIRLPOOL a0dfe7077b20eebee80540f5fe466d20b908b9a51cb6157685d5e77e683e4697a91b37cb6656055ba044300db48535ada2b5bf8b55251907211ca55940dfa1ac
+EBUILD libcxx-9999.ebuild 4110 SHA256 a069c45c00f452bd3f60add1596fe452fe02ae497a61f8f4980e0195bae67ce7 SHA512 762f3af9c04d34daaa2dec76c3ee3915a3bbd9d0b2dacc8a3250aec4c6cfbaa002945ff60e29753575aaa870acbc3a56a92497bd2e5b2c2b02a6f5667c1a620e WHIRLPOOL 4d2fae32f1f7ca0d869dc8410e7712955941fa54542b008971bca41673c7359cf104ce833ad37f089b2a25ed075374311e5d6627775be88ef8362849c4944f5a
+MISC ChangeLog 2831 SHA256 5d79f7df8062108503a7c4871744827191dcd016eb7e587422714e102693c447 SHA512 45c2233c75c584e59b57897534ad2ab03dc4df2b9424f6f3cb38ed674808ce32455a67f95b25cc34f1cc5b26df62977c44f68356c3d5e948382aa6ef896fba58 WHIRLPOOL 7fd1768650996f51092bc23fd723dc3dcf9c38f75fe8717bfa53d577a77a03c95fd91e7404e2da400377964b794038a9cea6dc4a2f2a764937c89307198a324f
MISC metadata.xml 558 SHA256 c9fe7077a8c7f767d7cdbe154d85dd344fb86ea246b16613242c70a40f3e1ef2 SHA512 3f324c4959a7c9f2613b29928957fd010b35c6e9c1601f0296e7e8b7c8d59a3c27c5c04fef87ac825f2f7bb07553bc617c4405e1e22847dc8db3e7a1ebb21f50 WHIRLPOOL 3ade5e3852afcd533c89ce0aeead55101f23d1b31825718bfccd60fac485961df617c93962be4c60333a21335dcd6bb5630c8002fe06f456c4e177c14d434455
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.20 (GNU/Linux)
-iEYEAREIAAYFAlGoyHYACgkQvFcC4BYPU0qpywCgx7009oLxq5me5RTmdRW3Xjau
-z5QAni/JhOTKF9Jh5KPH7ywHTWSg+e93
-=7nmG
+iEYEAREIAAYFAlG/UvsACgkQvFcC4BYPU0oPZwCfUdx3P2IivU3oBuwC44WArR6t
+lqAAoM2JfBxLbtTxgJ96GspRQ0ZZSkyY
+=7m/1
-----END PGP SIGNATURE-----
diff --git a/sys-libs/libcxx/libcxx-0.0_p20130531-r1.ebuild b/sys-libs/libcxx/libcxx-0.0_p20130531-r1.ebuild
new file mode 100644
index 000000000000..18137cdf8b22
--- /dev/null
+++ b/sys-libs/libcxx/libcxx-0.0_p20130531-r1.ebuild
@@ -0,0 +1,133 @@
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/sys-libs/libcxx/libcxx-0.0_p20130531-r1.ebuild,v 1.1 2013/06/17 18:18:34 aballier Exp $
+
+EAPI=5
+
+ESVN_REPO_URI="http://llvm.org/svn/llvm-project/libcxx/trunk"
+
+[ "${PV%9999}" != "${PV}" ] && SCM="subversion" || SCM=""
+
+inherit cmake-utils ${SCM} base flag-o-matic toolchain-funcs multilib
+
+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}.tar.xz"
+else
+ SRC_URI=""
+fi
+
+LICENSE="|| ( UoI-NCSA MIT )"
+SLOT="0"
+if [ "${PV%9999}" = "${PV}" ] ; then
+ KEYWORDS="~amd64 ~x86 ~amd64-fbsd ~amd64-linux ~x86-linux"
+else
+ KEYWORDS=""
+fi
+IUSE="elibc_glibc +libcxxrt static-libs"
+
+RDEPEND="libcxxrt? ( >=sys-libs/libcxxrt-0.0_p20130530[static-libs?] )
+ !libcxxrt? ( sys-devel/gcc[cxx] )"
+DEPEND="${RDEPEND}
+ sys-devel/clang
+ app-arch/xz-utils"
+
+PATCHES=( "${FILESDIR}/multilib.patch" )
+DOCS=( "CREDITS.TXT" )
+
+src_prepare() {
+ use libcxxrt && PATCHES+=( "${FILESDIR}/cxxrt.patch" )
+ base_src_prepare
+}
+
+src_configure() {
+ local mycmakeargs_base=( )
+ if use libcxxrt ; then
+ mycmakeargs_base=(
+ -DLIBCXX_CXX_ABI=libcxxrt
+ -DLIBCXX_LIBCXXRT_INCLUDE_PATHS="/usr/include/libcxxrt/"
+ )
+ else
+ # Very hackish, see $HOMEPAGE
+ # If someone has a clever idea, please share it!
+ local includes="$(echo | "$(tc-getCXX)" -Wp,-v -x c++ - -fsyntax-only 2>&1 | grep -C 2 '#include.*<...>' | tail -n 2 | tr '\n' ';' | tr -d ' ')"
+ mycmakeargs_base=(
+ -DLIBCXX_CXX_ABI=libsupc++
+ -DLIBCXX_LIBSUPCXX_INCLUDE_PATHS="${includes}"
+ )
+ fi
+
+ # Needs to be built with clang. gcc-4.6.3 fails at least.
+ # TODO: cross-compile ?
+ export CC=clang
+ export CXX=clang++
+
+ if use static-libs ; then
+ local mycmakeargs=( "${mycmakeargs_base[@]}" "-DLIBCXX_ENABLE_SHARED=OFF" )
+ BUILD_DIR="${S}_static" cmake-utils_src_configure
+ fi
+ local mycmakeargs=( "${mycmakeargs_base[@]}" )
+ BUILD_DIR="${S}_shared" cmake-utils_src_configure
+}
+
+src_compile() {
+ use static-libs && BUILD_DIR="${S}_static" cmake-utils_src_compile
+ BUILD_DIR="${S}_shared" cmake-utils_src_compile
+}
+
+# Tests fail for now, if anybody is able to fix them, help is very welcome.
+src_test() {
+ cd "${S}/test"
+ LD_LIBRARY_PATH="${S}_shared/lib:${LD_LIBRARY_PATH}" \
+ CC="clang++" \
+ HEADER_INCLUDE="-I${S}/include" \
+ SOURCE_LIB="-L${S}_shared/lib" \
+ LIBS="-lm" \
+ ./testit || die
+}
+
+gen_static_ldscript() {
+ if use libcxxrt ; then
+ # Move it first.
+ mv "${D}/${EPREFIX}/usr/$(get_libdir)/libc++.a" "${D}/${EPREFIX}/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.
+ # Taken from toolchain-funcs.eclass:
+ 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} )"
+
+ 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"
+
+ cat > "${D}/${EPREFIX}/usr/$(get_libdir)/libc++.a" <<-END_LDSCRIPT
+/* GNU ld script
+ Include libc++.a dependencies for 'clang++ -stdlib=libc++ -static' to work
+ out of the box.
+ */
+${output_format}
+GROUP ( ${deps} )
+END_LDSCRIPT
+ fi
+ # TODO: Generate a libc++.a ldscript when building against libsupc++
+}
+
+src_install() {
+ if use static-libs ; then
+ BUILD_DIR="${S}_static" cmake-utils_src_install
+ gen_static_ldscript
+ fi
+ BUILD_DIR="${S}_shared" cmake-utils_src_install
+}
+
+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."
+}
diff --git a/sys-libs/libcxx/libcxx-9999.ebuild b/sys-libs/libcxx/libcxx-9999.ebuild
index b6e69d2a4005..95fbec047ff2 100644
--- a/sys-libs/libcxx/libcxx-9999.ebuild
+++ b/sys-libs/libcxx/libcxx-9999.ebuild
@@ -1,6 +1,6 @@
# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/sys-libs/libcxx/libcxx-9999.ebuild,v 1.9 2013/05/31 01:16:29 aballier Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-libs/libcxx/libcxx-9999.ebuild,v 1.10 2013/06/17 18:18:34 aballier Exp $
EAPI=5
@@ -8,7 +8,7 @@ ESVN_REPO_URI="http://llvm.org/svn/llvm-project/libcxx/trunk"
[ "${PV%9999}" != "${PV}" ] && SCM="subversion" || SCM=""
-inherit cmake-utils ${SCM} base flag-o-matic toolchain-funcs
+inherit cmake-utils ${SCM} base flag-o-matic toolchain-funcs multilib
DESCRIPTION="New implementation of the C++ standard library, targeting C++11"
HOMEPAGE="http://libcxx.llvm.org/"
@@ -25,7 +25,7 @@ if [ "${PV%9999}" = "${PV}" ] ; then
else
KEYWORDS=""
fi
-IUSE="+libcxxrt static-libs"
+IUSE="elibc_glibc +libcxxrt static-libs"
RDEPEND="libcxxrt? ( >=sys-libs/libcxxrt-0.0_p20130530[static-libs?] )
!libcxxrt? ( sys-devel/gcc[cxx] )"
@@ -87,8 +87,40 @@ src_test() {
./testit || die
}
+gen_static_ldscript() {
+ if use libcxxrt ; then
+ # Move it first.
+ mv "${D}/${EPREFIX}/usr/$(get_libdir)/libc++.a" "${D}/${EPREFIX}/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.
+ # Taken from toolchain-funcs.eclass:
+ 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} )"
+
+ 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"
+
+ cat > "${D}/${EPREFIX}/usr/$(get_libdir)/libc++.a" <<-END_LDSCRIPT
+/* GNU ld script
+ Include libc++.a dependencies for 'clang++ -stdlib=libc++ -static' to work
+ out of the box.
+ */
+${output_format}
+GROUP ( ${deps} )
+END_LDSCRIPT
+ fi
+ # TODO: Generate a libc++.a ldscript when building against libsupc++
+}
+
src_install() {
- use static-libs && BUILD_DIR="${S}_static" cmake-utils_src_install
+ if use static-libs ; then
+ BUILD_DIR="${S}_static" cmake-utils_src_install
+ gen_static_ldscript
+ fi
BUILD_DIR="${S}_shared" cmake-utils_src_install
}