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)
|
||||
{
|
||||
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(!lang )
|
||||
{
|
||||
|
|
|
@ -805,6 +805,21 @@ int cmake::Configure()
|
|||
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
|
||||
int cmake::Run(const std::vector<std::string>& args)
|
||||
{
|
||||
|
@ -841,19 +856,31 @@ int cmake::Run(const std::vector<std::string>& args)
|
|||
// Add any cache args
|
||||
this->SetCacheArgs(args);
|
||||
|
||||
// if we are local do the local thing, otherwise do global
|
||||
if (m_Local)
|
||||
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())
|
||||
{
|
||||
return this->LocalGenerate();
|
||||
}
|
||||
|
||||
// otherwise global
|
||||
int ret = this->Configure();
|
||||
bool saveLocalFlag = m_Local;
|
||||
m_Local = false;
|
||||
ret = this->Configure();
|
||||
if (ret)
|
||||
{
|
||||
return ret;
|
||||
}
|
||||
return this->Generate();
|
||||
ret = this->Generate();
|
||||
if(ret)
|
||||
{
|
||||
return ret;
|
||||
}
|
||||
m_Local = saveLocalFlag;
|
||||
}
|
||||
// if we are local do the local thing
|
||||
if (m_Local)
|
||||
{
|
||||
ret = this->LocalGenerate();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int cmake::Generate()
|
||||
|
|
|
@ -236,6 +236,8 @@ protected:
|
|||
std::string m_cmStartDirectory;
|
||||
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
|
||||
void ReadListFile(const char *path);
|
||||
|
||||
|
|
Loading…
Reference in New Issue