ENH: Added method cmLocalGenerator::GetBackwardsCompatibility to reduce parsing of CMAKE_BACKWARDS_COMPATIBILITY variable. Add cmLocalGenerator::NeedBackwardsCompatibility to simplify checks for compatibility requirements.
This commit is contained in:
parent
2da186266e
commit
f872c10b7e
|
@ -56,6 +56,8 @@ cmLocalGenerator::cmLocalGenerator()
|
||||||
this->IsMakefileGenerator = false;
|
this->IsMakefileGenerator = false;
|
||||||
this->RelativePathsConfigured = false;
|
this->RelativePathsConfigured = false;
|
||||||
this->PathConversionsSetup = false;
|
this->PathConversionsSetup = false;
|
||||||
|
this->BackwardsCompatibility = 0;
|
||||||
|
this->BackwardsCompatibilityFinal = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
cmLocalGenerator::~cmLocalGenerator()
|
cmLocalGenerator::~cmLocalGenerator()
|
||||||
|
@ -2860,3 +2862,42 @@ cmLocalGenerator::GetTargetObjectFileDirectories(cmTarget* ,
|
||||||
cmSystemTools::Error("GetTargetObjectFileDirectories"
|
cmSystemTools::Error("GetTargetObjectFileDirectories"
|
||||||
" called on cmLocalGenerator");
|
" 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));
|
||||||
|
}
|
||||||
|
|
|
@ -251,6 +251,24 @@ public:
|
||||||
|
|
||||||
bool IsChrpathAvailable(const cmTarget& target);
|
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:
|
protected:
|
||||||
|
|
||||||
/** Construct a comment for a custom command. */
|
/** Construct a comment for a custom command. */
|
||||||
|
@ -343,6 +361,9 @@ protected:
|
||||||
std::string RelativePathTopBinary;
|
std::string RelativePathTopBinary;
|
||||||
bool RelativePathsConfigured;
|
bool RelativePathsConfigured;
|
||||||
bool PathConversionsSetup;
|
bool PathConversionsSetup;
|
||||||
|
|
||||||
|
unsigned int BackwardsCompatibility;
|
||||||
|
bool BackwardsCompatibilityFinal;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -38,6 +38,9 @@
|
||||||
CMAKE_TO_STRING(CMake_VERSION_MINOR) "." \
|
CMAKE_TO_STRING(CMake_VERSION_MINOR) "." \
|
||||||
CMAKE_TO_STRING(CMake_VERSION_PATCH)
|
CMAKE_TO_STRING(CMake_VERSION_PATCH)
|
||||||
|
|
||||||
|
#define CMake_VERSION_ENCODE(major, minor, patch) \
|
||||||
|
((major)*0x10000u + (minor)*0x100u + (patch))
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
#pragma warning ( disable : 4786 )
|
#pragma warning ( disable : 4786 )
|
||||||
#pragma warning ( disable : 4503 )
|
#pragma warning ( disable : 4503 )
|
||||||
|
|
Loading…
Reference in New Issue