summaryrefslogtreecommitdiffstats
path: root/Help/command/message.rst
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2023-01-16 19:32:36 (GMT)
committerBrad King <brad.king@kitware.com>2023-01-18 16:37:11 (GMT)
commita78cba51978fbc805993604767c1902a249482ff (patch)
treeb4df0181bf56b68135e52c3745f60ab10c9d229c /Help/command/message.rst
parent645671d36f5cf0fa411d98a637f4edbc3d896c57 (diff)
downloadCMake-a78cba51978fbc805993604767c1902a249482ff.zip
CMake-a78cba51978fbc805993604767c1902a249482ff.tar.gz
CMake-a78cba51978fbc805993604767c1902a249482ff.tar.bz2
message: Add CONFIGURE_LOG mode to record a message in the configure log
Provide a replacement for `file(APPEND .../CMake{Output,Error}.log)` that records messages in the configure log. Issue: #23200
Diffstat (limited to 'Help/command/message.rst')
-rw-r--r--Help/command/message.rst50
1 files changed, 50 insertions, 0 deletions
diff --git a/Help/command/message.rst b/Help/command/message.rst
index 9ac4277..e8a4ea0 100644
--- a/Help/command/message.rst
+++ b/Help/command/message.rst
@@ -14,6 +14,8 @@ Synopsis
`Reporting checks`_
message(<checkState> "message text" ...)
+ `Configure Log`_
+ message(CONFIGURE_LOG <text>...)
General messages
^^^^^^^^^^^^^^^^
@@ -194,6 +196,54 @@ Output from the above would appear something like the following::
-- Finding partB - not found
-- Finding my things - missing components: B
+Configure Log
+^^^^^^^^^^^^^
+
+.. versionadded:: 3.26
+
+.. code-block:: cmake
+
+ message(CONFIGURE_LOG <text>...)
+
+Record a :ref:`configure-log message event <message configure-log event>`
+with the specified ``<text>``. By convention, if the text contains more
+than one line, the first line should be a summary of the event.
+
+This mode is intended to record the details of a system inspection check
+or other one-time operation guarded by a cache entry, but that is not
+performed using :command:`try_compile` or :command:`try_run`, which
+automatically log their details. Projects should avoid calling it every
+time CMake runs. For example:
+
+.. code-block:: cmake
+
+ if (NOT DEFINED MY_CHECK_RESULT)
+ # Print check summary in configure output.
+ message(CHECK_START "My Check")
+
+ # ... perform system inspection, e.g., with execute_process ...
+
+ # Cache the result so we do not run the check again.
+ set(MY_CHECK_RESULT "${MY_CHECK_RESULT}" CACHE INTERNAL "My Check")
+
+ # Record the check details in the cmake-configure-log.
+ message(CONFIGURE_LOG
+ "My Check Result: ${MY_CHECK_RESULT}\n"
+ "${details}"
+ )
+
+ # Print check result in configure output.
+ if(MY_CHECK_RESULT)
+ message(CHECK_PASS "passed")
+ else()
+ message(CHECK_FAIL "failed")
+ endif()
+ endif()
+
+If no project is currently being configured, such as in
+:ref:`cmake -P <Script Processing Mode>` script mode,
+this command does nothing.
+
See Also
^^^^^^^^