EXPORT_COMPILE_COMMANDS: Write absolute posix paths to compile_commands.json

Avoid platform-specific path formats in structured fields.
This commit is contained in:
ClausKlein 2025-02-18 06:56:14 +01:00 committed by Brad King
parent ff119423b9
commit 971a8ded06
3 changed files with 21 additions and 18 deletions

View File

@ -1213,11 +1213,8 @@ void cmGlobalNinjaGenerator::AddCXXCompileCommand(
*this->CompileCommandsStream << ",\n"; *this->CompileCommandsStream << ",\n";
} }
std::string sourceFileName = sourceFile; std::string sourceFileName =
if (!cmSystemTools::FileIsFullPath(sourceFileName)) { cmSystemTools::CollapseFullPath(sourceFile, buildFileDir);
sourceFileName = cmSystemTools::CollapseFullPath(
sourceFileName, this->GetCMakeInstance()->GetHomeOutputDirectory());
}
/* clang-format off */ /* clang-format off */
*this->CompileCommandsStream << "{\n" *this->CompileCommandsStream << "{\n"
@ -1228,7 +1225,9 @@ void cmGlobalNinjaGenerator::AddCXXCompileCommand(
<< R"( "file": ")" << R"( "file": ")"
<< cmGlobalGenerator::EscapeJSON(sourceFileName) << "\",\n" << cmGlobalGenerator::EscapeJSON(sourceFileName) << "\",\n"
<< R"( "output": ")" << R"( "output": ")"
<< cmGlobalGenerator::EscapeJSON(objPath) << "\"\n" << cmGlobalGenerator::EscapeJSON(
cmSystemTools::CollapseFullPath(objPath, buildFileDir))
<< "\"\n"
<< "}"; << "}";
/* clang-format on */ /* clang-format on */
} }

View File

@ -2,23 +2,25 @@ set(expected_compile_commands
[==[^\[ [==[^\[
{ {
"directory": "[^ "directory": "[^
]*(/Tests/RunCMake/NinjaMultiConfig/CompileCommands-build|\\\\Tests\\\\RunCMake\\\\NinjaMultiConfig\\\\CompileCommands-build)", ]*/Tests/RunCMake/NinjaMultiConfig/CompileCommands-build",
"command": "[^ "command": "[^
]*Debug[^ ]*Debug[^
]*", ]*",
"file": "[^ "file": "[^
]*(/Tests/RunCMake/NinjaMultiConfig/main\.c|\\\\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))" "output": "[^
]*/CMakeFiles/exe\.dir/Debug/main\.c\.(obj|o)"
}, },
{ {
"directory": "[^ "directory": "[^
]*(/Tests/RunCMake/NinjaMultiConfig/CompileCommands-build|\\\\Tests\\\\RunCMake\\\\NinjaMultiConfig\\\\CompileCommands-build)", ]*/Tests/RunCMake/NinjaMultiConfig/CompileCommands-build",
"command": "[^ "command": "[^
]*Release[^ ]*Release[^
]*", ]*",
"file": "[^ "file": "[^
]*(/Tests/RunCMake/NinjaMultiConfig/main\.c|\\\\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))" "output": "[^
]*/CMakeFiles/exe\.dir/Release/main\.c\.(obj|o)"
} }
] ]
$]==]) $]==])

View File

@ -9,27 +9,29 @@ set(expected_compile_commands
[==[^\[ [==[^\[
{ {
"directory": "[^ "directory": "[^
]*(/Tests/RunCMake/Swift/CompileCommands-build|\\\\Tests\\\\RunCMake\\\\Swift\\\\CompileCommands-build)", ]*/Tests/RunCMake/Swift/CompileCommands-build",
"command": "[^ "command": "[^
]*swiftc[^ ]*swiftc[^
]* (\\")?[^ ]* (\\")?[^
]*(/Tests/RunCMake/Swift/E.swift|\\\\Tests\\\\RunCMake\\\\Swift\\\\E.swift)(\\")? (\\")?[^ ]*(/Tests/RunCMake/Swift/E.swift|\\\\Tests\\\\RunCMake\\\\Swift\\\\E.swift)(\\")? (\\")?[^
]*(/Tests/RunCMake/Swift/L.swift|\\\\Tests\\\\RunCMake\\\\Swift\\\\L.swift)(\\")?", ]*(/Tests/RunCMake/Swift/L.swift|\\\\Tests\\\\RunCMake\\\\Swift\\\\L.swift)(\\")?",
"file": "[^ "file": "[^
]*(/Tests/RunCMake/Swift/E.swift|\\\\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)" "output": "[^
]*/CMakeFiles/CompileCommandLib.dir/(Debug/)?E.swift.(o|obj)"
}, },
{ {
"directory": "[^ "directory": "[^
]*(/Tests/RunCMake/Swift/CompileCommands-build|\\\\Tests\\\\RunCMake\\\\Swift\\\\CompileCommands-build)", ]*/Tests/RunCMake/Swift/CompileCommands-build",
"command": "[^ "command": "[^
]*swiftc[^ ]*swiftc[^
]* (\\")?[^ ]* (\\")?[^
]*(/Tests/RunCMake/Swift/E.swift|\\\\Tests\\\\RunCMake\\\\Swift\\\\E.swift)(\\")? (\\")?[^ ]*(/Tests/RunCMake/Swift/E.swift|\\\\Tests\\\\RunCMake\\\\Swift\\\\E.swift)(\\")? (\\")?[^
]*(/Tests/RunCMake/Swift/L.swift|\\\\Tests\\\\RunCMake\\\\Swift\\\\L.swift)(\\")?", ]*(/Tests/RunCMake/Swift/L.swift|\\\\Tests\\\\RunCMake\\\\Swift\\\\L.swift)(\\")?",
"file": "[^ "file": "[^
]*(/Tests/RunCMake/Swift/L.swift|\\\\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)" "output": "[^
]*/CMakeFiles/CompileCommandLib.dir/(Debug/)?L.swift.(o|obj)"
}]==] }]==]
) )