Browse Source

cmake -E time: use C++11 chrono and better format output

fixes #24415
scivision 2 years ago
parent
commit
848f7b0a81
2 changed files with 6 additions and 20 deletions
  1. 5 19
      Source/cmcmd.cxx
  2. 1 1
      Tests/RunCMake/CommandLine/E_time-stdout.txt

+ 5 - 19
Source/cmcmd.cxx

@@ -50,10 +50,10 @@
 #endif
 
 #include <array>
+#include <chrono>
 #include <cstdio>
 #include <cstdlib>
 #include <cstring>
-#include <ctime>
 #include <iostream>
 #include <memory>
 #include <sstream>
@@ -1104,27 +1104,13 @@ int cmcmd::ExecuteCMakeCommand(std::vector<std::string> const& args,
     if (args[1] == "time" && args.size() > 2) {
       std::vector<std::string> command(args.begin() + 2, args.end());
 
-      clock_t clock_start;
-      clock_t clock_finish;
-      time_t time_start;
-      time_t time_finish;
-
-      time(&time_start);
-      clock_start = clock();
       int ret = 0;
+      auto time_start = std::chrono::steady_clock::now();
       cmSystemTools::RunSingleCommand(command, nullptr, nullptr, &ret);
+      auto time_finish = std::chrono::steady_clock::now();
 
-      clock_finish = clock();
-      time(&time_finish);
-
-      double clocks_per_sec = static_cast<double>(CLOCKS_PER_SEC);
-      std::cout << "Elapsed time: "
-                << static_cast<long>(time_finish - time_start) << " s. (time)"
-                << ", "
-                << static_cast<double>(clock_finish - clock_start) /
-          clocks_per_sec
-                << " s. (clock)"
-                << "\n";
+      std::chrono::duration<double> time_elapsed = time_finish - time_start;
+      std::cout << "Elapsed time (seconds): " << time_elapsed.count() << "\n";
       return ret;
     }
 

+ 1 - 1
Tests/RunCMake/CommandLine/E_time-stdout.txt

@@ -1,3 +1,3 @@
 ^hello  world
-Elapsed time: [^
+Elapsed time \(seconds\): [^
 ]*$