From 2905d39689a23c580b3356f668ad02397424f09e Mon Sep 17 00:00:00 2001 From: Bill Hoffman Date: Wed, 13 Nov 2002 15:20:20 -0500 Subject: ENH: check to make sure cmake matches the cmake used to generate the cache --- Source/cmGlobalUnixMakefileGenerator.cxx | 15 ---------- Source/cmake.cxx | 49 +++++++++++++++++++++++++------- Source/cmake.h | 2 ++ 3 files changed, 40 insertions(+), 26 deletions(-) diff --git a/Source/cmGlobalUnixMakefileGenerator.cxx b/Source/cmGlobalUnixMakefileGenerator.cxx index 4fc0f60..2619f69 100644 --- a/Source/cmGlobalUnixMakefileGenerator.cxx +++ b/Source/cmGlobalUnixMakefileGenerator.cxx @@ -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 ) { diff --git a/Source/cmake.cxx b/Source/cmake.cxx index 340ee32..7807927 100644 --- a/Source/cmake.cxx +++ b/Source/cmake.cxx @@ -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& args) { @@ -840,20 +855,32 @@ int cmake::Run(const std::vector& args) // Add any cache args this->SetCacheArgs(args); - - // if we are local do the local thing, otherwise do global - if (m_Local) - { - return this->LocalGenerate(); + + 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; } - - // otherwise global - int ret = this->Configure(); - if (ret) + // if we are local do the local thing + if (m_Local) { - return ret; + ret = this->LocalGenerate(); } - return this->Generate(); + return ret; } int cmake::Generate() diff --git a/Source/cmake.h b/Source/cmake.h index 749e448..cf0d7bf 100644 --- a/Source/cmake.h +++ b/Source/cmake.h @@ -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); -- cgit v0.12