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, master has been updated
       via  f4131e4e1b5ac9ea8940a04b81e7b2ef2fba5d3f (commit)
       via  5f6fd917a3c27f151e0dd05d12a75ab189f546e0 (commit)
      from  f3bbbb42f17c24737acf54d7626901f185ce6b6b (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=f4131e4e1b5ac9ea8940a04b81e7b2ef2fba5d3f
commit f4131e4e1b5ac9ea8940a04b81e7b2ef2fba5d3f
Merge: f3bbbb4 5f6fd91
Author:     Craig Scott <craig.sc...@crascit.com>
AuthorDate: Mon Jul 22 11:02:24 2019 +0000
Commit:     Kitware Robot <kwro...@kitware.com>
CommitDate: Mon Jul 22 07:02:50 2019 -0400

    Merge topic 'feature/message-indent'
    
    5f6fd917a3 message(): Control indentation via CMAKE_MESSAGE_INDENT
    
    Acked-by: Kitware Robot <kwro...@kitware.com>
    Merge-request: !3464


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=5f6fd917a3c27f151e0dd05d12a75ab189f546e0
commit 5f6fd917a3c27f151e0dd05d12a75ab189f546e0
Author:     Alex Turbov <i.za...@gmail.com>
AuthorDate: Fri Jun 21 00:46:53 2019 +0300
Commit:     Craig Scott <craig.sc...@crascit.com>
CommitDate: Sun Jul 21 10:19:30 2019 +1000

    message(): Control indentation via CMAKE_MESSAGE_INDENT

diff --git a/Help/command/message.rst b/Help/command/message.rst
index 5dca6b4..3002842 100644
--- a/Help/command/message.rst
+++ b/Help/command/message.rst
@@ -60,6 +60,11 @@ messages one at a time on a status line and other messages 
in an
 interactive pop-up box.  The ``--loglevel`` command-line option to each of
 these tools can be used to control which messages will be shown.
 
+Messages of log levels ``NOTICE`` and below will also have each line preceded
+by the content of the :variable:`CMAKE_MESSAGE_INDENT` variable (converted to
+a single string by concatenating its list items).  For ``STATUS`` to ``TRACE``
+messages, this indenting content will be inserted after the hyphens.
+
 CMake Warning and Error message text displays using a simple markup
 language.  Non-indented text is formatted in line-wrapped paragraphs
 delimited by newlines.  Indented text is considered pre-formatted.
diff --git a/Help/manual/cmake-variables.7.rst 
b/Help/manual/cmake-variables.7.rst
index e0ce6f7..a7079bc 100644
--- a/Help/manual/cmake-variables.7.rst
+++ b/Help/manual/cmake-variables.7.rst
@@ -69,6 +69,7 @@ Variables that Provide Information
    /variable/CMAKE_MAKE_PROGRAM
    /variable/CMAKE_MATCH_COUNT
    /variable/CMAKE_MATCH_n
+   /variable/CMAKE_MESSAGE_INDENT
    /variable/CMAKE_MINIMUM_REQUIRED_VERSION
    /variable/CMAKE_MINOR_VERSION
    /variable/CMAKE_NETRC
diff --git a/Help/release/dev/message-indent.rst 
b/Help/release/dev/message-indent.rst
new file mode 100644
index 0000000..b170708
--- /dev/null
+++ b/Help/release/dev/message-indent.rst
@@ -0,0 +1,5 @@
+message-indent
+--------------
+
+* The :command:`message` command learned indentation control with the new
+  :variable:`CMAKE_MESSAGE_INDENT` variable.
diff --git a/Help/variable/CMAKE_MESSAGE_INDENT.rst 
b/Help/variable/CMAKE_MESSAGE_INDENT.rst
new file mode 100644
index 0000000..f7975ab
--- /dev/null
+++ b/Help/variable/CMAKE_MESSAGE_INDENT.rst
@@ -0,0 +1,30 @@
+CMAKE_MESSAGE_INDENT
+--------------------
+
+The :command:`message` command joins the strings from this list and for
+log levels of ``NOTICE`` and below, it prepends the resultant string to
+each line of the message.
+
+Example:
+
+.. code-block:: cmake
+
+  list(APPEND listVar one two three)
+
+  message(VERBOSE [[Collected items in the "listVar":]])
+  list(APPEND CMAKE_MESSAGE_INDENT "  ")
+
+  foreach(item IN LISTS listVar)
+    message(VERBOSE ${item})
+  endforeach()
+
+  list(POP_BACK CMAKE_MESSAGE_INDENT)
+  message(VERBOSE "No more indent")
+
+Which results in the following output:
+
+  -- Collected items in the "listVar":
+  --   one
+  --   two
+  --   tree
+  -- No more indent
diff --git a/Source/cmMessageCommand.cxx b/Source/cmMessageCommand.cxx
index 5320ec5..58f3b2f 100644
--- a/Source/cmMessageCommand.cxx
+++ b/Source/cmMessageCommand.cxx
@@ -25,7 +25,6 @@ bool cmMessageCommand::InitialPass(std::vector<std::string> 
const& args,
   auto i = args.cbegin();
 
   auto type = MessageType::MESSAGE;
-  auto status = false;
   auto fatal = false;
   auto level = cmake::LogLevel::LOG_UNDEFINED;
   if (*i == "SEND_ERROR") {
@@ -55,19 +54,15 @@ bool cmMessageCommand::InitialPass(std::vector<std::string> 
const& args,
     }
     ++i;
   } else if (*i == "STATUS") {
-    status = true;
     level = cmake::LogLevel::LOG_STATUS;
     ++i;
   } else if (*i == "VERBOSE") {
-    status = true;
     level = cmake::LogLevel::LOG_VERBOSE;
     ++i;
   } else if (*i == "DEBUG") {
-    status = true;
     level = cmake::LogLevel::LOG_DEBUG;
     ++i;
   } else if (*i == "TRACE") {
-    status = true;
     level = cmake::LogLevel::LOG_TRACE;
     ++i;
   } else if (*i == "DEPRECATION") {
@@ -105,17 +100,46 @@ bool 
cmMessageCommand::InitialPass(std::vector<std::string> const& args,
 
   auto message = cmJoin(cmMakeRange(i, args.cend()), "");
 
-  if (type != MessageType::MESSAGE) {
-    // we've overridden the message type, above, so display it directly
-    cmMessenger* m = this->Makefile->GetMessenger();
-    m->DisplayMessage(type, message, this->Makefile->GetBacktrace());
-  } else {
-    if (status) {
-      this->Makefile->DisplayStatus(message, -1);
-    } else {
+  if (cmake::LogLevel::LOG_NOTICE <= level) {
+    // Check if any indentation has requested:
+    // `CMAKE_MESSAGE_INDENT` is a list of "padding" pieces
+    // to be joined and prepended to the message lines.
+    auto indent =
+      cmJoin(cmSystemTools::ExpandedListArgument(
+               this->Makefile->GetSafeDefinition("CMAKE_MESSAGE_INDENT")),
+             "");
+    // Make every line of the `message` indented
+    // NOTE Can't reuse `cmDocumentationFormatter::PrintPreformatted`
+    // here cuz it appends `\n` to the EOM ;-(
+    cmSystemTools::ReplaceString(message, "\n", "\n" + indent);
+    message = indent + message;
+  }
+
+  switch (level) {
+    case cmake::LogLevel::LOG_ERROR:
+    case cmake::LogLevel::LOG_WARNING:
+      // we've overridden the message type, above, so display it directly
+      this->Makefile->GetMessenger()->DisplayMessage(
+        type, message, this->Makefile->GetBacktrace());
+      break;
+
+    case cmake::LogLevel::LOG_NOTICE:
       cmSystemTools::Message(message);
-    }
+      break;
+
+    case cmake::LogLevel::LOG_STATUS:
+    case cmake::LogLevel::LOG_VERBOSE:
+    case cmake::LogLevel::LOG_DEBUG:
+    case cmake::LogLevel::LOG_TRACE:
+      this->Makefile->DisplayStatus(message, -1);
+      break;
+
+    default:
+      assert("Unexpected log level! Review the `cmMessageCommand.cxx`." &&
+             false);
+      break;
   }
+
   if (fatal) {
     cmSystemTools::SetFatalErrorOccured();
   }
diff --git a/Tests/RunCMake/message/RunCMakeTest.cmake 
b/Tests/RunCMake/message/RunCMakeTest.cmake
index cecfc7f..3c7e51c 100644
--- a/Tests/RunCMake/message/RunCMakeTest.cmake
+++ b/Tests/RunCMake/message/RunCMakeTest.cmake
@@ -52,3 +52,12 @@ run_cmake_command(
     message-loglevel-trace
     ${CMAKE_COMMAND} --loglevel=trace -P 
${RunCMake_SOURCE_DIR}/message-all-loglevels.cmake
   )
+
+run_cmake_command(
+    message-indent
+    ${CMAKE_COMMAND} -P ${RunCMake_SOURCE_DIR}/message-indent.cmake
+  )
+run_cmake_command(
+    message-indent-multiline
+    ${CMAKE_COMMAND} -P ${RunCMake_SOURCE_DIR}/message-indent-multiline.cmake
+  )
diff --git a/Tests/RunCMake/message/message-indent-multiline-stderr.txt 
b/Tests/RunCMake/message/message-indent-multiline-stderr.txt
new file mode 100644
index 0000000..5853a31
--- /dev/null
+++ b/Tests/RunCMake/message/message-indent-multiline-stderr.txt
@@ -0,0 +1,3 @@
+ >This is
+ >the multiline
+ >message
diff --git a/Tests/RunCMake/message/message-indent-multiline-stdout.txt 
b/Tests/RunCMake/message/message-indent-multiline-stdout.txt
new file mode 100644
index 0000000..ae0c72e
--- /dev/null
+++ b/Tests/RunCMake/message/message-indent-multiline-stdout.txt
@@ -0,0 +1,8 @@
+--  >This is
+ >the multiline
+ >message
+ >
+ >
+--  >This is
+ >the multiline
+ >message
diff --git a/Tests/RunCMake/message/message-indent-multiline.cmake 
b/Tests/RunCMake/message/message-indent-multiline.cmake
new file mode 100644
index 0000000..0f789bf
--- /dev/null
+++ b/Tests/RunCMake/message/message-indent-multiline.cmake
@@ -0,0 +1,13 @@
+# NOTE Use non-space indent string, to check indentation
+# of line endings and "empty" lines.
+# ALERT Do not put any space characters after the non-space!
+list(APPEND CMAKE_MESSAGE_INDENT " >")
+set(msg [[This is
+the multiline
+message]]) # No `\n` at the end!
+# NOTE Two empty lines after the text
+message(STATUS "${msg}\n\n")
+message(STATUS "${msg}")
+# This is just to make sure NOTICE messages are also get indented:
+# https://gitlab.kitware.com/cmake/cmake/issues/19418#note_588011
+message(NOTICE "${msg}")
diff --git a/Tests/RunCMake/message/message-indent-stdout.txt 
b/Tests/RunCMake/message/message-indent-stdout.txt
new file mode 100644
index 0000000..b2c3c60
--- /dev/null
+++ b/Tests/RunCMake/message/message-indent-stdout.txt
@@ -0,0 +1,13 @@
+-- COUNTING:
+--    COUNTING_ENGLISH:
+--       one
+--       two
+--       three
+--       four
+--       five
+--    COUNTING_BAHASA:
+--       satu
+--       dua
+--       tiga
+--       empat
+--       lima
diff --git a/Tests/RunCMake/message/message-indent.cmake 
b/Tests/RunCMake/message/message-indent.cmake
new file mode 100644
index 0000000..c07ff45
--- /dev/null
+++ b/Tests/RunCMake/message/message-indent.cmake
@@ -0,0 +1,19 @@
+function(debug_list LIST_VAR)
+  message(STATUS "${LIST_VAR}:")
+  list(APPEND CMAKE_MESSAGE_INDENT "   ")
+  foreach(_item IN LISTS ${LIST_VAR})
+    list(LENGTH ${_item} _item_len)
+    if(_item_len GREATER 1)
+      debug_list(${_item})
+    else()
+      message(STATUS "${_item}")
+    endif()
+  endforeach()
+endfunction()
+
+list(APPEND COUNTING_ENGLISH one two three four five)
+list(APPEND COUNTING_BAHASA satu dua tiga empat lima)
+
+list(APPEND COUNTING COUNTING_ENGLISH COUNTING_BAHASA)
+
+debug_list(COUNTING)

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

Summary of changes:
 Help/command/message.rst                           |  5 +++
 Help/manual/cmake-variables.7.rst                  |  1 +
 Help/release/dev/message-indent.rst                |  5 +++
 Help/variable/CMAKE_MESSAGE_INDENT.rst             | 30 +++++++++++++
 Source/cmMessageCommand.cxx                        | 52 ++++++++++++++++------
 Tests/RunCMake/message/RunCMakeTest.cmake          |  9 ++++
 .../message/message-indent-multiline-stderr.txt    |  3 ++
 .../message/message-indent-multiline-stdout.txt    |  8 ++++
 .../message/message-indent-multiline.cmake         | 13 ++++++
 Tests/RunCMake/message/message-indent-stdout.txt   | 13 ++++++
 Tests/RunCMake/message/message-indent.cmake        | 19 ++++++++
 11 files changed, 144 insertions(+), 14 deletions(-)
 create mode 100644 Help/release/dev/message-indent.rst
 create mode 100644 Help/variable/CMAKE_MESSAGE_INDENT.rst
 create mode 100644 Tests/RunCMake/message/message-indent-multiline-stderr.txt
 create mode 100644 Tests/RunCMake/message/message-indent-multiline-stdout.txt
 create mode 100644 Tests/RunCMake/message/message-indent-multiline.cmake
 create mode 100644 Tests/RunCMake/message/message-indent-stdout.txt
 create mode 100644 Tests/RunCMake/message/message-indent.cmake


hooks/post-receive
-- 
CMake
_______________________________________________
Cmake-commits mailing list
Cmake-commits@cmake.org
https://cmake.org/mailman/listinfo/cmake-commits

Reply via email to