Merge topic 'tolerate-removed-cache'

25b6e7b7 Tolerate removed/replaced CMakeCache.txt with old CMakeFiles/
This commit is contained in:
Brad King
2016-11-18 09:10:29 -05:00
committed by CMake Topic Stage
4 changed files with 47 additions and 0 deletions

View File

@@ -50,6 +50,9 @@
#include <cm_jsoncpp_writer.h>
#endif
const std::string kCMAKE_PLATFORM_INFO_INITIALIZED =
"CMAKE_PLATFORM_INFO_INITIALIZED";
class cmInstalledFile;
bool cmTarget::StrictTargetComparison::operator()(cmTarget const* t1,
@@ -428,6 +431,23 @@ void cmGlobalGenerator::EnableLanguage(
// set the dir for parent files so they can be used by modules
mf->AddDefinition("CMAKE_PLATFORM_INFO_DIR", rootBin.c_str());
if (!this->CMakeInstance->GetIsInTryCompile()) {
// Keep a mark in the cache to indicate that we've initialized the
// platform information directory. If the platform information
// directory exists but the mark is missing then CMakeCache.txt
// has been removed or replaced without also removing the CMakeFiles/
// directory. In this case remove the platform information directory
// so that it will be re-initialized and the relevant information
// restored in the cache.
if (cmSystemTools::FileIsDirectory(rootBin) &&
!mf->IsOn(kCMAKE_PLATFORM_INFO_INITIALIZED)) {
cmSystemTools::RemoveADirectory(rootBin);
}
this->GetCMakeInstance()->AddCacheEntry(
kCMAKE_PLATFORM_INFO_INITIALIZED, "1",
"Platform information initialized", cmStateEnums::INTERNAL);
}
// find and make sure CMAKE_MAKE_PROGRAM is defined
if (!this->FindMakeProgram(mf)) {
return;

View File

@@ -0,0 +1 @@
-- The C compiler identification is

View File

@@ -0,0 +1,17 @@
enable_language(C)
set(vars
CMAKE_EXECUTABLE_FORMAT
)
if(CMAKE_HOST_UNIX)
list(APPEND vars
CMAKE_UNAME
)
endif()
foreach(v IN LISTS vars)
if(NOT DEFINED ${v})
message(SEND_ERROR "Variable '${v}' is not set!")
endif()
endforeach()

View File

@@ -24,3 +24,12 @@ file(WRITE "${depend}" "2")
run_cmake_command(RerunCMake-build2 ${CMAKE_COMMAND} --build .)
unset(RunCMake_TEST_BINARY_DIR)
unset(RunCMake_TEST_NO_CLEAN)
# Use a single build tree for a few tests without cleaning.
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/RemoveCache-build)
set(RunCMake_TEST_NO_CLEAN 1)
file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
run_cmake(RemoveCache)
file(REMOVE "${RunCMake_TEST_BINARY_DIR}/CMakeCache.txt")
run_cmake(RemoveCache)