diff --git a/Sources/PackageGraph/ModulesGraph+Loading.swift b/Sources/PackageGraph/ModulesGraph+Loading.swift index 2ea14951129..1435795840c 100644 --- a/Sources/PackageGraph/ModulesGraph+Loading.swift +++ b/Sources/PackageGraph/ModulesGraph+Loading.swift @@ -728,23 +728,10 @@ private func createResolvedPackages( moduleBuilder.dependencies += implicitSystemLibraryDeps.map { .module($0, conditions: []) } // Establish product dependencies. - for case .product(let productRef, let conditions) in moduleBuilder.module.dependencies { + for case .product(let productRef, var conditions) in moduleBuilder.module.dependencies { if let package = productRef.package, prebuilts[.plain(package)]?[productRef.name] != nil { - // See if we're using a prebuilt instead - if moduleBuilder.module.type == .macro { - continue - } else if moduleBuilder.module.type == .test { - // use prebuilt if this is a test that depends a macro target - // these are guaranteed built for host - if moduleBuilder.module.dependencies.contains(where: { dep in - guard let module = dep.module else { - return false - } - return module.type == .macro - }) { - continue - } - } + // Only use the dependency if not on host + conditions.append(.host(.init(isHost: false))) } // Find the product in this package's dependency products. diff --git a/Sources/PackageGraph/Resolution/ResolvedModule.swift b/Sources/PackageGraph/Resolution/ResolvedModule.swift index 786a61b7c28..23d89ce3d11 100644 --- a/Sources/PackageGraph/Resolution/ResolvedModule.swift +++ b/Sources/PackageGraph/Resolution/ResolvedModule.swift @@ -288,7 +288,12 @@ extension ResolvedModule: Identifiable { public var targetName: String { self.moduleName } public let moduleName: String - let packageIdentity: PackageIdentity + public let packageIdentity: PackageIdentity + + public init(moduleName: String, packageIdentity: PackageIdentity) { + self.moduleName = moduleName + self.packageIdentity = packageIdentity + } } public var id: ID { diff --git a/Sources/PackageLoading/PackageBuilder.swift b/Sources/PackageLoading/PackageBuilder.swift index 08535c82807..2943ef8bd80 100644 --- a/Sources/PackageLoading/PackageBuilder.swift +++ b/Sources/PackageLoading/PackageBuilder.swift @@ -1407,40 +1407,39 @@ public final class PackageBuilder { table.add(assignment, for: .SWIFT_ACTIVE_COMPILATION_CONDITIONS) } - // Add in flags for prebuilts if the target is a macro or a macro test. - // Currently we only support prebuilts for macros. - if target.type == .macro || target.isMacroTest(in: manifest) { - let prebuiltLibraries: [String: PrebuiltLibrary] = target.dependencies.reduce(into: .init()) { - guard case let .product(name: name, package: package, moduleAliases: _, condition: _) = $1, - let package = package, - let prebuilt = prebuilts[.plain(package)]?[name] - else { - return - } - - $0[prebuilt.libraryName] = prebuilt + // Add in flags for prebuilts on host + let prebuiltLibraries: [String: PrebuiltLibrary] = target.dependencies.reduce(into: .init()) { + guard case let .product(name: name, package: package, moduleAliases: _, condition: _) = $1, + let package = package, + let prebuilt = prebuilts[.plain(package)]?[name] + else { + return } - for prebuilt in prebuiltLibraries.values { - let lib = prebuilt.path.appending(components: ["lib", "lib\(prebuilt.libraryName).a"]).pathString - var ldFlagsAssignment = BuildSettings.Assignment() - ldFlagsAssignment.values = [lib] - table.add(ldFlagsAssignment, for: .OTHER_LDFLAGS) + $0[prebuilt.libraryName] = prebuilt + } - var includeDirs: [AbsolutePath] = [prebuilt.path.appending(component: "Modules")] - if let checkoutPath = prebuilt.checkoutPath, let includePath = prebuilt.includePath { - for includeDir in includePath { - includeDirs.append(checkoutPath.appending(includeDir)) - } - } else { - for cModule in prebuilt.cModules { - includeDirs.append(prebuilt.path.appending(components: "include", cModule)) - } + for prebuilt in prebuiltLibraries.values { + let lib = prebuilt.path.appending(components: ["lib", "lib\(prebuilt.libraryName).a"]).pathString + var ldFlagsAssignment = BuildSettings.Assignment() + ldFlagsAssignment.values = [lib] + ldFlagsAssignment.conditions = [.host(.init(isHost: true))] + table.add(ldFlagsAssignment, for: .OTHER_LDFLAGS) + + var includeDirs: [AbsolutePath] = [prebuilt.path.appending(component: "Modules")] + if let checkoutPath = prebuilt.checkoutPath, let includePath = prebuilt.includePath { + for includeDir in includePath { + includeDirs.append(checkoutPath.appending(includeDir)) + } + } else { + for cModule in prebuilt.cModules { + includeDirs.append(prebuilt.path.appending(components: "include", cModule)) } - var includeAssignment = BuildSettings.Assignment() - includeAssignment.values = includeDirs.map({ "-I\($0.pathString)" }) - table.add(includeAssignment, for: .OTHER_SWIFT_FLAGS) } + var includeAssignment = BuildSettings.Assignment() + includeAssignment.values = includeDirs.map({ "-I\($0.pathString)" }) + includeAssignment.conditions = [.host(.init(isHost: true))] + table.add(includeAssignment, for: .OTHER_SWIFT_FLAGS) } return table diff --git a/Sources/PackageModel/BuildEnvironment.swift b/Sources/PackageModel/BuildEnvironment.swift index d6545c46166..d55c05bdc6f 100644 --- a/Sources/PackageModel/BuildEnvironment.swift +++ b/Sources/PackageModel/BuildEnvironment.swift @@ -13,10 +13,12 @@ /// A build environment with which to evaluate conditions. public struct BuildEnvironment { public let platform: Platform + public let isHost: Bool public let configuration: BuildConfiguration? - public init(platform: Platform, configuration: BuildConfiguration? = nil) { + public init(platform: Platform, isHost: Bool, configuration: BuildConfiguration? = nil) { self.platform = platform self.configuration = configuration + self.isHost = isHost } } diff --git a/Sources/PackageModel/Manifest/PackageConditionDescription.swift b/Sources/PackageModel/Manifest/PackageConditionDescription.swift index b8257bc5650..04930e1dba9 100644 --- a/Sources/PackageModel/Manifest/PackageConditionDescription.swift +++ b/Sources/PackageModel/Manifest/PackageConditionDescription.swift @@ -30,6 +30,7 @@ public enum PackageCondition: Hashable, Sendable { case platforms(PlatformsCondition) case configuration(ConfigurationCondition) case traits(TraitCondition) + case host(HostCondition) public func satisfies(_ environment: BuildEnvironment) -> Bool { switch self { @@ -39,6 +40,8 @@ public enum PackageCondition: Hashable, Sendable { return platforms.satisfies(environment) case .traits(let traits): return traits.satisfies(environment) + case .host(let host): + return host.satisfies(environment) } } @@ -107,9 +110,7 @@ public struct ConfigurationCondition: Hashable, Sendable { } } - -/// A configuration condition implies that an assignment is valid on -/// a particular build configuration. +/// A traits condition implies that an assignment is valid in the given build environment public struct TraitCondition: Hashable, Sendable { public let traits: Set @@ -122,3 +123,15 @@ public struct TraitCondition: Hashable, Sendable { } } +/// A host condition determines whether the build environment is for host +public struct HostCondition: Hashable, Sendable { + public let isHost: Bool + + public init(isHost: Bool) { + self.isHost = isHost + } + + public func satisfies(_ environment: BuildEnvironment) -> Bool { + environment.isHost == isHost + } +} diff --git a/Sources/SPMBuildCore/BuildParameters/BuildParameters.swift b/Sources/SPMBuildCore/BuildParameters/BuildParameters.swift index 6bd5b8804c1..e7ab8fa743c 100644 --- a/Sources/SPMBuildCore/BuildParameters/BuildParameters.swift +++ b/Sources/SPMBuildCore/BuildParameters/BuildParameters.swift @@ -90,7 +90,7 @@ public struct BuildParameters: Encodable { /// The current build environment. public var buildEnvironment: BuildEnvironment { - BuildEnvironment(platform: currentPlatform, configuration: configuration) + BuildEnvironment(platform: currentPlatform, isHost: destination == .host, configuration: configuration) } /// The current platform we're building for. diff --git a/Sources/SwiftBuildSupport/PackagePIFBuilder+Helpers.swift b/Sources/SwiftBuildSupport/PackagePIFBuilder+Helpers.swift index b409518837d..e6ac743d571 100644 --- a/Sources/SwiftBuildSupport/PackagePIFBuilder+Helpers.swift +++ b/Sources/SwiftBuildSupport/PackagePIFBuilder+Helpers.swift @@ -28,6 +28,7 @@ import enum PackageModel.BuildConfiguration import enum PackageModel.BuildSettings import class PackageModel.ClangModule import struct PackageModel.ConfigurationCondition +import struct PackageModel.HostCondition import class PackageModel.Manifest import class PackageModel.Module import enum PackageModel.ModuleMapType @@ -255,12 +256,14 @@ extension Sequence { var platformConditions: [PackageModel.PlatformsCondition] = [] var configurationConditions: [PackageModel.ConfigurationCondition] = [] var traitConditions: [PackageModel.TraitCondition] = [] + var hostConditions: [PackageModel.HostCondition] = [] for packageCondition in self { switch packageCondition { case .platforms(let condition): platformConditions.append(condition) case .configuration(let condition): configurationConditions.append(condition) case .traits(let condition): traitConditions.append(condition) + case .host(let condition): hostConditions.append(condition) } } diff --git a/Tests/BuildTests/BuildPlanTests.swift b/Tests/BuildTests/BuildPlanTests.swift index a27d2f178f0..4abe77b13d9 100644 --- a/Tests/BuildTests/BuildPlanTests.swift +++ b/Tests/BuildTests/BuildPlanTests.swift @@ -957,6 +957,7 @@ class BuildPlanTestCase: BuildSystemProviderTestCase { let plan = try await mockBuildPlan( environment: BuildEnvironment( platform: .linux, + isHost: true, configuration: .release ), graph: graph, @@ -999,6 +1000,7 @@ class BuildPlanTestCase: BuildSystemProviderTestCase { let plan = try await mockBuildPlan( environment: BuildEnvironment( platform: .macOS, + isHost: true, configuration: .debug ), graph: graph, @@ -1507,6 +1509,7 @@ class BuildPlanTestCase: BuildSystemProviderTestCase { let result = try await BuildPlanResult(plan: mockBuildPlan( environment: BuildEnvironment( platform: .linux, + isHost: true, configuration: .release ), graph: graph, @@ -1526,6 +1529,7 @@ class BuildPlanTestCase: BuildSystemProviderTestCase { let result = try await BuildPlanResult(plan: mockBuildPlan( environment: BuildEnvironment( platform: .macOS, + isHost: true, configuration: .debug ), graph: graph, @@ -2106,6 +2110,7 @@ class BuildPlanTestCase: BuildSystemProviderTestCase { let plan = try await mockBuildPlan( environment: BuildEnvironment( platform: .linux, + isHost: true, configuration: .release ), graph: graph, @@ -3568,7 +3573,7 @@ class BuildPlanTestCase: BuildSystemProviderTestCase { let graphResult = PackageGraphResultXCTest(graph) do { - let linuxDebug = BuildEnvironment(platform: .linux, configuration: .debug) + let linuxDebug = BuildEnvironment(platform: .linux, isHost: true, configuration: .debug) try graphResult.check(reachableBuildProducts: "aexec", "BLibrary1", "BLibrary2", in: linuxDebug) try graphResult.check(reachableBuildTargets: "ATarget", "BTarget1", "BTarget2", in: linuxDebug) @@ -3583,7 +3588,7 @@ class BuildPlanTestCase: BuildSystemProviderTestCase { } do { - let macosDebug = BuildEnvironment(platform: .macOS, configuration: .debug) + let macosDebug = BuildEnvironment(platform: .macOS, isHost: true, configuration: .debug) try graphResult.check(reachableBuildProducts: "aexec", "BLibrary2", in: macosDebug) try graphResult.check(reachableBuildTargets: "ATarget", "BTarget2", "BTarget3", in: macosDebug) @@ -3598,7 +3603,7 @@ class BuildPlanTestCase: BuildSystemProviderTestCase { } do { - let androidRelease = BuildEnvironment(platform: .android, configuration: .release) + let androidRelease = BuildEnvironment(platform: .android, isHost: false, configuration: .release) try graphResult.check(reachableBuildProducts: "aexec", "CLibrary", in: androidRelease) try graphResult.check(reachableBuildTargets: "ATarget", "CTarget", in: androidRelease) @@ -4905,7 +4910,7 @@ class BuildPlanTestCase: BuildSystemProviderTestCase { // Test debug configuration do { let result = try await BuildPlanResult(plan: mockBuildPlan( - environment: BuildEnvironment(platform: .macOS, configuration: .debug), + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .debug), graph: graph, fileSystem: fs, observabilityScope: observability.topScope @@ -4927,7 +4932,7 @@ class BuildPlanTestCase: BuildSystemProviderTestCase { // Test release configuration do { let result = try await BuildPlanResult(plan: mockBuildPlan( - environment: BuildEnvironment(platform: .macOS, configuration: .release), + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .release), graph: graph, fileSystem: fs, observabilityScope: observability.topScope @@ -4993,7 +4998,7 @@ class BuildPlanTestCase: BuildSystemProviderTestCase { // Test debug configuration do { let result = try await BuildPlanResult(plan: mockBuildPlan( - environment: BuildEnvironment(platform: .macOS, configuration: .debug), + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .debug), graph: graph, fileSystem: fs, observabilityScope: observability.topScope @@ -5011,7 +5016,7 @@ class BuildPlanTestCase: BuildSystemProviderTestCase { // Test release configuration do { let result = try await BuildPlanResult(plan: mockBuildPlan( - environment: BuildEnvironment(platform: .macOS, configuration: .release), + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .release), graph: graph, fileSystem: fs, observabilityScope: observability.topScope @@ -5131,7 +5136,7 @@ class BuildPlanTestCase: BuildSystemProviderTestCase { // Test debug configuration do { let result = try await BuildPlanResult(plan: mockBuildPlan( - environment: BuildEnvironment(platform: .macOS, configuration: .debug), + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .debug), graph: graph, fileSystem: fs, observabilityScope: observability.topScope @@ -5162,7 +5167,7 @@ class BuildPlanTestCase: BuildSystemProviderTestCase { // Test release configuration do { let result = try await BuildPlanResult(plan: mockBuildPlan( - environment: BuildEnvironment(platform: .macOS, configuration: .release), + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .release), graph: graph, fileSystem: fs, observabilityScope: observability.topScope @@ -7235,6 +7240,7 @@ class BuildPlanTestCase: BuildSystemProviderTestCase { let result = try await BuildPlanResult(plan: mockBuildPlan( environment: BuildEnvironment( platform: .linux, + isHost: true, configuration: .release ), graph: graph, diff --git a/Tests/BuildTests/LLBuildManifestBuilderTests.swift b/Tests/BuildTests/LLBuildManifestBuilderTests.swift index f2bf17e5663..dea4261abdc 100644 --- a/Tests/BuildTests/LLBuildManifestBuilderTests.swift +++ b/Tests/BuildTests/LLBuildManifestBuilderTests.swift @@ -56,6 +56,7 @@ struct LLBuildManifestBuilderTests { var plan = try await mockBuildPlan( environment: BuildEnvironment( platform: .macOS, + isHost: true, configuration: .release ), graph: graph, @@ -86,6 +87,7 @@ struct LLBuildManifestBuilderTests { plan = try await mockBuildPlan( environment: BuildEnvironment( platform: .macOS, + isHost: true, configuration: .debug ), graph: graph, @@ -129,6 +131,7 @@ struct LLBuildManifestBuilderTests { plan = try await mockBuildPlan( environment: BuildEnvironment( platform: .linux, + isHost: true, configuration: .release ), graph: graph, @@ -155,6 +158,7 @@ struct LLBuildManifestBuilderTests { plan = try await mockBuildPlan( environment: BuildEnvironment( platform: .linux, + isHost: true, configuration: .debug ), graph: graph, diff --git a/Tests/BuildTests/PluginInvocationTests.swift b/Tests/BuildTests/PluginInvocationTests.swift index 7569ed86851..b49bbac7c60 100644 --- a/Tests/BuildTests/PluginInvocationTests.swift +++ b/Tests/BuildTests/PluginInvocationTests.swift @@ -233,7 +233,7 @@ final class PluginInvocationTests: XCTestCase { let pluginRunner = MockPluginScriptRunner() let buildParameters = mockBuildParameters( destination: .host, - environment: BuildEnvironment(platform: .macOS, configuration: .debug) + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .debug) ) let results = try await invokeBuildToolPlugins( @@ -960,7 +960,7 @@ final class PluginInvocationTests: XCTestCase { let outputDir = packageDir.appending(".build") let buildParameters = mockBuildParameters( destination: .host, - environment: BuildEnvironment(platform: .macOS, configuration: .debug) + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .debug) ) let result = try await invokeBuildToolPlugins( @@ -1102,7 +1102,7 @@ final class PluginInvocationTests: XCTestCase { let outputDir = packageDir.appending(".build") let buildParameters = mockBuildParameters( destination: .host, - environment: BuildEnvironment(platform: .macOS, configuration: .debug) + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .debug) ) let result = try await invokeBuildToolPlugins( @@ -1456,7 +1456,7 @@ final class PluginInvocationTests: XCTestCase { let outputDir = packageDir.appending(".build") let buildParameters = mockBuildParameters( destination: .host, - environment: BuildEnvironment(platform: .macOS, configuration: .debug) + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .debug) ) return try await invokeBuildToolPlugins( diff --git a/Tests/BuildTests/ProductBuildDescriptionTests.swift b/Tests/BuildTests/ProductBuildDescriptionTests.swift index 5674142e10d..d24e4962811 100644 --- a/Tests/BuildTests/ProductBuildDescriptionTests.swift +++ b/Tests/BuildTests/ProductBuildDescriptionTests.swift @@ -63,7 +63,7 @@ final class ProductBuildDescriptionTests: XCTestCase { package: package, product: product, toolsVersion: .v5_9, - buildParameters: mockBuildParameters(destination: .target, environment: .init(platform: .macOS)), + buildParameters: mockBuildParameters(destination: .target, environment: .init(platform: .macOS, isHost: true)), fileSystem: fs, observabilityScope: observability.topScope ) diff --git a/Tests/FunctionalTests/PluginTests.swift b/Tests/FunctionalTests/PluginTests.swift index 03f4af842b8..5d35a77b6a8 100644 --- a/Tests/FunctionalTests/PluginTests.swift +++ b/Tests/FunctionalTests/PluginTests.swift @@ -806,7 +806,7 @@ final class PluginTests { let success = try await withCheckedThrowingContinuation { continuation in plugin.invoke( action: .performCommand(package: package, arguments: arguments), - buildEnvironment: BuildEnvironment(platform: .macOS, configuration: .debug), + buildEnvironment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .debug), scriptRunner: scriptRunner, workingDirectory: package.path, outputDirectory: pluginDir.appending("output"), @@ -1101,7 +1101,7 @@ final class PluginTests { try await withTaskCancellationHandler { _ = try await plugin.invoke( action: .performCommand(package: package, arguments: []), - buildEnvironment: BuildEnvironment(platform: .macOS, configuration: .debug), + buildEnvironment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .debug), scriptRunner: scriptRunner, workingDirectory: package.path, outputDirectory: pluginDir.appending("output"), diff --git a/Tests/PackageGraphTests/ModulesGraphTests.swift b/Tests/PackageGraphTests/ModulesGraphTests.swift index 55699e5c739..2baf5bf092a 100644 --- a/Tests/PackageGraphTests/ModulesGraphTests.swift +++ b/Tests/PackageGraphTests/ModulesGraphTests.swift @@ -2369,20 +2369,20 @@ struct ModulesGraphTests { try result.checkTarget("Foo") { result in result.check(dependencies: "Bar", "Baz", "Biz") try result.checkDependency("Bar") { result in - result.checkConditions(satisfy: .init(platform: .linux, configuration: .debug)) - result.checkConditions(satisfy: .init(platform: .linux, configuration: .release)) - result.checkConditions(dontSatisfy: .init(platform: .macOS, configuration: .release)) + result.checkConditions(satisfy: .init(platform: .linux, isHost: true, configuration: .debug)) + result.checkConditions(satisfy: .init(platform: .linux, isHost: true, configuration: .release)) + result.checkConditions(dontSatisfy: .init(platform: .macOS, isHost: true, configuration: .release)) } try result.checkDependency("Baz") { result in - result.checkConditions(satisfy: .init(platform: .watchOS, configuration: .debug)) - result.checkConditions(satisfy: .init(platform: .tvOS, configuration: .debug)) - result.checkConditions(dontSatisfy: .init(platform: .tvOS, configuration: .release)) + result.checkConditions(satisfy: .init(platform: .watchOS, isHost: true, configuration: .debug)) + result.checkConditions(satisfy: .init(platform: .tvOS, isHost: true, configuration: .debug)) + result.checkConditions(dontSatisfy: .init(platform: .tvOS, isHost: true, configuration: .release)) } try result.checkDependency("Biz") { result in - result.checkConditions(satisfy: .init(platform: .watchOS, configuration: .release)) - result.checkConditions(satisfy: .init(platform: .iOS, configuration: .release)) - result.checkConditions(dontSatisfy: .init(platform: .iOS, configuration: .debug)) - result.checkConditions(dontSatisfy: .init(platform: .macOS, configuration: .release)) + result.checkConditions(satisfy: .init(platform: .watchOS, isHost: true, configuration: .release)) + result.checkConditions(satisfy: .init(platform: .iOS, isHost: true, configuration: .release)) + result.checkConditions(dontSatisfy: .init(platform: .iOS, isHost: true, configuration: .debug)) + result.checkConditions(dontSatisfy: .init(platform: .macOS, isHost: true, configuration: .release)) } } } diff --git a/Tests/PackageLoadingTests/PackageBuilderTests.swift b/Tests/PackageLoadingTests/PackageBuilderTests.swift index c7c685ecab9..be41b4c31c7 100644 --- a/Tests/PackageLoadingTests/PackageBuilderTests.swift +++ b/Tests/PackageLoadingTests/PackageBuilderTests.swift @@ -2631,7 +2631,7 @@ struct PackageBuilderTests { try package.checkModule("cbar") { package in let scope = BuildSettings.Scope( package.target.buildSettings, - environment: BuildEnvironment(platform: .macOS, configuration: .debug) + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .debug) ) #expect(scope.evaluate(.GCC_PREPROCESSOR_DEFINITIONS) == ["CCC=2", "CXX"]) #expect(scope.evaluate(.HEADER_SEARCH_PATHS) == ["Sources/headers", "Sources/cppheaders"]) @@ -2640,7 +2640,7 @@ struct PackageBuilderTests { let releaseScope = BuildSettings.Scope( package.target.buildSettings, - environment: BuildEnvironment(platform: .macOS, configuration: .release) + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .release) ) #expect(releaseScope.evaluate(.GCC_PREPROCESSOR_DEFINITIONS) == ["CCC=2", "CXX", "RCXX"]) } @@ -2648,20 +2648,20 @@ struct PackageBuilderTests { try package.checkModule("bar") { package in let scope = BuildSettings.Scope( package.target.buildSettings, - environment: BuildEnvironment(platform: .linux, configuration: .debug) + environment: BuildEnvironment(platform: .linux, isHost: true, configuration: .debug) ) #expect(scope.evaluate(.SWIFT_ACTIVE_COMPILATION_CONDITIONS) == ["SOMETHING", "LINUX"]) #expect(scope.evaluate(.OTHER_SWIFT_FLAGS) == ["-Isfoo", "-L", "sbar"]) let rscope = BuildSettings.Scope( package.target.buildSettings, - environment: BuildEnvironment(platform: .linux, configuration: .release) + environment: BuildEnvironment(platform: .linux, isHost: true, configuration: .release) ) #expect(rscope.evaluate(.SWIFT_ACTIVE_COMPILATION_CONDITIONS) == ["SOMETHING", "LINUX", "RLINUX"]) let mscope = BuildSettings.Scope( package.target.buildSettings, - environment: BuildEnvironment(platform: .macOS, configuration: .debug) + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .debug) ) #expect(mscope.evaluate(.SWIFT_ACTIVE_COMPILATION_CONDITIONS) == ["SOMETHING", "DMACOS"]) } @@ -2669,7 +2669,7 @@ struct PackageBuilderTests { try package.checkModule("exe") { package in let scope = BuildSettings.Scope( package.target.buildSettings, - environment: BuildEnvironment(platform: .linux, configuration: .debug) + environment: BuildEnvironment(platform: .linux, isHost: true, configuration: .debug) ) #expect(scope.evaluate(.LINK_LIBRARIES) == ["sqlite3"]) #expect(scope.evaluate(.OTHER_LDFLAGS) == ["-Ilfoo", "-L", "lbar"]) @@ -2680,7 +2680,7 @@ struct PackageBuilderTests { let mscope = BuildSettings.Scope( package.target.buildSettings, - environment: BuildEnvironment(platform: .iOS, configuration: .debug) + environment: BuildEnvironment(platform: .iOS, isHost: false, configuration: .debug) ) #expect(mscope.evaluate(.LINK_LIBRARIES) == ["sqlite3"]) #expect(mscope.evaluate(.LINK_FRAMEWORKS) == ["CoreData"]) @@ -2728,7 +2728,7 @@ struct PackageBuilderTests { try package.checkModule("foo") { package in let macosDebugScope = BuildSettings.Scope( package.target.buildSettings, - environment: BuildEnvironment(platform: .macOS, configuration: .debug) + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .debug) ) #expect(macosDebugScope.evaluate(.OTHER_CFLAGS) == []) #expect(macosDebugScope.evaluate(.OTHER_CPLUSPLUSFLAGS) == []) @@ -2736,7 +2736,7 @@ struct PackageBuilderTests { let macosReleaseScope = BuildSettings.Scope( package.target.buildSettings, - environment: BuildEnvironment(platform: .macOS, configuration: .release) + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .release) ) #expect(macosReleaseScope.evaluate(.OTHER_CFLAGS) == []) #expect(macosReleaseScope.evaluate(.OTHER_CPLUSPLUSFLAGS) == []) @@ -2746,21 +2746,21 @@ struct PackageBuilderTests { try package.checkModule("bar") { package in let linuxDebugScope = BuildSettings.Scope( package.target.buildSettings, - environment: BuildEnvironment(platform: .linux, configuration: .debug) + environment: BuildEnvironment(platform: .linux, isHost: true, configuration: .debug) ) #expect(linuxDebugScope.evaluate(.OTHER_SWIFT_FLAGS) == []) #expect(linuxDebugScope.evaluate(.OTHER_LDFLAGS) == []) let linuxReleaseScope = BuildSettings.Scope( package.target.buildSettings, - environment: BuildEnvironment(platform: .linux, configuration: .release) + environment: BuildEnvironment(platform: .linux, isHost: true, configuration: .release) ) #expect(linuxReleaseScope.evaluate(.OTHER_SWIFT_FLAGS) == []) #expect(linuxReleaseScope.evaluate(.OTHER_LDFLAGS) == []) let macosDebugScope = BuildSettings.Scope( package.target.buildSettings, - environment: BuildEnvironment(platform: .macOS, configuration: .debug) + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .debug) ) #expect(macosDebugScope.evaluate(.OTHER_SWIFT_FLAGS) == []) #expect(macosDebugScope.evaluate(.OTHER_LDFLAGS) == []) @@ -2928,22 +2928,22 @@ struct PackageBuilderTests { target.check(dependencies: ["Bar", "Baz", "Biz"]) target.checkDependency("Bar") { result in - result.checkConditions(satisfy: .init(platform: .macOS, configuration: .debug)) - result.checkConditions(satisfy: .init(platform: .macOS, configuration: .release)) - result.checkConditions(dontSatisfy: .init(platform: .watchOS, configuration: .release)) + result.checkConditions(satisfy: .init(platform: .macOS, isHost: true, configuration: .debug)) + result.checkConditions(satisfy: .init(platform: .macOS, isHost: true, configuration: .release)) + result.checkConditions(dontSatisfy: .init(platform: .watchOS, isHost: false, configuration: .release)) } target.checkDependency("Baz") { result in - result.checkConditions(satisfy: .init(platform: .macOS, configuration: .debug)) - result.checkConditions(satisfy: .init(platform: .linux, configuration: .debug)) - result.checkConditions(dontSatisfy: .init(platform: .linux, configuration: .release)) + result.checkConditions(satisfy: .init(platform: .macOS, isHost: true, configuration: .debug)) + result.checkConditions(satisfy: .init(platform: .linux, isHost: true, configuration: .debug)) + result.checkConditions(dontSatisfy: .init(platform: .linux, isHost: true, configuration: .release)) } target.checkDependency("Biz") { result in - result.checkConditions(satisfy: .init(platform: .watchOS, configuration: .release)) - result.checkConditions(satisfy: .init(platform: .iOS, configuration: .release)) - result.checkConditions(dontSatisfy: .init(platform: .linux, configuration: .release)) - result.checkConditions(dontSatisfy: .init(platform: .iOS, configuration: .debug)) + result.checkConditions(satisfy: .init(platform: .watchOS, isHost: false, configuration: .release)) + result.checkConditions(satisfy: .init(platform: .iOS, isHost: false, configuration: .release)) + result.checkConditions(dontSatisfy: .init(platform: .linux, isHost: false, configuration: .release)) + result.checkConditions(dontSatisfy: .init(platform: .iOS, isHost: false, configuration: .debug)) } } } @@ -3234,13 +3234,13 @@ struct PackageBuilderTests { try package.checkModule("foo") { package in let macosDebugScope = BuildSettings.Scope( package.target.buildSettings, - environment: BuildEnvironment(platform: .macOS, configuration: .debug) + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .debug) ) #expect(macosDebugScope.evaluate(.SWIFT_VERSION) == ["5"]) let macosReleaseScope = BuildSettings.Scope( package.target.buildSettings, - environment: BuildEnvironment(platform: .macOS, configuration: .release) + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .release) ) #expect(macosReleaseScope.evaluate(.SWIFT_VERSION) == ["5"]) } @@ -3248,19 +3248,19 @@ struct PackageBuilderTests { try package.checkModule("bar") { package in let linuxDebugScope = BuildSettings.Scope( package.target.buildSettings, - environment: BuildEnvironment(platform: .linux, configuration: .debug) + environment: BuildEnvironment(platform: .linux, isHost: true, configuration: .debug) ) #expect(linuxDebugScope.evaluate(.SWIFT_VERSION) == ["3"]) let macosDebugScope = BuildSettings.Scope( package.target.buildSettings, - environment: BuildEnvironment(platform: .macOS, configuration: .debug) + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .debug) ) #expect(macosDebugScope.evaluate(.SWIFT_VERSION) == ["4"]) let macosReleaseScope = BuildSettings.Scope( package.target.buildSettings, - environment: BuildEnvironment(platform: .macOS, configuration: .release) + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .release) ) #expect(macosReleaseScope.evaluate(.SWIFT_VERSION) == ["5"]) } @@ -3293,7 +3293,7 @@ struct PackageBuilderTests { try package.checkModule("foo") { package in let macosDebugScope = BuildSettings.Scope( package.target.buildSettings, - environment: BuildEnvironment(platform: .macOS, configuration: .debug) + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .debug) ) #expect( macosDebugScope.evaluate(.OTHER_SWIFT_FLAGS) == @@ -3302,7 +3302,7 @@ struct PackageBuilderTests { let macosReleaseScope = BuildSettings.Scope( package.target.buildSettings, - environment: BuildEnvironment(platform: .macOS, configuration: .release) + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .release) ) #expect( macosReleaseScope.evaluate(.OTHER_SWIFT_FLAGS) == @@ -3339,7 +3339,7 @@ struct PackageBuilderTests { try package.checkModule("cfoo") { package in let macosDebugScope = BuildSettings.Scope( package.target.buildSettings, - environment: BuildEnvironment(platform: .macOS, configuration: .debug) + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .debug) ) #expect( macosDebugScope.evaluate(.OTHER_CFLAGS) == @@ -3348,7 +3348,7 @@ struct PackageBuilderTests { let macosReleaseScope = BuildSettings.Scope( package.target.buildSettings, - environment: BuildEnvironment(platform: .macOS, configuration: .release) + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .release) ) #expect( macosReleaseScope.evaluate(.OTHER_CFLAGS) == @@ -3385,7 +3385,7 @@ struct PackageBuilderTests { try package.checkModule("cxxfoo") { package in let macosDebugScope = BuildSettings.Scope( package.target.buildSettings, - environment: BuildEnvironment(platform: .macOS, configuration: .debug) + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .debug) ) #expect( macosDebugScope.evaluate(.OTHER_CPLUSPLUSFLAGS) == @@ -3394,7 +3394,7 @@ struct PackageBuilderTests { let macosReleaseScope = BuildSettings.Scope( package.target.buildSettings, - environment: BuildEnvironment(platform: .macOS, configuration: .release) + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .release) ) #expect( macosReleaseScope.evaluate(.OTHER_CPLUSPLUSFLAGS) == @@ -3429,7 +3429,7 @@ struct PackageBuilderTests { try package.checkModule("cfoo") { package in let macosDebugScope = BuildSettings.Scope( package.target.buildSettings, - environment: BuildEnvironment(platform: .macOS, configuration: .debug) + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .debug) ) #expect( macosDebugScope.evaluate(.OTHER_CFLAGS) == @@ -3438,7 +3438,7 @@ struct PackageBuilderTests { let macosReleaseScope = BuildSettings.Scope( package.target.buildSettings, - environment: BuildEnvironment(platform: .macOS, configuration: .release) + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .release) ) #expect( macosReleaseScope.evaluate(.OTHER_CFLAGS) == @@ -3473,7 +3473,7 @@ struct PackageBuilderTests { try package.checkModule("cxxfoo") { package in let macosDebugScope = BuildSettings.Scope( package.target.buildSettings, - environment: BuildEnvironment(platform: .macOS, configuration: .debug) + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .debug) ) #expect( macosDebugScope.evaluate(.OTHER_CPLUSPLUSFLAGS) == @@ -3482,7 +3482,7 @@ struct PackageBuilderTests { let macosReleaseScope = BuildSettings.Scope( package.target.buildSettings, - environment: BuildEnvironment(platform: .macOS, configuration: .release) + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .release) ) #expect( macosReleaseScope.evaluate(.OTHER_CPLUSPLUSFLAGS) == @@ -3523,14 +3523,14 @@ struct PackageBuilderTests { try package.checkModule("A") { package in let macosDebugScope = BuildSettings.Scope( package.target.buildSettings, - environment: BuildEnvironment(platform: .macOS, configuration: .debug) + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .debug) ) #expect(macosDebugScope.evaluate(.OTHER_SWIFT_FLAGS).contains("-default-isolation")) #expect(macosDebugScope.evaluate(.OTHER_SWIFT_FLAGS).contains("MainActor")) let macosReleaseScope = BuildSettings.Scope( package.target.buildSettings, - environment: BuildEnvironment(platform: .macOS, configuration: .release) + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .release) ) #expect(macosReleaseScope.evaluate(.OTHER_SWIFT_FLAGS).contains("-default-isolation")) #expect(macosReleaseScope.evaluate(.OTHER_SWIFT_FLAGS).contains("MainActor")) @@ -3540,21 +3540,21 @@ struct PackageBuilderTests { try package.checkModule("B") { package in let linuxDebugScope = BuildSettings.Scope( package.target.buildSettings, - environment: BuildEnvironment(platform: .linux, configuration: .debug) + environment: BuildEnvironment(platform: .linux, isHost: true, configuration: .debug) ) #expect(linuxDebugScope.evaluate(.OTHER_SWIFT_FLAGS).contains("-default-isolation")) #expect(linuxDebugScope.evaluate(.OTHER_SWIFT_FLAGS).contains("nonisolated")) let macosDebugScope = BuildSettings.Scope( package.target.buildSettings, - environment: BuildEnvironment(platform: .macOS, configuration: .debug) + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .debug) ) #expect(macosDebugScope.evaluate(.OTHER_SWIFT_FLAGS).contains("-default-isolation")) #expect(macosDebugScope.evaluate(.OTHER_SWIFT_FLAGS).contains("MainActor")) let macosReleaseScope = BuildSettings.Scope( package.target.buildSettings, - environment: BuildEnvironment(platform: .macOS, configuration: .release) + environment: BuildEnvironment(platform: .macOS, isHost: true, configuration: .release) ) #expect(!macosReleaseScope.evaluate(.OTHER_SWIFT_FLAGS).contains("-default-isolation") || !macosReleaseScope.evaluate(.OTHER_SWIFT_FLAGS).contains("MainActor")) diff --git a/Tests/SPMBuildCoreTests/BuildParametersTests.swift b/Tests/SPMBuildCoreTests/BuildParametersTests.swift index cf79703fe9b..51d4f40eb30 100644 --- a/Tests/SPMBuildCoreTests/BuildParametersTests.swift +++ b/Tests/SPMBuildCoreTests/BuildParametersTests.swift @@ -21,7 +21,7 @@ struct BuildParametersTests { func configurationDependentProperties() throws { var parameters = mockBuildParameters( destination: .host, - environment: BuildEnvironment(platform: .linux, configuration: .debug) + environment: BuildEnvironment(platform: .linux, isHost: true, configuration: .debug) ) #expect(parameters.enableTestability) parameters.configuration = .release diff --git a/Tests/WorkspaceTests/PrebuiltsTests.swift b/Tests/WorkspaceTests/PrebuiltsTests.swift index 759e94c3721..c701b1f9573 100644 --- a/Tests/WorkspaceTests/PrebuiltsTests.swift +++ b/Tests/WorkspaceTests/PrebuiltsTests.swift @@ -26,6 +26,8 @@ import _InternalTestSupport final class PrebuiltsTests: XCTestCase { let swiftVersion = "\(SwiftVersion.current.major).\(SwiftVersion.current.minor)" + let host = BuildEnvironment(platform: .macOS, isHost: true) + let dest = BuildEnvironment(platform: .linux, isHost: false) func with( fileSystem: FileSystem, @@ -96,11 +98,19 @@ final class PrebuiltsTests: XCTestCase { let rootPackage = try MockPackage( name: "Foo", targets: [ + MockTarget( + name: "SwiftSyntaxExtras", + dependencies: [ + .product(name: "SwiftSyntaxMacros", package: "swift-syntax"), + .product(name: "SwiftCompilerPlugin", package: "swift-syntax"), + ] + ), MockTarget( name: "FooMacros", dependencies: [ .product(name: "SwiftSyntaxMacros", package: "swift-syntax"), .product(name: "SwiftCompilerPlugin", package: "swift-syntax"), + "SwiftSyntaxExtras", ], type: .macro ), @@ -113,6 +123,13 @@ final class PrebuiltsTests: XCTestCase { dependencies: ["Foo"], type: .executable ), + MockTarget( + name: "ExtrasClient", + dependencies: [ + "SwiftSyntaxExtras", + ], + type: .executable + ), MockTarget( name: "FooTests", dependencies: [ @@ -150,17 +167,37 @@ final class PrebuiltsTests: XCTestCase { } } - func checkSettings(_ rootPackage: ResolvedPackage, _ targetName: String, usePrebuilt: Bool) throws { - let target = try XCTUnwrap(rootPackage.underlying.modules.first(where: { $0.name == targetName })) + func checkSettings(_ rootPackage: ResolvedPackage, _ targetName: String, env: BuildEnvironment, usePrebuilt: Bool) throws { + let target = try XCTUnwrap(rootPackage.modules[ResolvedModule.ID(moduleName: targetName, packageIdentity: rootPackage.identity)]) + + let swiftFlags = (target.underlying.buildSettings.assignments[.OTHER_SWIFT_FLAGS] ?? []).filter({ + $0.conditions.allSatisfy({ $0.satisfies(env) }) + }).flatMap({ $0.values }) + + let ldFlags = (target.underlying.buildSettings.assignments[.OTHER_LDFLAGS] ?? []).filter({ + $0.conditions.allSatisfy({ $0.satisfies(env) }) + }).flatMap({ $0.values }) + + let deps = target.dependencies.filter({ $0.conditions.allSatisfy({ $0.satisfies(env) })}) + let ssDeps = deps.filter({ + guard case .product(let product, conditions: _) = $0 else { + return false + } + return product.packageIdentity == .plain("swift-syntax") + }) + if usePrebuilt { - let swiftFlags = try XCTUnwrap(target.buildSettings.assignments[.OTHER_SWIFT_FLAGS]).flatMap({ $0.values }) XCTAssertTrue(swiftFlags.contains("-I/tmp/ws/.build/prebuilts/swift-syntax/600.0.1/\(self.swiftVersion)-MacroSupport-macos_aarch64/Modules".fixwin)) XCTAssertTrue(swiftFlags.contains("-I/tmp/ws/.build/prebuilts/swift-syntax/600.0.1/\(self.swiftVersion)-MacroSupport-macos_aarch64/include/_SwiftSyntaxCShims".fixwin)) - let ldFlags = try XCTUnwrap(target.buildSettings.assignments[.OTHER_LDFLAGS]).flatMap({ $0.values }) + XCTAssertTrue(ldFlags.contains("/tmp/ws/.build/prebuilts/swift-syntax/600.0.1/\(self.swiftVersion)-MacroSupport-macos_aarch64/lib/libMacroSupport.a".fixwin)) + + XCTAssertTrue(ssDeps.isEmpty) } else { - XCTAssertNil(target.buildSettings.assignments[.OTHER_SWIFT_FLAGS]) - XCTAssertNil(target.buildSettings.assignments[.OTHER_LDFLAGS]) + XCTAssertTrue(swiftFlags.isEmpty) + XCTAssertTrue(ldFlags.isEmpty) + + XCTAssertFalse(ssDeps.isEmpty) } } @@ -216,10 +253,10 @@ final class PrebuiltsTests: XCTestCase { try await workspace.checkPackageGraph(roots: ["Foo"]) { modulesGraph, diagnostics in XCTAssertTrue(diagnostics.filter({ $0.severity == .error || $0.severity == .warning }).isEmpty) let rootPackage = try XCTUnwrap(modulesGraph.rootPackages.first) - try checkSettings(rootPackage, "FooMacros", usePrebuilt: true) - try checkSettings(rootPackage, "FooTests", usePrebuilt: true) - try checkSettings(rootPackage, "Foo", usePrebuilt: false) - try checkSettings(rootPackage, "FooClient", usePrebuilt: false) + try checkSettings(rootPackage, "FooMacros", env: host, usePrebuilt: true) + try checkSettings(rootPackage, "FooTests", env: host, usePrebuilt: true) + try checkSettings(rootPackage, "SwiftSyntaxExtras", env: host, usePrebuilt: true) + try checkSettings(rootPackage, "SwiftSyntaxExtras", env: dest, usePrebuilt: false) } } } @@ -280,10 +317,10 @@ final class PrebuiltsTests: XCTestCase { try await workspace.checkPackageGraph(roots: [rootPackage.name]) { modulesGraph, diagnostics in XCTAssertTrue(diagnostics.filter({ $0.severity == .error || $0.severity == .warning }).isEmpty) let rootPackage = try XCTUnwrap(modulesGraph.rootPackages.first) - try checkSettings(rootPackage, "FooMacros", usePrebuilt: true) - try checkSettings(rootPackage, "FooTests", usePrebuilt: true) - try checkSettings(rootPackage, "Foo", usePrebuilt: false) - try checkSettings(rootPackage, "FooClient", usePrebuilt: false) + try checkSettings(rootPackage, "FooMacros", env: host, usePrebuilt: true) + try checkSettings(rootPackage, "FooTests", env: host, usePrebuilt: true) + try checkSettings(rootPackage, "SwiftSyntaxExtras", env: host, usePrebuilt: true) + try checkSettings(rootPackage, "SwiftSyntaxExtras", env: dest, usePrebuilt: false) } // Change the version of swift syntax to one that doesn't have prebuilts @@ -310,10 +347,10 @@ final class PrebuiltsTests: XCTestCase { try await workspace.checkPackageGraph(roots: [rootPackage.name]) { modulesGraph, diagnostics in XCTAssertTrue(diagnostics.filter({ $0.severity == .error || $0.severity == .warning }).isEmpty) let rootPackage = try XCTUnwrap(modulesGraph.rootPackages.first) - try checkSettings(rootPackage, "FooMacros", usePrebuilt: false) - try checkSettings(rootPackage, "FooTests", usePrebuilt: false) - try checkSettings(rootPackage, "Foo", usePrebuilt: false) - try checkSettings(rootPackage, "FooClient", usePrebuilt: false) + try checkSettings(rootPackage, "FooMacros", env: host, usePrebuilt: false) + try checkSettings(rootPackage, "FooTests", env: host, usePrebuilt: false) + try checkSettings(rootPackage, "SwiftSyntaxExtras", env: host, usePrebuilt: false) + try checkSettings(rootPackage, "SwiftSyntaxExtras", env: dest, usePrebuilt: false) } // Change it back @@ -323,10 +360,10 @@ final class PrebuiltsTests: XCTestCase { try await workspace.checkPackageGraph(roots: [rootPackage.name]) { modulesGraph, diagnostics in XCTAssertTrue(diagnostics.filter({ $0.severity == .error || $0.severity == .warning }).isEmpty) let rootPackage = try XCTUnwrap(modulesGraph.rootPackages.first) - try checkSettings(rootPackage, "FooMacros", usePrebuilt: true) - try checkSettings(rootPackage, "FooTests", usePrebuilt: true) - try checkSettings(rootPackage, "Foo", usePrebuilt: false) - try checkSettings(rootPackage, "FooClient", usePrebuilt: false) + try checkSettings(rootPackage, "FooMacros", env: host, usePrebuilt: true) + try checkSettings(rootPackage, "FooTests", env: host, usePrebuilt: true) + try checkSettings(rootPackage, "SwiftSyntaxExtras", env: host, usePrebuilt: true) + try checkSettings(rootPackage, "SwiftSyntaxExtras", env: dest, usePrebuilt: false) } } } @@ -385,10 +422,10 @@ final class PrebuiltsTests: XCTestCase { try await workspace.checkPackageGraph(roots: ["Foo"]) { modulesGraph, diagnostics in XCTAssertTrue(diagnostics.filter({ $0.severity == .error }).isEmpty) let rootPackage = try XCTUnwrap(modulesGraph.rootPackages.first) - try checkSettings(rootPackage, "FooMacros", usePrebuilt: true) - try checkSettings(rootPackage, "FooTests", usePrebuilt: true) - try checkSettings(rootPackage, "Foo", usePrebuilt: false) - try checkSettings(rootPackage, "FooClient", usePrebuilt: false) + try checkSettings(rootPackage, "FooMacros", env: host, usePrebuilt: true) + try checkSettings(rootPackage, "FooTests", env: host, usePrebuilt: true) + try checkSettings(rootPackage, "SwiftSyntaxExtras", env: host, usePrebuilt: true) + try checkSettings(rootPackage, "SwiftSyntaxExtras", env: dest, usePrebuilt: false) } } } @@ -447,10 +484,10 @@ final class PrebuiltsTests: XCTestCase { try await workspace.checkPackageGraph(roots: ["Foo"]) { modulesGraph, diagnostics in XCTAssertTrue(diagnostics.filter({ $0.severity == .error }).isEmpty) let rootPackage = try XCTUnwrap(modulesGraph.rootPackages.first) - try checkSettings(rootPackage, "FooMacros", usePrebuilt: true) - try checkSettings(rootPackage, "FooTests", usePrebuilt: true) - try checkSettings(rootPackage, "Foo", usePrebuilt: false) - try checkSettings(rootPackage, "FooClient", usePrebuilt: false) + try checkSettings(rootPackage, "FooMacros", env: host, usePrebuilt: true) + try checkSettings(rootPackage, "FooTests", env: host, usePrebuilt: true) + try checkSettings(rootPackage, "SwiftSyntaxExtras", env: host, usePrebuilt: true) + try checkSettings(rootPackage, "SwiftSyntaxExtras", env: dest, usePrebuilt: false) } } } @@ -509,10 +546,10 @@ final class PrebuiltsTests: XCTestCase { try await workspace.checkPackageGraph(roots: ["Foo"]) { modulesGraph, diagnostics in XCTAssertTrue(diagnostics.filter({ $0.severity == .error }).isEmpty) let rootPackage = try XCTUnwrap(modulesGraph.rootPackages.first) - try checkSettings(rootPackage, "FooMacros", usePrebuilt: true) - try checkSettings(rootPackage, "FooTests", usePrebuilt: true) - try checkSettings(rootPackage, "Foo", usePrebuilt: false) - try checkSettings(rootPackage, "FooClient", usePrebuilt: false) + try checkSettings(rootPackage, "FooMacros", env: host, usePrebuilt: true) + try checkSettings(rootPackage, "FooTests", env: host, usePrebuilt: true) + try checkSettings(rootPackage, "SwiftSyntaxExtras", env: host, usePrebuilt: true) + try checkSettings(rootPackage, "SwiftSyntaxExtras", env: dest, usePrebuilt: false) } } } @@ -561,10 +598,10 @@ final class PrebuiltsTests: XCTestCase { try await workspace.checkPackageGraph(roots: ["Foo"]) { modulesGraph, diagnostics in XCTAssertTrue(diagnostics.filter({ $0.severity == .error }).isEmpty) let rootPackage = try XCTUnwrap(modulesGraph.rootPackages.first) - try checkSettings(rootPackage, "FooMacros", usePrebuilt: false) - try checkSettings(rootPackage, "FooTests", usePrebuilt: false) - try checkSettings(rootPackage, "Foo", usePrebuilt: false) - try checkSettings(rootPackage, "FooClient", usePrebuilt: false) + try checkSettings(rootPackage, "FooMacros", env: host, usePrebuilt: false) + try checkSettings(rootPackage, "FooTests", env: host, usePrebuilt: false) + try checkSettings(rootPackage, "SwiftSyntaxExtras", env: host, usePrebuilt: false) + try checkSettings(rootPackage, "SwiftSyntaxExtras", env: dest, usePrebuilt: false) } await secondFetch.set(true) @@ -572,10 +609,10 @@ final class PrebuiltsTests: XCTestCase { try await workspace.checkPackageGraph(roots: ["Foo"]) { modulesGraph, diagnostics in XCTAssertTrue(diagnostics.filter({ $0.severity == .error }).isEmpty) let rootPackage = try XCTUnwrap(modulesGraph.rootPackages.first) - try checkSettings(rootPackage, "FooMacros", usePrebuilt: false) - try checkSettings(rootPackage, "FooTests", usePrebuilt: false) - try checkSettings(rootPackage, "Foo", usePrebuilt: false) - try checkSettings(rootPackage, "FooClient", usePrebuilt: false) + try checkSettings(rootPackage, "FooMacros", env: host, usePrebuilt: false) + try checkSettings(rootPackage, "FooTests", env: host, usePrebuilt: false) + try checkSettings(rootPackage, "SwiftSyntaxExtras", env: host, usePrebuilt: false) + try checkSettings(rootPackage, "SwiftSyntaxExtras", env: dest, usePrebuilt: false) } } } @@ -628,10 +665,10 @@ final class PrebuiltsTests: XCTestCase { try await workspace.checkPackageGraph(roots: ["Foo"]) { modulesGraph, diagnostics in XCTAssertTrue(diagnostics.filter({ $0.severity == .error }).isEmpty) let rootPackage = try XCTUnwrap(modulesGraph.rootPackages.first) - try checkSettings(rootPackage, "FooMacros", usePrebuilt: false) - try checkSettings(rootPackage, "FooTests", usePrebuilt: false) - try checkSettings(rootPackage, "Foo", usePrebuilt: false) - try checkSettings(rootPackage, "FooClient", usePrebuilt: false) + try checkSettings(rootPackage, "FooMacros", env: host, usePrebuilt: false) + try checkSettings(rootPackage, "FooTests", env: host, usePrebuilt: false) + try checkSettings(rootPackage, "SwiftSyntaxExtras", env: host, usePrebuilt: false) + try checkSettings(rootPackage, "SwiftSyntaxExtras", env: dest, usePrebuilt: false) } } } @@ -677,10 +714,10 @@ final class PrebuiltsTests: XCTestCase { try await workspace.checkPackageGraph(roots: ["Foo"]) { modulesGraph, diagnostics in XCTAssertTrue(diagnostics.filter({ $0.severity == .error }).isEmpty) let rootPackage = try XCTUnwrap(modulesGraph.rootPackages.first) - try checkSettings(rootPackage, "FooMacros", usePrebuilt: false) - try checkSettings(rootPackage, "FooTests", usePrebuilt: false) - try checkSettings(rootPackage, "Foo", usePrebuilt: false) - try checkSettings(rootPackage, "FooClient", usePrebuilt: false) + try checkSettings(rootPackage, "FooMacros", env: host, usePrebuilt: false) + try checkSettings(rootPackage, "FooTests", env: host, usePrebuilt: false) + try checkSettings(rootPackage, "SwiftSyntaxExtras", env: host, usePrebuilt: false) + try checkSettings(rootPackage, "SwiftSyntaxExtras", env: dest, usePrebuilt: false) } } } @@ -748,10 +785,10 @@ final class PrebuiltsTests: XCTestCase { XCTAssertTrue(diagnostics.filter({ $0.severity == .error }).isEmpty) XCTAssertTrue(diagnostics.contains(where: { $0.message == "Failed to decode prebuilt manifest: invalidSignature" })) let rootPackage = try XCTUnwrap(modulesGraph.rootPackages.first) - try checkSettings(rootPackage, "FooMacros", usePrebuilt: false) - try checkSettings(rootPackage, "FooTests", usePrebuilt: false) - try checkSettings(rootPackage, "Foo", usePrebuilt: false) - try checkSettings(rootPackage, "FooClient", usePrebuilt: false) + try checkSettings(rootPackage, "FooMacros", env: host, usePrebuilt: false) + try checkSettings(rootPackage, "FooTests", env: host, usePrebuilt: false) + try checkSettings(rootPackage, "SwiftSyntaxExtras", env: host, usePrebuilt: false) + try checkSettings(rootPackage, "SwiftSyntaxExtras", env: dest, usePrebuilt: false) } } } @@ -809,10 +846,10 @@ final class PrebuiltsTests: XCTestCase { try await workspace.checkPackageGraph(roots: ["Foo"]) { modulesGraph, diagnostics in XCTAssertTrue(diagnostics.filter({ $0.severity == .error }).isEmpty) let rootPackage = try XCTUnwrap(modulesGraph.rootPackages.first) - try checkSettings(rootPackage, "FooMacros", usePrebuilt: false) - try checkSettings(rootPackage, "FooTests", usePrebuilt: false) - try checkSettings(rootPackage, "Foo", usePrebuilt: false) - try checkSettings(rootPackage, "FooClient", usePrebuilt: false) + try checkSettings(rootPackage, "FooMacros", env: host, usePrebuilt: false) + try checkSettings(rootPackage, "FooTests", env: host, usePrebuilt: false) + try checkSettings(rootPackage, "SwiftSyntaxExtras", env: host, usePrebuilt: false) + try checkSettings(rootPackage, "SwiftSyntaxExtras", env: dest, usePrebuilt: false) } } } @@ -873,10 +910,10 @@ final class PrebuiltsTests: XCTestCase { try await workspace.checkPackageGraph(roots: ["Foo"]) { modulesGraph, diagnostics in XCTAssertTrue(diagnostics.filter({ $0.severity == .error }).isEmpty) let rootPackage = try XCTUnwrap(modulesGraph.rootPackages.first) - try checkSettings(rootPackage, "FooMacros", usePrebuilt: true) - try checkSettings(rootPackage, "FooTests", usePrebuilt: true) - try checkSettings(rootPackage, "Foo", usePrebuilt: false) - try checkSettings(rootPackage, "FooClient", usePrebuilt: false) + try checkSettings(rootPackage, "FooMacros", env: host, usePrebuilt: true) + try checkSettings(rootPackage, "FooTests", env: host, usePrebuilt: true) + try checkSettings(rootPackage, "SwiftSyntaxExtras", env: host, usePrebuilt: true) + try checkSettings(rootPackage, "SwiftSyntaxExtras", env: dest, usePrebuilt: false) } } } @@ -928,10 +965,10 @@ final class PrebuiltsTests: XCTestCase { try await workspace.checkPackageGraph(roots: ["Foo"]) { modulesGraph, diagnostics in XCTAssertTrue(diagnostics.filter({ $0.severity == .error }).isEmpty) let rootPackage = try XCTUnwrap(modulesGraph.rootPackages.first) - try checkSettings(rootPackage, "FooMacros", usePrebuilt: false) - try checkSettings(rootPackage, "FooTests", usePrebuilt: false) - try checkSettings(rootPackage, "Foo", usePrebuilt: false) - try checkSettings(rootPackage, "FooClient", usePrebuilt: false) + try checkSettings(rootPackage, "FooMacros", env: host, usePrebuilt: false) + try checkSettings(rootPackage, "FooTests", env: host, usePrebuilt: false) + try checkSettings(rootPackage, "SwiftSyntaxExtras", env: host, usePrebuilt: false) + try checkSettings(rootPackage, "SwiftSyntaxExtras", env: dest, usePrebuilt: false) } } } @@ -956,10 +993,10 @@ final class PrebuiltsTests: XCTestCase { try await workspace.checkPackageGraph(roots: ["Foo"]) { modulesGraph, diagnostics in XCTAssertTrue(diagnostics.filter({ $0.severity == .error }).isEmpty) let rootPackage = try XCTUnwrap(modulesGraph.rootPackages.first) - try checkSettings(rootPackage, "FooMacros", usePrebuilt: false) - try checkSettings(rootPackage, "FooTests", usePrebuilt: false) - try checkSettings(rootPackage, "Foo", usePrebuilt: false) - try checkSettings(rootPackage, "FooClient", usePrebuilt: false) + try checkSettings(rootPackage, "FooMacros", env: host, usePrebuilt: false) + try checkSettings(rootPackage, "FooTests", env: host, usePrebuilt: false) + try checkSettings(rootPackage, "SwiftSyntaxExtras", env: host, usePrebuilt: false) + try checkSettings(rootPackage, "SwiftSyntaxExtras", env: dest, usePrebuilt: false) } } }