ENH: check to make sure cmake matches the cmake used to generate the cache
This commit is contained in:
parent
46ede79d58
commit
2905d39689
|
@ -24,21 +24,6 @@ void cmGlobalUnixMakefileGenerator::EnableLanguage(const char* lang,
|
||||||
cmMakefile *mf)
|
cmMakefile *mf)
|
||||||
{
|
{
|
||||||
bool isLocal = m_CMakeInstance->GetLocal();
|
bool isLocal = m_CMakeInstance->GetLocal();
|
||||||
const char* majv = mf->GetDefinition("CMAKE_CACHE_MAJOR_VERSION");
|
|
||||||
const char* minv = mf->GetDefinition("CMAKE_CACHE_MINOR_VERSION");
|
|
||||||
const char* relv = mf->GetDefinition("CMAKE_CACHE_RELEASE_VERSION");
|
|
||||||
bool cacheSameCMake = false;
|
|
||||||
if(majv && atoi(majv) == cmMakefile::GetMajorVersion()
|
|
||||||
&& minv && atoi(minv) == cmMakefile::GetMinorVersion()
|
|
||||||
&& relv && (strcmp(relv, cmMakefile::GetReleaseVersion()) == 0))
|
|
||||||
{
|
|
||||||
cacheSameCMake = true;
|
|
||||||
}
|
|
||||||
if(!cacheSameCMake)
|
|
||||||
{
|
|
||||||
isLocal = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if no lang specified use CXX
|
// if no lang specified use CXX
|
||||||
if(!lang )
|
if(!lang )
|
||||||
{
|
{
|
||||||
|
|
|
@ -805,6 +805,21 @@ int cmake::Configure()
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool cmake::CacheVersionMatches()
|
||||||
|
{
|
||||||
|
const char* majv = m_CacheManager->GetCacheValue("CMAKE_CACHE_MAJOR_VERSION");
|
||||||
|
const char* minv = m_CacheManager->GetCacheValue("CMAKE_CACHE_MINOR_VERSION");
|
||||||
|
const char* relv = m_CacheManager->GetCacheValue("CMAKE_CACHE_RELEASE_VERSION");
|
||||||
|
bool cacheSameCMake = false;
|
||||||
|
if(majv && atoi(majv) == cmMakefile::GetMajorVersion()
|
||||||
|
&& minv && atoi(minv) == cmMakefile::GetMinorVersion()
|
||||||
|
&& relv && (strcmp(relv, cmMakefile::GetReleaseVersion()) == 0))
|
||||||
|
{
|
||||||
|
cacheSameCMake = true;
|
||||||
|
}
|
||||||
|
return cacheSameCMake;
|
||||||
|
}
|
||||||
|
|
||||||
// handle a command line invocation
|
// handle a command line invocation
|
||||||
int cmake::Run(const std::vector<std::string>& args)
|
int cmake::Run(const std::vector<std::string>& args)
|
||||||
{
|
{
|
||||||
|
@ -840,20 +855,32 @@ int cmake::Run(const std::vector<std::string>& args)
|
||||||
|
|
||||||
// Add any cache args
|
// Add any cache args
|
||||||
this->SetCacheArgs(args);
|
this->SetCacheArgs(args);
|
||||||
|
|
||||||
// if we are local do the local thing, otherwise do global
|
int ret = 0;
|
||||||
|
// if not local or the cmake version has changed
|
||||||
|
// since the last run of cmake, run a global generate
|
||||||
|
if(!m_Local || !this->CacheVersionMatches())
|
||||||
|
{
|
||||||
|
bool saveLocalFlag = m_Local;
|
||||||
|
m_Local = false;
|
||||||
|
ret = this->Configure();
|
||||||
|
if (ret)
|
||||||
|
{
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
ret = this->Generate();
|
||||||
|
if(ret)
|
||||||
|
{
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
m_Local = saveLocalFlag;
|
||||||
|
}
|
||||||
|
// if we are local do the local thing
|
||||||
if (m_Local)
|
if (m_Local)
|
||||||
{
|
{
|
||||||
return this->LocalGenerate();
|
ret = this->LocalGenerate();
|
||||||
}
|
}
|
||||||
|
return ret;
|
||||||
// otherwise global
|
|
||||||
int ret = this->Configure();
|
|
||||||
if (ret)
|
|
||||||
{
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
return this->Generate();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int cmake::Generate()
|
int cmake::Generate()
|
||||||
|
|
|
@ -236,6 +236,8 @@ protected:
|
||||||
std::string m_cmStartDirectory;
|
std::string m_cmStartDirectory;
|
||||||
std::string m_StartOutputDirectory;
|
std::string m_StartOutputDirectory;
|
||||||
|
|
||||||
|
///! return true if the same cmake was used to make the cache.
|
||||||
|
bool CacheVersionMatches();
|
||||||
///! read in a cmake list file to initialize the cache
|
///! read in a cmake list file to initialize the cache
|
||||||
void ReadListFile(const char *path);
|
void ReadListFile(const char *path);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue