From b2282631f61361fe5f103fa7479073f2693eafcb Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 30 Jul 2014 13:39:27 -0400 Subject: [PATCH] cmTarget: Do not mistake a preceding error for a CMP0049 failure After calls to ProcessSourceItemCMP0049, check for an empty return string to detect a failure instead of trusting GetErrorOccuredFlag. The latter could have been left from a preceding non-fatal error. Extend the RunCMake.Configure test to cover a case that exposed this problem. --- Source/cmTarget.cxx | 12 +++++++----- .../Configure/CustomTargetAfterError-result.txt | 1 + .../Configure/CustomTargetAfterError-stderr.txt | 9 +++++++++ .../RunCMake/Configure/CustomTargetAfterError.cmake | 3 +++ Tests/RunCMake/Configure/RunCMakeTest.cmake | 1 + 5 files changed, 21 insertions(+), 5 deletions(-) create mode 100644 Tests/RunCMake/Configure/CustomTargetAfterError-result.txt create mode 100644 Tests/RunCMake/Configure/CustomTargetAfterError-stderr.txt create mode 100644 Tests/RunCMake/Configure/CustomTargetAfterError.cmake diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index ca24d2d18..acae0b3eb 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -927,10 +927,13 @@ void cmTarget::AddSources(std::vector const& srcs) if(!(src[0] == '$' && src[1] == '<')) { - filename = this->ProcessSourceItemCMP0049(filename); - if (cmSystemTools::GetErrorOccuredFlag()) + if(!filename.empty()) { - return; + filename = this->ProcessSourceItemCMP0049(filename); + if(filename.empty()) + { + return; + } } this->Makefile->GetOrCreateSource(filename); } @@ -998,8 +1001,7 @@ std::string cmTarget::ProcessSourceItemCMP0049(const std::string& s) cmSourceFile* cmTarget::AddSourceCMP0049(const std::string& s) { std::string src = this->ProcessSourceItemCMP0049(s); - - if (cmSystemTools::GetErrorOccuredFlag()) + if(!s.empty() && src.empty()) { return 0; } diff --git a/Tests/RunCMake/Configure/CustomTargetAfterError-result.txt b/Tests/RunCMake/Configure/CustomTargetAfterError-result.txt new file mode 100644 index 000000000..d00491fd7 --- /dev/null +++ b/Tests/RunCMake/Configure/CustomTargetAfterError-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/Configure/CustomTargetAfterError-stderr.txt b/Tests/RunCMake/Configure/CustomTargetAfterError-stderr.txt new file mode 100644 index 000000000..7ce7daf6f --- /dev/null +++ b/Tests/RunCMake/Configure/CustomTargetAfterError-stderr.txt @@ -0,0 +1,9 @@ +^CMake Error at CustomTargetAfterError.cmake:1 \(message\): + Error before add_custom_target +Call Stack \(most recent call first\): + CMakeLists.txt:3 \(include\) ++ +CMake Error at CustomTargetAfterError.cmake:3 \(message\): + Error after add_custom_target +Call Stack \(most recent call first\): + CMakeLists.txt:3 \(include\)$ diff --git a/Tests/RunCMake/Configure/CustomTargetAfterError.cmake b/Tests/RunCMake/Configure/CustomTargetAfterError.cmake new file mode 100644 index 000000000..3e264553b --- /dev/null +++ b/Tests/RunCMake/Configure/CustomTargetAfterError.cmake @@ -0,0 +1,3 @@ +message(SEND_ERROR "Error before add_custom_target") +add_custom_target(foo COMMAND echo) +message(SEND_ERROR "Error after add_custom_target") diff --git a/Tests/RunCMake/Configure/RunCMakeTest.cmake b/Tests/RunCMake/Configure/RunCMakeTest.cmake index 5ef0384db..58e1a2a98 100644 --- a/Tests/RunCMake/Configure/RunCMakeTest.cmake +++ b/Tests/RunCMake/Configure/RunCMakeTest.cmake @@ -1,5 +1,6 @@ include(RunCMake) +run_cmake(CustomTargetAfterError) run_cmake(ErrorLogs) run_cmake(FailCopyFileABI)