diff --git a/Sources/Build/BuildOperation.swift b/Sources/Build/BuildOperation.swift index f162c921030..015bd6b4837 100644 --- a/Sources/Build/BuildOperation.swift +++ b/Sources/Build/BuildOperation.swift @@ -903,6 +903,10 @@ public final class BuildOperation: PackageStructureDelegate, SPMBuildCore.BuildS } return true } + + public func generatePIF(preserveStructure: Bool) async throws -> String { + throw StringError("PIF generation is not applicable to the native build system.") + } } public struct PluginConfiguration { diff --git a/Sources/Commands/PackageCommands/DumpCommands.swift b/Sources/Commands/PackageCommands/DumpCommands.swift index 9bfe550b6a1..6618da072d3 100644 --- a/Sources/Commands/PackageCommands/DumpCommands.swift +++ b/Sources/Commands/PackageCommands/DumpCommands.swift @@ -183,13 +183,8 @@ struct DumpPIF: AsyncSwiftCommand { var preserveStructure: Bool = false func run(_ swiftCommandState: SwiftCommandState) async throws { - let graph = try await swiftCommandState.loadPackageGraph() - let pif = try PIFBuilder.generatePIF( - buildParameters: swiftCommandState.productsBuildParameters, - packageGraph: graph, - fileSystem: swiftCommandState.fileSystem, - observabilityScope: swiftCommandState.observabilityScope, - preservePIFModelStructure: preserveStructure) + let buildSystem = try await swiftCommandState.createBuildSystem() + let pif = try await buildSystem.generatePIF(preserveStructure: preserveStructure) print(pif) } diff --git a/Sources/SPMBuildCore/BuildSystem/BuildSystem.swift b/Sources/SPMBuildCore/BuildSystem/BuildSystem.swift index d5261236271..126576bf9cd 100644 --- a/Sources/SPMBuildCore/BuildSystem/BuildSystem.swift +++ b/Sources/SPMBuildCore/BuildSystem/BuildSystem.swift @@ -116,6 +116,8 @@ public protocol BuildSystem: Cancellable { func build(subset: BuildSubset, buildOutputs: [BuildOutput]) async throws -> BuildResult var hasIntegratedAPIDigesterSupport: Bool { get } + + func generatePIF(preserveStructure: Bool) async throws -> String } extension BuildSystem { diff --git a/Sources/SwiftBuildSupport/SwiftBuildSystem.swift b/Sources/SwiftBuildSupport/SwiftBuildSystem.swift index 13713ef9819..56febf9943c 100644 --- a/Sources/SwiftBuildSupport/SwiftBuildSystem.swift +++ b/Sources/SwiftBuildSupport/SwiftBuildSystem.swift @@ -945,13 +945,16 @@ public final class SwiftBuildSystem: SPMBuildCore.BuildSystem { } } - public func writePIF(buildParameters: BuildParameters) async throws { - let pifBuilder = try await getPIFBuilder() - let pif = try await pifBuilder.generatePIF( + public func generatePIF(preserveStructure: Bool) async throws -> String { + return try await getPIFBuilder().generatePIF( + preservePIFModelStructure: preserveStructure, printPIFManifestGraphviz: buildParameters.printPIFManifestGraphviz, - buildParameters: buildParameters, + buildParameters: buildParameters ) + } + public func writePIF(buildParameters: BuildParameters) async throws { + let pif = try await generatePIF(preserveStructure: false) try self.fileSystem.writeIfChanged(path: buildParameters.pifManifest, string: pif) } diff --git a/Sources/XCBuildSupport/XcodeBuildSystem.swift b/Sources/XCBuildSupport/XcodeBuildSystem.swift index 11f12615e66..bca5b48446a 100644 --- a/Sources/XCBuildSupport/XcodeBuildSystem.swift +++ b/Sources/XCBuildSupport/XcodeBuildSystem.swift @@ -357,6 +357,17 @@ public final class XcodeBuildSystem: SPMBuildCore.BuildSystem { try await packageGraphLoader() } } + + public func generatePIF(preserveStructure: Bool) async throws -> String { + let graph = try await getPackageGraph() + return try PIFBuilder.generatePIF( + buildParameters: buildParameters, + packageGraph: graph, + fileSystem: fileSystem, + observabilityScope: observabilityScope, + preservePIFModelStructure: preserveStructure + ) + } } struct XCBBuildParameters: Encodable {