]> granicus.if.org Git - clang/commitdiff
[msvc] Honor %INCLUDE%. It should know essential search paths with vcvarsall.bat.
authorNAKAMURA Takumi <geek4civic@gmail.com>
Tue, 13 Mar 2012 00:02:21 +0000 (00:02 +0000)
committerNAKAMURA Takumi <geek4civic@gmail.com>
Tue, 13 Mar 2012 00:02:21 +0000 (00:02 +0000)
FYI,

On VS10, %INCLUDE% contains;
(VS10)\VC\INCLUDE
(VS10)\VC\ATLMFC\INCLUDE
(SDK70A)\include

On VS11,
(VS11)\VC\INCLUDE
(VS11)\VC\ATLMFC\INCLUDE
(SDK80)\include\shared
(SDK80)\include\um
(SDK80)\include\winrt

FIXME: It may be enabled also on mingw.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@152589 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Driver/WindowsToolChain.cpp

index 70bd4f1fc367f6a3a1a127a02f698bd2f309d596..6827034ef4ca6b66b6a5582dbc03cf56b7774a2f 100644 (file)
@@ -318,10 +318,26 @@ void Windows::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
   if (DriverArgs.hasArg(options::OPT_nostdlibinc))
     return;
 
+#ifdef _MSC_VER
+  // Honor %INCLUDE%. It should know essential search paths with vcvarsall.bat.
+  if (const char *cl_include_dir = getenv("INCLUDE")) {
+    SmallVector<StringRef, 8> Dirs;
+    StringRef(cl_include_dir).split(Dirs, ";");
+    int n = 0;
+    for (SmallVectorImpl<StringRef>::iterator I = Dirs.begin(), E = Dirs.end();
+         I != E; ++I) {
+      StringRef d = *I;
+      if (d.size() == 0)
+        continue;
+      ++n;
+      addSystemInclude(DriverArgs, CC1Args, d);
+    }
+    if (n) return;
+  }
+
   std::string VSDir;
   std::string WindowsSDKDir;
 
-#ifdef _MSC_VER
   // When built with access to the proper Windows APIs, try to actually find
   // the correct include paths first.
   if (getVisualStudioDir(VSDir)) {