ENH: check to make sure cmake matches the cmake used to generate the cache

This commit is contained in:
Bill Hoffman 2002-11-13 15:20:20 -05:00
parent 46ede79d58
commit 2905d39689
3 changed files with 40 additions and 26 deletions

View File

@ -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 )
{ {

View File

@ -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()

View File

@ -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);