Browse Source

cmake: Store lowercase command names in profiling output

This ensures commands can be properly aggregated by tools
processing the profiling output.

Fixes: #20946
Craig Scott 5 years ago
parent
commit
7cf2f7d2af

+ 1 - 1
Source/cmMakefileProfilingData.cxx

@@ -58,7 +58,7 @@ void cmMakefileProfilingData::StartEntry(const cmListFileFunction& lff,
     cmsys::SystemInformation info;
     Json::Value v;
     v["ph"] = "B";
-    v["name"] = lff.Name.Original;
+    v["name"] = lff.Name.Lower;
     v["cat"] = "cmake";
     v["ts"] = Json::Value::UInt64(
       std::chrono::duration_cast<std::chrono::microseconds>(

+ 13 - 0
Tests/RunCMake/CommandLine/ProfilingTest-check.cmake

@@ -16,3 +16,16 @@ if (NOT JSON_TRAILER MATCHES "^}]$")
   set(RunCMake_TEST_FAILED "Expected valid JSON end")
   return()
 endif()
+
+file(STRINGS ${ProfilingTestOutput} upperCaseCommand
+  REGEX [["name"[ ]*:[ ]*"__TESTING_COMMAND_CASE"]])
+if (NOT "${upperCaseCommand}" STREQUAL "")
+  set(RunCMake_TEST_FAILED "Command name not stored in lowercase")
+endif()
+file(STRINGS ${ProfilingTestOutput} lowerCaseCommand
+  REGEX [["name"[ ]*:[ ]*"__testing_command_case"]])
+list(LENGTH lowerCaseCommand numInvocations)
+if (NOT numInvocations EQUAL 1)
+  set(RunCMake_TEST_FAILED
+      "Unexpected number of lowercase command names: ${numInvocations}")
+endif()

+ 5 - 1
Tests/RunCMake/CommandLine/ProfilingTest.cmake

@@ -1 +1,5 @@
-# This file is intentionally left blank
+function(__testing_command_case)
+endfunction()
+
+# This must not appear in the profiling output as uppercase
+__TESTING_COMMAND_CASE()