f1ad71d7f8
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.
This directory contains tests that run CMake to configure a project but do not actually build anything. To add a test: 1. Add a subdirectory named for the test, say ``<Test>/``. 2. In ``./CMakeLists.txt`` call ``add_RunCMake_test`` and pass the test directory name ``<Test>``. 3. Create script ``<Test>/RunCMakeTest.cmake`` in the directory containing:: include(RunCMake) run_cmake(SubTest1) ... run_cmake(SubTestN) where ``SubTest1`` through ``SubTestN`` are sub-test names each corresponding to an independent CMake run and project configuration. One may also add calls of the form:: run_cmake_command(SubTestI ${CMAKE_COMMAND} ...) to fully customize the test case command-line. Alternatively, if the test is to cover running ``ctest -S`` then use:: include(RunCTest) run_ctest(SubTest1) ... run_ctest(SubTestN) and create ``test.cmake.in``, ``CTestConfig.cmake.in``, and ``CMakeLists.txt.in`` files to be configured for each case. 4. Create file ``<Test>/CMakeLists.txt`` in the directory containing:: cmake_minimum_required(...) project(${RunCMake_TEST} NONE) # or languages needed include(${RunCMake_TEST}.cmake) where ``${RunCMake_TEST}`` is literal. A value for ``RunCMake_TEST`` will be passed to CMake by the ``run_cmake`` macro when running each sub-test. 5. Create a ``<Test>/<SubTest>.cmake`` file for each sub-test named above containing the actual test code. Optionally create files containing expected test results: ``<SubTest>-result.txt`` Process result expected if not "0" ``<SubTest>-stdout.txt`` Regex matching expected stdout content ``<SubTest>-stderr.txt`` Regex matching expected stderr content, if not "^$" ``<SubTest>-check.cmake`` Custom result check. Note that trailing newlines will be stripped from actual and expected test output before matching against the stdout and stderr expressions. The code in ``<SubTest>-check.cmake`` may use variables ``RunCMake_TEST_SOURCE_DIR`` Top of test source tree ``RunCMake_TEST_BINARY_DIR`` Top of test binary tree and an failure must store a message in ``RunCMake_TEST_FAILED``.