darwin/driver: Support using SDKROOT to define the default for -isysroot.
 - The SDKROOT environment variable is the de facto way to set the default SDK
   for a number of tools, join forces with them.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162116 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp
index 01c6623..5cf97b7 100644
--- a/lib/Driver/ToolChains.cpp
+++ b/lib/Driver/ToolChains.cpp
@@ -442,6 +442,20 @@
 void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {
   const OptTable &Opts = getDriver().getOpts();
 
+  // Support allowing the SDKROOT environment variable used by xcrun and other
+  // Xcode tools to define the default sysroot, by making it the default for
+  // isysroot.
+  if (!Args.hasArg(options::OPT_isysroot)) {
+    if (char *env = ::getenv("SDKROOT")) {
+      // We only use this value as the default if it is an absolute path and
+      // exists.
+      if (llvm::sys::path::is_absolute(env) && llvm::sys::fs::exists(env)) {
+        Args.append(Args.MakeSeparateArg(
+                      0, Opts.getOption(options::OPT_isysroot), env));
+      }
+    }
+  }
+
   Arg *OSXVersion = Args.getLastArg(options::OPT_mmacosx_version_min_EQ);
   Arg *iOSVersion = Args.getLastArg(options::OPT_miphoneos_version_min_EQ);
   Arg *iOSSimVersion = Args.getLastArg(
diff --git a/test/Driver/darwin-sdkroot.c b/test/Driver/darwin-sdkroot.c
new file mode 100644
index 0000000..5abf081
--- /dev/null
+++ b/test/Driver/darwin-sdkroot.c
@@ -0,0 +1,22 @@
+// Check that SDKROOT is used to define the default for -isysroot on Darwin.
+//
+// RUN: rm -rf %t.tmpdir
+// RUN: mkdir -p %t.tmpdir
+// RUN: env SDKROOT=%t.tmpdir %clang -target x86_64-apple-darwin10 \
+// RUN:   -c %s -### 2> %t.log
+// RUN: FileCheck --check-prefix=CHECK-BASIC < %t.log %s
+//
+// CHECK-BASIC: clang
+// CHECK-BASIC: "-cc1"
+// CHECK-BASIC: "-isysroot" "{{.*tmpdir}}"
+
+// Check that we don't use SDKROOT as the default if it is not a valid path.
+
+// RUN: rm -rf %t.nonpath
+// RUN: env SDKROOT=%t.nonpath %clang -target x86_64-apple-darwin10 \
+// RUN:   -c %s -### 2> %t.log
+// RUN: FileCheck --check-prefix=CHECK-NONPATH < %t.log %s
+//
+// CHECK-NONPATH: clang
+// CHECK-NONPATH: "-cc1"
+// CHECK-NONPATH-NOT: "-isysroot"