diff --git a/Tests/RunCMake/README.rst b/Tests/RunCMake/README.rst index d41c41acea..412b2b0eae 100644 --- a/Tests/RunCMake/README.rst +++ b/Tests/RunCMake/README.rst @@ -86,17 +86,141 @@ To add a test: Note that trailing newlines will be stripped from actual and expected test output before matching against the stdout and stderr expressions. - The code in ``-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``. + The code in ``-check.cmake`` may use the `RunCMake Variables`_. + On failure the script must store a message in ``RunCMake_TEST_FAILED``. The check script may optionally set ``RunCMake_TEST_FAILURE_MESSAGE`` with additional text to be included in the message if the test fails. +RunCMake Commands +================= + +A ``RunCMakeTest.cmake`` script, after ``include(RunCMake)``, may use +the following commands. + +``run_cmake()`` + Run CMake or another command and check expected results described by + ``-{result,stdout,stderr}.txt`` and ``-check.cmake``. + The command is executed by a call of the form:: + + execute_process( + COMMAND ${RunCMake_TEST_COMMAND} ${RunCMake_TEST_OPTIONS} + WORKING_DIRECTORY "${RunCMake_TEST_COMMAND_WORKING_DIRECTORY}" + [TIMEOUT "${RunCMake_TEST_TIMEOUT}"] + ... + ) + + Behavior may be customized by setting `RunCMake Variables`_ before + the call. + +``run_cmake_command( ...)`` + Sets ``RunCMake_TEST_COMMAND`` to ``;...`` + and calls ``run_cmake()``. + + This is useful to run an arbitrary command. + +``run_cmake_script( ...)`` + Sets ``RunCMake_TEST_COMMAND`` to + ``${CMAKE_COMMAND};...;-P;${RunCMake_SOURCE_DIR}/.cmake`` + and calls ``run_cmake()``. + + This is useful to run CMake in script mode without configuring a project. + +``run_cmake_with_options( ...)`` + Sets ``RunCMake_TEST_OPTIONS`` to ``...`` + and calls ``run_cmake()``. + +``run_cmake_with_raw_args( "")`` + Calls ``run_cmake()`` with the underlying ``execute_process()`` + call extended with the content of ```` treated as literal source + code of CMake language command arguments:: + + execute_process( + COMMAND ${RunCMake_TEST_COMMAND} ${RunCMake_TEST_OPTIONS} + ... + ) + + This is useful to pass arguments to the test command that cannot be + encoded in CMake language ``;``-separated lists. + +RunCMake Variables +================== + +The behavior of `RunCMake Commands`_ such as ``run_cmake()`` may be +customized by setting the following variables before a call. + +``RunCMake_GENERATOR`` + CMake generator to use when configuring projects. + This provided to ``RunCMakeTest.cmake`` scripts automatically + when they are executed, based on the CMake generator used to + configure the test suite. + + For some generators, additional variables are also provided: + + ``RunCMake_GENERATOR_PLATFORM`` + Specifies the ``CMAKE_GENERATOR_PLATFORM``. + + ``RunCMake_GENERATOR_TOOLSET`` + Specifies the ``CMAKE_GENERATOR_TOOLSET``. + + ``RunCMake_GENERATOR_INSTANCE`` + Specifies the ``CMAKE_GENERATOR_INSTANCE``. + +``RunCMake_GENERATOR_IS_MULTI_CONFIG`` + Boolean value indicating whether ``${RunCMake_GENERATOR}`` is a + multi-config generator. + This provided to ``RunCMakeTest.cmake`` scripts automatically + when they are executed, based on the CMake generator used to + configure the test suite. + +``RunCMake_SOURCE_DIR`` + Absolute path to the ``Tests/RunCMake/`` directory in + the CMake source tree. This provided to ``RunCMakeTest.cmake`` + scripts automatically when they are executed. + +``RunCMake_BINARY_DIR`` + Absolute path to the ``Tests/RunCMake/`` directory in + the CMake binary tree. This provided to ``RunCMakeTest.cmake`` + scripts automatically when they are executed. + +``RunCMake_TEST_SOURCE_DIR`` + Absolute path to the individual test case's source tree. + If not set, defaults to ``${RunCMake_SOURCE_DIR}``. + +``RunCMake_TEST_BINARY_DIR`` + Absolute path to the individual test case's binary tree. + If not set, defaults to ``${RunCMake_BINARY_DIR}/-build``. + +``RunCMake_TEST_NO_CLEAN`` + Boolean value indicating whether ``run_cmake()`` should remove the + ``${RunCMake_TEST_BINARY_DIR}`` directory before running the test case. + If not set, or if set to a false value, the directory is removed. + +``RunCMake_TEST_COMMAND`` + The command for ``run_cmake()`` to execute. + If not set, defaults to running CMake to generate a project:: + + ${CMAKE_COMMAND} ${RunCMake_TEST_SOURCE_DIR} \ + -G ${RunCMake_GENERATOR} ... -DRunCMake_TEST= + +``RunCMake_TEST_COMMAND_WORKING_DIRECTORY`` + The working directory in which ``run_cmake()`` to execute its command. + If not set, defaults to ``${RunCMake_TEST_BINARY_DIR}``. + +``RunCMake_TEST_OPTIONS`` + Additional command-line options for ``run_cmake()`` to pass to + CMake when configuring a project with a default ``RunCMake_TEST_COMMAND``. + If not set, defaults to empty. + If ``RunCMake_TEST_COMMAND`` is set, ``RunCMake_TEST_OPTIONS`` is forced + to empty. + +``RunCMake_TEST_OUTPUT_MERGE`` + Boolean value indicating whether ``run_cmake()`` should redirect + the test process's ``stderr`` into its ``stdout``. + +``RunCMake_TEST_TIMEOUT`` + Specify a timeout, in seconds, for ``run_cmake()`` to pass to its + underlying ``execute_process()`` call using the ``TIMEOUT`` option. + Running a Test ==============