file(GENERATE): Only write the file if content is different.
No policy is used to control this behavior for now.
This commit is contained in:
parent
3c8226e590
commit
42e1cd137c
|
@ -13,6 +13,7 @@
|
|||
#include "cmGeneratorExpressionEvaluationFile.h"
|
||||
|
||||
#include "cmMakefile.h"
|
||||
#include "cmGeneratedFileStream.h"
|
||||
#include <cmsys/FStream.hxx>
|
||||
|
||||
#include <assert.h>
|
||||
|
@ -79,19 +80,9 @@ void cmGeneratorExpressionEvaluationFile::Generate(const std::string& config,
|
|||
this->Files.push_back(outputFileName);
|
||||
outputFiles[outputFileName] = outputContent;
|
||||
|
||||
cmsys::ofstream fout(outputFileName.c_str());
|
||||
|
||||
if(!fout)
|
||||
{
|
||||
cmOStringStream e;
|
||||
e << "Evaluation file \"" << outputFileName << "\" cannot be written.";
|
||||
this->Makefile->IssueMessage(cmake::FATAL_ERROR, e.str());
|
||||
return;
|
||||
}
|
||||
|
||||
cmGeneratedFileStream fout(outputFileName.c_str());
|
||||
fout.SetCopyIfDifferent(true);
|
||||
fout << outputContent;
|
||||
|
||||
fout.close();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
|
|
@ -8,3 +8,30 @@ run_cmake(EmptyCondition1)
|
|||
run_cmake(EmptyCondition2)
|
||||
run_cmake(BadCondition)
|
||||
run_cmake(DebugEvaluate)
|
||||
|
||||
set(timeformat "%Y%j%H%M%S")
|
||||
|
||||
file(REMOVE "${RunCMake_BINARY_DIR}/WriteIfDifferent-build/output_file.txt")
|
||||
set(RunCMake_TEST_FILE "WriteIfDifferent")
|
||||
set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/WriteIfDifferent-build")
|
||||
run_cmake(WriteIfDifferent-prepare)
|
||||
unset(RunCMake_TEST_FILE)
|
||||
unset(RunCMake_TEST_BINARY_DIR)
|
||||
file(TIMESTAMP "${RunCMake_BINARY_DIR}/WriteIfDifferent-build/output_file.txt" timestamp ${timeformat})
|
||||
if(NOT timestamp)
|
||||
message(SEND_ERROR "Could not get timestamp for \"${RunCMake_BINARY_DIR}/WriteIfDifferent-build/output_file.txt\"")
|
||||
endif()
|
||||
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E sleep 1)
|
||||
|
||||
set(RunCMake_TEST_NO_CLEAN ON)
|
||||
run_cmake(WriteIfDifferent)
|
||||
file(TIMESTAMP "${RunCMake_BINARY_DIR}/WriteIfDifferent-build/output_file.txt" timestamp_after ${timeformat})
|
||||
if(NOT timestamp_after)
|
||||
message(SEND_ERROR "Could not get timestamp for \"${RunCMake_BINARY_DIR}/WriteIfDifferent-build/output_file.txt\"")
|
||||
endif()
|
||||
unset(RunCMake_TEST_NO_CLEAN)
|
||||
|
||||
if (NOT timestamp_after STREQUAL timestamp)
|
||||
message(SEND_ERROR "WriteIfDifferent changed output file.")
|
||||
endif()
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
0
|
|
@ -0,0 +1 @@
|
|||
^$
|
|
@ -0,0 +1,5 @@
|
|||
|
||||
file(GENERATE
|
||||
OUTPUT output_file.txt
|
||||
CONTENT "123"
|
||||
)
|
Loading…
Reference in New Issue