[cfe-commits] r83594 - in /cfe/trunk: include/clang/Frontend/InitHeaderSearch.h lib/Frontend/InitHeaderSearch.cpp tools/clang-cc/clang-cc.cpp
Axel Naumann
Axel.Naumann at cern.ch
Fri Oct 9 00:13:41 PDT 2009
Hi,
could you apply attached patch, so I can pass a const triple& to
AddDefaultSystemIncludePaths()?
Cheers, Axel.
Mike Stump wrote on 10/09/2009 01:29 AM:
> Author: mrs
> Date: Thu Oct 8 18:29:47 2009
> New Revision: 83594
>
> URL: http://llvm.org/viewvc/llvm-project?rev=83594&view=rev
> Log:
> Set up include paths for VC++ and Cygwin headers, along with the
> existing MinGW headers, plus the newer 4.4.0 version. Patch by John
> Thompson.
>
> Modified:
> cfe/trunk/include/clang/Frontend/InitHeaderSearch.h
> cfe/trunk/lib/Frontend/InitHeaderSearch.cpp
> cfe/trunk/tools/clang-cc/clang-cc.cpp
>
> Modified: cfe/trunk/include/clang/Frontend/InitHeaderSearch.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/InitHeaderSearch.h?rev=83594&r1=83593&r2=83594&view=diff
>
> ==============================================================================
> --- cfe/trunk/include/clang/Frontend/InitHeaderSearch.h (original)
> +++ cfe/trunk/include/clang/Frontend/InitHeaderSearch.h Thu Oct 8 18:29:47 2009
> @@ -16,6 +16,7 @@
>
> #include "clang/Lex/DirectoryLookup.h"
> #include "llvm/ADT/StringRef.h"
> +#include "llvm/ADT/Triple.h"
> #include <string>
> #include <vector>
>
> @@ -66,7 +67,7 @@
>
> /// AddDefaultSystemIncludePaths - Adds the default system include paths so
> /// that e.g. stdio.h is found.
> - void AddDefaultSystemIncludePaths(const LangOptions &Lang);
> + void AddDefaultSystemIncludePaths(const LangOptions &Lang, llvm::Triple &triple);
>
> /// Realize - Merges all search path lists into one list and send it to
> /// HeaderSearch.
>
> Modified: cfe/trunk/lib/Frontend/InitHeaderSearch.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/InitHeaderSearch.cpp?rev=83594&r1=83593&r2=83594&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Frontend/InitHeaderSearch.cpp (original)
> +++ cfe/trunk/lib/Frontend/InitHeaderSearch.cpp Thu Oct 8 18:29:47 2009
> @@ -99,100 +99,269 @@
> }
>
> void InitHeaderSearch::AddGnuCPlusPlusIncludePaths(std::string base,
> - std::string arch) {
> + std::string arch) {
> AddPath(base, System, true, false, false);
> AddPath(base + "/" + arch, System, true, false, false);
> AddPath(base + "/backward", System, true, false, false);
> }
>
> -void InitHeaderSearch::AddDefaultSystemIncludePaths(const LangOptions &Lang) {
> - // FIXME: temporary hack: hard-coded paths.
> - // FIXME: get these from the target?
> +#if defined(LLVM_ON_WIN32)
>
> -#ifdef LLVM_ON_WIN32
> - if (Lang.CPlusPlus) {
> - // Mingw32 GCC version 4
> - AddPath("c:/mingw/lib/gcc/mingw32/4.3.0/include/c++",
> - System, true, false, false);
> - AddPath("c:/mingw/lib/gcc/mingw32/4.3.0/include/c++/mingw32",
> - System, true, false, false);
> - AddPath("c:/mingw/lib/gcc/mingw32/4.3.0/include/c++/backward",
> - System, true, false, false);
> +#if 0 // Yikes! Can't include windows.h.
> + #if LLVM_ON_WIN32
> + #define WIN32_LEAN_AND_MEAN 1
> + #include <windows.h>
> + #endif
> +
> + // Read Windows registry string.
> +bool getWindowsRegistryString(const char *keyPath, const char *valueName,
> + char *value, size_t maxLength) {
> + HKEY hRootKey = NULL;
> + HKEY hKey = NULL;
> + const char* subKey = NULL;
> + DWORD valueType;
> + DWORD valueSize = maxLength - 1;
> + bool returnValue = false;
> + if (strncmp(keyPath, "HKEY_CLASSES_ROOT\\", 18) == 0) {
> + hRootKey = HKEY_CLASSES_ROOT;
> + subKey = keyPath + 18;
> + }
> + else if (strncmp(keyPath, "HKEY_USERS\\", 11) == 0) {
> + hRootKey = HKEY_USERS;
> + subKey = keyPath + 11;
> + }
> + else if (strncmp(keyPath, "HKEY_LOCAL_MACHINE\\", 19) == 0) {
> + hRootKey = HKEY_LOCAL_MACHINE;
> + subKey = keyPath + 19;
> + }
> + else if (strncmp(keyPath, "HKEY_CURRENT_USER\\", 18) == 0) {
> + hRootKey = HKEY_CURRENT_USER;
> + subKey = keyPath + 18;
> + }
> + else
> + return(false);
> + long lResult = RegOpenKeyEx(hRootKey, subKey, 0, KEY_READ, &hKey);
> + if (lResult == ERROR_SUCCESS) {
> + lResult = RegQueryValueEx(hKey, valueName, NULL, &valueType, (LPBYTE)value,
> + &valueSize);
> + if (lResult == ERROR_SUCCESS)
> + returnValue = true;
> + RegCloseKey(kKey);
> }
> + return(returnValue);
> +}
>
> - // Mingw32 GCC version 4
> - AddPath("C:/mingw/include", System, false, false, false);
> + // Get Visual Studio installation directory.
> +bool getVisualStudioDir(std::string &path) {
> + char vs80comntools[256];
> + char vs90comntools[256];
> + const char* vscomntools = NULL;
> + bool has80 = getWindowsRegistryString(
> + "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0",
> + "InstallDir", vs80comntools, sizeof(vs80comntools) - 1);
> + bool has90 = getWindowsRegistryString(
> + "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\9.0",
> + "InstallDir", vs90comntools, sizeof(vs90comntools) - 1);
> + // If we have both vc80 and vc90, pick version we were compiled with.
> + if (has80 && has90) {
> + #ifdef _MSC_VER
> + #if (_MSC_VER >= 1500) // VC90
> + vscomntools = vs90comntools;
> + #elif (_MSC_VER == 1400) // VC80
> + vscomntools = vs80comntools;
> + #else
> + vscomntools = vs90comntools;
> + #endif
> + #else
> + vscomntools = vs90comntools;
> + #endif
> + }
> + else if (has90)
> + vscomntools = vs90comntools;
> + else if (has80)
> + vscomntools = vs80comntools;
> + else
> + return(false);
> + char *p = strstr(vscomntools, "\\Common7\\ide");
> + if (p)
> + *p = '\0';
> + path = vscomntools;
> + return(true);
> +}
> #else
>
> - if (Lang.CPlusPlus) {
> - AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.2.1",
> - "i686-apple-darwin10");
> -
> - AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.0.0", "i686-apple-darwin8");
> -
> - // Ubuntu 7.10 - Gutsy Gibbon
> - AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.1.3", "i486-linux-gnu");
> -
> - // Ubuntu 9.04
> - AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3.3", "x86_64-linux-gnu");
> -
> - // Fedora 8
> - AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.1.2", "i386-redhat-linux");
> -
> - // Fedora 9
> - AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3.0", "i386-redhat-linux");
> -
> - // Fedora 10
> - AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3.2", "i386-redhat-linux");
> -
> - // openSUSE 11.1
> - AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3", "i586-suse-linux");
> - AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3", "x86_64-suse-linux");
> -
> - // openSUSE 11.2
> - AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.4", "i586-suse-linux");
> - AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.4", "x86_64-suse-linux");
> -
> - // Arch Linux 2008-06-24
> - AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3.1", "i686-pc-linux-gnu");
> - AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3.1",
> - "x86_64-unknown-linux-gnu");
> -
> - // Gentoo x86 2009.0 stable
> - AddGnuCPlusPlusIncludePaths(
> - "/usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4",
> - "i686-pc-linux-gnu");
> -
> - // Gentoo x86 2008.0 stable
> - AddGnuCPlusPlusIncludePaths(
> - "/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/include/g++-v4",
> - "i686-pc-linux-gnu");
> + // Get Visual Studio installation directory.
> +bool getVisualStudioDir(std::string &path) {
> + const char* vs90comntools = getenv("VS90COMNTOOLS");
> + const char* vs80comntools = getenv("VS80COMNTOOLS");
> + const char* vscomntools = NULL;
> + // If we have both vc80 and vc90, pick version we were compiled with.
> + if (vs90comntools && vs80comntools) {
> + #if (_MSC_VER >= 1500) // VC90
> + vscomntools = vs90comntools;
> + #elif (_MSC_VER == 1400) // VC80
> + vscomntools = vs80comntools;
> + #else
> + vscomntools = vs90comntools;
> + #endif
> + }
> + else if (vs90comntools)
> + vscomntools = vs90comntools;
> + else if (vs80comntools)
> + vscomntools = vs80comntools;
> + else
> + return(false);
> + char *p = (char*)strstr(vscomntools, "\\Common7\\Tools");
> + if (p)
> + *p = '\0';
> + path = vscomntools;
> + return(true);
> +}
> +#endif
>
> - // Ubuntu 8.10
> - AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3", "i486-pc-linux-gnu");
> +#endif // LLVM_ON_WIN32
>
> - // Gentoo amd64 stable
> - AddGnuCPlusPlusIncludePaths(
> - "/usr/lib/gcc/x86_64-pc-linux-gnu/4.1.2/include/g++-v4",
> - "i686-pc-linux-gnu");
> +void InitHeaderSearch::AddDefaultSystemIncludePaths(const LangOptions &Lang,
> + llvm::Triple &triple) {
> + // FIXME: temporary hack: hard-coded paths.
> + llvm::Triple::OSType os = triple.getOS();
>
> - // DragonFly
> - AddPath("/usr/include/c++/4.1", System, true, false, false);
> + switch (os) {
> + case llvm::Triple::Win32:
> + {
> + #if defined(_MSC_VER)
> + std::string VSDir;
> + if (getVisualStudioDir(VSDir)) {
> + VSDir += "\\VC\\include";
> + AddPath(VSDir, System, false, false, false);
> + }
> + else {
> + // Default install paths.
> + AddPath("C:\\Program Files\\Microsoft Visual Studio 9.0\\VC\\include",
> + System, false, false, false);
> + AddPath("C:\\Program Files\\Microsoft Visual Studio 8\\VC\\include",
> + System, false, false, false);
> + // For some clang developers.
> + AddPath("G:\\Program Files\\Microsoft Visual Studio 9.0\\VC\\include",
> + System, false, false, false);
> + }
> + #else
> + // Default install paths.
> + AddPath("/Program Files/Microsoft Visual Studio 9.0/VC/include",
> + System, false, false, false);
> + AddPath("/Program Files/Microsoft Visual Studio 8/VC/include",
> + System, false, false, false);
> + #endif
> + }
> + break;
> + case llvm::Triple::Cygwin:
> + if (Lang.CPlusPlus) {
> + AddPath("/lib/gcc/i686-pc-cygwin/3.4.4/include", System, false, false,
> + false);
> + AddPath("/lib/gcc/i686-pc-cygwin/3.4.4/include/c++", System, false, false,
> + false);
> + }
> + AddPath("/usr/include", System, false, false, false);
> + break;
> + case llvm::Triple::MinGW32:
> + case llvm::Triple::MinGW64:
> + if (Lang.CPlusPlus) {
> + // Try gcc 4.4.0
> + AddPath("c:/mingw/lib/gcc/mingw32/4.4.0/include/c++",
> + System, true, false, false);
> + AddPath("c:/mingw/lib/gcc/mingw32/4.4.0/include/c++/mingw32",
> + System, true, false, false);
> + AddPath("c:/mingw/lib/gcc/mingw32/4.4.0/include/c++/backward",
> + System, true, false, false);
> + // Try gcc 4.3.0
> + AddPath("c:/mingw/lib/gcc/mingw32/4.3.0/include/c++",
> + System, true, false, false);
> + AddPath("c:/mingw/lib/gcc/mingw32/4.3.0/include/c++/mingw32",
> + System, true, false, false);
> + AddPath("c:/mingw/lib/gcc/mingw32/4.3.0/include/c++/backward",
> + System, true, false, false);
> + }
> + AddPath("c:/mingw/include", System, true, false, false);
> + break;
> + default:
> + if (Lang.CPlusPlus) {
> + switch (os) {
> + case llvm::Triple::Darwin:
> + AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.2.1",
> + "i686-apple-darwin10");
> + AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.0.0",
> + "i686-apple-darwin8");
> + break;
> + case llvm::Triple::Linux:
> + // Ubuntu 7.10 - Gutsy Gibbon
> + AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.1.3",
> + "i486-linux-gnu");
> + // Ubuntu 9.04
> + AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3.3",
> + "x86_64-linux-gnu");
> + // Fedora 8
> + AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.1.2",
> + "i386-redhat-linux");
> + // Fedora 9
> + AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3.0",
> + "i386-redhat-linux");
> + // Fedora 10
> + AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3.2",
> + "i386-redhat-linux");
> + // openSUSE 11.1
> + AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3",
> + "i586-suse-linux");
> + AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3",
> + "x86_64-suse-linux");
> + // openSUSE 11.2
> + AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.4",
> + "i586-suse-linux");
> + AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.4",
> + "x86_64-suse-linux");
> + // Arch Linux 2008-06-24
> + AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3.1",
> + "i686-pc-linux-gnu");
> + AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3.1",
> + "x86_64-unknown-linux-gnu");
> + // Gentoo x86 2009.0 stable
> + AddGnuCPlusPlusIncludePaths(
> + "/usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4",
> + "i686-pc-linux-gnu");
> + // Gentoo x86 2008.0 stable
> + AddGnuCPlusPlusIncludePaths(
> + "/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/include/g++-v4",
> + "i686-pc-linux-gnu");
> + // Ubuntu 8.10
> + AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3",
> + "i486-pc-linux-gnu");
> + // Gentoo amd64 stable
> + AddGnuCPlusPlusIncludePaths(
> + "/usr/lib/gcc/x86_64-pc-linux-gnu/4.1.2/include/g++-v4",
> + "i686-pc-linux-gnu");
> + break;
> + case llvm::Triple::FreeBSD:
> + // DragonFly
> + AddPath("/usr/include/c++/4.1", System, true, false, false);
> + // FreeBSD
> + AddPath("/usr/include/c++/4.2", System, true, false, false);
> + break;
> + case llvm::Triple::Solaris:
> + // AuroraUX
> + AddGnuCPlusPlusIncludePaths("/Opt/gcc4/include/c++/4.2.4",
> + "i386-pc-solaris2.11");
> + break;
> + default:
> + break;
> + }
> + }
>
> - // FreeBSD
> - AddPath("/usr/include/c++/4.2", System, true, false, false);
> + AddPath("/usr/local/include", System, false, false, false);
>
> - // AuroraUX
> - AddGnuCPlusPlusIncludePaths("/Opt/gcc4/include/c++/4.2.4",
> - "i386-pc-solaris2.11");
> + AddPath("/usr/include", System, false, false, false);
> + AddPath("/System/Library/Frameworks", System, true, false, true);
> + AddPath("/Library/Frameworks", System, true, false, true);
> + break;
> }
> -
> - AddPath("/usr/local/include", System, false, false, false);
> -
> - AddPath("/usr/include", System, false, false, false);
> - AddPath("/System/Library/Frameworks", System, true, false, true);
> - AddPath("/Library/Frameworks", System, true, false, true);
> -#endif
> }
>
> void InitHeaderSearch::AddDefaultEnvVarPaths(const LangOptions &Lang) {
>
> Modified: cfe/trunk/tools/clang-cc/clang-cc.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-cc/clang-cc.cpp?rev=83594&r1=83593&r2=83594&view=diff
>
> ==============================================================================
> --- cfe/trunk/tools/clang-cc/clang-cc.cpp (original)
> +++ cfe/trunk/tools/clang-cc/clang-cc.cpp Thu Oct 8 18:29:47 2009
> @@ -1166,7 +1166,8 @@
> /// InitializeIncludePaths - Process the -I options and set them in the
> /// HeaderSearch object.
> void InitializeIncludePaths(const char *Argv0, HeaderSearch &Headers,
> - FileManager &FM, const LangOptions &Lang) {
> + FileManager &FM, const LangOptions &Lang,
> + llvm::Triple &triple) {
> InitHeaderSearch Init(Headers, Verbose, isysroot);
>
> // Handle -I... and -F... options, walking the lists in parallel.
> @@ -1245,7 +1246,7 @@
> AddClangIncludePaths(Argv0, &Init);
>
> if (!nostdinc)
> - Init.AddDefaultSystemIncludePaths(Lang);
> + Init.AddDefaultSystemIncludePaths(Lang, triple);
>
> // Now that we have collected all of the include paths, merge them all
> // together and tell the preprocessor about them.
> @@ -2410,7 +2411,7 @@
> HeaderSearch HeaderInfo(FileMgr);
>
>
> - InitializeIncludePaths(argv[0], HeaderInfo, FileMgr, LangInfo);
> + InitializeIncludePaths(argv[0], HeaderInfo, FileMgr, LangInfo, Triple);
>
> // Set up the preprocessor with these options.
> DriverPreprocessorFactory PPFactory(Diags, LangInfo, *Target,
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: InitHeaderSearch_AddDefaultSystemIncludePaths_takes_const_triple.diff
Type: text/x-patch
Size: 1246 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20091009/877c9f4f/attachment.bin>
More information about the cfe-commits
mailing list