From b07044d25d0f27a9e3f8c0f901a828d486409bb8 Mon Sep 17 00:00:00 2001 From: Alex Hoppen Date: Fri, 13 Dec 2024 18:34:58 +0100 Subject: [PATCH] =?UTF-8?q?Interpret=20the=20`-index-store-path`=20relativ?= =?UTF-8?q?e=20to=20the=20command=E2=80=99s=20directory?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #1856 rdar://141004197 --- .../CompilationDatabaseBuildSystem.swift | 5 ++++- .../CompilationDatabaseTests.swift | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/Sources/BuildSystemIntegration/CompilationDatabaseBuildSystem.swift b/Sources/BuildSystemIntegration/CompilationDatabaseBuildSystem.swift index dffa9a720..6acfb815c 100644 --- a/Sources/BuildSystemIntegration/CompilationDatabaseBuildSystem.swift +++ b/Sources/BuildSystemIntegration/CompilationDatabaseBuildSystem.swift @@ -99,7 +99,10 @@ package actor CompilationDatabaseBuildSystem: BuiltInBuildSystem { let args = command.commandLine for i in args.indices.reversed() { if args[i] == "-index-store-path" && i + 1 < args.count { - return URL(fileURLWithPath: args[i + 1]) + return URL( + fileURLWithPath: args[i + 1], + relativeTo: URL(fileURLWithPath: command.directory, isDirectory: true) + ) } } } diff --git a/Tests/BuildSystemIntegrationTests/CompilationDatabaseTests.swift b/Tests/BuildSystemIntegrationTests/CompilationDatabaseTests.swift index 6c136f947..2eaff2106 100644 --- a/Tests/BuildSystemIntegrationTests/CompilationDatabaseTests.swift +++ b/Tests/BuildSystemIntegrationTests/CompilationDatabaseTests.swift @@ -412,6 +412,25 @@ final class CompilationDatabaseTests: XCTestCase { ) } } + + func testIndexStorePathRelativeToWorkingDirectory() async throws { + try await checkCompilationDatabaseBuildSystem( + """ + [ + { + "file": "a.swift", + "directory": "/a", + "arguments": ["swift", "a.swift", "-index-store-path", "index-store"] + } + ] + """ + ) { buildSystem in + assertEqual( + try await buildSystem.indexStorePath?.filePath, + "\(pathSeparator)a\(pathSeparator)index-store" + ) + } + } } fileprivate var pathSeparator: String {