summaryrefslogtreecommitdiffstats
path: root/Tests/RunCMake
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2016-09-06 19:25:26 (GMT)
committerBrad King <brad.king@kitware.com>2016-09-06 20:20:39 (GMT)
commitf1ad71d7f8c066a7e0d0c11bb1ce9d5a5719ec5e (patch)
tree97df21a517176b2ae5b9420bef437fe8595da443 /Tests/RunCMake
parent8317ea01aa3cf9319ef907e127fa6dbf9666cc53 (diff)
downloadCMake-f1ad71d7f8c066a7e0d0c11bb1ce9d5a5719ec5e.zip
CMake-f1ad71d7f8c066a7e0d0c11bb1ce9d5a5719ec5e.tar.gz
CMake-f1ad71d7f8c066a7e0d0c11bb1ce9d5a5719ec5e.tar.bz2
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. Also revert commit 2af853de (cmMakefile: Simplify IssueMessage implementation) because the assertion it added (which was removed by the above commit and is restored by reverting it) is incorrect. We do have code paths that call cmMakefile::IssueMessage with an empty execution stack, such as in CheckForUnusedVariables's LogUnused call.
Diffstat (limited to 'Tests/RunCMake')
-rw-r--r--Tests/RunCMake/Configure/ContinueAfterError-result.txt1
-rw-r--r--Tests/RunCMake/Configure/ContinueAfterError-stderr.txt13
-rw-r--r--Tests/RunCMake/Configure/ContinueAfterError-stdout.txt11
-rw-r--r--Tests/RunCMake/Configure/ContinueAfterError.cmake19
-rw-r--r--Tests/RunCMake/Configure/RunCMakeTest.cmake1
5 files changed, 45 insertions, 0 deletions
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)