diff options
author | 2012-06-07 00:27:56 +0000 | |
---|---|---|
committer | 2012-06-07 00:27:56 +0000 | |
commit | 4c709d6332fefc2126626990eb7ec5d89da5fe23 (patch) | |
tree | 893436acc20eb1297fcd8db2e42c99063bec6d14 /sys-devel | |
parent | Fix some repoman complains (diff) | |
download | gentoo-2-4c709d6332fefc2126626990eb7ec5d89da5fe23.tar.gz gentoo-2-4c709d6332fefc2126626990eb7ec5d89da5fe23.tar.bz2 gentoo-2-4c709d6332fefc2126626990eb7ec5d89da5fe23.zip |
Fix bug #417913
(Portage version: 2.1.10.49/cvs/Linux x86_64)
Diffstat (limited to 'sys-devel')
-rw-r--r-- | sys-devel/clang/ChangeLog | 10 | ||||
-rw-r--r-- | sys-devel/clang/clang-3.1-r4.ebuild (renamed from sys-devel/clang/clang-3.1-r3.ebuild) | 11 | ||||
-rw-r--r-- | sys-devel/clang/files/clang-3.1-gentoo-freebsd-fix-cxx-paths-v2.patch | 188 | ||||
-rw-r--r-- | sys-devel/clang/files/clang-3.1-gentoo-runtime-gcc-detection-v3.patch (renamed from sys-devel/clang/files/clang-3.1-gentoo-runtime-gcc-detection-v2.patch) | 5 |
4 files changed, 204 insertions, 10 deletions
diff --git a/sys-devel/clang/ChangeLog b/sys-devel/clang/ChangeLog index ef49ef765adc..06aa6bb173fc 100644 --- a/sys-devel/clang/ChangeLog +++ b/sys-devel/clang/ChangeLog @@ -1,6 +1,14 @@ # ChangeLog for sys-devel/clang # Copyright 1999-2012 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/sys-devel/clang/ChangeLog,v 1.69 2012/06/05 02:03:46 ryao Exp $ +# $Header: /var/cvsroot/gentoo-x86/sys-devel/clang/ChangeLog,v 1.70 2012/06/07 00:27:55 ryao Exp $ + +*clang-3.1-r4 (07 Jun 2012) + + 07 Jun 2012; Richard Yao <ryao@gentoo.org> +clang-3.1-r4.ebuild, + +files/clang-3.1-gentoo-freebsd-fix-cxx-paths-v2.patch, + +files/clang-3.1-gentoo-runtime-gcc-detection-v3.patch, -clang-3.1-r3.ebuild, + -files/clang-3.1-gentoo-runtime-gcc-detection-v2.patch: + Fix bug #417913 *clang-3.1-r3 (05 Jun 2012) diff --git a/sys-devel/clang/clang-3.1-r3.ebuild b/sys-devel/clang/clang-3.1-r4.ebuild index 33daa251a623..ff132f889baa 100644 --- a/sys-devel/clang/clang-3.1-r3.ebuild +++ b/sys-devel/clang/clang-3.1-r4.ebuild @@ -1,6 +1,6 @@ # Copyright 1999-2012 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/sys-devel/clang/clang-3.1-r3.ebuild,v 1.1 2012/06/05 02:03:46 ryao Exp $ +# $Header: /var/cvsroot/gentoo-x86/sys-devel/clang/clang-3.1-r4.ebuild,v 1.1 2012/06/07 00:27:55 ryao Exp $ EAPI=4 @@ -74,17 +74,14 @@ src_prepare() { 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, #417913, #418141 - epatch "${FILESDIR}"/${P}-gentoo-runtime-gcc-detection-v2.patch + # 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.patch - - # Fix regression that prevents Clang from building itself on Linux, bug #417537 - epatch "${FILESDIR}"/${P}-gentoo-linux-fix-cxx-include.patch + 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 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-runtime-gcc-detection-v2.patch b/sys-devel/clang/files/clang-3.1-gentoo-runtime-gcc-detection-v3.patch index 47d554357bd8..49f108533404 100644 --- a/sys-devel/clang/files/clang-3.1-gentoo-runtime-gcc-detection-v2.patch +++ b/sys-devel/clang/files/clang-3.1-gentoo-runtime-gcc-detection-v3.patch @@ -1,11 +1,11 @@ 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,24 @@ Generic_GCC::GCCInstallationDetector::GC +@@ -1145,6 +1145,25 @@ Generic_GCC::GCCInstallationDetector::GC Prefixes.push_back(D.InstalledDir + "/.."); } -+ llvm::OwningPtr<llvm::MemoryBuffer> File; ++ 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)) + { @@ -17,6 +17,7 @@ diff -upNr a/llvm-3.1.src/tools/clang/lib/Driver/ToolChains.cpp b/llvm-3.1.src/t + Version = GCCVersion::Parse(VersionText); + GCCInstallPath = GentooPath; + GCCParentLibPath = GCCInstallPath + "/../../.."; ++ GCCTriple.setTriple(CandidateTripleAliases[k]); + IsValid = true; + return; + } |