Driver/Darwin: Honor IPHONEOS_DEPLOYMENT_TARGET.

llvm-svn: 94488
diff --git a/clang/lib/Driver/ToolChains.cpp b/clang/lib/Driver/ToolChains.cpp
index a9c6a68..355dbe4 100644
--- a/clang/lib/Driver/ToolChains.cpp
+++ b/clang/lib/Driver/ToolChains.cpp
@@ -403,22 +403,38 @@
           << OSXVersion->getAsString(Args)
           << iPhoneVersion->getAsString(Args);
   } else if (!OSXVersion && !iPhoneVersion) {
-    // Chose the default version based on the arch.
-    //
-    // FIXME: Are there iPhone overrides for this?
+    // If neither OS X nor iPhoneOS targets were specified, check for
+    // environment defines.
+    const char *OSXTarget = ::getenv("MACOSX_DEPLOYMENT_TARGET");
+    const char *iPhoneOSTarget = ::getenv("IPHONEOS_DEPLOYMENT_TARGET");
 
-    if (!isIPhoneOS()) {
-      // Look for MACOSX_DEPLOYMENT_TARGET, otherwise use the version
-      // from the host.
-      const char *Version = ::getenv("MACOSX_DEPLOYMENT_TARGET");
-      if (!Version)
-        Version = MacosxVersionMin.c_str();
+    // Ignore empty strings.
+    if (OSXTarget && OSXTarget[0] == '\0')
+      OSXTarget = 0;
+    if (iPhoneOSTarget && iPhoneOSTarget[0] == '\0')
+      iPhoneOSTarget = 0;
+
+    if (OSXTarget && iPhoneOSTarget) {
+      getDriver().Diag(clang::diag::err_drv_conflicting_deployment_targets)
+        << OSXTarget << iPhoneOSTarget;
+    } else if (OSXTarget) {
       const Option *O = Opts.getOption(options::OPT_mmacosx_version_min_EQ);
-      DAL->append(DAL->MakeJoinedArg(0, O, Version));
-    } else {
-      const char *Version = IPhoneOSVersionMin.c_str();
+      DAL->append(DAL->MakeJoinedArg(0, O, OSXTarget));
+    } else if (iPhoneOSTarget) {
       const Option *O = Opts.getOption(options::OPT_miphoneos_version_min_EQ);
-      DAL->append(DAL->MakeJoinedArg(0, O, Version));
+      DAL->append(DAL->MakeJoinedArg(0, O, iPhoneOSTarget));
+    } else {
+      // Otherwise, choose the default version based on the toolchain.
+
+      // FIXME: This is confusing it should be more explicit what the default
+      // target is.
+      if (isIPhoneOS()) {
+        const Option *O = Opts.getOption(options::OPT_miphoneos_version_min_EQ);
+        DAL->append(DAL->MakeJoinedArg(0, O, IPhoneOSVersionMin));
+      } else {
+        const Option *O = Opts.getOption(options::OPT_mmacosx_version_min_EQ);
+        DAL->append(DAL->MakeJoinedArg(0, O, MacosxVersionMin));
+      }
     }
   }