JSON: Improve JSON error message formatting

This improves the output of JSON-related error messages. It adds the filename to
the output and excludes the column number.

This is particularly useful when there are multiple JSON files being read that
could be responsible for an error, ie CMakePresets.json and
CMakeUserPresets.json, or multiple instrumentation queries.

Issue: #26717
diff --git a/Source/CTest/cmCTestMultiProcessHandler.cxx b/Source/CTest/cmCTestMultiProcessHandler.cxx
index bf8f3bc..1fd0fa8 100644
--- a/Source/CTest/cmCTestMultiProcessHandler.cxx
+++ b/Source/CTest/cmCTestMultiProcessHandler.cxx
@@ -1668,7 +1668,7 @@
 {
   if (!this->ResourceSpec.ReadFromJSONFile(this->ResourceSpecFile)) {
     error = cmStrCat("Could not read/parse resource spec file ",
-                     this->ResourceSpecFile, ": ",
+                     this->ResourceSpecFile, ":\n",
                      this->ResourceSpec.parseState.GetErrorMessage());
     return false;
   }
diff --git a/Source/cmCTest.cxx b/Source/cmCTest.cxx
index 2e0b07e..5b9c0fb 100644
--- a/Source/cmCTest.cxx
+++ b/Source/cmCTest.cxx
@@ -1572,7 +1572,7 @@
   auto result = settingsFile.ReadProjectPresets(workingDirectory);
   if (result != true) {
     cmSystemTools::Error(cmStrCat("Could not read presets from ",
-                                  workingDirectory, ":",
+                                  workingDirectory, ":\n",
                                   settingsFile.parseState.GetErrorMessage()));
     return false;
   }
diff --git a/Source/cmInstrumentation.cxx b/Source/cmInstrumentation.cxx
index 2c4414f..19d0cf4 100644
--- a/Source/cmInstrumentation.cxx
+++ b/Source/cmInstrumentation.cxx
@@ -148,6 +148,16 @@
   auto query = cmInstrumentationQuery();
   query.ReadJSON(file, this->errorMsg, this->queries, this->hooks,
                  this->callbacks);
+  if (!this->errorMsg.empty()) {
+    cmSystemTools::Error(cmStrCat(
+      "Could not load instrumentation queries from ",
+      cmSystemTools::GetParentDirectory(file), ":\n", this->errorMsg));
+  }
+}
+
+bool cmInstrumentation::HasErrors() const
+{
+  return !this->errorMsg.empty();
 }
 
 void cmInstrumentation::WriteJSONQuery(
diff --git a/Source/cmInstrumentation.h b/Source/cmInstrumentation.h
index 0382495..b2eb7ca 100644
--- a/Source/cmInstrumentation.h
+++ b/Source/cmInstrumentation.h
@@ -53,7 +53,7 @@
   int CollectTimingAfterBuild(int ppid);
   void AddHook(cmInstrumentationQuery::Hook hook);
   void AddQuery(cmInstrumentationQuery::Query query);
-  std::string errorMsg;
+  bool HasErrors() const;
   std::string const& GetCDashDir();
 
 private:
@@ -83,5 +83,6 @@
   std::vector<std::string> queryFiles;
   std::map<std::string, std::string> cdashSnippetsMap;
   Json::Value preTestStats;
+  std::string errorMsg;
   bool hasQuery = false;
 };
diff --git a/Source/cmJSONState.cxx b/Source/cmJSONState.cxx
index 7add5df..1d87728 100644
--- a/Source/cmJSONState.cxx
+++ b/Source/cmJSONState.cxx
@@ -12,12 +12,14 @@
 #include "cmsys/FStream.hxx"
 
 #include "cmStringAlgorithms.h"
+#include "cmSystemTools.h"
 
-cmJSONState::cmJSONState(std::string const& filename, Json::Value* root)
+cmJSONState::cmJSONState(std::string jsonFile, Json::Value* root)
+  : Filename(std::move(jsonFile))
 {
-  cmsys::ifstream fin(filename.c_str(), std::ios::in | std::ios::binary);
+  cmsys::ifstream fin(this->Filename.c_str(), std::ios::in | std::ios::binary);
   if (!fin) {
-    this->AddError(cmStrCat("File not found: ", filename));
+    this->AddError(cmStrCat("File not found: ", this->Filename));
     return;
   }
   // If there's a BOM, toss it.
@@ -38,7 +40,7 @@
   Json::CharReaderBuilder::strictMode(&builder.settings_);
   std::string errMsg;
   if (!Json::parseFromStream(builder, fin, root, &errMsg)) {
-    errMsg = cmStrCat("JSON Parse Error: ", filename, ":\n", errMsg);
+    errMsg = cmStrCat("JSON Parse Error: ", this->Filename, ":\n", errMsg);
     this->AddError(errMsg);
   }
 }
@@ -72,16 +74,17 @@
 std::string cmJSONState::GetErrorMessage(bool showContext)
 {
   std::string message;
+  std::string filenameName = cmSystemTools::GetFilenameName(this->Filename);
   for (auto const& error : this->errors) {
+    Location loc = error.GetLocation();
+    if (!filenameName.empty() && loc.line > 0) {
+      message = cmStrCat(message, filenameName, ':', loc.line, ": ");
+    }
     message = cmStrCat(message, error.GetErrorMessage(), "\n");
-    if (showContext) {
-      Location loc = error.GetLocation();
-      if (loc.column > 0) {
-        message = cmStrCat(message, GetJsonContext(loc), "\n");
-      }
+    if (showContext && loc.line > 0) {
+      message = cmStrCat(message, GetJsonContext(loc), "\n");
     }
   }
-  message = cmStrCat("\n", message);
   message.pop_back();
   return message;
 }
diff --git a/Source/cmJSONState.h b/Source/cmJSONState.h
index 9dfa3e2..837ff2a 100644
--- a/Source/cmJSONState.h
+++ b/Source/cmJSONState.h
@@ -9,8 +9,6 @@
 #include <utility>
 #include <vector>
 
-#include "cmStringAlgorithms.h"
-
 namespace Json {
 class Value;
 }
@@ -26,7 +24,7 @@
 public:
   using JsonPair = std::pair<std::string const, Json::Value const*>;
   cmJSONState() = default;
-  cmJSONState(std::string const& filename, Json::Value* root);
+  cmJSONState(std::string jsonFile, Json::Value* root);
   void AddError(std::string const& errMsg);
   void AddErrorAtValue(std::string const& errMsg, Json::Value const* value);
   void AddErrorAtOffset(std::string const& errMsg, std::ptrdiff_t offset);
@@ -46,15 +44,7 @@
     Error(std::string errMsg)
       : location({ -1, -1 })
       , message(std::move(errMsg)) {};
-    std::string GetErrorMessage() const
-    {
-      std::string output = message;
-      if (location.line > 0) {
-        output = cmStrCat("Error: @", location.line, ",", location.column,
-                          ": ", output);
-      }
-      return output;
-    }
+    std::string GetErrorMessage() const { return message; }
     Location GetLocation() const { return location; }
 
   private:
@@ -70,4 +60,5 @@
 private:
   std::string GetJsonContext(Location loc);
   Location LocateInDocument(ptrdiff_t offset);
+  std::string Filename;
 };
diff --git a/Source/cmake.cxx b/Source/cmake.cxx
index f880884..d872594 100644
--- a/Source/cmake.cxx
+++ b/Source/cmake.cxx
@@ -1525,8 +1525,8 @@
     auto result = presetsGraph.ReadProjectPresets(this->GetHomeDirectory());
     if (result != true) {
       std::string errorMsg =
-        cmStrCat("Could not read presets from ", this->GetHomeDirectory(), ":",
-                 presetsGraph.parseState.GetErrorMessage());
+        cmStrCat("Could not read presets from ", this->GetHomeDirectory(),
+                 ":\n", presetsGraph.parseState.GetErrorMessage());
       cmSystemTools::Error(errorMsg);
       return;
     }
@@ -2620,8 +2620,7 @@
   // actually do the configure
   auto startTime = std::chrono::steady_clock::now();
 #if !defined(CMAKE_BOOTSTRAP)
-  if (!this->Instrumentation->errorMsg.empty()) {
-    cmSystemTools::Error(this->Instrumentation->errorMsg);
+  if (this->Instrumentation->HasErrors()) {
     return 1;
   }
   auto doConfigure = [this]() -> int {
@@ -3735,8 +3734,8 @@
     auto result = settingsFile.ReadProjectPresets(this->GetHomeDirectory());
     if (result != true) {
       cmSystemTools::Error(
-        cmStrCat("Could not read presets from ", this->GetHomeDirectory(), ":",
-                 settingsFile.parseState.GetErrorMessage()));
+        cmStrCat("Could not read presets from ", this->GetHomeDirectory(),
+                 ":\n", settingsFile.parseState.GetErrorMessage()));
       return 1;
     }
 
@@ -3962,8 +3961,7 @@
 
 #if !defined(CMAKE_BOOTSTRAP)
   cmInstrumentation instrumentation(dir);
-  if (!instrumentation.errorMsg.empty()) {
-    cmSystemTools::Error(instrumentation.errorMsg);
+  if (instrumentation.HasErrors()) {
     return 1;
   }
   instrumentation.CollectTimingData(
@@ -4105,7 +4103,7 @@
   auto result = settingsFile.ReadProjectPresets(this->GetHomeDirectory());
   if (result != true) {
     cmSystemTools::Error(cmStrCat("Could not read presets from ",
-                                  this->GetHomeDirectory(), ":",
+                                  this->GetHomeDirectory(), ":\n",
                                   settingsFile.parseState.GetErrorMessage()));
     return 1;
   }
diff --git a/Tests/CMakeLib/testJSONHelpers.cxx b/Tests/CMakeLib/testJSONHelpers.cxx
index ef7da75..02ec322 100644
--- a/Tests/CMakeLib/testJSONHelpers.cxx
+++ b/Tests/CMakeLib/testJSONHelpers.cxx
@@ -505,7 +505,7 @@
   ASSERT_TRUE(m == expected);
 
   auto error = state.GetErrorMessage();
-  ASSERT_TRUE(error == "\nFaulty Object Property");
+  ASSERT_TRUE(error == "Faulty Object Property");
 
   return true;
 }
diff --git a/Tests/RunCMake/CMakePresets/CommentValidOldSchema-stderr.txt b/Tests/RunCMake/CMakePresets/CommentValidOldSchema-stderr.txt
index b102f5b..8296a51 100644
--- a/Tests/RunCMake/CMakePresets/CommentValidOldSchema-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/CommentValidOldSchema-stderr.txt
@@ -1,2 +1,2 @@
 ^CMake Error: Could not read presets from .*
-Error: @2,15: Invalid extra field \"\$comment\" in root object
+CMakePresets.json:2: Invalid extra field \"\$comment\" in root object
diff --git a/Tests/RunCMake/CMakePresets/EmptyPenvInInclude-stderr.txt b/Tests/RunCMake/CMakePresets/EmptyPenvInInclude-stderr.txt
index e0f858a..77579fc 100644
--- a/Tests/RunCMake/CMakePresets/EmptyPenvInInclude-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/EmptyPenvInInclude-stderr.txt
@@ -1,5 +1,5 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/EmptyPenvInInclude:
-Error: @3,15: Invalid "include" field
+CMakePresets.json:3: Invalid "include" field
   "include": \["\$penv\{\}"\],
               \^$
diff --git a/Tests/RunCMake/CMakePresets/EmptyPresetName-stderr.txt b/Tests/RunCMake/CMakePresets/EmptyPresetName-stderr.txt
index 6f84690..6cb7c2a 100644
--- a/Tests/RunCMake/CMakePresets/EmptyPresetName-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/EmptyPresetName-stderr.txt
@@ -1,5 +1,5 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/EmptyPresetName:
-Error: @5,15: Invalid Preset Name
+CMakePresets.json:5: Invalid Preset Name
       "name": "",
               \^$
diff --git a/Tests/RunCMake/CMakePresets/ExtraPresetField-stderr.txt b/Tests/RunCMake/CMakePresets/ExtraPresetField-stderr.txt
index 2e94831..ce25505 100644
--- a/Tests/RunCMake/CMakePresets/ExtraPresetField-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/ExtraPresetField-stderr.txt
@@ -1,5 +1,5 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/ExtraPresetField:
-Error: @8,18: Invalid extra field "invalid" in Preset
+CMakePresets.json:8: Invalid extra field "invalid" in Preset
       "invalid": true
                  \^$
diff --git a/Tests/RunCMake/CMakePresets/ExtraRootField-stderr.txt b/Tests/RunCMake/CMakePresets/ExtraRootField-stderr.txt
index 554cd4a..0af4eda 100644
--- a/Tests/RunCMake/CMakePresets/ExtraRootField-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/ExtraRootField-stderr.txt
@@ -1,5 +1,5 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/ExtraRootField:
-Error: @10,14: Invalid extra field "invalid" in root object
+CMakePresets.json:10: Invalid extra field "invalid" in root object
   "invalid": true
              \^$
diff --git a/Tests/RunCMake/CMakePresets/ExtraVariableField-stderr.txt b/Tests/RunCMake/CMakePresets/ExtraVariableField-stderr.txt
index 5cb777c..adf6996 100644
--- a/Tests/RunCMake/CMakePresets/ExtraVariableField-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/ExtraVariableField-stderr.txt
@@ -1,5 +1,5 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/ExtraVariableField:
-Error: @11,22: Invalid extra field "invalid" in variable "EXTRA" for preset "ExtraVariableField"
+CMakePresets.json:11: Invalid extra field "invalid" in variable "EXTRA" for preset "ExtraVariableField"
           "invalid": true
                      \^$
diff --git a/Tests/RunCMake/CMakePresets/HighVersion-stderr.txt b/Tests/RunCMake/CMakePresets/HighVersion-stderr.txt
index f8454b9..f1e7c04 100644
--- a/Tests/RunCMake/CMakePresets/HighVersion-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/HighVersion-stderr.txt
@@ -1,5 +1,5 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/HighVersion:
-Error: @2,14: Unrecognized "version" 1000: must be >=1 and <=10
+CMakePresets.json:2: Unrecognized "version" 1000: must be >=1 and <=10
   "version": 1000,
              \^$
diff --git a/Tests/RunCMake/CMakePresets/InvalidArchitectureStrategy-stderr.txt b/Tests/RunCMake/CMakePresets/InvalidArchitectureStrategy-stderr.txt
index 5df075d..713fec0 100644
--- a/Tests/RunCMake/CMakePresets/InvalidArchitectureStrategy-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/InvalidArchitectureStrategy-stderr.txt
@@ -1,5 +1,5 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/InvalidArchitectureStrategy:
-Error: @9,21: Invalid preset
+CMakePresets.json:9: Invalid preset
         "strategy": {}
                     \^$
diff --git a/Tests/RunCMake/CMakePresets/InvalidPresetBinaryDir-stderr.txt b/Tests/RunCMake/CMakePresets/InvalidPresetBinaryDir-stderr.txt
index deb35b4..72030c6 100644
--- a/Tests/RunCMake/CMakePresets/InvalidPresetBinaryDir-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/InvalidPresetBinaryDir-stderr.txt
@@ -1,5 +1,5 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/InvalidPresetBinaryDir:
-Error: @7,20: "binaryDir" expected a string
+CMakePresets.json:7: "binaryDir" expected a string
       "binaryDir": \[\]
                    \^$
diff --git a/Tests/RunCMake/CMakePresets/InvalidPresetGenerator-stderr.txt b/Tests/RunCMake/CMakePresets/InvalidPresetGenerator-stderr.txt
index 7f19412..e4c8b95 100644
--- a/Tests/RunCMake/CMakePresets/InvalidPresetGenerator-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/InvalidPresetGenerator-stderr.txt
@@ -1,5 +1,5 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/InvalidPresetGenerator:
-Error: @6,20: "generator" expected a string
+CMakePresets.json:6: "generator" expected a string
       "generator": \[\],
                    \^$
diff --git a/Tests/RunCMake/CMakePresets/InvalidPresetName-stderr.txt b/Tests/RunCMake/CMakePresets/InvalidPresetName-stderr.txt
index 4cceb73..2a9d2b7 100644
--- a/Tests/RunCMake/CMakePresets/InvalidPresetName-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/InvalidPresetName-stderr.txt
@@ -1,5 +1,5 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/InvalidPresetName:
-Error: @5,15: Invalid Preset Name
+CMakePresets.json:5: Invalid Preset Name
       "name": \[\],
               \^$
diff --git a/Tests/RunCMake/CMakePresets/InvalidPresetVendor-stderr.txt b/Tests/RunCMake/CMakePresets/InvalidPresetVendor-stderr.txt
index f92c48e..923f317 100644
--- a/Tests/RunCMake/CMakePresets/InvalidPresetVendor-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/InvalidPresetVendor-stderr.txt
@@ -1,5 +1,5 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/InvalidPresetVendor:
-Error: @8,17: Invalid preset
+CMakePresets.json:8: Invalid preset
       "vendor": true
                 \^$
diff --git a/Tests/RunCMake/CMakePresets/InvalidPresets-stderr.txt b/Tests/RunCMake/CMakePresets/InvalidPresets-stderr.txt
index d7081af..40e7a6a 100644
--- a/Tests/RunCMake/CMakePresets/InvalidPresets-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/InvalidPresets-stderr.txt
@@ -1,5 +1,5 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/InvalidPresets:
-Error: @3,23: Invalid "configurePresets" field
+CMakePresets.json:3: Invalid "configurePresets" field
   "configurePresets": {}
                       \^$
diff --git a/Tests/RunCMake/CMakePresets/InvalidRoot-stderr.txt b/Tests/RunCMake/CMakePresets/InvalidRoot-stderr.txt
index 5f2dcc1..39960db 100644
--- a/Tests/RunCMake/CMakePresets/InvalidRoot-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/InvalidRoot-stderr.txt
@@ -1,5 +1,5 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/InvalidRoot:
-Error: \@1\,1\: Invalid root object
+CMakePresets.json:1: Invalid root object
 \[\]
 \^$
diff --git a/Tests/RunCMake/CMakePresets/InvalidToolsetStrategy-stderr.txt b/Tests/RunCMake/CMakePresets/InvalidToolsetStrategy-stderr.txt
index d0974ac..644985e 100644
--- a/Tests/RunCMake/CMakePresets/InvalidToolsetStrategy-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/InvalidToolsetStrategy-stderr.txt
@@ -1,5 +1,5 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/InvalidToolsetStrategy:
-Error: @9,21: Invalid preset
+CMakePresets.json:9: Invalid preset
         "strategy": {}
                     \^$
diff --git a/Tests/RunCMake/CMakePresets/InvalidVariableValue-stderr.txt b/Tests/RunCMake/CMakePresets/InvalidVariableValue-stderr.txt
index fdb7072..84e87b4 100644
--- a/Tests/RunCMake/CMakePresets/InvalidVariableValue-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/InvalidVariableValue-stderr.txt
@@ -1,5 +1,5 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/InvalidVariableValue:
-Error: @10,20: "value" expected a string
+CMakePresets.json:10: "value" expected a string
           "value": \[\]
                    \^$
diff --git a/Tests/RunCMake/CMakePresets/InvalidVariables-stderr.txt b/Tests/RunCMake/CMakePresets/InvalidVariables-stderr.txt
index f329d97..b9a87ad 100644
--- a/Tests/RunCMake/CMakePresets/InvalidVariables-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/InvalidVariables-stderr.txt
@@ -1,5 +1,5 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/InvalidVariables:
-Error: @8,25: Invalid preset
+CMakePresets.json:8: Invalid preset
       "cacheVariables": \[\]
                         \^$
diff --git a/Tests/RunCMake/CMakePresets/InvalidVendor-stderr.txt b/Tests/RunCMake/CMakePresets/InvalidVendor-stderr.txt
index fc6534e..6f8de99 100644
--- a/Tests/RunCMake/CMakePresets/InvalidVendor-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/InvalidVendor-stderr.txt
@@ -1,5 +1,5 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/InvalidVendor:
-Error: @3,13: Invalid root object
+CMakePresets.json:3: Invalid root object
   "vendor": true,
             \^$
diff --git a/Tests/RunCMake/CMakePresets/InvalidVersion-stderr.txt b/Tests/RunCMake/CMakePresets/InvalidVersion-stderr.txt
index 97fe9d6..b539eff 100644
--- a/Tests/RunCMake/CMakePresets/InvalidVersion-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/InvalidVersion-stderr.txt
@@ -1,5 +1,5 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/InvalidVersion:
-Error: @2,14: Invalid "version" field
+CMakePresets.json:2: Invalid "version" field
   "version": "1.0",
              \^$
diff --git a/Tests/RunCMake/CMakePresets/LowVersion-stderr.txt b/Tests/RunCMake/CMakePresets/LowVersion-stderr.txt
index f4f65f9..19b4fe8 100644
--- a/Tests/RunCMake/CMakePresets/LowVersion-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/LowVersion-stderr.txt
@@ -1,5 +1,5 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/LowVersion:
-Error: @2,14: Unrecognized "version" 0: must be >=1 and <=10
+CMakePresets.json:2: Unrecognized "version" 0: must be >=1 and <=10
   "version": 0,
              \^
diff --git a/Tests/RunCMake/CMakePresets/MinimumRequiredInvalid-stderr.txt b/Tests/RunCMake/CMakePresets/MinimumRequiredInvalid-stderr.txt
index 30ab9ce..8f50614 100644
--- a/Tests/RunCMake/CMakePresets/MinimumRequiredInvalid-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/MinimumRequiredInvalid-stderr.txt
@@ -1,5 +1,5 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/MinimumRequiredInvalid:
-Error: @3,27: Invalid "cmakeMinimumRequired"
+CMakePresets.json:3: Invalid "cmakeMinimumRequired"
   "cmakeMinimumRequired": "3.18",
                           \^$
diff --git a/Tests/RunCMake/CMakePresets/MinimumRequiredMajor-stderr.txt b/Tests/RunCMake/CMakePresets/MinimumRequiredMajor-stderr.txt
index c9001ea..582b4de 100644
--- a/Tests/RunCMake/CMakePresets/MinimumRequiredMajor-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/MinimumRequiredMajor-stderr.txt
@@ -1,5 +1,5 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/MinimumRequiredMajor:
-Error: @4,14: "cmakeMinimumRequired" major version 1000 must be less than [0-9]*
+CMakePresets.json:4: "cmakeMinimumRequired" major version 1000 must be less than [0-9]*
     "major": 1000
              \^$
diff --git a/Tests/RunCMake/CMakePresets/MinimumRequiredMinor-stderr.txt b/Tests/RunCMake/CMakePresets/MinimumRequiredMinor-stderr.txt
index 3911c84..1344a67 100644
--- a/Tests/RunCMake/CMakePresets/MinimumRequiredMinor-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/MinimumRequiredMinor-stderr.txt
@@ -1,5 +1,5 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/MinimumRequiredMinor:
-Error: @5,14: "cmakeMinimumRequired" minor version 1000 must be less than [0-9]*
+CMakePresets.json:5: "cmakeMinimumRequired" minor version 1000 must be less than [0-9]*
     "minor": 1000
              \^$
diff --git a/Tests/RunCMake/CMakePresets/MinimumRequiredPatch-stderr.txt b/Tests/RunCMake/CMakePresets/MinimumRequiredPatch-stderr.txt
index e989fa8..0452442 100644
--- a/Tests/RunCMake/CMakePresets/MinimumRequiredPatch-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/MinimumRequiredPatch-stderr.txt
@@ -1,5 +1,5 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/MinimumRequiredPatch:
-Error: @6,14: "cmakeMinimumRequired" patch version 50000000 must be less than [0-9]*
+CMakePresets.json:6: "cmakeMinimumRequired" patch version 50000000 must be less than [0-9]*
     "patch": 50000000
              \^$
diff --git a/Tests/RunCMake/CMakePresets/NoPresetName-stderr.txt b/Tests/RunCMake/CMakePresets/NoPresetName-stderr.txt
index 9aff07f..a00ba78 100644
--- a/Tests/RunCMake/CMakePresets/NoPresetName-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/NoPresetName-stderr.txt
@@ -1,5 +1,5 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/NoPresetName:
-Error: @4,5: Missing required field "name" in Preset
+CMakePresets.json:4: Missing required field "name" in Preset
     {
     \^$
diff --git a/Tests/RunCMake/CMakePresets/NoVariableValue-stderr.txt b/Tests/RunCMake/CMakePresets/NoVariableValue-stderr.txt
index 630c288..0ba51fc 100644
--- a/Tests/RunCMake/CMakePresets/NoVariableValue-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/NoVariableValue-stderr.txt
@@ -1,5 +1,5 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/NoVariableValue:
-Error: @9,16: Missing required field "value" in variable "VAR" for preset "NoVariableValue"
+CMakePresets.json:9: Missing required field "value" in variable "VAR" for preset "NoVariableValue"
         "VAR": {}
                \^$
diff --git a/Tests/RunCMake/CMakePresets/PresetNotObject-stderr.txt b/Tests/RunCMake/CMakePresets/PresetNotObject-stderr.txt
index 62e9248..d7df034 100644
--- a/Tests/RunCMake/CMakePresets/PresetNotObject-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/PresetNotObject-stderr.txt
@@ -1,5 +1,5 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/PresetNotObject:
-Error: @4,5: Invalid Preset
+CMakePresets.json:4: Invalid Preset
     \[\]
     \^$
diff --git a/Tests/RunCMake/CMakePresets/UnknownArchitectureStrategy-stderr.txt b/Tests/RunCMake/CMakePresets/UnknownArchitectureStrategy-stderr.txt
index 6063762..bd72eb0 100644
--- a/Tests/RunCMake/CMakePresets/UnknownArchitectureStrategy-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/UnknownArchitectureStrategy-stderr.txt
@@ -1,5 +1,5 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/UnknownArchitectureStrategy:
-Error: @9,21: Invalid preset
+CMakePresets.json:9: Invalid preset
         "strategy": "unknown"
                     \^$
diff --git a/Tests/RunCMake/CMakePresets/UnknownToolsetStrategy-stderr.txt b/Tests/RunCMake/CMakePresets/UnknownToolsetStrategy-stderr.txt
index 55f9c7a..fd41955 100644
--- a/Tests/RunCMake/CMakePresets/UnknownToolsetStrategy-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/UnknownToolsetStrategy-stderr.txt
@@ -1,5 +1,5 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/UnknownToolsetStrategy:
-Error: @9,21: Invalid preset
+CMakePresets.json:9: Invalid preset
         "strategy": "unknown"
                     \^$
diff --git a/Tests/RunCMake/CMakePresets/VariableNotObject-stderr.txt b/Tests/RunCMake/CMakePresets/VariableNotObject-stderr.txt
index ce1aa20..973fc95 100644
--- a/Tests/RunCMake/CMakePresets/VariableNotObject-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/VariableNotObject-stderr.txt
@@ -1,5 +1,5 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/VariableNotObject:
-Error: @9,16: Invalid CMake variable "VAR" for preset "VariableNotObject"
+CMakePresets.json:9: Invalid CMake variable "VAR" for preset "VariableNotObject"
         "VAR": \[\]
                \^$
diff --git a/Tests/RunCMake/CTestResourceAllocation/dynamic-resource-nofile-ctest-s-stderr.txt b/Tests/RunCMake/CTestResourceAllocation/dynamic-resource-nofile-ctest-s-stderr.txt
index 343f632..acba99d 100644
--- a/Tests/RunCMake/CTestResourceAllocation/dynamic-resource-nofile-ctest-s-stderr.txt
+++ b/Tests/RunCMake/CTestResourceAllocation/dynamic-resource-nofile-ctest-s-stderr.txt
@@ -1,5 +1,5 @@
 ^Could not read/parse resource spec file [^
-]*/Tests/RunCMake/CTestResourceAllocation/dynamic-resource-nofile-ctest-s-build/dynamic-resspec\.json:[ ]
+]*/Tests/RunCMake/CTestResourceAllocation/dynamic-resource-nofile-ctest-s-build/dynamic-resspec\.json:
 File not found: [^
 ]*/Tests/RunCMake/CTestResourceAllocation/dynamic-resource-nofile-ctest-s-build/dynamic-resspec\.json
 CMake Error at [^
diff --git a/Tests/RunCMake/CTestResourceAllocation/invalid-nofile-ctest-stderr.txt b/Tests/RunCMake/CTestResourceAllocation/invalid-nofile-ctest-stderr.txt
index df1135e..b7e8d7f 100644
--- a/Tests/RunCMake/CTestResourceAllocation/invalid-nofile-ctest-stderr.txt
+++ b/Tests/RunCMake/CTestResourceAllocation/invalid-nofile-ctest-stderr.txt
@@ -1,5 +1,5 @@
 ^Could not read/parse resource spec file [^
-]*/Tests/RunCMake/CTestResourceAllocation/noexist\.json:[ ]
+]*/Tests/RunCMake/CTestResourceAllocation/noexist\.json:
 File not found: [^
 ]*/Tests/RunCMake/CTestResourceAllocation/noexist.json
 Errors while running CTest
diff --git a/Tests/RunCMake/CTestResourceAllocation/invalid-not-json-ctest-stderr.txt b/Tests/RunCMake/CTestResourceAllocation/invalid-not-json-ctest-stderr.txt
index 5bd9d97..c77ca8c 100644
--- a/Tests/RunCMake/CTestResourceAllocation/invalid-not-json-ctest-stderr.txt
+++ b/Tests/RunCMake/CTestResourceAllocation/invalid-not-json-ctest-stderr.txt
@@ -1,5 +1,5 @@
 ^Could not read/parse resource spec file [^
-]*/Tests/RunCMake/CTestResourceAllocation/invalid\.json:[ ]
+]*/Tests/RunCMake/CTestResourceAllocation/invalid\.json:
 JSON Parse Error: [^
 ]*/Tests/RunCMake/CTestResourceAllocation/invalid\.json:
 \* Line 1, Column 1
diff --git a/Tests/RunCMake/Instrumentation/bad-hook-stderr.txt b/Tests/RunCMake/Instrumentation/bad-hook-stderr.txt
index 651de1d..6ef5f48 100644
--- a/Tests/RunCMake/Instrumentation/bad-hook-stderr.txt
+++ b/Tests/RunCMake/Instrumentation/bad-hook-stderr.txt
@@ -1,4 +1,5 @@
-^CMake Error: +
-Error: @3,13: Not a valid hook: "bad hook"
+^CMake Error: Could not load instrumentation queries from [^
+]+:
+bad-hook.json:3: Not a valid hook: "bad hook"
   "hooks": \["bad hook", "postGenerate", "preCMakeBuild", "postCMakeBuild", "postInstall"\]
             \^$
diff --git a/Tests/RunCMake/Instrumentation/bad-query-stderr.txt b/Tests/RunCMake/Instrumentation/bad-query-stderr.txt
index caa0eec..93be7e4 100644
--- a/Tests/RunCMake/Instrumentation/bad-query-stderr.txt
+++ b/Tests/RunCMake/Instrumentation/bad-query-stderr.txt
@@ -1,4 +1,5 @@
-^CMake Error: +
-Error: @3,42: Not a valid query: "bad query"
+^CMake Error: Could not load instrumentation queries from [^
+]+:
+bad-query.json:[0-9]+: Not a valid query: "bad query"
   "queries": \["staticSystemInformation", "bad query"\]
                                          \^$
diff --git a/Tests/RunCMake/Instrumentation/empty-stderr.txt b/Tests/RunCMake/Instrumentation/empty-stderr.txt
index c8a5397..b5ae5f8 100644
--- a/Tests/RunCMake/Instrumentation/empty-stderr.txt
+++ b/Tests/RunCMake/Instrumentation/empty-stderr.txt
@@ -1,4 +1,5 @@
-^CMake Error: +
-Error: @1,1: Missing required field "version" in root object
+^CMake Error: Could not load instrumentation queries from [^
+]+:
+empty.json:[0-9]+: Missing required field "version" in root object
 {
 \^$