diff options
Diffstat (limited to 'Source')
-rw-r--r-- | Source/CMakeVersion.cmake | 2 | ||||
-rw-r--r-- | Source/cmMakefile.cxx | 2 | ||||
-rw-r--r-- | Source/cmSystemTools.cxx | 42 |
3 files changed, 38 insertions, 8 deletions
diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake index 0de45a0..9a1bcdd 100644 --- a/Source/CMakeVersion.cmake +++ b/Source/CMakeVersion.cmake @@ -1,5 +1,5 @@ # CMake version number components. set(CMake_VERSION_MAJOR 3) set(CMake_VERSION_MINOR 0) -set(CMake_VERSION_PATCH 20140714) +set(CMake_VERSION_PATCH 20140715) #set(CMake_VERSION_RC 1) diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index 2218e2f..d3ca34a 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -1042,8 +1042,8 @@ cmMakefile::AddCustomCommandToOutput(const std::vector<std::string>& outputs, if (!file) { file = this->CreateSource(outName, true); - file->SetProperty("__CMAKE_RULE", "1"); } + file->SetProperty("__CMAKE_RULE", "1"); } // Always create the output sources and mark them generated. diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx index 12a63b0..444e143 100644 --- a/Source/cmSystemTools.cxx +++ b/Source/cmSystemTools.cxx @@ -384,14 +384,28 @@ bool cmSystemTools::IsOn(const char* val) { return false; } - std::basic_string<char> v = val; + size_t len = strlen(val); + if (len > 4) + { + return false; + } + std::basic_string<char> v(val, len); + static std::set<std::string> onValues; + if(onValues.empty()) + { + onValues.insert("ON"); + onValues.insert("1"); + onValues.insert("YES"); + onValues.insert("TRUE"); + onValues.insert("Y"); + } for(std::basic_string<char>::iterator c = v.begin(); c != v.end(); c++) { *c = static_cast<char>(toupper(*c)); } - return (v == "ON" || v == "1" || v == "YES" || v == "TRUE" || v == "Y"); + return (onValues.count(v) > 0); } bool cmSystemTools::IsNOTFOUND(const char* val) @@ -406,19 +420,35 @@ bool cmSystemTools::IsNOTFOUND(const char* val) bool cmSystemTools::IsOff(const char* val) { - if (!val || strlen(val) == 0) + if (!val || !*val) { return true; } - std::basic_string<char> v = val; + size_t len = strlen(val); + // Try and avoid toupper() for large strings. + if (len > 6) + { + return cmSystemTools::IsNOTFOUND(val); + } + static std::set<std::string> offValues; + if(offValues.empty()) + { + offValues.insert("OFF"); + offValues.insert("0"); + offValues.insert("NO"); + offValues.insert("FALSE"); + offValues.insert("N"); + offValues.insert("IGNORE"); + } + // Try and avoid toupper(). + std::basic_string<char> v(val, len); for(std::basic_string<char>::iterator c = v.begin(); c != v.end(); c++) { *c = static_cast<char>(toupper(*c)); } - return (v == "OFF" || v == "0" || v == "NO" || v == "FALSE" || - v == "N" || cmSystemTools::IsNOTFOUND(v.c_str()) || v == "IGNORE"); + return (offValues.count(v) > 0); } //---------------------------------------------------------------------------- |