diff options
author | Brad King <brad.king@kitware.com> | 2007-12-29 04:07:14 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2007-12-29 04:07:14 (GMT) |
commit | f872c10b7ee3fe675e7a2066c20c7a749efd8238 (patch) | |
tree | aa6934ecef4eb491977fc8b3fafeede0984a954d /Source | |
parent | 2da186266e3d46e9a3e9f0eebb106fe507cb5df5 (diff) | |
download | CMake-f872c10b7ee3fe675e7a2066c20c7a749efd8238.zip CMake-f872c10b7ee3fe675e7a2066c20c7a749efd8238.tar.gz CMake-f872c10b7ee3fe675e7a2066c20c7a749efd8238.tar.bz2 |
ENH: Added method cmLocalGenerator::GetBackwardsCompatibility to reduce parsing of CMAKE_BACKWARDS_COMPATIBILITY variable. Add cmLocalGenerator::NeedBackwardsCompatibility to simplify checks for compatibility requirements.
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmLocalGenerator.cxx | 41 | ||||
-rw-r--r-- | Source/cmLocalGenerator.h | 21 | ||||
-rw-r--r-- | Source/cmStandardIncludes.h | 3 |
3 files changed, 65 insertions, 0 deletions
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index 3e1436f..78db8ed 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -56,6 +56,8 @@ cmLocalGenerator::cmLocalGenerator() this->IsMakefileGenerator = false; this->RelativePathsConfigured = false; this->PathConversionsSetup = false; + this->BackwardsCompatibility = 0; + this->BackwardsCompatibilityFinal = false; } cmLocalGenerator::~cmLocalGenerator() @@ -2860,3 +2862,42 @@ cmLocalGenerator::GetTargetObjectFileDirectories(cmTarget* , cmSystemTools::Error("GetTargetObjectFileDirectories" " called on cmLocalGenerator"); } + +//---------------------------------------------------------------------------- +unsigned int cmLocalGenerator::GetBackwardsCompatibility() +{ + // The computed version may change until the project is fully + // configured. + if(!this->BackwardsCompatibilityFinal) + { + unsigned int major = 0; + unsigned int minor = 0; + unsigned int patch = 0; + if(const char* value + = this->Makefile->GetDefinition("CMAKE_BACKWARDS_COMPATIBILITY")) + { + switch(sscanf(value, "%u.%u.%u", &major, &minor, &patch)) + { + case 2: patch = 0; break; + case 1: minor = 0; patch = 0; break; + default: break; + } + } + this->BackwardsCompatibility = CMake_VERSION_ENCODE(major, minor, patch); + this->BackwardsCompatibilityFinal = this->Configured; + } + + return this->BackwardsCompatibility; +} + +//---------------------------------------------------------------------------- +bool cmLocalGenerator::NeedBackwardsCompatibility(unsigned int major, + unsigned int minor, + unsigned int patch) +{ + // Compatibility is needed if CMAKE_BACKWARDS_COMPATIBILITY is set + // equal to or lower than the given version. + unsigned int actual_compat = this->GetBackwardsCompatibility(); + return (actual_compat && + actual_compat <= CMake_VERSION_ENCODE(major, minor, patch)); +} diff --git a/Source/cmLocalGenerator.h b/Source/cmLocalGenerator.h index dcb86bd..7c61ced 100644 --- a/Source/cmLocalGenerator.h +++ b/Source/cmLocalGenerator.h @@ -251,6 +251,24 @@ public: bool IsChrpathAvailable(const cmTarget& target); + /** + * Get the level of backwards compatibility requested by the project + * in this directory. This is the value of the CMake variable + * CMAKE_BACKWARDS_COMPATIBILITY whose format is + * "major.minor[.patch]". The returned integer is encoded as + * + * CMake_VERSION_ENCODE(major, minor, patch) + * + * and is monotonically increasing with the CMake version. + */ + unsigned int GetBackwardsCompatibility(); + + /** + * Test whether compatibility is set to a given version or lower. + */ + bool NeedBackwardsCompatibility(unsigned int major, + unsigned int minor, + unsigned int patch = 0xFFu); protected: /** Construct a comment for a custom command. */ @@ -343,6 +361,9 @@ protected: std::string RelativePathTopBinary; bool RelativePathsConfigured; bool PathConversionsSetup; + + unsigned int BackwardsCompatibility; + bool BackwardsCompatibilityFinal; }; #endif diff --git a/Source/cmStandardIncludes.h b/Source/cmStandardIncludes.h index 4ba86ce..5b0ccfb 100644 --- a/Source/cmStandardIncludes.h +++ b/Source/cmStandardIncludes.h @@ -38,6 +38,9 @@ CMAKE_TO_STRING(CMake_VERSION_MINOR) "." \ CMAKE_TO_STRING(CMake_VERSION_PATCH) +#define CMake_VERSION_ENCODE(major, minor, patch) \ + ((major)*0x10000u + (minor)*0x100u + (patch)) + #ifdef _MSC_VER #pragma warning ( disable : 4786 ) #pragma warning ( disable : 4503 ) |