diff options
author | Robin H. Johnson <robbat2@gentoo.org> | 2015-08-08 13:49:04 -0700 |
---|---|---|
committer | Robin H. Johnson <robbat2@gentoo.org> | 2015-08-08 17:38:18 -0700 |
commit | 56bd759df1d0c750a065b8c845e93d5dfa6b549d (patch) | |
tree | 3f91093cdb475e565ae857f1c5a7fd339e2d781e /sys-devel/clang | |
download | gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.gz gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.bz2 gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.zip |
proj/gentoo: Initial commit
This commit represents a new era for Gentoo:
Storing the gentoo-x86 tree in Git, as converted from CVS.
This commit is the start of the NEW history.
Any historical data is intended to be grafted onto this point.
Creation process:
1. Take final CVS checkout snapshot
2. Remove ALL ChangeLog* files
3. Transform all Manifests to thin
4. Remove empty Manifests
5. Convert all stale $Header$/$Id$ CVS keywords to non-expanded Git $Id$
5.1. Do not touch files with -kb/-ko keyword flags.
Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
X-Thanks: Alec Warner <antarus@gentoo.org> - did the GSoC 2006 migration tests
X-Thanks: Robin H. Johnson <robbat2@gentoo.org> - infra guy, herding this project
X-Thanks: Nguyen Thai Ngoc Duy <pclouds@gentoo.org> - Former Gentoo developer, wrote Git features for the migration
X-Thanks: Brian Harring <ferringb@gentoo.org> - wrote much python to improve cvs2svn
X-Thanks: Rich Freeman <rich0@gentoo.org> - validation scripts
X-Thanks: Patrick Lauer <patrick@gentoo.org> - Gentoo dev, running new 2014 work in migration
X-Thanks: Michał Górny <mgorny@gentoo.org> - scripts, QA, nagging
X-Thanks: All of other Gentoo developers - many ideas and lots of paint on the bikeshed
Diffstat (limited to 'sys-devel/clang')
37 files changed, 2949 insertions, 0 deletions
diff --git a/sys-devel/clang/Manifest b/sys-devel/clang/Manifest new file mode 100644 index 000000000000..ecbb390f06ba --- /dev/null +++ b/sys-devel/clang/Manifest @@ -0,0 +1,12 @@ +DIST clang-2.8.tgz 5666777 SHA256 ed83481553e6a39a8a2953e89630d881d87833506f096a90f18d93ec2bdee0c1 +DIST clang-2.9.tgz 6243772 SHA256 70c41f3f782a71cbaa7bc8d6ea29fce4263ad3e8558dfecc6dc11cdef17909df SHA512 0046b716eae7c398a61fb733239f209b60bdd1817e6724730b9515e7ae765565a1e42a805cc06e6f1393d8254ebc845335b244aff825f3fcce551b958683d8f5 WHIRLPOOL 4c745b7c6a21035595307ba5e2d95c2262a5ca1d52cca413a822186b9d450fec384d514175cf384e35e7169ce41ac5152222fcc9cbee4af85695c78d7cd5492e +DIST clang-3.0.tar.gz 7240578 SHA256 b64e72da356d7c3428cfd7ac620d49ec042c84eaee13c26024879f555f4e126d SHA512 0a31a2600cd4555424259331e0762f7fceeb5d828e7792983b2f8ae92bb75b3dc92cf84474e047deb5d4dab46062b4ac6273e6079159052debb76ae69927e517 WHIRLPOOL 521169cc588520090423cd1a2fa639da84e119281bf8260ea4b7b24fd2d8627806a281ddbbba5c378a736fc31279e25f10c4d3a3c81abd2c202970079a949ba5 +DIST clang-3.1.src.tar.gz 8158418 SHA256 ff63e215dcd3e2838ffdea38502f8d35bab17e487f3c3799579961e452d5a786 SHA512 14c033eda3e0c0a887a8410f6b6a1335e0f6bfa05950a903d302b06b95fd58b03894320e91e50fb4d330c5323be9e955d9054cee62d035e2753290354ea8f8cd WHIRLPOOL cdb578c287a417896d2d6fb297e96e44e8b951bad6e7d286b97bdd346b40dac6ffbb7015b39d69fa0f9e0994dede26612307b643f71480e3c8917199fe926357 +DIST clang-3.2.src.tar.gz 8805311 SHA256 2aaaf03f7c0f6b16fe97ecc81247dc2bf2d4bec7620a77cc74670b7e07ff5658 SHA512 99fc57d19b76c42af9821eaaa762056a926eb68178f6b7dd5e8bf092c9ee201a554b91d760d5a30a57f38102eae340e080ef8c6a39327f6881eda391b20b108d WHIRLPOOL 2cf88d1db0f108d8b8e8b0cf691cca18694ddb00b129dc8c1894fca67b5494a7f53f92ac9401d99ce687c9d8fb30dc267be1e68ee70edc542e998f5486ba8730 +DIST compiler-rt-3.1.src.tar.gz 1259340 SHA256 1bd4624e7465b05ea713198f19c1c235bae2d35a411c15a4648300bc74294f5c SHA512 a010ed625ca54383bcc08dba77c4a686aed1c74d70c237a3cd20eafe9c1208f644699a600cbf1d14239db1b05a6d55f026f511f5a1eeec0a68888683c653e6fe WHIRLPOOL 6e21d28b30b52a039d5f16fb5b96238f453b58d5fabffffe0cc181061f619aaec2925bbe9f8af3dfe1ac39002fa52943617f94c44fb21cfe72d7aea460c0de0c +DIST compiler-rt-3.2.src.tar.gz 1463061 SHA256 4ac311df0eead459cbb0f0890c06b55dae529ab45827ac73fef40bec632994aa SHA512 ef4223bd2d6051ec93a0943973aa61e7aa3686ac72f9a688d58a8b71deba1a7e64dcf821e0c53937899bbd7ba49218fee4e3649f19362fe59677daee314c063b WHIRLPOOL 176643360f683ddca28e4c77dc4ceb03513cec5cea98455598c934ec3e23bd6949a74852e50e42207c7171eb8013afe366f3b8c92799af66a04739ccebe4ed4e +DIST llvm-2.8-r1.tgz 9112527 SHA256 25addb742f1c6cc12877ed0ee924dda962d848368ee095be8e48342ae613d43b SHA512 8688d5cf415e8aef74cca6a14587af36234a6347e2238ac2c0d66805c42926b9399f36390e1a58a4081e902b0904adb818c1a360d5df572dfa893d6f79f5e35a WHIRLPOOL 0da9250e31242b55586c9138089e742aab5d414d5f3412ebf917ae8b9506f984c6134a932be93ec7e4c01c79f6c21d508cb0b2e0ec283419bd4ae4db745430ae +DIST llvm-2.9.tgz 9574781 SHA256 661236cfa17428b48cfa9cbb9909f7569c64b8ecd219fd91dbc00e3b557b3779 SHA512 9cb0fa0bb8ac02661fd6f926001a15e0ad4a9660683421dc86b03f1cf5184142c5815f9f9283ee7cdf8d474e01177f83406122253342e0e95ddc878821660070 WHIRLPOOL f7b445b6b5d455f29ca68c342511b8b5e6eedec525af1cc60440c4de544df2332aa241bffca29eda5d2428a3f518e093a626bd45c7f8a9e0656d0f68aef5d9d1 +DIST llvm-3.0.tar.gz 10350539 SHA256 519eb11d3499ce99c6ffdb8718651fc91425ed7690eac91c8d6853474f7c0477 SHA512 602bb5590b70cb9138bc19d8c630c62bbabdcb2132215c921fe4bce4e3f74dfc66440b9dcd458ff55a86047cc9cc0417c6563715c133e0db222e4b88f07c13bb WHIRLPOOL 6f4ece3ec747352cd78b08d25c5b1cda91140eb6957d509161e45395e47c074f8d2102bfcaeabcdef8c1f6672f2cf06d88e290667666122da029391b3528d440 +DIST llvm-3.1.src.tar.gz 11077429 SHA256 1ea05135197b5400c1f88d00ff280d775ce778f8f9ea042e25a1e1e734a4b9ab SHA512 fb941094601043e405ccc57473414ef92437b09c200e71614f93d8e93b2a58cca8d78c385be037e064b0711cd6268802c774ce4a40fc0ea17bf576305304d2aa WHIRLPOOL c5c72e139296e1c186131f991010f52f958063a4fcfcb1f8527b53a2aaa7edcaca70ab6cf86c25d08640dcf6d720a865fda7dc7eb06cf1ce9c23fd37b5d597ef +DIST llvm-3.2.src.tar.gz 12275252 SHA256 125090c4d26740f1d5e9838477c931ed7d9ad70d599ba265f46f3a42cb066343 SHA512 cc66171322dbbe40bcac0e0ea5b09df8ff52df63ded304f841f32f702270d6ab1512216413ee52498c3ebee8cd39c4cd23e3855d591944bc2ac0ae76f5be62cc WHIRLPOOL c3a39b2426293d0251b7769607ade873bb6bf8d54e7c8055773a9b75742bc8e39049fb71409a258c6f3d98775b78c280d4bfe4223ba91e5ed6ecae0eddf910e5 diff --git a/sys-devel/clang/clang-2.8-r3.ebuild b/sys-devel/clang/clang-2.8-r3.ebuild new file mode 100644 index 000000000000..3a4b53a1fcc0 --- /dev/null +++ b/sys-devel/clang/clang-2.8-r3.ebuild @@ -0,0 +1,203 @@ +# Copyright 1999-2013 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=3 + +RESTRICT_PYTHON_ABIS="3.*" +SUPPORT_PYTHON_ABIS="1" + +inherit eutils multilib python + +DESCRIPTION="C language family frontend for LLVM" +HOMEPAGE="http://clang.llvm.org/" +# Fetching LLVM as well: see http://llvm.org/bugs/show_bug.cgi?id=4840 +# Drop the -> on 2.9 +SRC_URI="http://llvm.org/releases/${PV}/llvm-${PV}.tgz -> llvm-${PV}-r1.tgz + http://llvm.org/releases/${PV}/${P}.tgz" + +LICENSE="UoI-NCSA" +SLOT="0" +KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux ~ppc-macos" +IUSE="debug multitarget +static-analyzer system-cxx-headers test" + +# Note: for LTO support, clang will depend on binutils with gold plugins, and LLVM built after that - http://llvm.org/docs/GoldPlugin.html +DEPEND="static-analyzer? ( dev-lang/perl )" +RDEPEND="~sys-devel/llvm-${PV}[debug=,multitarget=]" + +S="${WORKDIR}/llvm-${PV}" + +src_prepare() { + mv "${WORKDIR}"/clang-${PV} "${S}"/tools/clang || die "clang source directory not found" + + # Same as llvm doc patches + epatch "${FILESDIR}"/${PN}-2.7-fixdoc.patch + + # Upstream backport, r117774 and r117775 + epatch "${FILESDIR}"/${P}-alignof.patch + # Upstream backport, r119348 + epatch "${FILESDIR}"/${P}-gcc-4.4.4.patch + + # Fix toolchain lookup for Darwin/Prefix. + epatch "${FILESDIR}"/${PN}-2.8-darwin-prefix.patch + sed -e "s|@GENTOO_PORTAGE_CHOST_ARCH@|${CHOST%%-darwin*}-darwin|g" \ + -e "s|@GENTOO_PORTAGE_CHOST@|${CHOST}|g" \ + -e "s|@GENTOO_PORTAGE_EPREFIX@|${EPREFIX}|g" \ + -i tools/clang/lib/Driver/ToolChains.cpp \ + || die "fixing toolchain lookup" + + # multilib-strict + sed -e "/PROJ_headers/s#lib/clang#$(get_libdir)/clang#" \ + -i tools/clang/lib/Headers/Makefile \ + || die "clang Makefile failed" + # fix the static analyzer for in-tree install + sed -e 's/import ScanView/from clang \0/' \ + -i tools/clang/tools/scan-view/scan-view \ + || die "scan-view sed failed" + sed -e "/scanview.css\|sorttable.js/s#\$RealBin#${EPREFIX}/usr/share/${PN}#" \ + -i tools/clang/tools/scan-build/scan-build \ + || die "scan-build sed failed" + # Specify python version + python_convert_shebangs 2 tools/clang/tools/scan-view/scan-view + + # From llvm src_prepare + einfo "Fixing install dirs" + sed -e 's,^PROJ_docsdir.*,PROJ_docsdir := $(PROJ_prefix)/share/doc/'${PF}, \ + -e 's,^PROJ_etcdir.*,PROJ_etcdir := '"${EPREFIX}"'/etc/llvm,' \ + -e 's,^PROJ_libdir.*,PROJ_libdir := $(PROJ_prefix)/'$(get_libdir)/llvm, \ + -i Makefile.config.in || die "Makefile.config sed failed" + + einfo "Fixing rpath and CFLAGS" + sed -e 's,\$(RPATH) -Wl\,\$(\(ToolDir\|LibDir\)),$(RPATH) -Wl\,'"${EPREFIX}"/usr/$(get_libdir)/llvm, \ + -e '/OmitFramePointer/s/-fomit-frame-pointer//' \ + -i Makefile.rules || die "rpath sed failed" +} + +src_configure() { + local CONF_FLAGS="--enable-shared" + + if use debug; then + CONF_FLAGS="${CONF_FLAGS} --disable-optimized" + einfo "Note: Compiling LLVM in debug mode will create huge and slow binaries" + # ...and you probably shouldn't use tmpfs, unless it can hold 900MB + else + CONF_FLAGS="${CONF_FLAGS} \ + --enable-optimized \ + --with-optimize-option= \ + --disable-assertions \ + --disable-expensive-checks" + fi + + # Setup the search path to include the Prefix includes + if use prefix ; then + CONF_FLAGS="${CONF_FLAGS} \ + --with-c-include-dirs=${EPREFIX}/usr/include:/usr/include" + fi + + if use multitarget; then + CONF_FLAGS="${CONF_FLAGS} --enable-targets=all" + else + CONF_FLAGS="${CONF_FLAGS} --enable-targets=host-only" + fi + + if use amd64; then + CONF_FLAGS="${CONF_FLAGS} --enable-pic" + fi + + # Skip llvm-gcc parts even if installed + CONF_FLAGS="${CONF_FLAGS} --with-llvmgccdir=/dev/null" + + if use system-cxx-headers; then + # Try to get current gcc headers path + local CXX_PATH=$(gcc-config -L| cut -d: -f1) + CONF_FLAGS="${CONF_FLAGS} --with-c-include-dirs=/usr/include:${CXX_PATH}/include" + CONF_FLAGS="${CONF_FLAGS} --with-cxx-include-root=${CXX_PATH}/include/g++-v4" + CONF_FLAGS="${CONF_FLAGS} --with-cxx-include-arch=$CHOST" + if has_multilib_profile; then + CONF_FLAGS="${CONF_FLAGS} --with-cxx-include-32bit-dir=32" + fi + fi + + econf ${CONF_FLAGS} || die "econf failed" +} + +src_compile() { + emake VERBOSE=1 KEEP_SYMBOLS=1 REQUIRES_RTTI=1 clang-only || die "emake failed" +} + +src_test() { + cd "${S}"/test || die "cd failed" + emake site.exp || die "updating llvm site.exp failed" + + cd "${S}"/tools/clang || die "cd clang failed" + + echo ">>> Test phase [test]: ${CATEGORY}/${PF}" + if ! emake -j1 VERBOSE=1 test; then + has test $FEATURES && die "Make test failed. See above for details." + has test $FEATURES || eerror "Make test failed. See above for details." + fi +} + +src_install() { + cd "${S}"/tools/clang || die "cd clang failed" + emake KEEP_SYMBOLS=1 DESTDIR="${D}" install || die "install failed" + + if use static-analyzer ; then + dobin tools/scan-build/ccc-analyzer + dosym ccc-analyzer /usr/bin/c++-analyzer + dobin tools/scan-build/scan-build + + insinto /usr/share/${PN} + doins tools/scan-build/scanview.css + doins tools/scan-build/sorttable.js + + cd tools/scan-view || die "cd scan-view failed" + dobin scan-view + install-scan-view() { + insinto "$(python_get_sitedir)"/clang + doins Reporter.py Resources ScanView.py startfile.py + touch "${ED}"/"$(python_get_sitedir)"/clang/__init__.py + } + python_execute_function install-scan-view + fi + + # Fix install_names on Darwin. The build system is too complicated + # to just fix this, so we correct it post-install + if [[ ${CHOST} == *-darwin* ]] ; then + for lib in libclang.dylib ; do + ebegin "fixing install_name of $lib" + install_name_tool -id "${EPREFIX}"/usr/lib/llvm/${lib} \ + "${ED}"/usr/lib/llvm/${lib} + eend $? + done + for f in usr/bin/{c-index-test,clang} usr/lib/llvm/libclang.dylib ; do + ebegin "fixing references in ${f##*/}" + install_name_tool \ + -change "@rpath/libclang.dylib" \ + "${EPREFIX}"/usr/lib/llvm/libclang.dylib \ + -change "${S}"/Release/lib/libLLVM-${PV}.dylib \ + "${EPREFIX}"/usr/lib/llvm/libLLVM-${PV}.dylib \ + -change "${S}"/Release/lib/libclang.dylib \ + "${EPREFIX}"/usr/lib/llvm/libclang.dylib \ + "${ED}"/$f + eend $? + done + fi +} + +pkg_postinst() { + python_mod_optimize clang + if use system-cxx-headers; then + elog "C++ headers search path is hardcoded to the active gcc profile one" + elog "If you change the active gcc profile, or update gcc to a new version," + elog "you will have to remerge this package to update the search path" + else + elog "If clang++ fails to find C++ headers on your system," + elog "you can remerge clang with USE=system-cxx-headers to use C++ headers" + elog "from the active gcc profile" + fi +} + +pkg_postrm() { + python_mod_cleanup clang +} diff --git a/sys-devel/clang/clang-2.9-r1.ebuild b/sys-devel/clang/clang-2.9-r1.ebuild new file mode 100644 index 000000000000..b53bf23b279f --- /dev/null +++ b/sys-devel/clang/clang-2.9-r1.ebuild @@ -0,0 +1,192 @@ +# Copyright 1999-2013 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=3 + +RESTRICT_PYTHON_ABIS="3.*" +SUPPORT_PYTHON_ABIS="1" + +inherit eutils multilib python + +DESCRIPTION="C language family frontend for LLVM" +HOMEPAGE="http://clang.llvm.org/" +# Fetching LLVM as well: see http://llvm.org/bugs/show_bug.cgi?id=4840 +SRC_URI="http://llvm.org/releases/${PV}/llvm-${PV}.tgz + http://llvm.org/releases/${PV}/${P}.tgz" + +LICENSE="UoI-NCSA" +SLOT="0" +KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux ~ppc-macos" +IUSE="debug multitarget +static-analyzer +system-cxx-headers test" + +# Note: for LTO support, clang will depend on binutils with gold plugins, and LLVM built after that - http://llvm.org/docs/GoldPlugin.html +DEPEND="static-analyzer? ( dev-lang/perl )" +RDEPEND="~sys-devel/llvm-${PV}[debug=,multitarget=]" + +S="${WORKDIR}/llvm-${PV}" + +src_prepare() { + mv "${WORKDIR}"/clang-${PV} "${S}"/tools/clang || die "clang source directory not found" + + # Workaround GCC versions' list (bug #377949) + epatch "${FILESDIR}"/${P}-gccversions.patch + + # Same as llvm doc patches + epatch "${FILESDIR}"/${PN}-2.7-fixdoc.patch + + # Fix toolchain lookup for Darwin/Prefix. + epatch "${FILESDIR}"/${PN}-2.9-darwin-prefix.patch + sed -e "s|@GENTOO_PORTAGE_CHOST_ARCH@|${CHOST%%-darwin*}-darwin|g" \ + -e "s|@GENTOO_PORTAGE_CHOST@|${CHOST}|g" \ + -e "s|@GENTOO_PORTAGE_EPREFIX@|${EPREFIX}|g" \ + -i tools/clang/lib/Driver/ToolChains.cpp \ + || die "fixing toolchain lookup" + + # multilib-strict + sed -e "/PROJ_headers/s#lib/clang#$(get_libdir)/clang#" \ + -i tools/clang/lib/Headers/Makefile \ + || die "clang Makefile failed" + # fix the static analyzer for in-tree install + sed -e 's/import ScanView/from clang \0/' \ + -i tools/clang/tools/scan-view/scan-view \ + || die "scan-view sed failed" + sed -e "/scanview.css\|sorttable.js/s#\$RealBin#${EPREFIX}/usr/share/${PN}#" \ + -i tools/clang/tools/scan-build/scan-build \ + || die "scan-build sed failed" + # Specify python version + python_convert_shebangs 2 tools/clang/tools/scan-view/scan-view + + # From llvm src_prepare + einfo "Fixing install dirs" + sed -e 's,^PROJ_docsdir.*,PROJ_docsdir := $(PROJ_prefix)/share/doc/'${PF}, \ + -e 's,^PROJ_etcdir.*,PROJ_etcdir := '"${EPREFIX}"'/etc/llvm,' \ + -e 's,^PROJ_libdir.*,PROJ_libdir := $(PROJ_prefix)/'$(get_libdir)/llvm, \ + -i Makefile.config.in || die "Makefile.config sed failed" + + einfo "Fixing rpath and CFLAGS" + sed -e 's,\$(RPATH) -Wl\,\$(\(ToolDir\|LibDir\)),$(RPATH) -Wl\,'"${EPREFIX}"/usr/$(get_libdir)/llvm, \ + -e '/OmitFramePointer/s/-fomit-frame-pointer//' \ + -i Makefile.rules || die "rpath sed failed" +} + +src_configure() { + local CONF_FLAGS="--enable-shared + --with-optimize-option= + $(use_enable !debug optimized) + $(use_enable debug assertions) + $(use_enable debug expensive-checks)" + + # Setup the search path to include the Prefix includes + if use prefix ; then + CONF_FLAGS="${CONF_FLAGS} \ + --with-c-include-dirs=${EPREFIX}/usr/include:/usr/include" + fi + + if use multitarget; then + CONF_FLAGS="${CONF_FLAGS} --enable-targets=all" + else + CONF_FLAGS="${CONF_FLAGS} --enable-targets=host-only" + fi + + if use amd64; then + CONF_FLAGS="${CONF_FLAGS} --enable-pic" + fi + + # Skip llvm-gcc parts even if installed + CONF_FLAGS="${CONF_FLAGS} --with-llvmgccdir=/dev/null" + + if use system-cxx-headers; then + # Try to get current gcc headers path + local CXX_PATH=$(gcc-config -L| cut -d: -f1) + CONF_FLAGS="${CONF_FLAGS} --with-c-include-dirs=/usr/include:${CXX_PATH}/include" + CONF_FLAGS="${CONF_FLAGS} --with-cxx-include-root=${CXX_PATH}/include/g++-v4" + CONF_FLAGS="${CONF_FLAGS} --with-cxx-include-arch=$CHOST" + if has_multilib_profile; then + CONF_FLAGS="${CONF_FLAGS} --with-cxx-include-32bit-dir=32" + fi + fi + + econf ${CONF_FLAGS} || die "econf failed" +} + +src_compile() { + emake VERBOSE=1 KEEP_SYMBOLS=1 REQUIRES_RTTI=1 clang-only || die "emake failed" +} + +src_test() { + cd "${S}"/test || die "cd failed" + emake site.exp || die "updating llvm site.exp failed" + + cd "${S}"/tools/clang || die "cd clang failed" + + echo ">>> Test phase [test]: ${CATEGORY}/${PF}" + if ! emake -j1 VERBOSE=1 test; then + has test $FEATURES && die "Make test failed. See above for details." + has test $FEATURES || eerror "Make test failed. See above for details." + fi +} + +src_install() { + cd "${S}"/tools/clang || die "cd clang failed" + emake KEEP_SYMBOLS=1 DESTDIR="${D}" install || die "install failed" + + if use static-analyzer ; then + dobin tools/scan-build/ccc-analyzer + dosym ccc-analyzer /usr/bin/c++-analyzer + dobin tools/scan-build/scan-build + + insinto /usr/share/${PN} + doins tools/scan-build/scanview.css + doins tools/scan-build/sorttable.js + + cd tools/scan-view || die "cd scan-view failed" + dobin scan-view + install-scan-view() { + insinto "$(python_get_sitedir)"/clang + doins Reporter.py Resources ScanView.py startfile.py + touch "${ED}"/"$(python_get_sitedir)"/clang/__init__.py + } + python_execute_function install-scan-view + fi + + # Fix install_names on Darwin. The build system is too complicated + # to just fix this, so we correct it post-install + if [[ ${CHOST} == *-darwin* ]] ; then + for lib in libclang.dylib ; do + ebegin "fixing install_name of $lib" + install_name_tool -id "${EPREFIX}"/usr/lib/llvm/${lib} \ + "${ED}"/usr/lib/llvm/${lib} + eend $? + done + for f in usr/bin/{c-index-test,clang} usr/lib/llvm/libclang.dylib ; do + ebegin "fixing references in ${f##*/}" + install_name_tool \ + -change "@rpath/libclang.dylib" \ + "${EPREFIX}"/usr/lib/llvm/libclang.dylib \ + -change "@executable_path/../lib/libLLVM-${PV}.dylib" \ + "${EPREFIX}"/usr/lib/llvm/libLLVM-${PV}.dylib \ + -change "${S}"/Release/lib/libclang.dylib \ + "${EPREFIX}"/usr/lib/llvm/libclang.dylib \ + "${ED}"/$f + eend $? + done + fi +} + +pkg_postinst() { + python_mod_optimize clang + if use system-cxx-headers; then + elog "C++ headers search path is hardcoded to the active gcc profile one" + elog "If you change the active gcc profile, or update gcc to a new version," + elog "you will have to remerge this package to update the search path" + else + elog "If clang++ fails to find C++ headers on your system," + elog "you can remerge clang with USE=system-cxx-headers to use C++ headers" + elog "from the active gcc profile" + fi +} + +pkg_postrm() { + python_mod_cleanup clang +} diff --git a/sys-devel/clang/clang-3.0-r4.ebuild b/sys-devel/clang/clang-3.0-r4.ebuild new file mode 100644 index 000000000000..3834aa49c83c --- /dev/null +++ b/sys-devel/clang/clang-3.0-r4.ebuild @@ -0,0 +1,213 @@ +# Copyright 1999-2014 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=3 + +RESTRICT_PYTHON_ABIS="3.*" +SUPPORT_PYTHON_ABIS="1" + +inherit eutils multilib python + +DESCRIPTION="C language family frontend for LLVM" +HOMEPAGE="http://clang.llvm.org/" +# Fetching LLVM as well: see http://llvm.org/bugs/show_bug.cgi?id=4840 +SRC_URI="http://llvm.org/releases/${PV}/llvm-${PV}.tar.gz + http://llvm.org/releases/${PV}/${P}.tar.gz" + +LICENSE="UoI-NCSA" +SLOT="0" +KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux ~ppc-macos" +IUSE="debug kernel_FreeBSD multitarget +static-analyzer system-cxx-headers test" + +DEPEND="static-analyzer? ( dev-lang/perl )" +RDEPEND="~sys-devel/llvm-${PV}[debug=,multitarget=]" + +S=${WORKDIR}/llvm-${PV}.src + +src_prepare() { + mv "${WORKDIR}"/clang-${PV}.src "${S}"/tools/clang || die "clang source directory move failed" + + # Same as llvm doc patches + epatch "${FILESDIR}"/${PN}-2.7-fixdoc.patch + + # multilib-strict + sed -e "/PROJ_headers/s#lib/clang#$(get_libdir)/clang#" \ + -i tools/clang/lib/Headers/Makefile \ + || die "clang Makefile failed" + # Fix cxx_include_root path for Gentoo + epatch "${FILESDIR}"/${P/_*}-fix_cxx_include_root.patch + # fix the static analyzer for in-tree install + sed -e 's/import ScanView/from clang \0/' \ + -i tools/clang/tools/scan-view/scan-view \ + || die "scan-view sed failed" + sed -e "/scanview.css\|sorttable.js/s#\$RealBin#${EPREFIX}/usr/share/${PN}#" \ + -i tools/clang/tools/scan-build/scan-build \ + || die "scan-build sed failed" + # Set correct path for gold plugin + sed -e "/LLVMgold.so/s#lib/#$(get_libdir)/llvm/#" \ + -i tools/clang/lib/Driver/Tools.cpp \ + || die "gold plugin path sed failed" + # Properly detect Gentoo's binutils-apple version (committed in trunk) + epatch "${FILESDIR}"/${PN}-3.0-gentoo-binutils-apple.patch + # Specify python version + python_convert_shebangs 2 tools/clang/tools/scan-view/scan-view + python_convert_shebangs -r 2 test/Scripts + + # From llvm src_prepare + einfo "Fixing install dirs" + sed -e 's,^PROJ_docsdir.*,PROJ_docsdir := $(PROJ_prefix)/share/doc/'${PF}, \ + -e 's,^PROJ_etcdir.*,PROJ_etcdir := '"${EPREFIX}"'/etc/llvm,' \ + -e 's,^PROJ_libdir.*,PROJ_libdir := $(PROJ_prefix)/'$(get_libdir)/llvm, \ + -i Makefile.config.in || die "Makefile.config sed failed" + + einfo "Fixing rpath and CFLAGS" + sed -e 's,\$(RPATH) -Wl\,\$(\(ToolDir\|LibDir\)),$(RPATH) -Wl\,'"${EPREFIX}"/usr/$(get_libdir)/llvm, \ + -e '/OmitFramePointer/s/-fomit-frame-pointer//' \ + -i Makefile.rules || die "rpath sed failed" + + # Use system llc (from llvm ebuild) for tests + sed -e "/^registered_targets =/s/os.path.join(llvm_tools_dir, 'llc')/'llc'/" \ + -i tools/clang/test/lit.cfg || die "test path sed failed" + + # AMD K10 CPUs + SSE4a support, bug #398357 + epatch "${FILESDIR}"/${P}-recognize-amd-k10-enable-sse4a.patch + + # Automatically select active system GCC's libraries, bug #406163 + epatch "${FILESDIR}"/${P}-linux-runtime-gcc-detection.patch + + # Fix search paths on FreeBSD, bug #409269 + epatch "${FILESDIR}"/${P}-freebsd-runtime-gcc-detection.patch + + # User patches + epatch_user +} + +src_configure() { + local CONF_FLAGS="--enable-shared + --with-optimize-option= + $(use_enable !debug optimized) + $(use_enable debug assertions) + $(use_enable debug expensive-checks)" + + # Setup the search path to include the Prefix includes + if use prefix ; then + CONF_FLAGS="${CONF_FLAGS} \ + --with-c-include-dirs=${EPREFIX}/usr/include:/usr/include" + fi + + if use multitarget; then + CONF_FLAGS="${CONF_FLAGS} --enable-targets=all" + else + CONF_FLAGS="${CONF_FLAGS} --enable-targets=host-only" + fi + + if use amd64; then + CONF_FLAGS="${CONF_FLAGS} --enable-pic" + fi + + if use system-cxx-headers; then + # Try to get current gcc headers path + local CXX_PATH=$(gcc-config -L| cut -d: -f1) + CONF_FLAGS="${CONF_FLAGS} --with-c-include-dirs=/usr/include:${CXX_PATH}/include" + CONF_FLAGS="${CONF_FLAGS} --with-cxx-include-root=${CXX_PATH}/include/g++-v4" + CONF_FLAGS="${CONF_FLAGS} --with-cxx-include-arch=$CHOST" + if has_multilib_profile; then + CONF_FLAGS="${CONF_FLAGS} --with-cxx-include-32bit-dir=/32" + fi + fi + + econf ${CONF_FLAGS} || die "econf failed" +} + +src_compile() { + emake VERBOSE=1 KEEP_SYMBOLS=1 REQUIRES_RTTI=1 clang-only || die "emake failed" +} + +src_test() { + cd "${S}"/test || die "cd failed" + emake site.exp || die "updating llvm site.exp failed" + + cd "${S}"/tools/clang || die "cd clang failed" + + # Broken test always assuming i386 host with multilib gcc 4.6.0 + # http://llvm.org/bugs/show_bug.cgi?id=11094 + rm -f test/Driver/linux-ld.c + + echo ">>> Test phase [test]: ${CATEGORY}/${PF}" + + testing() { + if ! emake -j1 VERBOSE=1 test; then + has test $FEATURES && die "Make test failed. See above for details." + has test $FEATURES || eerror "Make test failed. See above for details." + fi + } + python_execute_function testing +} + +src_install() { + cd "${S}"/tools/clang || die "cd clang failed" + emake KEEP_SYMBOLS=1 DESTDIR="${D}" install || die "install failed" + + if use static-analyzer ; then + dobin tools/scan-build/ccc-analyzer + dosym ccc-analyzer /usr/bin/c++-analyzer + dobin tools/scan-build/scan-build + + insinto /usr/share/${PN} + doins tools/scan-build/scanview.css + doins tools/scan-build/sorttable.js + + cd tools/scan-view || die "cd scan-view failed" + dobin scan-view + install-scan-view() { + insinto "$(python_get_sitedir)"/clang + doins Reporter.py Resources ScanView.py startfile.py + touch "${ED}"/"$(python_get_sitedir)"/clang/__init__.py + } + python_execute_function install-scan-view + fi + + # Fix install_names on Darwin. The build system is too complicated + # to just fix this, so we correct it post-install + if [[ ${CHOST} == *-darwin* ]] ; then + for lib in libclang.dylib ; do + ebegin "fixing install_name of $lib" + install_name_tool -id "${EPREFIX}"/usr/lib/llvm/${lib} \ + "${ED}"/usr/lib/llvm/${lib} + eend $? + done + for f in usr/bin/{c-index-test,clang} usr/lib/llvm/libclang.dylib ; do + ebegin "fixing references in ${f##*/}" + install_name_tool \ + -change "@rpath/libclang.dylib" \ + "${EPREFIX}"/usr/lib/llvm/libclang.dylib \ + -change "@executable_path/../lib/libLLVM-${PV}.dylib" \ + "${EPREFIX}"/usr/lib/llvm/libLLVM-${PV}.dylib \ + -change "${S}"/Release/lib/libclang.dylib \ + "${EPREFIX}"/usr/lib/llvm/libclang.dylib \ + "${ED}"/$f + eend $? + done + fi + + # Remove unnecessary headers on FreeBSD, bug #417171 + use kernel_FreeBSD && rm "${ED}/usr/lib/clang/3.1/include/"{arm_neon,std,float,iso,limits,tgmath,varargs}*.h +} + +pkg_postinst() { + python_mod_optimize clang + if use system-cxx-headers; then + elog "C++ headers search path is hardcoded to the active gcc profile one" + elog "If you change the active gcc profile, or update gcc to a new version," + elog "you will have to remerge this package to update the search path" + else + elog "If clang++ fails to find C++ headers on your system," + elog "you can remerge clang with USE=system-cxx-headers to use C++ headers" + elog "from the active gcc profile" + fi +} + +pkg_postrm() { + python_mod_cleanup clang +} diff --git a/sys-devel/clang/clang-3.1-r5.ebuild b/sys-devel/clang/clang-3.1-r5.ebuild new file mode 100644 index 000000000000..f98c99723b5f --- /dev/null +++ b/sys-devel/clang/clang-3.1-r5.ebuild @@ -0,0 +1,204 @@ +# Copyright 1999-2013 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=4 + +RESTRICT_PYTHON_ABIS="3.*" +SUPPORT_PYTHON_ABIS="1" + +inherit eutils multilib python + +DESCRIPTION="C language family frontend for LLVM" +HOMEPAGE="http://clang.llvm.org/" +# Fetching LLVM as well: see http://llvm.org/bugs/show_bug.cgi?id=4840 +SRC_URI="http://llvm.org/releases/${PV}/llvm-${PV}.src.tar.gz + http://llvm.org/releases/${PV}/compiler-rt-${PV}.src.tar.gz + http://llvm.org/releases/${PV}/${P}.src.tar.gz" + +LICENSE="UoI-NCSA" +SLOT="0" +KEYWORDS="~amd64 ~arm ~x86 ~amd64-fbsd ~x64-freebsd ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos" +IUSE="debug kernel_FreeBSD multitarget +static-analyzer test" + +DEPEND="static-analyzer? ( dev-lang/perl )" +RDEPEND="~sys-devel/llvm-${PV}[debug=,multitarget=]" + +S=${WORKDIR}/llvm-${PV}.src + +src_prepare() { + mv "${WORKDIR}"/clang-${PV}.src "${S}"/tools/clang \ + || die "clang source directory move failed" + mv "${WORKDIR}"/compiler-rt-${PV}.src "${S}"/projects/compiler-rt \ + || die "compiler-rt source directory move failed" + + # Same as llvm doc patches + epatch "${FILESDIR}"/${PN}-2.7-fixdoc.patch + + # multilib-strict + sed -e "/PROJ_headers/s#lib/clang#$(get_libdir)/clang#" \ + -i tools/clang/lib/Headers/Makefile \ + || die "clang Makefile failed" + sed -e "/PROJ_resources/s#lib/clang#$(get_libdir)/clang#" \ + -i tools/clang/runtime/compiler-rt/Makefile \ + || die "compiler-rt Makefile failed" + # fix the static analyzer for in-tree install + sed -e 's/import ScanView/from clang \0/' \ + -i tools/clang/tools/scan-view/scan-view \ + || die "scan-view sed failed" + sed -e "/scanview.css\|sorttable.js/s#\$RealBin#${EPREFIX}/usr/share/${PN}#" \ + -i tools/clang/tools/scan-build/scan-build \ + || die "scan-build sed failed" + # Set correct path for gold plugin + sed -e "/LLVMgold.so/s#lib/#$(get_libdir)/llvm/#" \ + -i tools/clang/lib/Driver/Tools.cpp \ + || die "gold plugin path sed failed" + # Specify python version + python_convert_shebangs 2 tools/clang/tools/scan-view/scan-view + python_convert_shebangs -r 2 test/Scripts + python_convert_shebangs 2 projects/compiler-rt/lib/asan/scripts/asan_symbolize.py + + # From llvm src_prepare + einfo "Fixing install dirs" + sed -e 's,^PROJ_docsdir.*,PROJ_docsdir := $(PROJ_prefix)/share/doc/'${PF}, \ + -e 's,^PROJ_etcdir.*,PROJ_etcdir := '"${EPREFIX}"'/etc/llvm,' \ + -e 's,^PROJ_libdir.*,PROJ_libdir := $(PROJ_prefix)/'$(get_libdir)/llvm, \ + -i Makefile.config.in || die "Makefile.config sed failed" + + einfo "Fixing rpath and CFLAGS" + sed -e 's,\$(RPATH) -Wl\,\$(\(ToolDir\|LibDir\)),$(RPATH) -Wl\,'"${EPREFIX}"/usr/$(get_libdir)/llvm, \ + -e '/OmitFramePointer/s/-fomit-frame-pointer//' \ + -i Makefile.rules || die "rpath sed failed" + + # Use system llc (from llvm ebuild) for tests + sed -e "/^llc_props =/s/os.path.join(llvm_tools_dir, 'llc')/'llc'/" \ + -i tools/clang/test/lit.cfg || die "test path sed failed" + + # Automatically select active system GCC's libraries, bugs #406163 and #417913 + epatch "${FILESDIR}"/${P}-gentoo-runtime-gcc-detection-v3.patch + + # Fix search paths on FreeBSD, bug #409269 + epatch "${FILESDIR}"/${P}-gentoo-freebsd-fix-lib-path.patch + + # Fix regression caused by removal of USE=system-cxx-headers, bug #417541 + epatch "${FILESDIR}"/${P}-gentoo-freebsd-fix-cxx-paths-v2.patch + + # Increase recursion limit, bug #417545, upstream r155737 + epatch "${FILESDIR}"/${P}-increase-parser-recursion-limit.patch + + # Apply r600 OpenCL-related patches, bug #425688 + epatch "${FILESDIR}"/cl-patches/llvm-*.patch + pushd tools/clang &>/dev/null || die + epatch "${FILESDIR}"/cl-patches/clang-*.patch + popd &>/dev/null || die + + # User patches + epatch_user +} + +src_configure() { + local CONF_FLAGS="--enable-shared + --with-optimize-option= + $(use_enable !debug optimized) + $(use_enable debug assertions) + $(use_enable debug expensive-checks)" + + # Setup the search path to include the Prefix includes + if use prefix ; then + CONF_FLAGS="${CONF_FLAGS} \ + --with-c-include-dirs=${EPREFIX}/usr/include:/usr/include" + fi + + if use multitarget; then + CONF_FLAGS="${CONF_FLAGS} --enable-targets=all" + else + CONF_FLAGS="${CONF_FLAGS} --enable-targets=host,cpp" + fi + + if use amd64; then + CONF_FLAGS="${CONF_FLAGS} --enable-pic" + fi + + # clang prefers clang over gcc, so we may need to force that + tc-export CC CXX + econf ${CONF_FLAGS} +} + +src_compile() { + emake VERBOSE=1 KEEP_SYMBOLS=1 REQUIRES_RTTI=1 clang-only +} + +src_test() { + cd "${S}"/test || die "cd failed" + emake site.exp + + cd "${S}"/tools/clang || die "cd clang failed" + + echo ">>> Test phase [test]: ${CATEGORY}/${PF}" + + testing() { + if ! emake -j1 VERBOSE=1 test; then + has test $FEATURES && die "Make test failed. See above for details." + has test $FEATURES || eerror "Make test failed. See above for details." + fi + } + python_execute_function testing +} + +src_install() { + cd "${S}"/tools/clang || die "cd clang failed" + emake KEEP_SYMBOLS=1 DESTDIR="${D}" install + + if use static-analyzer ; then + dobin tools/scan-build/ccc-analyzer + dosym ccc-analyzer /usr/bin/c++-analyzer + dobin tools/scan-build/scan-build + + insinto /usr/share/${PN} + doins tools/scan-build/scanview.css + doins tools/scan-build/sorttable.js + + cd tools/scan-view || die "cd scan-view failed" + dobin scan-view + install-scan-view() { + insinto "$(python_get_sitedir)"/clang + doins Reporter.py Resources ScanView.py startfile.py + touch "${ED}"/"$(python_get_sitedir)"/clang/__init__.py + } + python_execute_function install-scan-view + fi + + # Fix install_names on Darwin. The build system is too complicated + # to just fix this, so we correct it post-install + if [[ ${CHOST} == *-darwin* ]] ; then + for lib in libclang.dylib ; do + ebegin "fixing install_name of $lib" + install_name_tool -id "${EPREFIX}"/usr/lib/llvm/${lib} \ + "${ED}"/usr/lib/llvm/${lib} + eend $? + done + for f in usr/bin/{c-index-test,clang} usr/lib/llvm/libclang.dylib ; do + ebegin "fixing references in ${f##*/}" + install_name_tool \ + -change "@rpath/libclang.dylib" \ + "${EPREFIX}"/usr/lib/llvm/libclang.dylib \ + -change "@executable_path/../lib/libLLVM-${PV}.dylib" \ + "${EPREFIX}"/usr/lib/llvm/libLLVM-${PV}.dylib \ + -change "${S}"/Release/lib/libclang.dylib \ + "${EPREFIX}"/usr/lib/llvm/libclang.dylib \ + "${ED}"/$f + eend $? + done + fi + + # Remove unnecessary headers on FreeBSD, bug #417171 + use kernel_FreeBSD && rm "${ED}"usr/$(get_libdir)/clang/${PV}/include/{arm_neon,std,float,iso,limits,tgmath,varargs}*.h +} + +pkg_postinst() { + python_mod_optimize clang +} + +pkg_postrm() { + python_mod_cleanup clang +} diff --git a/sys-devel/clang/clang-3.2.ebuild b/sys-devel/clang/clang-3.2.ebuild new file mode 100644 index 000000000000..f0688050fc1a --- /dev/null +++ b/sys-devel/clang/clang-3.2.ebuild @@ -0,0 +1,202 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=5 + +PYTHON_COMPAT=( python2_7 pypy ) + +inherit eutils multilib python-r1 + +DESCRIPTION="C language family frontend for LLVM" +HOMEPAGE="http://clang.llvm.org/" +# Fetching LLVM as well: see http://llvm.org/bugs/show_bug.cgi?id=4840 +SRC_URI="http://llvm.org/releases/${PV}/llvm-${PV}.src.tar.gz + http://llvm.org/releases/${PV}/compiler-rt-${PV}.src.tar.gz + http://llvm.org/releases/${PV}/${P}.src.tar.gz" + +LICENSE="UoI-NCSA" +SLOT="0/${PV}" +KEYWORDS="~amd64 ~arm ~x86 ~amd64-fbsd ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos" +IUSE="debug kernel_FreeBSD multitarget python +static-analyzer test" + +DEPEND="static-analyzer? ( dev-lang/perl ) + ${PYTHON_DEPS}" +RDEPEND="~sys-devel/llvm-${PV}[debug=,multitarget=] + ${PYTHON_DEPS}" + +S=${WORKDIR}/llvm-${PV}.src + +src_prepare() { + rm -f "${S}"/tools/clang "${S}"/projects/compiler-rt \ + || die "symlinks removal failed" + mv "${WORKDIR}"/${P}.src "${S}"/tools/clang \ + || die "clang source directory move failed" + mv "${WORKDIR}"/compiler-rt-${PV}.src "${S}"/projects/compiler-rt \ + || die "compiler-rt source directory move failed" + + # Same as llvm doc patches + epatch "${FILESDIR}"/${PN}-2.7-fixdoc.patch + + # multilib-strict + sed -e "/PROJ_headers/s#lib/clang#$(get_libdir)/clang#" \ + -i tools/clang/lib/Headers/Makefile \ + || die "clang Makefile failed" + sed -e "/PROJ_resources/s#lib/clang#$(get_libdir)/clang#" \ + -i tools/clang/runtime/compiler-rt/Makefile \ + || die "compiler-rt Makefile failed" + # fix the static analyzer for in-tree install + sed -e 's/import ScanView/from clang \0/' \ + -i tools/clang/tools/scan-view/scan-view \ + || die "scan-view sed failed" + sed -e "/scanview.css\|sorttable.js/s#\$RealBin#${EPREFIX}/usr/share/${PN}#" \ + -i tools/clang/tools/scan-build/scan-build \ + || die "scan-build sed failed" + # Set correct path for gold plugin + sed -e "/LLVMgold.so/s#lib/#$(get_libdir)/llvm/#" \ + -i tools/clang/lib/Driver/Tools.cpp \ + || die "gold plugin path sed failed" + + # From llvm src_prepare + einfo "Fixing install dirs" + sed -e 's,^PROJ_docsdir.*,PROJ_docsdir := $(PROJ_prefix)/share/doc/'${PF}, \ + -e 's,^PROJ_etcdir.*,PROJ_etcdir := '"${EPREFIX}"'/etc/llvm,' \ + -e 's,^PROJ_libdir.*,PROJ_libdir := $(PROJ_prefix)/'$(get_libdir)/llvm, \ + -i Makefile.config.in || die "Makefile.config sed failed" + + einfo "Fixing rpath and CFLAGS" + sed -e 's,\$(RPATH) -Wl\,\$(\(ToolDir\|LibDir\)),$(RPATH) -Wl\,'"${EPREFIX}"/usr/$(get_libdir)/llvm, \ + -e '/OmitFramePointer/s/-fomit-frame-pointer//' \ + -i Makefile.rules || die "rpath sed failed" + + # Use system llc (from llvm ebuild) for tests + sed -e "/^llc_props =/s/os.path.join(llvm_tools_dir, 'llc')/'llc'/" \ + -i tools/clang/test/lit.cfg || die "test path sed failed" + + # Automatically select active system GCC's libraries, bugs #406163 and #417913 + epatch "${FILESDIR}"/${PN}-3.1-gentoo-runtime-gcc-detection-v3.patch + + # Fix search paths on FreeBSD, bug #409269 + epatch "${FILESDIR}"/${PN}-3.1-gentoo-freebsd-fix-lib-path.patch + + # Fix regression caused by removal of USE=system-cxx-headers, bug #417541 + # Needs to be updated for 3.2 + #epatch "${FILESDIR}"/${PN}-3.1-gentoo-freebsd-fix-cxx-paths-v2.patch + + # User patches + epatch_user +} + +src_configure() { + local CONF_FLAGS="--enable-shared + --with-optimize-option= + $(use_enable !debug optimized) + $(use_enable debug assertions) + $(use_enable debug expensive-checks)" + + # Setup the search path to include the Prefix includes + if use prefix ; then + CONF_FLAGS="${CONF_FLAGS} \ + --with-c-include-dirs=${EPREFIX}/usr/include:/usr/include" + fi + + if use multitarget; then + CONF_FLAGS="${CONF_FLAGS} --enable-targets=all" + else + CONF_FLAGS="${CONF_FLAGS} --enable-targets=host,cpp" + fi + + if use amd64; then + CONF_FLAGS="${CONF_FLAGS} --enable-pic" + fi + + # build with a suitable Python version + python_export_best + + # clang prefers clang over gcc, so we may need to force that + tc-export CC CXX + econf ${CONF_FLAGS} +} + +src_compile() { + emake VERBOSE=1 KEEP_SYMBOLS=1 REQUIRES_RTTI=1 clang-only +} + +src_test() { + cd "${S}"/tools/clang || die "cd clang failed" + + echo ">>> Test phase [test]: ${CATEGORY}/${PF}" + + if ! emake -j1 VERBOSE=1 test; then + has test $FEATURES && die "Make test failed. See above for details." + has test $FEATURES || eerror "Make test failed. See above for details." + fi +} + +src_install() { + cd "${S}"/tools/clang || die "cd clang failed" + emake KEEP_SYMBOLS=1 DESTDIR="${D}" install + + if use static-analyzer ; then + dobin tools/scan-build/ccc-analyzer + dosym ccc-analyzer /usr/bin/c++-analyzer + dobin tools/scan-build/scan-build + + insinto /usr/share/${PN} + doins tools/scan-build/scanview.css + doins tools/scan-build/sorttable.js + fi + + python_inst() { + if use static-analyzer ; then + pushd tools/scan-view >/dev/null || die + + python_doscript scan-view + + touch __init__.py || die + python_moduleinto clang + python_domodule __init__.py Reporter.py Resources ScanView.py startfile.py + + popd >/dev/null || die + fi + + if use python ; then + pushd bindings/python/clang >/dev/null || die + + python_moduleinto clang + python_domodule __init__.py cindex.py enumerations.py + + popd >/dev/null || die + fi + + # AddressSanitizer symbolizer (currently separate) + python_doscript "${S}"/projects/compiler-rt/lib/asan/scripts/asan_symbolize.py + } + python_foreach_impl python_inst + + # Fix install_names on Darwin. The build system is too complicated + # to just fix this, so we correct it post-install + if [[ ${CHOST} == *-darwin* ]] ; then + for lib in libclang.dylib ; do + ebegin "fixing install_name of $lib" + install_name_tool -id "${EPREFIX}"/usr/lib/llvm/${lib} \ + "${ED}"/usr/lib/llvm/${lib} + eend $? + done + for f in usr/bin/{c-index-test,clang} usr/lib/llvm/libclang.dylib ; do + ebegin "fixing references in ${f##*/}" + install_name_tool \ + -change "@rpath/libclang.dylib" \ + "${EPREFIX}"/usr/lib/llvm/libclang.dylib \ + -change "@executable_path/../lib/libLLVM-${PV}.dylib" \ + "${EPREFIX}"/usr/lib/llvm/libLLVM-${PV}.dylib \ + -change "${S}"/Release/lib/libclang.dylib \ + "${EPREFIX}"/usr/lib/llvm/libclang.dylib \ + "${ED}"/$f + eend $? + done + fi + + # Remove unnecessary headers on FreeBSD, bug #417171 + use kernel_FreeBSD && rm "${ED}"usr/$(get_libdir)/clang/${PV}/include/{arm_neon,std,float,iso,limits,tgmath,varargs}*.h +} diff --git a/sys-devel/clang/clang-3.3-r100.ebuild b/sys-devel/clang/clang-3.3-r100.ebuild new file mode 100644 index 000000000000..091c3f12edd5 --- /dev/null +++ b/sys-devel/clang/clang-3.3-r100.ebuild @@ -0,0 +1,36 @@ +# Copyright 1999-2014 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=5 + +inherit multilib-build + +DESCRIPTION="C language family frontend for LLVM (meta-ebuild)" +HOMEPAGE="http://clang.llvm.org/" +SRC_URI="" + +LICENSE="UoI-NCSA" +SLOT="0/${PV}" +KEYWORDS="amd64 arm ppc x86 ~amd64-fbsd ~x86-fbsd ~x64-freebsd ~amd64-linux ~arm-linux ~x86-linux ~ppc-macos ~x64-macos" +IUSE="debug multitarget python +static-analyzer" + +RDEPEND="~sys-devel/llvm-${PV}[clang(-),debug=,multitarget?,python?,static-analyzer,${MULTILIB_USEDEP}]" + +# Please keep this package around since it's quite likely that we'll +# return to separate LLVM & clang ebuilds when the cmake build system +# is complete. + +pkg_postinst() { + if has_version ">=dev-util/ccache-3.1.9-r2" ; then + #add ccache links as clang might get installed after ccache + "${EROOT}"/usr/bin/ccache-config --install-links + fi +} + +pkg_postrm() { + if has_version ">=dev-util/ccache-3.1.9-r2" && [[ -z ${REPLACED_BY_VERSION} ]]; then + # --remove-links would remove all links, --install-links updates them + "${EROOT}"/usr/bin/ccache-config --install-links + fi +} diff --git a/sys-devel/clang/clang-3.4.2-r100.ebuild b/sys-devel/clang/clang-3.4.2-r100.ebuild new file mode 100644 index 000000000000..27c47517b000 --- /dev/null +++ b/sys-devel/clang/clang-3.4.2-r100.ebuild @@ -0,0 +1,36 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=5 + +inherit multilib-build + +DESCRIPTION="C language family frontend for LLVM (meta-ebuild)" +HOMEPAGE="http://clang.llvm.org/" +SRC_URI="" + +LICENSE="UoI-NCSA" +SLOT="0/3.4" +KEYWORDS="~amd64 ~arm ~ppc ~ppc64 ~x86 ~amd64-fbsd ~x86-fbsd ~x64-freebsd ~amd64-linux ~arm-linux ~x86-linux ~ppc-macos ~x64-macos" +IUSE="debug multitarget python +static-analyzer" + +RDEPEND="~sys-devel/llvm-${PV}[clang(-),debug=,multitarget?,python?,static-analyzer,${MULTILIB_USEDEP}]" + +# Please keep this package around since it's quite likely that we'll +# return to separate LLVM & clang ebuilds when the cmake build system +# is complete. + +pkg_postinst() { + if has_version ">=dev-util/ccache-3.1.9-r2" ; then + #add ccache links as clang might get installed after ccache + "${EROOT}"/usr/bin/ccache-config --install-links + fi +} + +pkg_postrm() { + if has_version ">=dev-util/ccache-3.1.9-r2" && [[ -z ${REPLACED_BY_VERSION} ]]; then + # --remove-links would remove all links, --install-links updates them + "${EROOT}"/usr/bin/ccache-config --install-links + fi +} diff --git a/sys-devel/clang/clang-3.5.0-r100.ebuild b/sys-devel/clang/clang-3.5.0-r100.ebuild new file mode 100644 index 000000000000..922981de9f64 --- /dev/null +++ b/sys-devel/clang/clang-3.5.0-r100.ebuild @@ -0,0 +1,36 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=5 + +inherit multilib-build + +DESCRIPTION="C language family frontend for LLVM (meta-ebuild)" +HOMEPAGE="http://clang.llvm.org/" +SRC_URI="" + +LICENSE="UoI-NCSA" +SLOT="0/3.5" +KEYWORDS="amd64 arm ppc ppc64 x86 ~amd64-fbsd ~x86-fbsd ~x64-freebsd ~amd64-linux ~arm-linux ~x86-linux ~ppc-macos ~x64-macos" +IUSE="debug multitarget python +static-analyzer" + +RDEPEND="~sys-devel/llvm-${PV}[clang(-),debug=,multitarget?,python?,static-analyzer,${MULTILIB_USEDEP}]" + +# Please keep this package around since it's quite likely that we'll +# return to separate LLVM & clang ebuilds when the cmake build system +# is complete. + +pkg_postinst() { + if has_version ">=dev-util/ccache-3.1.9-r2" ; then + #add ccache links as clang might get installed after ccache + "${EROOT}"/usr/bin/ccache-config --install-links + fi +} + +pkg_postrm() { + if has_version ">=dev-util/ccache-3.1.9-r2" && [[ -z ${REPLACED_BY_VERSION} ]]; then + # --remove-links would remove all links, --install-links updates them + "${EROOT}"/usr/bin/ccache-config --install-links + fi +} diff --git a/sys-devel/clang/clang-3.5.1-r100.ebuild b/sys-devel/clang/clang-3.5.1-r100.ebuild new file mode 100644 index 000000000000..61310b2d3a68 --- /dev/null +++ b/sys-devel/clang/clang-3.5.1-r100.ebuild @@ -0,0 +1,36 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=5 + +inherit multilib-build + +DESCRIPTION="C language family frontend for LLVM (meta-ebuild)" +HOMEPAGE="http://clang.llvm.org/" +SRC_URI="" + +LICENSE="UoI-NCSA" +SLOT="0/3.5" +KEYWORDS="~amd64 ~arm ~ppc ~ppc64 ~x86 ~amd64-fbsd ~x86-fbsd ~x64-freebsd ~amd64-linux ~arm-linux ~x86-linux ~ppc-macos ~x64-macos" +IUSE="debug multitarget python +static-analyzer" + +RDEPEND="~sys-devel/llvm-${PV}[clang(-),debug=,multitarget?,python?,static-analyzer,${MULTILIB_USEDEP}]" + +# Please keep this package around since it's quite likely that we'll +# return to separate LLVM & clang ebuilds when the cmake build system +# is complete. + +pkg_postinst() { + if has_version ">=dev-util/ccache-3.1.9-r2" ; then + #add ccache links as clang might get installed after ccache + "${EROOT}"/usr/bin/ccache-config --install-links + fi +} + +pkg_postrm() { + if has_version ">=dev-util/ccache-3.1.9-r2" && [[ -z ${REPLACED_BY_VERSION} ]]; then + # --remove-links would remove all links, --install-links updates them + "${EROOT}"/usr/bin/ccache-config --install-links + fi +} diff --git a/sys-devel/clang/clang-3.5.2-r100.ebuild b/sys-devel/clang/clang-3.5.2-r100.ebuild new file mode 100644 index 000000000000..61310b2d3a68 --- /dev/null +++ b/sys-devel/clang/clang-3.5.2-r100.ebuild @@ -0,0 +1,36 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=5 + +inherit multilib-build + +DESCRIPTION="C language family frontend for LLVM (meta-ebuild)" +HOMEPAGE="http://clang.llvm.org/" +SRC_URI="" + +LICENSE="UoI-NCSA" +SLOT="0/3.5" +KEYWORDS="~amd64 ~arm ~ppc ~ppc64 ~x86 ~amd64-fbsd ~x86-fbsd ~x64-freebsd ~amd64-linux ~arm-linux ~x86-linux ~ppc-macos ~x64-macos" +IUSE="debug multitarget python +static-analyzer" + +RDEPEND="~sys-devel/llvm-${PV}[clang(-),debug=,multitarget?,python?,static-analyzer,${MULTILIB_USEDEP}]" + +# Please keep this package around since it's quite likely that we'll +# return to separate LLVM & clang ebuilds when the cmake build system +# is complete. + +pkg_postinst() { + if has_version ">=dev-util/ccache-3.1.9-r2" ; then + #add ccache links as clang might get installed after ccache + "${EROOT}"/usr/bin/ccache-config --install-links + fi +} + +pkg_postrm() { + if has_version ">=dev-util/ccache-3.1.9-r2" && [[ -z ${REPLACED_BY_VERSION} ]]; then + # --remove-links would remove all links, --install-links updates them + "${EROOT}"/usr/bin/ccache-config --install-links + fi +} diff --git a/sys-devel/clang/clang-3.6.0-r100.ebuild b/sys-devel/clang/clang-3.6.0-r100.ebuild new file mode 100644 index 000000000000..145a0f189b21 --- /dev/null +++ b/sys-devel/clang/clang-3.6.0-r100.ebuild @@ -0,0 +1,36 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=5 + +inherit multilib-build + +DESCRIPTION="C language family frontend for LLVM (meta-ebuild)" +HOMEPAGE="http://clang.llvm.org/" +SRC_URI="" + +LICENSE="UoI-NCSA" +SLOT="0/3.6" +KEYWORDS="~amd64 ~arm ~ppc ~ppc64 ~x86 ~amd64-fbsd ~x86-fbsd ~x64-freebsd ~amd64-linux ~arm-linux ~x86-linux ~ppc-macos ~x64-macos" +IUSE="debug multitarget python +static-analyzer" + +RDEPEND="~sys-devel/llvm-${PV}[clang(-),debug=,multitarget?,python?,static-analyzer,${MULTILIB_USEDEP}]" + +# Please keep this package around since it's quite likely that we'll +# return to separate LLVM & clang ebuilds when the cmake build system +# is complete. + +pkg_postinst() { + if has_version ">=dev-util/ccache-3.1.9-r2" ; then + #add ccache links as clang might get installed after ccache + "${EROOT}"/usr/bin/ccache-config --install-links + fi +} + +pkg_postrm() { + if has_version ">=dev-util/ccache-3.1.9-r2" && [[ -z ${REPLACED_BY_VERSION} ]]; then + # --remove-links would remove all links, --install-links updates them + "${EROOT}"/usr/bin/ccache-config --install-links + fi +} diff --git a/sys-devel/clang/clang-3.6.1-r100.ebuild b/sys-devel/clang/clang-3.6.1-r100.ebuild new file mode 100644 index 000000000000..145a0f189b21 --- /dev/null +++ b/sys-devel/clang/clang-3.6.1-r100.ebuild @@ -0,0 +1,36 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=5 + +inherit multilib-build + +DESCRIPTION="C language family frontend for LLVM (meta-ebuild)" +HOMEPAGE="http://clang.llvm.org/" +SRC_URI="" + +LICENSE="UoI-NCSA" +SLOT="0/3.6" +KEYWORDS="~amd64 ~arm ~ppc ~ppc64 ~x86 ~amd64-fbsd ~x86-fbsd ~x64-freebsd ~amd64-linux ~arm-linux ~x86-linux ~ppc-macos ~x64-macos" +IUSE="debug multitarget python +static-analyzer" + +RDEPEND="~sys-devel/llvm-${PV}[clang(-),debug=,multitarget?,python?,static-analyzer,${MULTILIB_USEDEP}]" + +# Please keep this package around since it's quite likely that we'll +# return to separate LLVM & clang ebuilds when the cmake build system +# is complete. + +pkg_postinst() { + if has_version ">=dev-util/ccache-3.1.9-r2" ; then + #add ccache links as clang might get installed after ccache + "${EROOT}"/usr/bin/ccache-config --install-links + fi +} + +pkg_postrm() { + if has_version ">=dev-util/ccache-3.1.9-r2" && [[ -z ${REPLACED_BY_VERSION} ]]; then + # --remove-links would remove all links, --install-links updates them + "${EROOT}"/usr/bin/ccache-config --install-links + fi +} diff --git a/sys-devel/clang/clang-3.6.2-r100.ebuild b/sys-devel/clang/clang-3.6.2-r100.ebuild new file mode 100644 index 000000000000..145a0f189b21 --- /dev/null +++ b/sys-devel/clang/clang-3.6.2-r100.ebuild @@ -0,0 +1,36 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=5 + +inherit multilib-build + +DESCRIPTION="C language family frontend for LLVM (meta-ebuild)" +HOMEPAGE="http://clang.llvm.org/" +SRC_URI="" + +LICENSE="UoI-NCSA" +SLOT="0/3.6" +KEYWORDS="~amd64 ~arm ~ppc ~ppc64 ~x86 ~amd64-fbsd ~x86-fbsd ~x64-freebsd ~amd64-linux ~arm-linux ~x86-linux ~ppc-macos ~x64-macos" +IUSE="debug multitarget python +static-analyzer" + +RDEPEND="~sys-devel/llvm-${PV}[clang(-),debug=,multitarget?,python?,static-analyzer,${MULTILIB_USEDEP}]" + +# Please keep this package around since it's quite likely that we'll +# return to separate LLVM & clang ebuilds when the cmake build system +# is complete. + +pkg_postinst() { + if has_version ">=dev-util/ccache-3.1.9-r2" ; then + #add ccache links as clang might get installed after ccache + "${EROOT}"/usr/bin/ccache-config --install-links + fi +} + +pkg_postrm() { + if has_version ">=dev-util/ccache-3.1.9-r2" && [[ -z ${REPLACED_BY_VERSION} ]]; then + # --remove-links would remove all links, --install-links updates them + "${EROOT}"/usr/bin/ccache-config --install-links + fi +} diff --git a/sys-devel/clang/clang-9999-r100.ebuild b/sys-devel/clang/clang-9999-r100.ebuild new file mode 100644 index 000000000000..f253e0b845c0 --- /dev/null +++ b/sys-devel/clang/clang-9999-r100.ebuild @@ -0,0 +1,36 @@ +# Copyright 1999-2013 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=5 + +inherit multilib-build + +DESCRIPTION="C language family frontend for LLVM (meta-ebuild)" +HOMEPAGE="http://clang.llvm.org/" +SRC_URI="" + +LICENSE="UoI-NCSA" +SLOT="0/${PV}" +KEYWORDS="" +IUSE="debug multitarget python +static-analyzer" + +RDEPEND="~sys-devel/llvm-${PV}[clang(-),debug=,multitarget?,python?,static-analyzer,${MULTILIB_USEDEP}]" + +# Please keep this package around since it's quite likely that we'll +# return to separate LLVM & clang ebuilds when the cmake build system +# is complete. + +pkg_postinst() { + if has_version ">=dev-util/ccache-3.1.9-r2" ; then + #add ccache links as clang might get installed after ccache + "${EROOT}"/usr/bin/ccache-config --install-links + fi +} + +pkg_postrm() { + if has_version ">=dev-util/ccache-3.1.9-r2" && [[ -z ${REPLACED_BY_VERSION} ]]; then + # --remove-links would remove all links, --install-links updates them + "${EROOT}"/usr/bin/ccache-config --install-links + fi +} diff --git a/sys-devel/clang/clang-9999.ebuild b/sys-devel/clang/clang-9999.ebuild new file mode 100644 index 000000000000..ef2a05bc7c0e --- /dev/null +++ b/sys-devel/clang/clang-9999.ebuild @@ -0,0 +1,193 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=5 + +PYTHON_COMPAT=( python2_7 pypy ) + +inherit subversion eutils multilib python-r1 + +DESCRIPTION="C language family frontend for LLVM" +HOMEPAGE="http://clang.llvm.org/" +SRC_URI="" +ESVN_REPO_URI="http://llvm.org/svn/llvm-project/cfe/trunk" + +LICENSE="UoI-NCSA" +SLOT="0/${PV}" +KEYWORDS="" +IUSE="debug multitarget python +static-analyzer test" + +DEPEND="static-analyzer? ( dev-lang/perl ) + ${PYTHON_DEPS}" +RDEPEND="~sys-devel/llvm-${PV}[debug=,multitarget=] + ${PYTHON_DEPS}" + +S="${WORKDIR}/llvm" + +src_unpack() { + # Fetching LLVM and subprojects + ESVN_PROJECT=llvm subversion_fetch "http://llvm.org/svn/llvm-project/llvm/trunk" + ESVN_PROJECT=compiler-rt S="${S}"/projects/compiler-rt subversion_fetch "http://llvm.org/svn/llvm-project/compiler-rt/trunk" + ESVN_PROJECT=clang S="${S}"/tools/clang subversion_fetch +} + +src_prepare() { + # Same as llvm doc patches + epatch "${FILESDIR}"/${PN}-2.7-fixdoc.patch + + # multilib-strict + sed -e "/PROJ_headers\|HeaderDir/s#lib/clang#$(get_libdir)/clang#" \ + -i tools/clang/lib/Headers/Makefile \ + || die "clang Makefile sed failed" + sed -e "/PROJ_resources\|ResourceDir/s#lib/clang#$(get_libdir)/clang#" \ + -i tools/clang/runtime/compiler-rt/Makefile \ + || die "compiler-rt Makefile sed failed" + sed -e "s#/lib/#/lib{{(32|64)?}}/#" \ + -i tools/clang/test/Preprocessor/iwithprefix.c \ + || die "clang test sed failed" + # fix the static analyzer for in-tree install + sed -e 's/import ScanView/from clang \0/' \ + -i tools/clang/tools/scan-view/scan-view \ + || die "scan-view sed failed" + sed -e "/scanview.css\|sorttable.js/s#\$RealBin#${EPREFIX}/usr/share/${PN}#" \ + -i tools/clang/tools/scan-build/scan-build \ + || die "scan-build sed failed" + # Set correct path for gold plugin and coverage lib + sed -e "/LLVMgold.so/s#lib/#$(get_libdir)/llvm/#" \ + -e "s#lib\(/libprofile_rt.a\)#$(get_libdir)/llvm\1#" \ + -i tools/clang/lib/Driver/Tools.cpp \ + || die "driver tools paths sed failed" + + # From llvm src_prepare + einfo "Fixing install dirs" + sed -e 's,^PROJ_docsdir.*,PROJ_docsdir := $(PROJ_prefix)/share/doc/'${PF}, \ + -e 's,^PROJ_etcdir.*,PROJ_etcdir := '"${EPREFIX}"'/etc/llvm,' \ + -e 's,^PROJ_libdir.*,PROJ_libdir := $(PROJ_prefix)/'$(get_libdir)/llvm, \ + -i Makefile.config.in || die "Makefile.config sed failed" + + einfo "Fixing rpath and CFLAGS" + sed -e 's,\$(RPATH) -Wl\,\$(\(ToolDir\|LibDir\)),$(RPATH) -Wl\,'"${EPREFIX}"/usr/$(get_libdir)/llvm, \ + -e '/OmitFramePointer/s/-fomit-frame-pointer//' \ + -i Makefile.rules || die "rpath sed failed" + + # Use system llc (from llvm ebuild) for tests + sed -e "/^llc_props =/s/os.path.join(llvm_tools_dir, 'llc')/'llc'/" \ + -i tools/clang/test/lit.cfg || die "test path sed failed" + + # User patches + epatch_user +} + +src_configure() { + # Update resource dir version after first RC + local CONF_FLAGS="--enable-shared + --with-optimize-option= + $(use_enable !debug optimized) + $(use_enable debug assertions) + $(use_enable debug expensive-checks) + --with-clang-resource-dir=../$(get_libdir)/clang/3.4" + + # Setup the search path to include the Prefix includes + if use prefix ; then + CONF_FLAGS="${CONF_FLAGS} \ + --with-c-include-dirs=${EPREFIX}/usr/include:/usr/include" + fi + + if use multitarget; then + CONF_FLAGS="${CONF_FLAGS} --enable-targets=all" + else + CONF_FLAGS="${CONF_FLAGS} --enable-targets=host,cpp" + fi + + if use amd64; then + CONF_FLAGS="${CONF_FLAGS} --enable-pic" + fi + + # build with a suitable Python version + python_export_best + + # clang prefers clang over gcc, so we may need to force that + tc-export CC CXX + econf ${CONF_FLAGS} +} + +src_compile() { + emake VERBOSE=1 KEEP_SYMBOLS=1 REQUIRES_RTTI=1 clang-only +} + +src_test() { + cd "${S}"/tools/clang || die "cd clang failed" + + echo ">>> Test phase [test]: ${CATEGORY}/${PF}" + + if ! emake -j1 VERBOSE=1 test; then + has test $FEATURES && die "Make test failed. See above for details." + has test $FEATURES || eerror "Make test failed. See above for details." + fi +} + +src_install() { + cd "${S}"/tools/clang || die "cd clang failed" + emake KEEP_SYMBOLS=1 DESTDIR="${D}" install + + if use static-analyzer ; then + dobin tools/scan-build/ccc-analyzer + dosym ccc-analyzer /usr/bin/c++-analyzer + dobin tools/scan-build/scan-build + + insinto /usr/share/${PN} + doins tools/scan-build/scanview.css + doins tools/scan-build/sorttable.js + fi + + python_inst() { + if use static-analyzer ; then + pushd tools/scan-view >/dev/null || die + + python_doscript scan-view + + touch __init__.py || die + python_moduleinto clang + python_domodule __init__.py Reporter.py Resources ScanView.py startfile.py + + popd >/dev/null || die + fi + + if use python ; then + pushd bindings/python/clang >/dev/null || die + + python_moduleinto clang + python_domodule __init__.py cindex.py enumerations.py + + popd >/dev/null || die + fi + + # AddressSanitizer symbolizer (currently separate) + python_doscript "${S}"/projects/compiler-rt/lib/asan/scripts/asan_symbolize.py + } + python_foreach_impl python_inst + + # Fix install_names on Darwin. The build system is too complicated + # to just fix this, so we correct it post-install + if [[ ${CHOST} == *-darwin* ]] ; then + for lib in libclang.dylib ; do + ebegin "fixing install_name of $lib" + install_name_tool -id "${EPREFIX}"/usr/lib/llvm/${lib} \ + "${ED}"/usr/lib/llvm/${lib} + eend $? + done + for f in usr/bin/{c-index-test,clang} usr/lib/llvm/libclang.dylib ; do + ebegin "fixing references in ${f##*/}" + install_name_tool \ + -change "@rpath/libclang.dylib" \ + "${EPREFIX}"/usr/lib/llvm/libclang.dylib \ + -change "@executable_path/../lib/libLLVM-${PV}.dylib" \ + "${EPREFIX}"/usr/lib/llvm/libLLVM-${PV}.dylib \ + -change "${S}"/Release/lib/libclang.dylib \ + "${EPREFIX}"/usr/lib/llvm/libclang.dylib \ + "${ED}"/$f + eend $? + done + fi +} diff --git a/sys-devel/clang/files/cl-patches/clang-0001-Add-r600-TargetInfo.patch b/sys-devel/clang/files/cl-patches/clang-0001-Add-r600-TargetInfo.patch new file mode 100644 index 000000000000..929b5d37028f --- /dev/null +++ b/sys-devel/clang/files/cl-patches/clang-0001-Add-r600-TargetInfo.patch @@ -0,0 +1,100 @@ +From 70cae83ffd093f183dec07c464db3c0bb6b92c10 Mon Sep 17 00:00:00 2001 +From: Tom Stellard <thomas.stellard@amd.com> +Date: Fri, 2 Mar 2012 10:54:52 -0500 +Subject: [PATCH 1/3] Add r600 TargetInfo + +--- + lib/Basic/Targets.cpp | 70 +++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 70 insertions(+), 0 deletions(-) + +diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp +index 85dfd78..64dc01c 100644 +--- a/lib/Basic/Targets.cpp ++++ b/lib/Basic/Targets.cpp +@@ -1068,6 +1068,73 @@ namespace { + } + + namespace { ++ ++class AMDGPUTargetInfo : public TargetInfo { ++public: ++ ++ AMDGPUTargetInfo(const std::string& triple) : TargetInfo(triple) { } ++ ++ virtual const char * getClobbers() const { ++ return ""; ++ } ++ ++ virtual void getGCCRegNames(const char * const *&Names, ++ unsigned &numNames) const { ++ Names = NULL; ++ numNames = 0; ++ } ++ ++ virtual void getGCCRegAliases(const GCCRegAlias *&Aliases, ++ unsigned &NumAliases) const { ++ Aliases = NULL; ++ NumAliases = 0; ++ } ++ ++ virtual bool validateAsmConstraint(const char *&Name, ++ TargetInfo::ConstraintInfo &info) const { ++ return true; ++ } ++ ++ virtual void getTargetBuiltins(const Builtin::Info *&Records, ++ unsigned &NumRecords) const { ++ Records = NULL; ++ NumRecords = 0; ++ } ++}; ++ ++ ++static const unsigned R600AddrSpaceMap[] = { ++ 1, // opencl_global ++ 3, // opencl_local ++ 2 // opencl_constant ++}; ++ ++class R600TargetInfo : public AMDGPUTargetInfo { ++public: ++ R600TargetInfo(const std::string& triple) : AMDGPUTargetInfo(triple) { ++ DescriptionString = ++ "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16" ++ "-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f80:32:32" ++ "-v16:16:16-v24:32:32-v32:32:32-v48:64:64-v64:64:64" ++ "-v96:128:128-v128:128:128-v192:256:256-v256:256:256" ++ "-v512:512:512-v1024:1024:1024-v2048:2048:2048" ++ "-n8:16:32:64"; ++ AddrSpaceMap = &R600AddrSpaceMap; ++ } ++ ++ virtual void getTargetDefines(const LangOptions &Opts, ++ MacroBuilder &Builder) const { ++ Builder.defineMacro("__R600__"); ++ } ++ ++ virtual const char * getVAListDeclaration() const { ++ return ""; ++ } ++}; ++ ++} // end anonymous namespace ++ ++namespace { + // MBlaze abstract base class + class MBlazeTargetInfo : public TargetInfo { + static const char * const GCCRegNames[]; +@@ -3963,6 +4030,9 @@ static TargetInfo *AllocateTarget(const std::string &T) { + case llvm::Triple::mblaze: + return new MBlazeTargetInfo(T); + ++ case llvm::Triple::r600: ++ return new R600TargetInfo(T); ++ + case llvm::Triple::sparc: + switch (os) { + case llvm::Triple::Linux: +-- +1.7.7.6 + diff --git a/sys-devel/clang/files/cl-patches/clang-0002-r600-Add-some-target-builtins.patch b/sys-devel/clang/files/cl-patches/clang-0002-r600-Add-some-target-builtins.patch new file mode 100644 index 000000000000..0003a8d53560 --- /dev/null +++ b/sys-devel/clang/files/cl-patches/clang-0002-r600-Add-some-target-builtins.patch @@ -0,0 +1,111 @@ +From a014573ad193775b2301e39275a1ca0ac3bb5847 Mon Sep 17 00:00:00 2001 +From: Tom Stellard <thomas.stellard@amd.com> +Date: Tue, 13 Mar 2012 13:54:51 -0400 +Subject: [PATCH 2/3] r600: Add some target builtins + +--- + include/clang/Basic/BuiltinsR600.def | 32 ++++++++++++++++++++++++++++++++ + include/clang/Basic/TargetBuiltins.h | 10 ++++++++++ + lib/Basic/Targets.cpp | 12 ++++++++++-- + 3 files changed, 52 insertions(+), 2 deletions(-) + create mode 100644 include/clang/Basic/BuiltinsR600.def + +diff --git a/include/clang/Basic/BuiltinsR600.def b/include/clang/Basic/BuiltinsR600.def +new file mode 100644 +index 0000000..ce1f30e +--- /dev/null ++++ b/include/clang/Basic/BuiltinsR600.def +@@ -0,0 +1,32 @@ ++//===--- BuiltinsR600.def - R600 Builtin function database -- --*- C++ -*-===// ++// ++// The LLVM Compiler Infrastructure ++// ++// This file is distributed under the University of Illinois Open Source ++// License. See LICENSE.TXT for details. ++// ++//===----------------------------------------------------------------------===// ++// ++// This file defines the R600-specific builtin function database. Users of ++// this file must define the BUILTIN macro to make use of this information. ++// ++//===----------------------------------------------------------------------===// ++// ++// Authors: Tom Stellard <thomas.stellard@amd.com> ++// ++ ++// The format of this database matches clang/Basic/Builtins.def. ++ ++BUILTIN(__builtin_r600_read_ngroups_x, "z", "nc") ++BUILTIN(__builtin_r600_read_ngroups_y, "z", "nc") ++BUILTIN(__builtin_r600_read_ngroups_z, "z", "nc") ++ ++BUILTIN(__builtin_r600_read_tidig_x, "z", "nc") ++BUILTIN(__builtin_r600_read_tidig_y, "z", "nc") ++BUILTIN(__builtin_r600_read_tidig_z, "z", "nc") ++ ++BUILTIN(__builtin_r600_read_tgid_x, "z", "nc") ++BUILTIN(__builtin_r600_read_tgid_y, "z", "nc") ++BUILTIN(__builtin_r600_read_tgid_z, "z", "nc") ++ ++#undef BUILTIN +diff --git a/include/clang/Basic/TargetBuiltins.h b/include/clang/Basic/TargetBuiltins.h +index 7c04bf7..3460cd5 100644 +--- a/include/clang/Basic/TargetBuiltins.h ++++ b/include/clang/Basic/TargetBuiltins.h +@@ -45,6 +45,16 @@ namespace clang { + }; + } + ++ /// R600 builtins ++ namespace R600 { ++ enum { ++ LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, ++#define BUILTIN(ID, TYPE, ATTRS) BI##ID, ++#include "clang/Basic/BuiltinsR600.def" ++ LastTSBuiltin ++ }; ++ } ++ + + /// X86 builtins + namespace X86 { +diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp +index 64dc01c..03f1a18 100644 +--- a/lib/Basic/Targets.cpp ++++ b/lib/Basic/Targets.cpp +@@ -1070,6 +1070,7 @@ namespace { + namespace { + + class AMDGPUTargetInfo : public TargetInfo { ++ static const Builtin::Info BuiltinInfo[]; + public: + + AMDGPUTargetInfo(const std::string& triple) : TargetInfo(triple) { } +@@ -1097,8 +1098,8 @@ public: + + virtual void getTargetBuiltins(const Builtin::Info *&Records, + unsigned &NumRecords) const { +- Records = NULL; +- NumRecords = 0; ++ Records = BuiltinInfo; ++ NumRecords = clang::R600::LastTSBuiltin-Builtin::FirstTSBuiltin; + } + }; + +@@ -1132,6 +1133,13 @@ public: + } + }; + ++const Builtin::Info AMDGPUTargetInfo::BuiltinInfo[] = { ++#define BUILTIN(ID, TYPE, ATTRS) { #ID, TYPE, ATTRS, 0, ALL_LANGUAGES }, ++#define LIBBUILTIN(ID, TYPE, ATTRS, HEADER) { #ID, TYPE, ATTRS, HEADER,\ ++ ALL_LANGUAGES }, ++#include "clang/Basic/BuiltinsR600.def" ++}; ++ + } // end anonymous namespace + + namespace { +-- +1.7.7.6 + diff --git a/sys-devel/clang/files/cl-patches/clang-0003-r600-Add-read_global_size-and-read_local_size-builti.patch b/sys-devel/clang/files/cl-patches/clang-0003-r600-Add-read_global_size-and-read_local_size-builti.patch new file mode 100644 index 000000000000..e0c2d3bb6116 --- /dev/null +++ b/sys-devel/clang/files/cl-patches/clang-0003-r600-Add-read_global_size-and-read_local_size-builti.patch @@ -0,0 +1,31 @@ +From 2881b8189dcacc8ab6a336f0e107d72752c8c47e Mon Sep 17 00:00:00 2001 +From: Tom Stellard <thomas.stellard@amd.com> +Date: Wed, 14 Mar 2012 11:20:08 -0400 +Subject: [PATCH 3/3] r600: Add read_global_size and read_local_size builtins + +--- + include/clang/Basic/BuiltinsR600.def | 8 ++++++++ + 1 files changed, 8 insertions(+), 0 deletions(-) + +diff --git a/include/clang/Basic/BuiltinsR600.def b/include/clang/Basic/BuiltinsR600.def +index ce1f30e..c81758e 100644 +--- a/include/clang/Basic/BuiltinsR600.def ++++ b/include/clang/Basic/BuiltinsR600.def +@@ -17,6 +17,14 @@ + + // The format of this database matches clang/Basic/Builtins.def. + ++BUILTIN(__builtin_r600_read_global_size_x, "z", "nc") ++BUILTIN(__builtin_r600_read_global_size_y, "z", "nc") ++BUILTIN(__builtin_r600_read_global_size_z, "z", "nc") ++ ++BUILTIN(__builtin_r600_read_local_size_x, "z", "nc") ++BUILTIN(__builtin_r600_read_local_size_y, "z", "nc") ++BUILTIN(__builtin_r600_read_local_size_z, "z", "nc") ++ + BUILTIN(__builtin_r600_read_ngroups_x, "z", "nc") + BUILTIN(__builtin_r600_read_ngroups_y, "z", "nc") + BUILTIN(__builtin_r600_read_ngroups_z, "z", "nc") +-- +1.7.7.6 + diff --git a/sys-devel/clang/files/cl-patches/llvm-0001-r600-Add-some-intrinsic-definitions.patch b/sys-devel/clang/files/cl-patches/llvm-0001-r600-Add-some-intrinsic-definitions.patch new file mode 100644 index 000000000000..9d99c9cff350 --- /dev/null +++ b/sys-devel/clang/files/cl-patches/llvm-0001-r600-Add-some-intrinsic-definitions.patch @@ -0,0 +1,64 @@ +From e25389b66b5ced3a2b5461077dcc9a505d334e3d Mon Sep 17 00:00:00 2001 +From: Tom Stellard <thomas.stellard@amd.com> +Date: Tue, 13 Mar 2012 14:12:21 -0400 +Subject: [PATCH 1/2] r600: Add some intrinsic definitions + +--- + include/llvm/Intrinsics.td | 1 + + include/llvm/IntrinsicsR600.td | 35 +++++++++++++++++++++++++++++++++++ + 2 files changed, 36 insertions(+), 0 deletions(-) + create mode 100644 include/llvm/IntrinsicsR600.td + +diff --git a/include/llvm/Intrinsics.td b/include/llvm/Intrinsics.td +index 069f907..e90dd85 100644 +--- a/include/llvm/Intrinsics.td ++++ b/include/llvm/Intrinsics.td +@@ -441,3 +441,4 @@ include "llvm/IntrinsicsCellSPU.td" + include "llvm/IntrinsicsXCore.td" + include "llvm/IntrinsicsPTX.td" + include "llvm/IntrinsicsHexagon.td" ++include "llvm/IntrinsicsR600.td" +diff --git a/include/llvm/IntrinsicsR600.td b/include/llvm/IntrinsicsR600.td +new file mode 100644 +index 0000000..789fecb +--- /dev/null ++++ b/include/llvm/IntrinsicsR600.td +@@ -0,0 +1,35 @@ ++//===- IntrinsicsR600.td - Defines R600 intrinsics ---------*- tablegen -*-===// ++// ++// The LLVM Compiler Infrastructure ++// ++// This file is distributed under the University of Illinois Open Source ++// License. See LICENSE.TXT for details. ++// ++//===----------------------------------------------------------------------===// ++// ++// This file defines all of the R600-specific intrinsics. ++// ++//===----------------------------------------------------------------------===// ++// ++// Authors: Tom Stellard <thomas.stellard@amd.com> ++// ++ ++let TargetPrefix = "r600" in { ++ ++class R600ReadPreloadRegisterIntrinsic<string name> ++ : Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>, ++ GCCBuiltin<name>; ++ ++multiclass R600ReadPreloadRegisterIntrinsic_xyz<string prefix> { ++ def _x : R600ReadPreloadRegisterIntrinsic<!strconcat(prefix, "_x")>; ++ def _y : R600ReadPreloadRegisterIntrinsic<!strconcat(prefix, "_y")>; ++ def _z : R600ReadPreloadRegisterIntrinsic<!strconcat(prefix, "_z")>; ++} ++ ++defm int_r600_read_ngroups : R600ReadPreloadRegisterIntrinsic_xyz < ++ "__builtin_r600_read_ngroups">; ++defm int_r600_read_tgid : R600ReadPreloadRegisterIntrinsic_xyz < ++ "__builtin_r600_read_tgid">; ++defm int_r600_read_tidig : R600ReadPreloadRegisterIntrinsic_xyz < ++ "__builtin_r600_read_tidig">; ++} // End TargetPrefix = "r600" +-- +1.7.7.6 + diff --git a/sys-devel/clang/files/cl-patches/llvm-0002-r600-Add-get_global_size-and-get_local_size-intrinsi.patch b/sys-devel/clang/files/cl-patches/llvm-0002-r600-Add-get_global_size-and-get_local_size-intrinsi.patch new file mode 100644 index 000000000000..db176dd56a1b --- /dev/null +++ b/sys-devel/clang/files/cl-patches/llvm-0002-r600-Add-get_global_size-and-get_local_size-intrinsi.patch @@ -0,0 +1,27 @@ +From 17667fa3450470f7c89fc2ba4631d908cf510749 Mon Sep 17 00:00:00 2001 +From: Tom Stellard <thomas.stellard@amd.com> +Date: Wed, 14 Mar 2012 11:19:35 -0400 +Subject: [PATCH 2/2] r600: Add get_global_size and get_local_size intrinsics + +--- + include/llvm/IntrinsicsR600.td | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +diff --git a/include/llvm/IntrinsicsR600.td b/include/llvm/IntrinsicsR600.td +index 789fecb..0473acb 100644 +--- a/include/llvm/IntrinsicsR600.td ++++ b/include/llvm/IntrinsicsR600.td +@@ -26,6 +26,10 @@ multiclass R600ReadPreloadRegisterIntrinsic_xyz<string prefix> { + def _z : R600ReadPreloadRegisterIntrinsic<!strconcat(prefix, "_z")>; + } + ++defm int_r600_read_global_size : R600ReadPreloadRegisterIntrinsic_xyz < ++ "__builtin_r600_read_global_size">; ++defm int_r600_read_local_size : R600ReadPreloadRegisterIntrinsic_xyz < ++ "__builtin_r600_read_local_size">; + defm int_r600_read_ngroups : R600ReadPreloadRegisterIntrinsic_xyz < + "__builtin_r600_read_ngroups">; + defm int_r600_read_tgid : R600ReadPreloadRegisterIntrinsic_xyz < +-- +1.7.7.6 + diff --git a/sys-devel/clang/files/clang-2.7-fixdoc.patch b/sys-devel/clang/files/clang-2.7-fixdoc.patch new file mode 100644 index 000000000000..8058ec46bd8f --- /dev/null +++ b/sys-devel/clang/files/clang-2.7-fixdoc.patch @@ -0,0 +1,53 @@ +diff -Naur llvm-2.7.orig//tools/clang/docs/Makefile llvm-2.7/tools/clang/docs/Makefile +--- llvm-2.7.orig//tools/clang/docs/Makefile 2010-04-26 18:38:45.000000000 +0200 ++++ llvm-2.7/tools/clang/docs/Makefile 2010-04-26 18:41:08.000000000 +0200 +@@ -46,13 +46,12 @@ + # 'make generated BUILD_FOR_WEBSITE=1' + generated:: doxygen + +-install-html: $(PROJ_OBJ_DIR)/html.tar.gz ++install-html: + $(Echo) Installing HTML documentation + $(Verb) $(MKDIR) $(DESTDIR)$(PROJ_docsdir)/html + $(Verb) $(MKDIR) $(DESTDIR)$(PROJ_docsdir)/html/img + $(Verb) $(DataInstall) $(HTML) $(DESTDIR)$(PROJ_docsdir)/html + # $(Verb) $(DataInstall) $(IMAGES) $(DESTDIR)$(PROJ_docsdir)/html/img +- $(Verb) $(DataInstall) $(PROJ_OBJ_DIR)/html.tar.gz $(DESTDIR)$(PROJ_docsdir) + + $(PROJ_OBJ_DIR)/html.tar.gz: $(HTML) + $(Echo) Packaging HTML documentation +@@ -64,12 +63,11 @@ + install-doxygen: doxygen + $(Echo) Installing doxygen documentation + $(Verb) $(MKDIR) $(DESTDIR)$(PROJ_docsdir)/html/doxygen +- $(Verb) $(DataInstall) $(PROJ_OBJ_DIR)/doxygen.tar.gz $(DESTDIR)$(PROJ_docsdir) + $(Verb) cd $(PROJ_OBJ_DIR)/doxygen && \ + $(FIND) . -type f -exec \ + $(DataInstall) {} $(DESTDIR)$(PROJ_docsdir)/html/doxygen \; + +-doxygen: regendoc $(PROJ_OBJ_DIR)/doxygen.tar.gz ++doxygen: regendoc + + regendoc: + $(Echo) Building doxygen documentation +diff -Naur llvm-2.7.orig//tools/clang/docs/tools/Makefile llvm-2.7/tools/clang/docs/tools/Makefile +--- llvm-2.7.orig//tools/clang/docs/tools/Makefile 2010-04-26 18:38:45.000000000 +0200 ++++ llvm-2.7/tools/clang/docs/tools/Makefile 2010-04-26 18:41:29.000000000 +0200 +@@ -24,7 +24,7 @@ + CLANG_VERSION := trunk + + # If we are in BUILD_FOR_WEBSITE mode, default to the all target. +-all:: html man ps ++all:: html man + + clean: + rm -f pod2htm*.*~~ $(HTML) $(MAN) $(PS) +@@ -58,7 +58,7 @@ + ifdef ONLY_MAN_DOCS + INSTALL_TARGETS := install-man + else +-INSTALL_TARGETS := install-html install-man install-ps ++INSTALL_TARGETS := install-html install-man + endif + + .SUFFIXES: diff --git a/sys-devel/clang/files/clang-2.8-alignof.patch b/sys-devel/clang/files/clang-2.8-alignof.patch new file mode 100644 index 000000000000..a15f118caee6 --- /dev/null +++ b/sys-devel/clang/files/clang-2.8-alignof.patch @@ -0,0 +1,258 @@ +Index: include/llvm/ADT/StringMap.h +=================================================================== +--- include/llvm/ADT/StringMap.h (révision 117773) ++++ include/llvm/ADT/StringMap.h (révision 117774) +@@ -167,7 +167,7 @@ + + unsigned AllocSize = static_cast<unsigned>(sizeof(StringMapEntry))+ + KeyLength+1; +- unsigned Alignment = alignof<StringMapEntry>(); ++ unsigned Alignment = alignOf<StringMapEntry>(); + + StringMapEntry *NewItem = + static_cast<StringMapEntry*>(Allocator.Allocate(AllocSize,Alignment)); +Index: include/llvm/Support/AlignOf.h +=================================================================== +--- include/llvm/Support/AlignOf.h (révision 117773) ++++ include/llvm/Support/AlignOf.h (révision 117774) +@@ -49,12 +49,12 @@ + + }; + +-/// alignof - A templated function that returns the mininum alignment of ++/// alignOf - A templated function that returns the mininum alignment of + /// of a type. This provides no extra functionality beyond the AlignOf + /// class besides some cosmetic cleanliness. Example usage: +-/// alignof<int>() returns the alignment of an int. ++/// alignOf<int>() returns the alignment of an int. + template <typename T> +-static inline unsigned alignof() { return AlignOf<T>::Alignment; } ++static inline unsigned alignOf() { return AlignOf<T>::Alignment; } + + } // end namespace llvm + #endif +Index: include/llvm/Support/Allocator.h +=================================================================== +--- include/llvm/Support/Allocator.h (révision 117773) ++++ include/llvm/Support/Allocator.h (révision 117774) +@@ -201,7 +201,7 @@ + char *End = Slab == Allocator.CurSlab ? Allocator.CurPtr : + (char *)Slab + Slab->Size; + for (char *Ptr = (char*)(Slab+1); Ptr < End; Ptr += sizeof(T)) { +- Ptr = Allocator.AlignPtr(Ptr, alignof<T>()); ++ Ptr = Allocator.AlignPtr(Ptr, alignOf<T>()); + if (Ptr + sizeof(T) <= End) + reinterpret_cast<T*>(Ptr)->~T(); + } +Index: include/llvm/CodeGen/SlotIndexes.h +=================================================================== +--- include/llvm/CodeGen/SlotIndexes.h (révision 117773) ++++ include/llvm/CodeGen/SlotIndexes.h (révision 117774) +@@ -393,7 +393,7 @@ + IndexListEntry *entry = + static_cast<IndexListEntry*>( + ileAllocator.Allocate(sizeof(IndexListEntry), +- alignof<IndexListEntry>())); ++ alignOf<IndexListEntry>())); + + new (entry) IndexListEntry(mi, index); + +Index: tools/clang/lib/Basic/IdentifierTable.cpp +=================================================================== +--- tools/clang/lib/Basic/IdentifierTable.cpp (révision 117774) ++++ tools/clang/lib/Basic/IdentifierTable.cpp (révision 117775) +@@ -390,7 +390,7 @@ + unsigned Size = sizeof(MultiKeywordSelector) + nKeys*sizeof(IdentifierInfo *); + MultiKeywordSelector *SI = + (MultiKeywordSelector*)SelTabImpl.Allocator.Allocate(Size, +- llvm::alignof<MultiKeywordSelector>()); ++ llvm::alignOf<MultiKeywordSelector>()); + new (SI) MultiKeywordSelector(nKeys, IIV); + SelTabImpl.Table.InsertNode(SI, InsertPos); + return Selector(SI); +Index: tools/clang/lib/AST/ExprCXX.cpp +=================================================================== +--- tools/clang/lib/AST/ExprCXX.cpp (révision 117774) ++++ tools/clang/lib/AST/ExprCXX.cpp (révision 117775) +@@ -233,7 +233,7 @@ + if (NumTemplateArgs != 0) + size += ExplicitTemplateArgumentList::sizeFor(NumTemplateArgs); + +- void *Mem = C.Allocate(size, llvm::alignof<UnresolvedLookupExpr>()); ++ void *Mem = C.Allocate(size, llvm::alignOf<UnresolvedLookupExpr>()); + UnresolvedLookupExpr *E = new (Mem) UnresolvedLookupExpr(EmptyShell()); + E->HasExplicitTemplateArgs = NumTemplateArgs != 0; + return E; +@@ -261,7 +261,7 @@ + if (NumResults) { + Results = static_cast<DeclAccessPair *>( + C.Allocate(sizeof(DeclAccessPair) * NumResults, +- llvm::alignof<DeclAccessPair>())); ++ llvm::alignOf<DeclAccessPair>())); + memcpy(Results, &*Begin.getIterator(), + NumResults * sizeof(DeclAccessPair)); + } +@@ -737,7 +737,7 @@ + if (TemplateArgs) + size += ExplicitTemplateArgumentList::sizeFor(*TemplateArgs); + +- void *Mem = C.Allocate(size, llvm::alignof<CXXDependentScopeMemberExpr>()); ++ void *Mem = C.Allocate(size, llvm::alignOf<CXXDependentScopeMemberExpr>()); + return new (Mem) CXXDependentScopeMemberExpr(C, Base, BaseType, + IsArrow, OperatorLoc, + Qualifier, QualifierRange, +@@ -756,7 +756,7 @@ + + std::size_t size = sizeof(CXXDependentScopeMemberExpr) + + ExplicitTemplateArgumentList::sizeFor(NumTemplateArgs); +- void *Mem = C.Allocate(size, llvm::alignof<CXXDependentScopeMemberExpr>()); ++ void *Mem = C.Allocate(size, llvm::alignOf<CXXDependentScopeMemberExpr>()); + CXXDependentScopeMemberExpr *E + = new (Mem) CXXDependentScopeMemberExpr(C, 0, QualType(), + 0, SourceLocation(), 0, +@@ -812,7 +812,7 @@ + if (TemplateArgs) + size += ExplicitTemplateArgumentList::sizeFor(*TemplateArgs); + +- void *Mem = C.Allocate(size, llvm::alignof<UnresolvedMemberExpr>()); ++ void *Mem = C.Allocate(size, llvm::alignOf<UnresolvedMemberExpr>()); + return new (Mem) UnresolvedMemberExpr(C, + Dependent ? C.DependentTy : C.OverloadTy, + Dependent, HasUnresolvedUsing, Base, BaseType, +@@ -826,7 +826,7 @@ + if (NumTemplateArgs != 0) + size += ExplicitTemplateArgumentList::sizeFor(NumTemplateArgs); + +- void *Mem = C.Allocate(size, llvm::alignof<UnresolvedMemberExpr>()); ++ void *Mem = C.Allocate(size, llvm::alignOf<UnresolvedMemberExpr>()); + UnresolvedMemberExpr *E = new (Mem) UnresolvedMemberExpr(EmptyShell()); + E->HasExplicitTemplateArgs = NumTemplateArgs != 0; + return E; +Index: tools/clang/lib/AST/DeclObjC.cpp +=================================================================== +--- tools/clang/lib/AST/DeclObjC.cpp (révision 117774) ++++ tools/clang/lib/AST/DeclObjC.cpp (révision 117775) +@@ -711,7 +711,7 @@ + void ObjCClassDecl::setClassList(ASTContext &C, ObjCInterfaceDecl*const*List, + const SourceLocation *Locs, unsigned Num) { + ForwardDecls = (ObjCClassRef*) C.Allocate(sizeof(ObjCClassRef)*Num, +- llvm::alignof<ObjCClassRef>()); ++ llvm::alignOf<ObjCClassRef>()); + for (unsigned i = 0; i < Num; ++i) + new (&ForwardDecls[i]) ObjCClassRef(List[i], Locs[i]); + +Index: tools/clang/lib/AST/Stmt.cpp +=================================================================== +--- tools/clang/lib/AST/Stmt.cpp (révision 117774) ++++ tools/clang/lib/AST/Stmt.cpp (révision 117775) +@@ -416,7 +416,7 @@ + Stmt *atFinallyStmt) { + unsigned Size = sizeof(ObjCAtTryStmt) + + (1 + NumCatchStmts + (atFinallyStmt != 0)) * sizeof(Stmt *); +- void *Mem = Context.Allocate(Size, llvm::alignof<ObjCAtTryStmt>()); ++ void *Mem = Context.Allocate(Size, llvm::alignOf<ObjCAtTryStmt>()); + return new (Mem) ObjCAtTryStmt(atTryLoc, atTryStmt, CatchStmts, NumCatchStmts, + atFinallyStmt); + } +@@ -426,7 +426,7 @@ + bool HasFinally) { + unsigned Size = sizeof(ObjCAtTryStmt) + + (1 + NumCatchStmts + HasFinally) * sizeof(Stmt *); +- void *Mem = Context.Allocate(Size, llvm::alignof<ObjCAtTryStmt>()); ++ void *Mem = Context.Allocate(Size, llvm::alignOf<ObjCAtTryStmt>()); + return new (Mem) ObjCAtTryStmt(EmptyShell(), NumCatchStmts, HasFinally); + } + +@@ -448,7 +448,7 @@ + std::size_t Size = sizeof(CXXTryStmt); + Size += ((numHandlers + 1) * sizeof(Stmt)); + +- void *Mem = C.Allocate(Size, llvm::alignof<CXXTryStmt>()); ++ void *Mem = C.Allocate(Size, llvm::alignOf<CXXTryStmt>()); + return new (Mem) CXXTryStmt(tryLoc, tryBlock, handlers, numHandlers); + } + +@@ -457,7 +457,7 @@ + std::size_t Size = sizeof(CXXTryStmt); + Size += ((numHandlers + 1) * sizeof(Stmt)); + +- void *Mem = C.Allocate(Size, llvm::alignof<CXXTryStmt>()); ++ void *Mem = C.Allocate(Size, llvm::alignOf<CXXTryStmt>()); + return new (Mem) CXXTryStmt(Empty, numHandlers); + } + +Index: tools/clang/lib/AST/Expr.cpp +=================================================================== +--- tools/clang/lib/AST/Expr.cpp (révision 117774) ++++ tools/clang/lib/AST/Expr.cpp (révision 117775) +@@ -257,7 +257,7 @@ + if (TemplateArgs) + Size += ExplicitTemplateArgumentList::sizeFor(*TemplateArgs); + +- void *Mem = Context.Allocate(Size, llvm::alignof<DeclRefExpr>()); ++ void *Mem = Context.Allocate(Size, llvm::alignOf<DeclRefExpr>()); + return new (Mem) DeclRefExpr(Qualifier, QualifierRange, D, NameInfo, + TemplateArgs, T); + } +@@ -271,7 +271,7 @@ + if (NumTemplateArgs) + Size += ExplicitTemplateArgumentList::sizeFor(NumTemplateArgs); + +- void *Mem = Context.Allocate(Size, llvm::alignof<DeclRefExpr>()); ++ void *Mem = Context.Allocate(Size, llvm::alignOf<DeclRefExpr>()); + return new (Mem) DeclRefExpr(EmptyShell()); + } + +@@ -432,7 +432,7 @@ + // any concatenated string tokens. + void *Mem = C.Allocate(sizeof(StringLiteral)+ + sizeof(SourceLocation)*(NumStrs-1), +- llvm::alignof<StringLiteral>()); ++ llvm::alignOf<StringLiteral>()); + StringLiteral *SL = new (Mem) StringLiteral(Ty); + + // OPTIMIZE: could allocate this appended to the StringLiteral. +@@ -452,7 +452,7 @@ + StringLiteral *StringLiteral::CreateEmpty(ASTContext &C, unsigned NumStrs) { + void *Mem = C.Allocate(sizeof(StringLiteral)+ + sizeof(SourceLocation)*(NumStrs-1), +- llvm::alignof<StringLiteral>()); ++ llvm::alignOf<StringLiteral>()); + StringLiteral *SL = new (Mem) StringLiteral(QualType()); + SL->StrData = 0; + SL->ByteLength = 0; +@@ -714,7 +714,7 @@ + if (targs) + Size += ExplicitTemplateArgumentList::sizeFor(*targs); + +- void *Mem = C.Allocate(Size, llvm::alignof<MemberExpr>()); ++ void *Mem = C.Allocate(Size, llvm::alignOf<MemberExpr>()); + MemberExpr *E = new (Mem) MemberExpr(base, isarrow, memberdecl, nameinfo, ty); + + if (hasQualOrFound) { +Index: tools/clang/lib/AST/DeclCXX.cpp +=================================================================== +--- tools/clang/lib/AST/DeclCXX.cpp (révision 117774) ++++ tools/clang/lib/AST/DeclCXX.cpp (révision 117775) +@@ -1057,7 +1057,7 @@ + unsigned NumIndices) { + void *Mem = Context.Allocate(sizeof(CXXBaseOrMemberInitializer) + + sizeof(VarDecl *) * NumIndices, +- llvm::alignof<CXXBaseOrMemberInitializer>()); ++ llvm::alignOf<CXXBaseOrMemberInitializer>()); + return new (Mem) CXXBaseOrMemberInitializer(Context, Member, MemberLoc, + L, Init, R, Indices, NumIndices); + } +Index: tools/clang/lib/Lex/TokenLexer.cpp +=================================================================== +--- tools/clang/lib/Lex/TokenLexer.cpp (révision 117774) ++++ tools/clang/lib/Lex/TokenLexer.cpp (révision 117775) +@@ -287,7 +287,7 @@ + llvm::BumpPtrAllocator &Alloc = PP.getPreprocessorAllocator(); + Token *Res = + static_cast<Token *>(Alloc.Allocate(sizeof(Token)*ResultToks.size(), +- llvm::alignof<Token>())); ++ llvm::alignOf<Token>())); + if (NumTokens) + memcpy(Res, &ResultToks[0], NumTokens*sizeof(Token)); + Tokens = Res; diff --git a/sys-devel/clang/files/clang-2.8-darwin-prefix.patch b/sys-devel/clang/files/clang-2.8-darwin-prefix.patch new file mode 100644 index 000000000000..555b8ee0bcc9 --- /dev/null +++ b/sys-devel/clang/files/clang-2.8-darwin-prefix.patch @@ -0,0 +1,127 @@ +This code looks as if it is written by Apple, lots of assumptions that +only hold for them and their scenario. + +--- tools/clang/lib/Driver/ToolChains.cpp ++++ tools/clang/lib/Driver/ToolChains.cpp +@@ -131,7 +131,7 @@ + GCCVersion[2] = 1; + + // Set up the tool chain paths to match gcc. +- ToolChainDir = "i686-apple-darwin"; ++ ToolChainDir = "@GENTOO_PORTAGE_CHOST@"; + ToolChainDir += llvm::utostr(DarwinVersion[0]); + ToolChainDir += "/"; + ToolChainDir += llvm::utostr(GCCVersion[0]); +@@ -141,9 +141,9 @@ + ToolChainDir += llvm::utostr(GCCVersion[2]); + + // Try the next major version if that tool chain dir is invalid. +- std::string Tmp = "/usr/lib/gcc/" + ToolChainDir; ++ std::string Tmp = "@GENTOO_PORTAGE_EPREFIX@/usr/lib/gcc/" + ToolChainDir; + if (!llvm::sys::Path(Tmp).exists()) { +- std::string Next = "i686-apple-darwin"; ++ std::string Next = "@GENTOO_PORTAGE_CHOST_ARCH@"; + Next += llvm::utostr(DarwinVersion[0] + 1); + Next += "/"; + Next += llvm::utostr(GCCVersion[0]); +@@ -155,7 +155,7 @@ + // Use that if it exists, otherwise hope the user isn't linking. + // + // FIXME: Drop dependency on gcc's tool chain. +- Tmp = "/usr/lib/gcc/" + Next; ++ Tmp = "@GENTOO_PORTAGE_EPREFIX@/usr/lib/gcc/" + Next; + if (llvm::sys::Path(Tmp).exists()) + ToolChainDir = Next; + } +@@ -168,7 +168,7 @@ + Path += "/x86_64"; + getFilePaths().push_back(Path); + +- Path = "/usr/lib/gcc/"; ++ Path = "@GENTOO_PORTAGE_EPREFIX@/usr/lib/gcc/"; + Path += ToolChainDir; + Path += "/x86_64"; + getFilePaths().push_back(Path); +@@ -179,7 +179,7 @@ + Path += ToolChainDir; + getFilePaths().push_back(Path); + +- Path = "/usr/lib/gcc/"; ++ Path = "@GENTOO_PORTAGE_EPREFIX@/usr/lib/gcc/"; + Path += ToolChainDir; + getFilePaths().push_back(Path); + +@@ -188,7 +188,7 @@ + Path += ToolChainDir; + getProgramPaths().push_back(Path); + +- Path = "/usr/libexec/gcc/"; ++ Path = "@GENTOO_PORTAGE_EPREFIX@/usr/libexec/gcc/"; + Path += ToolChainDir; + getProgramPaths().push_back(Path); + +@@ -291,14 +291,14 @@ + + // FIXME: Derive these correctly. + if (getArchName() == "x86_64") { +- CmdArgs.push_back(Args.MakeArgString("-L/usr/lib/gcc/" + ToolChainDir + ++ CmdArgs.push_back(Args.MakeArgString("-L@GENTOO_PORTAGE_EPREFIX@/usr/lib/gcc/" + ToolChainDir + + "/x86_64")); + // Intentionally duplicated for (temporary) gcc bug compatibility. +- CmdArgs.push_back(Args.MakeArgString("-L/usr/lib/gcc/" + ToolChainDir + ++ CmdArgs.push_back(Args.MakeArgString("-L@GENTOO_PORTAGE_EPREFIX@/usr/lib/gcc/" + ToolChainDir + + "/x86_64")); + } + +- CmdArgs.push_back(Args.MakeArgString("-L/usr/lib/" + ToolChainDir)); ++ CmdArgs.push_back(Args.MakeArgString("-L@GENTOO_PORTAGE_EPREFIX@/usr/lib/" + ToolChainDir)); + + Tmp = getDriver().Dir + "/../lib/gcc/" + ToolChainDir; + if (llvm::sys::Path(Tmp).exists()) +@@ -306,18 +306,18 @@ + Tmp = getDriver().Dir + "/../lib/gcc"; + if (llvm::sys::Path(Tmp).exists()) + CmdArgs.push_back(Args.MakeArgString("-L" + Tmp)); +- CmdArgs.push_back(Args.MakeArgString("-L/usr/lib/gcc/" + ToolChainDir)); ++ CmdArgs.push_back(Args.MakeArgString("-L@GENTOO_PORTAGE_EPREFIX@/usr/lib/gcc/" + ToolChainDir)); + // Intentionally duplicated for (temporary) gcc bug compatibility. +- CmdArgs.push_back(Args.MakeArgString("-L/usr/lib/gcc/" + ToolChainDir)); ++ CmdArgs.push_back(Args.MakeArgString("-L@GENTOO_PORTAGE_EPREFIX@/usr/lib/gcc/" + ToolChainDir)); + Tmp = getDriver().Dir + "/../lib/" + ToolChainDir; + if (llvm::sys::Path(Tmp).exists()) + CmdArgs.push_back(Args.MakeArgString("-L" + Tmp)); + Tmp = getDriver().Dir + "/../lib"; + if (llvm::sys::Path(Tmp).exists()) + CmdArgs.push_back(Args.MakeArgString("-L" + Tmp)); +- CmdArgs.push_back(Args.MakeArgString("-L/usr/lib/gcc/" + ToolChainDir + ++ CmdArgs.push_back(Args.MakeArgString("-L@GENTOO_PORTAGE_EPREFIX@/usr/lib/gcc/" + ToolChainDir + + "/../../../" + ToolChainDir)); +- CmdArgs.push_back(Args.MakeArgString("-L/usr/lib/gcc/" + ToolChainDir + ++ CmdArgs.push_back(Args.MakeArgString("-L@GENTOO_PORTAGE_EPREFIX@/usr/lib/gcc/" + ToolChainDir + + "/../../..")); + } + +@@ -386,22 +386,7 @@ + P.eraseComponent(); // .../usr/bin -> ../usr + P.appendComponent("lib"); + P.appendComponent("gcc"); +- switch (getTriple().getArch()) { +- default: +- assert(0 && "Invalid Darwin arch!"); +- case llvm::Triple::x86: +- case llvm::Triple::x86_64: +- P.appendComponent("i686-apple-darwin10"); +- break; +- case llvm::Triple::arm: +- case llvm::Triple::thumb: +- P.appendComponent("arm-apple-darwin10"); +- break; +- case llvm::Triple::ppc: +- case llvm::Triple::ppc64: +- P.appendComponent("powerpc-apple-darwin10"); +- break; +- } ++ P.appendComponent("@GENTOO_PORTAGE_CHOST@"); + P.appendComponent("4.2.1"); + + // Determine the arch specific GCC subdirectory. diff --git a/sys-devel/clang/files/clang-2.8-gcc-4.4.4.patch b/sys-devel/clang/files/clang-2.8-gcc-4.4.4.patch new file mode 100644 index 000000000000..f60d051e9d49 --- /dev/null +++ b/sys-devel/clang/files/clang-2.8-gcc-4.4.4.patch @@ -0,0 +1,16 @@ +Index: tools/clang/lib/Frontend/InitHeaderSearch.cpp +=================================================================== +--- tools/clang/lib/Frontend/InitHeaderSearch.cpp (révision 119347) ++++ tools/clang/lib/Frontend/InitHeaderSearch.cpp (révision 119348) +@@ -745,6 +745,11 @@ + "/usr/lib/gcc/x86_64-pc-linux-gnu/4.4.3/include/g++-v4", + "x86_64-pc-linux-gnu", "32", "", triple); + ++ // Gentoo amd64 gcc 4.4.4 ++ AddGnuCPlusPlusIncludePaths( ++ "/usr/lib/gcc/x86_64-pc-linux-gnu/4.4.4/include/g++-v4", ++ "x86_64-pc-linux-gnu", "32", "", triple); ++ + // Gentoo amd64 llvm-gcc trunk + AddGnuCPlusPlusIncludePaths( + "/usr/lib/llvm-gcc-4.2-9999/include/c++/4.2.1", diff --git a/sys-devel/clang/files/clang-2.9-darwin-prefix.patch b/sys-devel/clang/files/clang-2.9-darwin-prefix.patch new file mode 100644 index 000000000000..8f79e7f6f24e --- /dev/null +++ b/sys-devel/clang/files/clang-2.9-darwin-prefix.patch @@ -0,0 +1,125 @@ +--- tools/clang/lib/Driver/ToolChains.cpp.orig 2011-03-21 22:29:27.000000000 +0100 ++++ tools/clang/lib/Driver/ToolChains.cpp 2011-04-07 10:33:41.771314057 +0200 +@@ -139,7 +139,7 @@ + GCCVersion[2] = 1; + + // Set up the tool chain paths to match gcc. +- ToolChainDir = "i686-apple-darwin"; ++ ToolChainDir = "@GENTOO_PORTAGE_CHOST@"; + ToolChainDir += llvm::utostr(DarwinVersion[0]); + ToolChainDir += "/"; + ToolChainDir += llvm::utostr(GCCVersion[0]); +@@ -149,10 +149,10 @@ + ToolChainDir += llvm::utostr(GCCVersion[2]); + + // Try the next major version if that tool chain dir is invalid. +- std::string Tmp = "/usr/lib/gcc/" + ToolChainDir; ++ std::string Tmp = "@GENTOO_PORTAGE_EPREFIX@/usr/lib/gcc/" + ToolChainDir; + bool Exists; + if (llvm::sys::fs::exists(Tmp, Exists) || Exists) { +- std::string Next = "i686-apple-darwin"; ++ std::string Next = "@GENTOO_PORTAGE_CHOST_ARCH@"; + Next += llvm::utostr(DarwinVersion[0] + 1); + Next += "/"; + Next += llvm::utostr(GCCVersion[0]); +@@ -164,7 +164,7 @@ + // Use that if it exists, otherwise hope the user isn't linking. + // + // FIXME: Drop dependency on gcc's tool chain. +- Tmp = "/usr/lib/gcc/" + Next; ++ Tmp = "@GENTOO_PORTAGE_EPREFIX@/usr/lib/gcc/" + Next; + if (!llvm::sys::fs::exists(Tmp, Exists) && Exists) + ToolChainDir = Next; + } +@@ -177,7 +177,7 @@ + Path += "/x86_64"; + getFilePaths().push_back(Path); + +- Path = "/usr/lib/gcc/"; ++ Path = "@GENTOO_PORTAGE_EPREFIX@/usr/lib/gcc/"; + Path += ToolChainDir; + Path += "/x86_64"; + getFilePaths().push_back(Path); +@@ -188,7 +188,7 @@ + Path += ToolChainDir; + getFilePaths().push_back(Path); + +- Path = "/usr/lib/gcc/"; ++ Path = "@GENTOO_PORTAGE_EPREFIX@/usr/lib/gcc/"; + Path += ToolChainDir; + getFilePaths().push_back(Path); + +@@ -197,7 +197,7 @@ + Path += ToolChainDir; + getProgramPaths().push_back(Path); + +- Path = "/usr/libexec/gcc/"; ++ Path = "@GENTOO_PORTAGE_EPREFIX@/usr/libexec/gcc/"; + Path += ToolChainDir; + getProgramPaths().push_back(Path); + +@@ -300,14 +300,14 @@ + + // FIXME: Derive these correctly. + if (getArchName() == "x86_64") { +- CmdArgs.push_back(Args.MakeArgString("-L/usr/lib/gcc/" + ToolChainDir + ++ CmdArgs.push_back(Args.MakeArgString("-L@GENTOO_PORTAGE_EPREFIX@/usr/lib/gcc/" + ToolChainDir + + "/x86_64")); + // Intentionally duplicated for (temporary) gcc bug compatibility. +- CmdArgs.push_back(Args.MakeArgString("-L/usr/lib/gcc/" + ToolChainDir + ++ CmdArgs.push_back(Args.MakeArgString("-L@GENTOO_PORTAGE_EPREFIX@/usr/lib/gcc/" + ToolChainDir + + "/x86_64")); + } + +- CmdArgs.push_back(Args.MakeArgString("-L/usr/lib/" + ToolChainDir)); ++ CmdArgs.push_back(Args.MakeArgString("-L@GENTOO_PORTAGE_EPREFIX@/usr/lib/" + ToolChainDir)); + + Tmp = getDriver().Dir + "/../lib/gcc/" + ToolChainDir; + bool Exists; +@@ -316,18 +316,18 @@ + Tmp = getDriver().Dir + "/../lib/gcc"; + if (!llvm::sys::fs::exists(Tmp, Exists) && Exists) + CmdArgs.push_back(Args.MakeArgString("-L" + Tmp)); +- CmdArgs.push_back(Args.MakeArgString("-L/usr/lib/gcc/" + ToolChainDir)); ++ CmdArgs.push_back(Args.MakeArgString("-L@GENTOO_PORTAGE_EPREFIX@/usr/lib/gcc/" + ToolChainDir)); + // Intentionally duplicated for (temporary) gcc bug compatibility. +- CmdArgs.push_back(Args.MakeArgString("-L/usr/lib/gcc/" + ToolChainDir)); ++ CmdArgs.push_back(Args.MakeArgString("-L@GENTOO_PORTAGE_EPREFIX@/usr/lib/gcc/" + ToolChainDir)); + Tmp = getDriver().Dir + "/../lib/" + ToolChainDir; + if (!llvm::sys::fs::exists(Tmp, Exists) && Exists) + CmdArgs.push_back(Args.MakeArgString("-L" + Tmp)); + Tmp = getDriver().Dir + "/../lib"; + if (!llvm::sys::fs::exists(Tmp, Exists) && Exists) + CmdArgs.push_back(Args.MakeArgString("-L" + Tmp)); +- CmdArgs.push_back(Args.MakeArgString("-L/usr/lib/gcc/" + ToolChainDir + ++ CmdArgs.push_back(Args.MakeArgString("-L@GENTOO_PORTAGE_EPREFIX@/usr/lib/gcc/" + ToolChainDir + + "/../../../" + ToolChainDir)); +- CmdArgs.push_back(Args.MakeArgString("-L/usr/lib/gcc/" + ToolChainDir + ++ CmdArgs.push_back(Args.MakeArgString("-L@GENTOO_PORTAGE_EPREFIX@/usr/lib/gcc/" + ToolChainDir + + "/../../..")); + } + +@@ -416,22 +416,7 @@ + P.eraseComponent(); // .../usr/bin -> ../usr + P.appendComponent("lib"); + P.appendComponent("gcc"); +- switch (getTriple().getArch()) { +- default: +- assert(0 && "Invalid Darwin arch!"); +- case llvm::Triple::x86: +- case llvm::Triple::x86_64: +- P.appendComponent("i686-apple-darwin10"); +- break; +- case llvm::Triple::arm: +- case llvm::Triple::thumb: +- P.appendComponent("arm-apple-darwin10"); +- break; +- case llvm::Triple::ppc: +- case llvm::Triple::ppc64: +- P.appendComponent("powerpc-apple-darwin10"); +- break; +- } ++ P.appendComponent("@GENTOO_PORTAGE_CHOST@"); + P.appendComponent("4.2.1"); + + // Determine the arch specific GCC subdirectory. diff --git a/sys-devel/clang/files/clang-2.9-gccversions.patch b/sys-devel/clang/files/clang-2.9-gccversions.patch new file mode 100644 index 000000000000..775a9e6b425b --- /dev/null +++ b/sys-devel/clang/files/clang-2.9-gccversions.patch @@ -0,0 +1,12 @@ +--- a/llvm-2.9/tools/clang/lib/Driver/ToolChains.cpp 2011-08-10 15:05:32.969155113 -0400 ++++ a/llvm-2.9/tools/clang/lib/Driver/ToolChains.cpp 2011-08-10 15:06:45.449159147 -0400 +@@ -1449,7 +1449,8 @@ + GccTriple = "i586-suse-linux"; + } + +- const char* GccVersions[] = {"4.5.2", "4.5.1", "4.5", "4.4.5", "4.4.4", ++ const char* GccVersions[] = {"4.6.2", "4.6.1", "4.6", "4.5.3", "4.5.2", ++ "4.5.1", "4.5", "4.4.6", "4.4.5", "4.4.4", + "4.4.3", "4.4", "4.3.4", "4.3.3", "4.3.2", + "4.3", "4.2.4", "4.2.3", "4.2.2", "4.2.1", + "4.2"}; diff --git a/sys-devel/clang/files/clang-3.0-fix_cxx_include_root.patch b/sys-devel/clang/files/clang-3.0-fix_cxx_include_root.patch new file mode 100644 index 000000000000..e1beff3f1615 --- /dev/null +++ b/sys-devel/clang/files/clang-3.0-fix_cxx_include_root.patch @@ -0,0 +1,21 @@ +Bug #387309 + +--- llvm/tools/clang/lib/Driver/ToolChains.cpp.orig 2011-11-09 23:10:04.000000000 +0100 ++++ llvm/tools/clang/lib/Driver/ToolChains.cpp 2011-11-09 23:11:04.000000000 +0100 +@@ -1586,12 +1586,13 @@ + // This is of the form /foo/bar/include/c++/4.5.2/ + if (CxxIncludeRoot.back() == '/') + llvm::sys::path::remove_filename(CxxIncludeRoot); // remove the / ++ llvm::sys::path::remove_filename(CxxIncludeRoot); // remove the g++-v4 ++ llvm::sys::path::remove_filename(CxxIncludeRoot); // remove the include + StringRef Version = llvm::sys::path::filename(CxxIncludeRoot); + llvm::sys::path::remove_filename(CxxIncludeRoot); // remove the version +- llvm::sys::path::remove_filename(CxxIncludeRoot); // remove the c++ +- llvm::sys::path::remove_filename(CxxIncludeRoot); // remove the include ++ llvm::sys::path::remove_filename(CxxIncludeRoot); // remove the ARCH + GccInstallPath = CxxIncludeRoot.str(); +- GccInstallPath.append("/lib/gcc/"); ++ GccInstallPath.append("/"); + GccInstallPath.append(CXX_INCLUDE_ARCH); + GccInstallPath.append("/"); + GccInstallPath.append(Version); diff --git a/sys-devel/clang/files/clang-3.0-freebsd-runtime-gcc-detection.patch b/sys-devel/clang/files/clang-3.0-freebsd-runtime-gcc-detection.patch new file mode 100644 index 000000000000..5c016f551c11 --- /dev/null +++ b/sys-devel/clang/files/clang-3.0-freebsd-runtime-gcc-detection.patch @@ -0,0 +1,20 @@ +diff -upNr a/llvm-3.0.src/tools/clang/lib/Driver/ToolChains.cpp b/llvm-3.0.src/tools/clang/lib/Driver/ToolChains.cpp +--- a/llvm-3.0.src/tools/clang/lib/Driver/ToolChains.cpp 2012-05-23 15:45:01.333127000 -0400 ++++ b/llvm-3.0.src/tools/clang/lib/Driver/ToolChains.cpp 2012-05-23 16:16:26.023642076 -0400 +@@ -1215,6 +1215,16 @@ FreeBSD::FreeBSD(const HostInfo &Host, c + } else { + getFilePaths().push_back("/usr/lib"); + } ++ ++ llvm::OwningPtr<llvm::MemoryBuffer> File; ++ if (!llvm::MemoryBuffer::getFile("/etc/env.d/gcc/config-" + getDriver().DefaultHostTriple, File)) ++ { ++ bool Exists; ++ StringRef Version = File.get()->getBuffer().rsplit('-').second.substr(0,5); ++ const std::string GentooPath = "/usr/lib/gcc/" + getDriver().DefaultHostTriple + "/" + Version.str(); ++ if (!llvm::sys::fs::exists(GentooPath + "/crtbegin.o", Exists) && Exists) ++ getFilePaths().push_back(GentooPath); ++ } + } + + Tool &FreeBSD::SelectTool(const Compilation &C, const JobAction &JA, diff --git a/sys-devel/clang/files/clang-3.0-gentoo-binutils-apple.patch b/sys-devel/clang/files/clang-3.0-gentoo-binutils-apple.patch new file mode 100644 index 000000000000..944ccaf4fa20 --- /dev/null +++ b/sys-devel/clang/files/clang-3.0-gentoo-binutils-apple.patch @@ -0,0 +1,29 @@ +http://llvm.org/bugs/show_bug.cgi?id=8339 +https://bugs.gentoo.org/show_bug.cgi?id=395013 +http://llvm.org/viewvc/llvm-project?view=rev&revision=151612 + +Tweak version detection bit to cope with Gentoo's slightly different +output for ld -v. + +--- autoconf/m4/link_options.m4 ++++ autoconf/m4/link_options.m4 +@@ -10,7 +10,7 @@ + + # Check for ld64. + if (echo "$version_string" | grep -q "ld64"); then +- llvm_cv_link_version=$(echo "$version_string" | sed -e "s#.*ld64-\([^ ]*\)#\1#") ++ llvm_cv_link_version=$(echo "$version_string" | sed -e "s#.*ld64-\([^ ]*\)\( (.*)\)\?#\1#") + else + llvm_cv_link_version=$(echo "$version_string" | sed -e "s#[^0-9]*\([0-9.]*\).*#\1#") + fi +--- configure ++++ configure +@@ -7528,7 +7528,7 @@ + + # Check for ld64. + if (echo "$version_string" | grep -q "ld64"); then +- llvm_cv_link_version=$(echo "$version_string" | sed -e "s#.*ld64-\([^ ]*\)#\1#") ++ llvm_cv_link_version=$(echo "$version_string" | sed -e "s#.*ld64-\([^ ]*\)\( (.*)\)\?#\1#") + else + llvm_cv_link_version=$(echo "$version_string" | sed -e "s#[^0-9]*\([0-9.]*\).*#\1#") + fi diff --git a/sys-devel/clang/files/clang-3.0-linux-runtime-gcc-detection.patch b/sys-devel/clang/files/clang-3.0-linux-runtime-gcc-detection.patch new file mode 100644 index 000000000000..a1f7ce2a98fb --- /dev/null +++ b/sys-devel/clang/files/clang-3.0-linux-runtime-gcc-detection.patch @@ -0,0 +1,43 @@ +diff -upNr a/llvm-3.0.src/tools/clang/lib/Driver/ToolChains.cpp b/llvm-3.0.src/tools/clang/lib/Driver/ToolChains.cpp +--- a/llvm-3.0.src/tools/clang/lib/Driver/ToolChains.cpp 2012-05-23 15:39:01.070411000 -0400 ++++ b/llvm-3.0.src/tools/clang/lib/Driver/ToolChains.cpp 2012-05-23 15:39:22.371785000 -0400 +@@ -1382,6 +1382,7 @@ enum LinuxDistro { + DebianSqueeze, + DebianWheezy, + Exherbo, ++ Gentoo, + RHEL4, + RHEL5, + RHEL6, +@@ -1403,6 +1404,10 @@ enum LinuxDistro { + UnknownDistro + }; + ++static bool IsGentoo(enum LinuxDistro Distro) { ++ return Distro == Gentoo; ++} ++ + static bool IsRedhat(enum LinuxDistro Distro) { + return Distro == Fedora13 || Distro == Fedora14 || + Distro == Fedora15 || Distro == FedoraRawhide || +@@ -1433,7 +1438,9 @@ static LinuxDistro DetectLinuxDistro(llv + SmallVector<StringRef, 8> Lines; + Data.split(Lines, "\n"); + for (unsigned int i = 0, s = Lines.size(); i < s; ++ i) { +- if (Lines[i] == "DISTRIB_CODENAME=hardy") ++ if (Lines[i] == "DISTRIB_ID=\"Gentoo\"") ++ return Gentoo; ++ else if (Lines[i] == "DISTRIB_CODENAME=hardy") + return UbuntuHardy; + else if (Lines[i] == "DISTRIB_CODENAME=intrepid") + return UbuntuIntrepid; +@@ -1597,6 +1604,9 @@ Linux::GCCInstallationDetector::GCCInsta + GccInstallPath.append("/"); + GccInstallPath.append(CXX_INCLUDE_ARCH); + GccInstallPath.append("/"); ++ llvm::OwningPtr<llvm::MemoryBuffer> File; ++ if (!llvm::MemoryBuffer::getFile("/etc/env.d/gcc/config-" + D.DefaultHostTriple, File)) ++ Version = File.get()->getBuffer().rsplit('-').second.substr(0,5); + GccInstallPath.append(Version); + GccParentLibPath = GccInstallPath + "/../../.."; + IsValid = true; diff --git a/sys-devel/clang/files/clang-3.0-recognize-amd-k10-enable-sse4a.patch b/sys-devel/clang/files/clang-3.0-recognize-amd-k10-enable-sse4a.patch new file mode 100644 index 000000000000..90f99abc344a --- /dev/null +++ b/sys-devel/clang/files/clang-3.0-recognize-amd-k10-enable-sse4a.patch @@ -0,0 +1,82 @@ +--- llvm.orig/contrib/llvm/tools/clang/lib/Basic/Targets.cpp 2011/10/22 14:08:43 226633 ++++ llvm/contrib/llvm/tools/clang/lib/Basic/Targets.cpp 2011/10/30 22:20:17 226951 +@@ -1282,6 +1282,7 @@ + CK_K8SSE3, + CK_Opteron, + CK_OpteronSSE3, ++ CK_AMDFAM10, + + /// This specification is deprecated and will be removed in the future. + /// Users should prefer \see CK_K8. +@@ -1381,6 +1382,7 @@ + .Case("k8-sse3", CK_K8SSE3) + .Case("opteron", CK_Opteron) + .Case("opteron-sse3", CK_OpteronSSE3) ++ .Case("amdfam10", CK_AMDFAM10) + .Case("x86-64", CK_x86_64) + .Case("geode", CK_Geode) + .Default(CK_Generic); +@@ -1441,6 +1443,7 @@ + case CK_K8SSE3: + case CK_Opteron: + case CK_OpteronSSE3: ++ case CK_AMDFAM10: + case CK_x86_64: + return true; + } +@@ -1459,12 +1462,10 @@ + Features["ssse3"] = false; + Features["sse41"] = false; + Features["sse42"] = false; ++ Features["sse4a"] = false; + Features["aes"] = false; + Features["avx"] = false; + +- // LLVM does not currently recognize this. +- // Features["sse4a"] = false; +- + // FIXME: This *really* should not be here. + + // X86_64 always has SSE2. +@@ -1561,6 +1562,11 @@ + setFeatureEnabled(Features, "sse3", true); + setFeatureEnabled(Features, "3dnowa", true); + break; ++ case CK_AMDFAM10: ++ setFeatureEnabled(Features, "sse3", true); ++ setFeatureEnabled(Features, "sse4a", true); ++ setFeatureEnabled(Features, "3dnowa", true); ++ break; + case CK_C3_2: + setFeatureEnabled(Features, "mmx", true); + setFeatureEnabled(Features, "sse", true); +@@ -1604,6 +1610,8 @@ + else if (Name == "avx") + Features["avx"] = Features["sse"] = Features["sse2"] = Features["sse3"] = + Features["ssse3"] = Features["sse41"] = Features["sse42"] = true; ++ else if (Name == "sse4a") ++ Features["sse4a"] = true; + } else { + if (Name == "mmx") + Features["mmx"] = Features["3dnow"] = Features["3dnowa"] = false; +@@ -1630,6 +1638,8 @@ + Features["aes"] = false; + else if (Name == "avx") + Features["avx"] = false; ++ else if (Name == "sse4a") ++ Features["sse4a"] = false; + } + + return true; +@@ -1826,6 +1836,11 @@ + Builder.defineMacro("__k8__"); + Builder.defineMacro("__tune_k8__"); + break; ++ case CK_AMDFAM10: ++ Builder.defineMacro("__amdfam10"); ++ Builder.defineMacro("__amdfam10__"); ++ Builder.defineMacro("__tune_amdfam10__"); ++ break; + case CK_Geode: + Builder.defineMacro("__geode"); + Builder.defineMacro("__geode__"); diff --git a/sys-devel/clang/files/clang-3.1-gentoo-freebsd-fix-cxx-paths-v2.patch b/sys-devel/clang/files/clang-3.1-gentoo-freebsd-fix-cxx-paths-v2.patch new file mode 100644 index 000000000000..1053bf3642bc --- /dev/null +++ b/sys-devel/clang/files/clang-3.1-gentoo-freebsd-fix-cxx-paths-v2.patch @@ -0,0 +1,188 @@ +diff --git a/a/llvm-3.1.src/tools/clang/lib/Driver/ToolChains.cpp b/b/llvm-3.1.src/tools/clang/lib/Driver/ToolChains.cpp +index 1e282f2..1d6835b 100644 +--- a/a/llvm-3.1.src/tools/clang/lib/Driver/ToolChains.cpp ++++ b/b/llvm-3.1.src/tools/clang/lib/Driver/ToolChains.cpp +@@ -2305,6 +2305,162 @@ void Linux::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs, + } + } + ++void FreeBSD::AddClangSystemIncludeArgs(const ArgList &DriverArgs, ++ ArgStringList &CC1Args) const { ++ const Driver &D = getDriver(); ++ ++ if (DriverArgs.hasArg(options::OPT_nostdinc)) ++ return; ++ ++ if (!DriverArgs.hasArg(options::OPT_nostdlibinc)) ++ addSystemInclude(DriverArgs, CC1Args, D.SysRoot + "/usr/local/include"); ++ ++ if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) { ++ llvm::sys::Path P(D.ResourceDir); ++ P.appendComponent("include"); ++ addSystemInclude(DriverArgs, CC1Args, P.str()); ++ } ++ ++ if (DriverArgs.hasArg(options::OPT_nostdlibinc)) ++ return; ++ ++ // Check for configure-time C include directories. ++ StringRef CIncludeDirs(C_INCLUDE_DIRS); ++ if (CIncludeDirs != "") { ++ SmallVector<StringRef, 5> dirs; ++ CIncludeDirs.split(dirs, ":"); ++ for (SmallVectorImpl<StringRef>::iterator I = dirs.begin(), E = dirs.end(); ++ I != E; ++I) { ++ StringRef Prefix = llvm::sys::path::is_absolute(*I) ? D.SysRoot : ""; ++ addExternCSystemInclude(DriverArgs, CC1Args, Prefix + *I); ++ } ++ return; ++ } ++ ++ // Lacking those, try to detect the correct set of system includes for the ++ // target triple. ++ ++ // Implement generic Debian multiarch support. ++ const StringRef X86_64MultiarchIncludeDirs[] = { ++ "/usr/include/x86_64-linux-gnu", ++ ++ // FIXME: These are older forms of multiarch. It's not clear that they're ++ // in use in any released version of Debian, so we should consider ++ // removing them. ++ "/usr/include/i686-linux-gnu/64", ++ "/usr/include/i486-linux-gnu/64" ++ }; ++ const StringRef X86MultiarchIncludeDirs[] = { ++ "/usr/include/i386-linux-gnu", ++ ++ // FIXME: These are older forms of multiarch. It's not clear that they're ++ // in use in any released version of Debian, so we should consider ++ // removing them. ++ "/usr/include/x86_64-linux-gnu/32", ++ "/usr/include/i686-linux-gnu", ++ "/usr/include/i486-linux-gnu" ++ }; ++ const StringRef ARMMultiarchIncludeDirs[] = { ++ "/usr/include/arm-linux-gnueabi" ++ }; ++ const StringRef MIPSMultiarchIncludeDirs[] = { ++ "/usr/include/mips-linux-gnu" ++ }; ++ const StringRef MIPSELMultiarchIncludeDirs[] = { ++ "/usr/include/mipsel-linux-gnu" ++ }; ++ const StringRef PPCMultiarchIncludeDirs[] = { ++ "/usr/include/powerpc-linux-gnu" ++ }; ++ const StringRef PPC64MultiarchIncludeDirs[] = { ++ "/usr/include/powerpc64-linux-gnu" ++ }; ++ ArrayRef<StringRef> MultiarchIncludeDirs; ++ if (getTriple().getArch() == llvm::Triple::x86_64) { ++ MultiarchIncludeDirs = X86_64MultiarchIncludeDirs; ++ } else if (getTriple().getArch() == llvm::Triple::x86) { ++ MultiarchIncludeDirs = X86MultiarchIncludeDirs; ++ } else if (getTriple().getArch() == llvm::Triple::arm) { ++ MultiarchIncludeDirs = ARMMultiarchIncludeDirs; ++ } else if (getTriple().getArch() == llvm::Triple::mips) { ++ MultiarchIncludeDirs = MIPSMultiarchIncludeDirs; ++ } else if (getTriple().getArch() == llvm::Triple::mipsel) { ++ MultiarchIncludeDirs = MIPSELMultiarchIncludeDirs; ++ } else if (getTriple().getArch() == llvm::Triple::ppc) { ++ MultiarchIncludeDirs = PPCMultiarchIncludeDirs; ++ } else if (getTriple().getArch() == llvm::Triple::ppc64) { ++ MultiarchIncludeDirs = PPC64MultiarchIncludeDirs; ++ } ++ for (ArrayRef<StringRef>::iterator I = MultiarchIncludeDirs.begin(), ++ E = MultiarchIncludeDirs.end(); ++ I != E; ++I) { ++ if (llvm::sys::fs::exists(D.SysRoot + *I)) { ++ addExternCSystemInclude(DriverArgs, CC1Args, D.SysRoot + *I); ++ break; ++ } ++ } ++ ++ if (getTriple().getOS() == llvm::Triple::RTEMS) ++ return; ++ ++ // Add an include of '/include' directly. This isn't provided by default by ++ // system GCCs, but is often used with cross-compiling GCCs, and harmless to ++ // add even when Clang is acting as-if it were a system compiler. ++ addExternCSystemInclude(DriverArgs, CC1Args, D.SysRoot + "/include"); ++ ++ addExternCSystemInclude(DriverArgs, CC1Args, D.SysRoot + "/usr/include"); ++} ++ ++/// \brief Helper to add the thre variant paths for a libstdc++ installation. ++/*static*/ bool FreeBSD::addLibStdCXXIncludePaths(Twine Base, Twine TargetArchDir, ++ const ArgList &DriverArgs, ++ ArgStringList &CC1Args) { ++ if (!llvm::sys::fs::exists(Base)) ++ return false; ++ addSystemInclude(DriverArgs, CC1Args, Base); ++ addSystemInclude(DriverArgs, CC1Args, Base + "/" + TargetArchDir); ++ addSystemInclude(DriverArgs, CC1Args, Base + "/backward"); ++ return true; ++} ++ ++void FreeBSD::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs, ++ ArgStringList &CC1Args) const { ++ if (DriverArgs.hasArg(options::OPT_nostdlibinc) || ++ DriverArgs.hasArg(options::OPT_nostdincxx)) ++ return; ++ ++ // Check if libc++ has been enabled and provide its include paths if so. ++ if (GetCXXStdlibType(DriverArgs) == ToolChain::CST_Libcxx) { ++ // libc++ is always installed at a fixed path on Linux currently. ++ addSystemInclude(DriverArgs, CC1Args, ++ getDriver().SysRoot + "/usr/include/c++/v1"); ++ return; ++ } ++ ++ // We need a detected GCC installation on Linux to provide libstdc++'s ++ // headers. We handled the libc++ case above. ++ if (!GCCInstallation.isValid()) ++ return; ++ ++ // By default, look for the C++ headers in an include directory adjacent to ++ // the lib directory of the GCC installation. Note that this is expect to be ++ // equivalent to '/usr/include/c++/X.Y' in almost all cases. ++ StringRef LibDir = GCCInstallation.getParentLibPath(); ++ StringRef InstallDir = GCCInstallation.getInstallPath(); ++ StringRef Version = GCCInstallation.getVersion(); ++ if (!addLibStdCXXIncludePaths(LibDir + "/../include/c++/" + Version, ++ (GCCInstallation.getTriple().str() + ++ GCCInstallation.getMultiarchSuffix()), ++ DriverArgs, CC1Args)) { ++ // Gentoo is weird and places its headers inside the GCC install, so if the ++ // first attempt to find the headers fails, try this pattern. ++ addLibStdCXXIncludePaths(InstallDir + "/include/g++-v4", ++ (GCCInstallation.getTriple().str() + ++ GCCInstallation.getMultiarchSuffix()), ++ DriverArgs, CC1Args); ++ } ++} ++ + /// DragonFly - DragonFly tool chain which can call as(1) and ld(1) directly. + + DragonFly::DragonFly(const Driver &D, const llvm::Triple& Triple, const ArgList &Args) +diff --git a/a/llvm-3.1.src/tools/clang/lib/Driver/ToolChains.h b/b/llvm-3.1.src/tools/clang/lib/Driver/ToolChains.h +index eaa6be1..bba891e 100644 +--- a/a/llvm-3.1.src/tools/clang/lib/Driver/ToolChains.h ++++ b/b/llvm-3.1.src/tools/clang/lib/Driver/ToolChains.h +@@ -489,6 +489,16 @@ public: + + virtual Tool &SelectTool(const Compilation &C, const JobAction &JA, + const ActionList &Inputs) const; ++ ++ virtual void AddClangSystemIncludeArgs(const ArgList &DriverArgs, ++ ArgStringList &CC1Args) const; ++ virtual void AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs, ++ ArgStringList &CC1Args) const; ++ ++private: ++ static bool addLibStdCXXIncludePaths(Twine Base, Twine TargetArchDir, ++ const ArgList &DriverArgs, ++ ArgStringList &CC1Args); + }; + + class LLVM_LIBRARY_VISIBILITY NetBSD : public Generic_ELF { diff --git a/sys-devel/clang/files/clang-3.1-gentoo-freebsd-fix-lib-path.patch b/sys-devel/clang/files/clang-3.1-gentoo-freebsd-fix-lib-path.patch new file mode 100644 index 000000000000..702606f8a0ca --- /dev/null +++ b/sys-devel/clang/files/clang-3.1-gentoo-freebsd-fix-lib-path.patch @@ -0,0 +1,20 @@ +This patch causes problem for multilib: GCCInstallation.getInstallPath() is +empty in that case and 'clang -m32 foo.c' will put a -L with nothing after it +but the .o file generated, effectively dropping it. +With recent freebsd-lib versions, it is only needed for c++ with libstdc++, +which is actually broken because clang++ cannot find the headers. it is fine +with clang++ -stdlib=libc++. +aballier@g.o + +diff -upNr a/llvm-3.1.src/tools/clang/lib/Driver/ToolChains.cpp b/llvm-3.1.src/tools/clang/lib/Driver/ToolChains.cpp +--- a/llvm-3.1.src/tools/clang/lib/Driver/ToolChains.cpp 2012-05-24 04:08:48.393073000 -0400 ++++ b/llvm-3.1.src/tools/clang/lib/Driver/ToolChains.cpp 2012-05-24 04:11:38.113153421 -0400 +@@ -1635,6 +1635,8 @@ FreeBSD::FreeBSD(const Driver &D, const + getFilePaths().push_back(getDriver().SysRoot + "/usr/lib32"); + else + getFilePaths().push_back(getDriver().SysRoot + "/usr/lib"); ++ ++ getFilePaths().push_back(GCCInstallation.getInstallPath()); + } + + Tool &FreeBSD::SelectTool(const Compilation &C, const JobAction &JA, diff --git a/sys-devel/clang/files/clang-3.1-gentoo-runtime-gcc-detection-v3.patch b/sys-devel/clang/files/clang-3.1-gentoo-runtime-gcc-detection-v3.patch new file mode 100644 index 000000000000..49f108533404 --- /dev/null +++ b/sys-devel/clang/files/clang-3.1-gentoo-runtime-gcc-detection-v3.patch @@ -0,0 +1,29 @@ +diff -upNr a/llvm-3.1.src/tools/clang/lib/Driver/ToolChains.cpp b/llvm-3.1.src/tools/clang/lib/Driver/ToolChains.cpp +--- a/llvm-3.1.src/tools/clang/lib/Driver/ToolChains.cpp 2012-05-24 03:32:31.593191000 -0400 ++++ b/llvm-3.1.src/tools/clang/lib/Driver/ToolChains.cpp 2012-05-24 03:38:31.733163513 -0400 +@@ -1145,6 +1145,25 @@ Generic_GCC::GCCInstallationDetector::GC + Prefixes.push_back(D.InstalledDir + "/.."); + } + ++ llvm::OwningPtr<llvm::MemoryBuffer> File; ++ for (unsigned k = 0, ke = CandidateTripleAliases.size(); k < ke; ++k) { ++ if (!llvm::MemoryBuffer::getFile(D.SysRoot + "/etc/env.d/gcc/config-" + CandidateTripleAliases[k].str(), File)) ++ { ++ bool Exists; ++ const std::string VersionText = File.get()->getBuffer().rsplit('-').second.substr(0,5).str(); ++ const std::string GentooPath = D.SysRoot + "/usr/lib/gcc/" + CandidateTripleAliases[k].str() + "/" + VersionText; ++ if (!llvm::sys::fs::exists(GentooPath + "/crtbegin.o", Exists) && Exists) ++ { ++ Version = GCCVersion::Parse(VersionText); ++ GCCInstallPath = GentooPath; ++ GCCParentLibPath = GCCInstallPath + "/../../.."; ++ GCCTriple.setTriple(CandidateTripleAliases[k]); ++ IsValid = true; ++ return; ++ } ++ } ++ } ++ + // Loop over the various components which exist and select the best GCC + // installation available. GCC installs are ranked by version number. + Version = GCCVersion::Parse("0.0.0"); diff --git a/sys-devel/clang/files/clang-3.1-increase-parser-recursion-limit.patch b/sys-devel/clang/files/clang-3.1-increase-parser-recursion-limit.patch new file mode 100644 index 000000000000..79f4f9f07871 --- /dev/null +++ b/sys-devel/clang/files/clang-3.1-increase-parser-recursion-limit.patch @@ -0,0 +1,15 @@ +Backported from r155737. + +diff --git a/llvm-3.1.src/tools/clang/include/clang/Parse/Parser.h b/llvm-3.1.src/tools/clang/include/clang/Parse/Parser.h +index 0ae5dc8..2a7464f 100644 +--- a/llvm-3.1.src/tools/clang/include/clang/Parse/Parser.h ++++ b/llvm-3.1.src/tools/clang/include/clang/Parse/Parser.h +@@ -451,7 +451,7 @@ private: + } + } + +- enum { MaxDepth = 256 }; ++ enum { MaxDepth = 512 }; + + bool diagnoseOverflow(); + bool diagnoseMissingClose(); diff --git a/sys-devel/clang/metadata.xml b/sys-devel/clang/metadata.xml new file mode 100644 index 000000000000..466ad974778a --- /dev/null +++ b/sys-devel/clang/metadata.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> +<pkgmetadata> + <maintainer> + <email>clang@gentoo.org</email> + <name>Gentoo clang support project</name> + </maintainer> + <longdescription>The goal of the Clang project is to create a new C, C++, Objective C and Objective C++ front-end for the LLVM compiler. + +Features and Goals + +Some of the goals for the project include the following: + +End-User Features: +Fast compiles and low memory use +Expressive diagnostics +GCC compatibility +Utility and Applications: + +Modular library based architecture +Support diverse clients (refactoring, static analysis, code generation, etc) +Allow tight integration with IDEs +Use the LLVM BSD License +Internal Design and Implementation: + +A real-world, production quality compiler +A simple and hackable code base +A single unified parser for C, Objective C, C++, and Objective C++ +Conformance with C/C++/ObjC and their variants</longdescription> + <use> + <flag name='multitarget'>Build all host targets (default: host only)</flag> + <flag name='static-analyzer'>Install the Clang static analyzer</flag> + <flag name='system-cxx-headers'>By default, clang++ searchs for C++ headers in a series of hardcoded paths. Enabling this flag will force it to use the active gcc profile ones</flag> + </use> +</pkgmetadata> |