ADT/Triple: Add helper function for OS X version checks.
authorDaniel Dunbar <daniel@zuster.org>
Tue, 19 Apr 2011 20:30:10 +0000 (20:30 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Tue, 19 Apr 2011 20:30:10 +0000 (20:30 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129801 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/Triple.h

index ea5a6225df620d7b3d65eb334523d63741c074f8..480c9316bd044cf38a27ed59836dc90574d90af3 100644 (file)
@@ -249,7 +249,8 @@ public:
     return getOSMajorVersion();
   }
 
-  bool isOSVersionLT(unsigned Major, unsigned B_Minor, unsigned Micro) {
+  bool isOSVersionLT(unsigned Major, unsigned Minor = 0,
+                     unsigned Micro = 0) const {
     unsigned LHS[3];
     getOSVersion(LHS[0], LHS[1], LHS[2]);
 
@@ -263,6 +264,28 @@ public:
     return false;
   }
 
+  /// isOSX - Is this an OS X triple. For legacy reasons, we support both
+  /// "darwin" and "osx" as OS X triples.
+  bool isOSX() const {
+    return getOS() == Triple::Darwin || getOS() == Triple::OSX;
+  }
+
+  /// isOSXVersionLT - Comparison function for checking OS X version
+  /// compatibility, which handles supporting skewed version numbering schemes
+  /// used by the "darwin" triples.
+  unsigned isOSXVersionLT(unsigned Major, unsigned Minor = 0,
+                          unsigned Micro = 0) const {
+    assert(isOSX() && "Not an OS X triple!");
+
+    // If this is OS X, expect a sane version number.
+    if (getOS() == Triple::OSX)
+      return isOSVersionLT(Major, Minor, Micro);
+
+    // Otherwise, compare to the "Darwin" number.
+    assert(Major == 10 && "Unexpected major version");
+    return isOSVersionLT(Minor + 4, Micro, 0);
+  }
+    
   /// @}
   /// @name Mutators
   /// @{