diff options
author | Chris Lattner <sabre@nondot.org> | 2008-09-30 20:30:12 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2008-09-30 20:30:12 +0000 |
commit | 079f2c467d4893a80bf0dc5344505725f42ceb87 (patch) | |
tree | d678917b857763904c6c82fa446b349af5e280ac | |
parent | ba0f25f754184e5260e3317c10c389a108f73421 (diff) |
Handle minor version numbers in __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__
like "10.3.9"
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56873 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | Driver/clang.cpp | 17 | ||||
-rw-r--r-- | lib/Basic/Targets.cpp | 26 |
2 files changed, 25 insertions, 18 deletions
diff --git a/Driver/clang.cpp b/Driver/clang.cpp index f75aacba76..9411dd3b1e 100644 --- a/Driver/clang.cpp +++ b/Driver/clang.cpp @@ -654,21 +654,16 @@ static void HandleMacOSVersionMin(std::string &Triple) { char *End = 0; VersionNum = (int)strtol(Start, &End, 10); + // The version number must be in the range 0-9. + MacOSVersionMinIsInvalid = (unsigned)VersionNum > 9; + // Turn MacOSVersionMin into a darwin number: e.g. 10.3.9 is 3 -> 7. Triple += llvm::itostr(VersionNum+4); - if (End[0] == '.') { // 10.4.17 is ok. - // Add the period piece (.17) to the end of the triple. This gives us - // something like ...-darwin8.17 + if (End[0] == '.' && isdigit(End[1]) && End[2] == '\0') { // 10.4.7 is ok. + // Add the period piece (.7) to the end of the triple. This gives us + // something like ...-darwin8.7 Triple += End; - - // Verify that the rest after the number are all digits. - for (++End; isdigit(*End); ++End) - /*skip digits*/; - - // If there were any non-digits after the number, reject it. - MacOSVersionMinIsInvalid = *End != '\0'; - } else if (End[0] != '\0') { // "10.4" is ok. 10.4x is not. MacOSVersionMinIsInvalid = true; } diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index 382bba0e71..4d3c6b3602 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -17,8 +17,6 @@ #include "clang/Basic/TargetInfo.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/APFloat.h" -#include <cstdlib> - using namespace clang; //===----------------------------------------------------------------------===// @@ -47,16 +45,30 @@ static void getDarwinDefines(std::vector<char> &Defs, const char *Triple) { // Figure out which "darwin number" the target triple is. "darwin9" -> 10.5. const char *Darwin = strstr(Triple, "-darwin"); if (Darwin) { + char DarwinStr[] = "1000"; Darwin += strlen("-darwin"); - if (Darwin[0] >= '1' && Darwin[0] <= '9') { - unsigned DarwinNo = atoi(Darwin); - if (DarwinNo > 4) { - char DarwinStr[] = "10x0"; + if (Darwin[0] >= '0' && Darwin[0] <= '9') { + unsigned DarwinNo = Darwin[0]-'0'; + ++Darwin; + + // Handle "darwin11". + if (DarwinNo == 1 && Darwin[0] >= '0' && Darwin[0] <= '9') { + DarwinNo = 10+Darwin[0]-'0'; + ++Darwin; + } + + if (DarwinNo >= 4 && DarwinNo <= 13) { // 10.0-10.9 // darwin7 -> 1030, darwin8 -> 1040, darwin9 -> 1050, etc. DarwinStr[2] = '0' + DarwinNo-4; - Define(Defs, "__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__",DarwinStr); } + + // Handle minor version: 10.4.9 -> darwin8.9 -> "1049" + if (Darwin[0] == '.' && Darwin[1] >= '0' && Darwin[1] <= '9' && + Darwin[2] == '\0') + DarwinStr[3] = Darwin[1]; + } + Define(Defs, "__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__", DarwinStr); } } |