This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, next has been updated
       via  017e5a49c0b5014fe1652f9f509a96acd0557f18 (commit)
       via  797ab8a07f04ace93957097bfab082d0d9030e4e (commit)
      from  ea86f387bd68596159f38b18863072769cf3df58 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=017e5a49c0b5014fe1652f9f509a96acd0557f18
commit 017e5a49c0b5014fe1652f9f509a96acd0557f18
Merge: ea86f38 797ab8a
Author:     Brad King <brad.k...@kitware.com>
AuthorDate: Tue Sep 6 15:31:08 2016 -0400
Commit:     CMake Topic Stage <kwro...@kitware.com>
CommitDate: Tue Sep 6 15:31:08 2016 -0400

    Merge topic 'fix-continue-after-error' into next
    
    797ab8a0 cmMakefile: Restore nested error logic use of cmExecutionStatus


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=797ab8a07f04ace93957097bfab082d0d9030e4e
commit 797ab8a07f04ace93957097bfab082d0d9030e4e
Author:     Brad King <brad.k...@kitware.com>
AuthorDate: Tue Sep 6 15:25:26 2016 -0400
Commit:     Brad King <brad.k...@kitware.com>
CommitDate: Tue Sep 6 15:29:16 2016 -0400

    cmMakefile: Restore nested error logic use of cmExecutionStatus
    
    Since commit 14a8d61f (cmMakefile: Port nested error logic away from
    cmExecutionStatus) we fail to continue processing function and macro
    bodies after non-fatal errors.  A non-fatal error should not stop
    foreach loops, macro bodies, nested bodies, or the outer script.  Add a
    test covering these cases, and revert the change to fix them.

diff --git a/Source/cmExecutionStatus.h b/Source/cmExecutionStatus.h
index 14e1454..7302837 100644
--- a/Source/cmExecutionStatus.h
+++ b/Source/cmExecutionStatus.h
@@ -40,12 +40,16 @@ public:
     this->ReturnInvoked = false;
     this->BreakInvoked = false;
     this->ContinueInvoked = false;
+    this->NestedError = false;
   }
+  void SetNestedError(bool val) { this->NestedError = val; }
+  bool GetNestedError() { return this->NestedError; }
 
 private:
   bool ReturnInvoked;
   bool BreakInvoked;
   bool ContinueInvoked;
+  bool NestedError;
 };
 
 #endif
diff --git a/Source/cmFunctionCommand.cxx b/Source/cmFunctionCommand.cxx
index f0e4854..40c54db 100644
--- a/Source/cmFunctionCommand.cxx
+++ b/Source/cmFunctionCommand.cxx
@@ -76,7 +76,7 @@ public:
 };
 
 bool cmFunctionHelperCommand::InvokeInitialPass(
-  const std::vector<cmListFileArgument>& args, cmExecutionStatus&)
+  const std::vector<cmListFileArgument>& args, cmExecutionStatus& inStatus)
 {
   // Expand the argument list to the function.
   std::vector<std::string> expandedArgs;
@@ -129,11 +129,11 @@ bool cmFunctionHelperCommand::InvokeInitialPass(
   for (unsigned int c = 0; c < this->Functions.size(); ++c) {
     cmExecutionStatus status;
     if (!this->Makefile->ExecuteCommand(this->Functions[c], status) ||
-        (cmSystemTools::GetErrorOccuredFlag() &&
-         !cmSystemTools::GetFatalErrorOccured())) {
+        status.GetNestedError()) {
       // The error message should have already included the call stack
       // so we do not need to report an error here.
       functionScope.Quiet();
+      inStatus.SetNestedError(true);
       return false;
     }
     if (status.GetReturnInvoked()) {
diff --git a/Source/cmMacroCommand.cxx b/Source/cmMacroCommand.cxx
index 9d312ee..ee9dc8a 100644
--- a/Source/cmMacroCommand.cxx
+++ b/Source/cmMacroCommand.cxx
@@ -159,11 +159,11 @@ bool cmMacroHelperCommand::InvokeInitialPass(
     }
     cmExecutionStatus status;
     if (!this->Makefile->ExecuteCommand(newLFF, status) ||
-        (cmSystemTools::GetErrorOccuredFlag() &&
-         !cmSystemTools::GetFatalErrorOccured())) {
+        status.GetNestedError()) {
       // The error message should have already included the call stack
       // so we do not need to report an error here.
       macroScope.Quiet();
+      inStatus.SetNestedError(true);
       return false;
     }
     if (status.GetReturnInvoked()) {
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index 11ccca1..a759993 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -117,6 +117,10 @@ cmMakefile::~cmMakefile()
 void cmMakefile::IssueMessage(cmake::MessageType t,
                               std::string const& text) const
 {
+  assert(!this->ExecutionStatusStack.empty());
+  if ((t == cmake::FATAL_ERROR) || (t == cmake::INTERNAL_ERROR)) {
+    this->ExecutionStatusStack.back()->SetNestedError(true);
+  }
   this->GetCMakeInstance()->IssueMessage(t, text, this->GetBacktrace());
 }
 
@@ -277,19 +281,11 @@ bool cmMakefile::ExecuteCommand(const cmListFileFunction& 
lff,
       if (this->GetCMakeInstance()->GetTrace()) {
         this->PrintCommandTrace(lff);
       }
-
-      bool hadPreviousNonFatalError = cmSystemTools::GetErrorOccuredFlag() &&
-        !cmSystemTools::GetFatalErrorOccured();
-      cmSystemTools::ResetErrorOccuredFlag();
-
+      // Try invoking the command.
       bool invokeSucceeded = pcmd->InvokeInitialPass(lff.Arguments, status);
-      bool hadNestedError = cmSystemTools::GetErrorOccuredFlag() &&
-        !cmSystemTools::GetFatalErrorOccured();
-      if (hadPreviousNonFatalError) {
-        cmSystemTools::SetErrorOccured();
-      }
+      bool hadNestedError = status.GetNestedError();
       if (!invokeSucceeded || hadNestedError) {
-        if (!hadNestedError && !cmSystemTools::GetFatalErrorOccured()) {
+        if (!hadNestedError) {
           // The command invocation requested that we report an error.
           this->IssueMessage(cmake::FATAL_ERROR, pcmd->GetError());
         }
diff --git a/Tests/RunCMake/Configure/ContinueAfterError-result.txt 
b/Tests/RunCMake/Configure/ContinueAfterError-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/Configure/ContinueAfterError-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/Configure/ContinueAfterError-stderr.txt 
b/Tests/RunCMake/Configure/ContinueAfterError-stderr.txt
new file mode 100644
index 0000000..f40a3ef
--- /dev/null
+++ b/Tests/RunCMake/Configure/ContinueAfterError-stderr.txt
@@ -0,0 +1,13 @@
+^CMake Error at ContinueAfterError.cmake:[0-9]+ \(message\):
+  error in loop body
+Call Stack \(most recent call first\):
+  ContinueAfterError.cmake:[0-9]+ \(m\)
+  ContinueAfterError.cmake:[0-9]+ \(f\)
+  CMakeLists.txt:[0-9]+ \(include\)
++
+CMake Error at ContinueAfterError.cmake:[0-9]+ \(message\):
+  error in loop body
+Call Stack \(most recent call first\):
+  ContinueAfterError.cmake:[0-9]+ \(m\)
+  ContinueAfterError.cmake:[0-9]+ \(f\)
+  CMakeLists.txt:[0-9]+ \(include\)$
diff --git a/Tests/RunCMake/Configure/ContinueAfterError-stdout.txt 
b/Tests/RunCMake/Configure/ContinueAfterError-stdout.txt
new file mode 100644
index 0000000..f03aa07
--- /dev/null
+++ b/Tests/RunCMake/Configure/ContinueAfterError-stdout.txt
@@ -0,0 +1,11 @@
+-- before f
+--  start f
+--   start m
+--    start loop body
+--    end loop body
+--    start loop body
+--    end loop body
+--   end m
+--  end f
+-- after f
+-- Configuring incomplete, errors occurred!
diff --git a/Tests/RunCMake/Configure/ContinueAfterError.cmake 
b/Tests/RunCMake/Configure/ContinueAfterError.cmake
new file mode 100644
index 0000000..d094390
--- /dev/null
+++ b/Tests/RunCMake/Configure/ContinueAfterError.cmake
@@ -0,0 +1,19 @@
+macro(m)
+  message(STATUS "  start m")
+  foreach(i 1 2)
+    message(STATUS "   start loop body")
+    message(SEND_ERROR "error in loop body")
+    message(STATUS "   end loop body")
+  endforeach()
+  message(STATUS "  end m")
+endmacro()
+
+function(f)
+  message(STATUS " start f")
+  m()
+  message(STATUS " end f")
+endfunction()
+
+message(STATUS "before f")
+f()
+message(STATUS "after f")
diff --git a/Tests/RunCMake/Configure/RunCMakeTest.cmake 
b/Tests/RunCMake/Configure/RunCMakeTest.cmake
index 58e1a2a..91adb4e 100644
--- a/Tests/RunCMake/Configure/RunCMakeTest.cmake
+++ b/Tests/RunCMake/Configure/RunCMakeTest.cmake
@@ -1,5 +1,6 @@
 include(RunCMake)
 
+run_cmake(ContinueAfterError)
 run_cmake(CustomTargetAfterError)
 run_cmake(ErrorLogs)
 run_cmake(FailCopyFileABI)

-----------------------------------------------------------------------

Summary of changes:
 Source/cmExecutionStatus.h                          |    4 ++++
 Source/cmFunctionCommand.cxx                        |    6 +++---
 Source/cmMacroCommand.cxx                           |    4 ++--
 Source/cmMakefile.cxx                               |   18 +++++++-----------
 .../ContinueAfterError-result.txt}                  |    0
 .../Configure/ContinueAfterError-stderr.txt         |   13 +++++++++++++
 .../Configure/ContinueAfterError-stdout.txt         |   11 +++++++++++
 Tests/RunCMake/Configure/ContinueAfterError.cmake   |   19 +++++++++++++++++++
 Tests/RunCMake/Configure/RunCMakeTest.cmake         |    1 +
 9 files changed, 60 insertions(+), 16 deletions(-)
 copy Tests/RunCMake/{Android/BadSYSROOT-result.txt => 
Configure/ContinueAfterError-result.txt} (100%)
 create mode 100644 Tests/RunCMake/Configure/ContinueAfterError-stderr.txt
 create mode 100644 Tests/RunCMake/Configure/ContinueAfterError-stdout.txt
 create mode 100644 Tests/RunCMake/Configure/ContinueAfterError.cmake


hooks/post-receive
-- 
CMake
_______________________________________________
Cmake-commits mailing list
Cmake-commits@cmake.org
http://public.kitware.com/mailman/listinfo/cmake-commits

Reply via email to