diff options
author | 2013-06-17 18:18:47 +0000 | |
---|---|---|
committer | 2013-06-17 18:18:47 +0000 | |
commit | d099314aa6f7e4ae1019271e4ac9a9f9399d0922 (patch) | |
tree | 588acfbf3b4eb366b5a3be75b691f36398e5c391 /sys-libs/libcxx | |
parent | Unmask llvm/clang 3.3_rc since llvm 3.2 does not build with clang++ -stdlib=l... (diff) | |
download | historical-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/ChangeLog | 9 | ||||
-rw-r--r-- | sys-libs/libcxx/Manifest | 11 | ||||
-rw-r--r-- | sys-libs/libcxx/libcxx-0.0_p20130531-r1.ebuild | 133 | ||||
-rw-r--r-- | sys-libs/libcxx/libcxx-9999.ebuild | 40 |
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 } |