From 7d8b39226c6e9e8a06ca94803824d76411e2882d Mon Sep 17 00:00:00 2001 From: ClausKlein Date: Tue, 18 Feb 2025 07:01:29 +0100 Subject: cmGlobalNinjaGenerator: Remove obsolete TODO comment --- Source/cmGlobalNinjaGenerator.cxx | 1 - 1 file changed, 1 deletion(-) diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx index 6b57669..5e90e06 100644 --- a/Source/cmGlobalNinjaGenerator.cxx +++ b/Source/cmGlobalNinjaGenerator.cxx @@ -387,7 +387,6 @@ void cmGlobalNinjaGenerator::WriteCustomCommandBuild( std::string cmd = command; // NOLINT(*) #ifdef _WIN32 if (cmd.empty()) - // TODO Shouldn't an empty command be handled by ninja? cmd = "cmd.exe /c"; #endif vars["COMMAND"] = std::move(cmd); -- cgit v0.12 From 92fb080ed643a99c5c2269d9af86a98166d6eb80 Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 18 Feb 2025 13:26:04 -0500 Subject: Tests/RunCMake/Swift: Fix CompileCommands expected regex Previously missing `()` were allowing `|` to match only partial results. --- Tests/RunCMake/Swift/CompileCommands-check.cmake | 31 ++++++++++++++++-------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/Tests/RunCMake/Swift/CompileCommands-check.cmake b/Tests/RunCMake/Swift/CompileCommands-check.cmake index b277c5c..ee4cd85 100644 --- a/Tests/RunCMake/Swift/CompileCommands-check.cmake +++ b/Tests/RunCMake/Swift/CompileCommands-check.cmake @@ -8,18 +8,29 @@ endif() set(expected_compile_commands [==[^\[ { - "directory": ".*(/Tests/RunCMake/Swift/CompileCommands-build|\\\\Tests\\\\RunCMake\\\\Swift\\\\CompileCommands-build)", - "command": ".*swiftc .* (\\")?.*(/Tests/RunCMake/Swift/E.swift|\\\\Tests\\\\RunCMake\\\\Swift\\\\E.swift)(\\")? (\\")?.*(/Tests/RunCMake/Swift/L.swift|\\\\Tests\\\\RunCMake\\\\Swift\\\\L.swift)(\\")?", - "file": ".*(/Tests/RunCMake/Swift/E.swift|\\\\Tests\\\\RunCMake\\\\Swift\\\\E.swift)", - "output": "CMakeFiles/CompileCommandLib.dir/(Debug(/|\\))?E.swift.o|CMakeFiles\\\\CompileCommandLib.dir\\\\(Debug\\\\|Release\\\\)?E.swift.obj" + "directory": "[^ +]*(/Tests/RunCMake/Swift/CompileCommands-build|\\\\Tests\\\\RunCMake\\\\Swift\\\\CompileCommands-build)", + "command": "[^ +]*swiftc[^ +]* (\\")?[^ +]*(/Tests/RunCMake/Swift/E.swift|\\\\Tests\\\\RunCMake\\\\Swift\\\\E.swift)(\\")? (\\")?[^ +]*(/Tests/RunCMake/Swift/L.swift|\\\\Tests\\\\RunCMake\\\\Swift\\\\L.swift)(\\")?", + "file": "[^ +]*(/Tests/RunCMake/Swift/E.swift|\\\\Tests\\\\RunCMake\\\\Swift\\\\E.swift)", + "output": "(CMakeFiles/CompileCommandLib.dir/(Debug/)?E.swift.o|CMakeFiles\\\\CompileCommandLib.dir\\\\(Debug\\\\)?E.swift.obj)" }, { - "directory": ".*(/Tests/RunCMake/Swift/CompileCommands-build|\\\\Tests\\\\RunCMake\\\\Swift\\\\CompileCommands-build)", - "command": ".*swiftc .* (\\")?.*(/Tests/RunCMake/Swift/E.swift|\\\\Tests\\\\RunCMake\\\\Swift\\\\E.swift)(\\")? (\\")?.*(/Tests/RunCMake/Swift/L.swift|\\\\Tests\\\\RunCMake\\\\Swift\\\\L.swift)(\\")?", - "file": ".*/Tests/RunCMake/Swift/L.swift", - "output": "CMakeFiles/CompileCommandLib.dir/(Debug(/|\\))?L.swift.o|CMakeFiles\\\\CompileCommandLib.dir\\\\(Debug\\\\|Release\\\\)?L.swift.obj" -} -]$]==] + "directory": "[^ +]*(/Tests/RunCMake/Swift/CompileCommands-build|\\\\Tests\\\\RunCMake\\\\Swift\\\\CompileCommands-build)", + "command": "[^ +]*swiftc[^ +]* (\\")?[^ +]*(/Tests/RunCMake/Swift/E.swift|\\\\Tests\\\\RunCMake\\\\Swift\\\\E.swift)(\\")? (\\")?[^ +]*(/Tests/RunCMake/Swift/L.swift|\\\\Tests\\\\RunCMake\\\\Swift\\\\L.swift)(\\")?", + "file": "[^ +]*(/Tests/RunCMake/Swift/L.swift|\\\\Tests\\\\RunCMake\\\\Swift\\\\L.swift)", + "output": "(CMakeFiles/CompileCommandLib.dir/(Debug/)?L.swift.o|CMakeFiles\\\\CompileCommandLib.dir\\\\(Debug\\\\)?L.swift.obj)" +}]==] ) file(READ "${RunCMake_TEST_BINARY_DIR}/compile_commands.json" compile_commands) -- cgit v0.12 From ff119423b9527b1d69e57a7b0a84f687565dbf5c Mon Sep 17 00:00:00 2001 From: ClausKlein Date: Tue, 18 Feb 2025 06:59:57 +0100 Subject: EXPORT_COMPILE_COMMANDS: Append missing newline to compile_commands.json --- Source/cmGlobalNinjaGenerator.cxx | 2 +- Tests/RunCMake/NinjaMultiConfig/CompileCommands-check.cmake | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx index 5e90e06..ea1a122 100644 --- a/Source/cmGlobalNinjaGenerator.cxx +++ b/Source/cmGlobalNinjaGenerator.cxx @@ -1236,7 +1236,7 @@ void cmGlobalNinjaGenerator::AddCXXCompileCommand( void cmGlobalNinjaGenerator::CloseCompileCommandsStream() { if (this->CompileCommandsStream) { - *this->CompileCommandsStream << "\n]"; + *this->CompileCommandsStream << "\n]\n"; this->CompileCommandsStream.reset(); } } diff --git a/Tests/RunCMake/NinjaMultiConfig/CompileCommands-check.cmake b/Tests/RunCMake/NinjaMultiConfig/CompileCommands-check.cmake index e65be3b..61a49a0 100644 --- a/Tests/RunCMake/NinjaMultiConfig/CompileCommands-check.cmake +++ b/Tests/RunCMake/NinjaMultiConfig/CompileCommands-check.cmake @@ -20,7 +20,8 @@ set(expected_compile_commands ]*(/Tests/RunCMake/NinjaMultiConfig/main\.c|\\\\Tests\\\\RunCMake\\\\NinjaMultiConfig\\\\main\.c)", "output": "(CMakeFiles/exe\.dir/Release/main\.c\.o|CMakeFiles\\\\exe\.dir\\\\Release\\\\main\.c\.(obj|o))" } -]$]==]) +] +$]==]) file(READ "${RunCMake_TEST_BINARY_DIR}/compile_commands.json" actual_compile_commands) if(NOT actual_compile_commands MATCHES "${expected_compile_commands}") -- cgit v0.12 From 971a8ded06051b2f3e8089e5ae29632a936eb5c6 Mon Sep 17 00:00:00 2001 From: ClausKlein Date: Tue, 18 Feb 2025 06:56:14 +0100 Subject: EXPORT_COMPILE_COMMANDS: Write absolute posix paths to compile_commands.json Avoid platform-specific path formats in structured fields. --- Source/cmGlobalNinjaGenerator.cxx | 11 +++++------ .../RunCMake/NinjaMultiConfig/CompileCommands-check.cmake | 14 ++++++++------ Tests/RunCMake/Swift/CompileCommands-check.cmake | 14 ++++++++------ 3 files changed, 21 insertions(+), 18 deletions(-) diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx index ea1a122..5705011 100644 --- a/Source/cmGlobalNinjaGenerator.cxx +++ b/Source/cmGlobalNinjaGenerator.cxx @@ -1213,11 +1213,8 @@ void cmGlobalNinjaGenerator::AddCXXCompileCommand( *this->CompileCommandsStream << ",\n"; } - std::string sourceFileName = sourceFile; - if (!cmSystemTools::FileIsFullPath(sourceFileName)) { - sourceFileName = cmSystemTools::CollapseFullPath( - sourceFileName, this->GetCMakeInstance()->GetHomeOutputDirectory()); - } + std::string sourceFileName = + cmSystemTools::CollapseFullPath(sourceFile, buildFileDir); /* clang-format off */ *this->CompileCommandsStream << "{\n" @@ -1228,7 +1225,9 @@ void cmGlobalNinjaGenerator::AddCXXCompileCommand( << R"( "file": ")" << cmGlobalGenerator::EscapeJSON(sourceFileName) << "\",\n" << R"( "output": ")" - << cmGlobalGenerator::EscapeJSON(objPath) << "\"\n" + << cmGlobalGenerator::EscapeJSON( + cmSystemTools::CollapseFullPath(objPath, buildFileDir)) + << "\"\n" << "}"; /* clang-format on */ } diff --git a/Tests/RunCMake/NinjaMultiConfig/CompileCommands-check.cmake b/Tests/RunCMake/NinjaMultiConfig/CompileCommands-check.cmake index 61a49a0..730adf9 100644 --- a/Tests/RunCMake/NinjaMultiConfig/CompileCommands-check.cmake +++ b/Tests/RunCMake/NinjaMultiConfig/CompileCommands-check.cmake @@ -2,23 +2,25 @@ set(expected_compile_commands [==[^\[ { "directory": "[^ -]*(/Tests/RunCMake/NinjaMultiConfig/CompileCommands-build|\\\\Tests\\\\RunCMake\\\\NinjaMultiConfig\\\\CompileCommands-build)", +]*/Tests/RunCMake/NinjaMultiConfig/CompileCommands-build", "command": "[^ ]*Debug[^ ]*", "file": "[^ -]*(/Tests/RunCMake/NinjaMultiConfig/main\.c|\\\\Tests\\\\RunCMake\\\\NinjaMultiConfig\\\\main\.c)", - "output": "(CMakeFiles/exe\.dir/Debug/main\.c\.o|CMakeFiles\\\\exe\.dir\\\\Debug\\\\main\.c\.(obj|o))" +]*/Tests/RunCMake/NinjaMultiConfig/main\.c", + "output": "[^ +]*/CMakeFiles/exe\.dir/Debug/main\.c\.(obj|o)" }, { "directory": "[^ -]*(/Tests/RunCMake/NinjaMultiConfig/CompileCommands-build|\\\\Tests\\\\RunCMake\\\\NinjaMultiConfig\\\\CompileCommands-build)", +]*/Tests/RunCMake/NinjaMultiConfig/CompileCommands-build", "command": "[^ ]*Release[^ ]*", "file": "[^ -]*(/Tests/RunCMake/NinjaMultiConfig/main\.c|\\\\Tests\\\\RunCMake\\\\NinjaMultiConfig\\\\main\.c)", - "output": "(CMakeFiles/exe\.dir/Release/main\.c\.o|CMakeFiles\\\\exe\.dir\\\\Release\\\\main\.c\.(obj|o))" +]*/Tests/RunCMake/NinjaMultiConfig/main\.c", + "output": "[^ +]*/CMakeFiles/exe\.dir/Release/main\.c\.(obj|o)" } ] $]==]) diff --git a/Tests/RunCMake/Swift/CompileCommands-check.cmake b/Tests/RunCMake/Swift/CompileCommands-check.cmake index ee4cd85..0ce347a 100644 --- a/Tests/RunCMake/Swift/CompileCommands-check.cmake +++ b/Tests/RunCMake/Swift/CompileCommands-check.cmake @@ -9,27 +9,29 @@ set(expected_compile_commands [==[^\[ { "directory": "[^ -]*(/Tests/RunCMake/Swift/CompileCommands-build|\\\\Tests\\\\RunCMake\\\\Swift\\\\CompileCommands-build)", +]*/Tests/RunCMake/Swift/CompileCommands-build", "command": "[^ ]*swiftc[^ ]* (\\")?[^ ]*(/Tests/RunCMake/Swift/E.swift|\\\\Tests\\\\RunCMake\\\\Swift\\\\E.swift)(\\")? (\\")?[^ ]*(/Tests/RunCMake/Swift/L.swift|\\\\Tests\\\\RunCMake\\\\Swift\\\\L.swift)(\\")?", "file": "[^ -]*(/Tests/RunCMake/Swift/E.swift|\\\\Tests\\\\RunCMake\\\\Swift\\\\E.swift)", - "output": "(CMakeFiles/CompileCommandLib.dir/(Debug/)?E.swift.o|CMakeFiles\\\\CompileCommandLib.dir\\\\(Debug\\\\)?E.swift.obj)" +]*/Tests/RunCMake/Swift/E.swift", + "output": "[^ +]*/CMakeFiles/CompileCommandLib.dir/(Debug/)?E.swift.(o|obj)" }, { "directory": "[^ -]*(/Tests/RunCMake/Swift/CompileCommands-build|\\\\Tests\\\\RunCMake\\\\Swift\\\\CompileCommands-build)", +]*/Tests/RunCMake/Swift/CompileCommands-build", "command": "[^ ]*swiftc[^ ]* (\\")?[^ ]*(/Tests/RunCMake/Swift/E.swift|\\\\Tests\\\\RunCMake\\\\Swift\\\\E.swift)(\\")? (\\")?[^ ]*(/Tests/RunCMake/Swift/L.swift|\\\\Tests\\\\RunCMake\\\\Swift\\\\L.swift)(\\")?", "file": "[^ -]*(/Tests/RunCMake/Swift/L.swift|\\\\Tests\\\\RunCMake\\\\Swift\\\\L.swift)", - "output": "(CMakeFiles/CompileCommandLib.dir/(Debug/)?L.swift.o|CMakeFiles\\\\CompileCommandLib.dir\\\\(Debug\\\\)?L.swift.obj)" +]*/Tests/RunCMake/Swift/L.swift", + "output": "[^ +]*/CMakeFiles/CompileCommandLib.dir/(Debug/)?L.swift.(o|obj)" }]==] ) -- cgit v0.12