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";
}
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 */
}

View File

@ -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)"
}
]
$]==])

View File

@ -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)"
}]==]
)