diff --git a/Package.swift b/Package.swift index 3c8040e0..dcee18be 100644 --- a/Package.swift +++ b/Package.swift @@ -31,16 +31,20 @@ func swiftSettings(languageMode: SwiftLanguageMode) -> [SwiftSetting] { .enableUpcomingFeature("ConciseMagicFile"), .enableUpcomingFeature("DeprecateApplicationMain"), .enableUpcomingFeature("DisableOutwardActorInference"), + //.enableUpcomingFeature("DynamicActorIsolation"), .enableUpcomingFeature("ForwardTrailingClosures"), + .enableUpcomingFeature("GlobalActorIsolatedTypesUsability"), .enableUpcomingFeature("GlobalConcurrency"), .enableUpcomingFeature("ImplicitOpenExistentials"), .enableUpcomingFeature("ImportObjcForwardDeclarations"), .enableUpcomingFeature("InferSendableFromCaptures"), .enableUpcomingFeature("IsolatedDefaultValues"), + .enableUpcomingFeature("NonfrozenEnumExhaustivity"), //.enableUpcomingFeature("RegionBasedIsolation"), // rdar://137809703 // Future Swift features .enableUpcomingFeature("ExistentialAny"), + .enableUpcomingFeature("MemberImportVisibility"), .enableUpcomingFeature("InternalImportsByDefault"), .swiftLanguageMode(.v5), @@ -51,6 +55,7 @@ func swiftSettings(languageMode: SwiftLanguageMode) -> [SwiftSetting] { return [ // Future Swift features .enableUpcomingFeature("ExistentialAny"), + .enableUpcomingFeature("MemberImportVisibility"), .enableUpcomingFeature("InternalImportsByDefault"), .swiftLanguageMode(.v6), diff --git a/Sources/SWBApplePlatform/ActoolInputFileGroupingStrategy.swift b/Sources/SWBApplePlatform/ActoolInputFileGroupingStrategy.swift index dede8866..97410e4c 100644 --- a/Sources/SWBApplePlatform/ActoolInputFileGroupingStrategy.swift +++ b/Sources/SWBApplePlatform/ActoolInputFileGroupingStrategy.swift @@ -12,6 +12,7 @@ public import SWBCore import SWBUtil +import Foundation /// A grouping strategy that groups all asset catalogs and all strings files that match sticker packs inside those asset catalogs. @_spi(Testing) public final class ActoolInputFileGroupingStrategy: InputFileGroupingStrategy { diff --git a/Sources/SWBApplePlatform/AppIntentsMetadataTaskProducer.swift b/Sources/SWBApplePlatform/AppIntentsMetadataTaskProducer.swift index 937ecc1a..cf8b9a03 100644 --- a/Sources/SWBApplePlatform/AppIntentsMetadataTaskProducer.swift +++ b/Sources/SWBApplePlatform/AppIntentsMetadataTaskProducer.swift @@ -13,6 +13,7 @@ import SWBCore import SWBUtil import SWBTaskConstruction +import SWBMacro final class AppIntentsMetadataTaskProducer: PhasedTaskProducer, TaskProducer { diff --git a/Sources/SWBApplePlatform/CoreDataCompiler.swift b/Sources/SWBApplePlatform/CoreDataCompiler.swift index af46c91d..1a324cf8 100644 --- a/Sources/SWBApplePlatform/CoreDataCompiler.swift +++ b/Sources/SWBApplePlatform/CoreDataCompiler.swift @@ -12,6 +12,7 @@ import SWBUtil public import SWBCore +import SWBMacro public final class CoreDataModelCompilerSpec : GenericCompilerSpec, SpecIdentifierType, @unchecked Sendable { public static let identifier = "com.apple.compilers.model.coredata" diff --git a/Sources/SWBApplePlatform/CoreMLCompiler.swift b/Sources/SWBApplePlatform/CoreMLCompiler.swift index 3f9a37bd..dfa14648 100644 --- a/Sources/SWBApplePlatform/CoreMLCompiler.swift +++ b/Sources/SWBApplePlatform/CoreMLCompiler.swift @@ -13,6 +13,7 @@ public import SWBUtil public import SWBCore public import SWBMacro +import SWBProtocol public struct DiscoveredCoreMLToolSpecInfo: DiscoveredCommandLineToolSpecInfo { public let toolPath: Path @@ -151,7 +152,7 @@ public final class CoreMLCompilerSpec : GenericCompilerSpec, SpecIdentifierType, // When the build setting is empty or is set to Automatic, then use an appropriate string based on the predominant source code language for the target. if languageSettingValue.isEmpty || languageSettingValue == "Automatic" { // Note that it would be pretty weird here to not have a configured target, or to have a target which is not a StandardTarget. - let predominantSourceCodeLanguage = (cbc.producer.configuredTarget?.target as? StandardTarget)?.predominantSourceCodeLanguage ?? .undefined + let predominantSourceCodeLanguage = (cbc.producer.configuredTarget?.target as? SWBCore.StandardTarget)?.predominantSourceCodeLanguage ?? .undefined switch predominantSourceCodeLanguage { case .swift: codegenLanguage = "Swift" @@ -289,7 +290,7 @@ public final class CoreMLCompilerSpec : GenericCompilerSpec, SpecIdentifierType, } guard - let target = cbc.producer.configuredTarget?.target as? BuildPhaseTarget, + let target = cbc.producer.configuredTarget?.target as? SWBCore.BuildPhaseTarget, let outputPath = headerOutputPath, target.headersBuildPhase != nil else { continue } diff --git a/Sources/SWBApplePlatform/DevelopmentAssetsTaskProducer.swift b/Sources/SWBApplePlatform/DevelopmentAssetsTaskProducer.swift index 6e0b6299..1dffb25a 100644 --- a/Sources/SWBApplePlatform/DevelopmentAssetsTaskProducer.swift +++ b/Sources/SWBApplePlatform/DevelopmentAssetsTaskProducer.swift @@ -13,6 +13,7 @@ import SWBCore import SWBUtil import SWBTaskConstruction +import SWBMacro final class DevelopmentAssetsTaskProducer: StandardTaskProducer, TaskProducer { func generateTasks() async -> [any PlannedTask] { diff --git a/Sources/SWBApplePlatform/InstrumentsPackageBuilderSpec.swift b/Sources/SWBApplePlatform/InstrumentsPackageBuilderSpec.swift index fc4fd231..cc0d38c9 100644 --- a/Sources/SWBApplePlatform/InstrumentsPackageBuilderSpec.swift +++ b/Sources/SWBApplePlatform/InstrumentsPackageBuilderSpec.swift @@ -12,6 +12,7 @@ import SWBUtil public import SWBCore +import SWBMacro public final class InstrumentsPackageBuilderSpec: GenericCompilerSpec, SpecIdentifierType, @unchecked Sendable { public static let identifier = "com.apple.compilers.instruments-package-builder" diff --git a/Sources/SWBApplePlatform/IntentsCompiler.swift b/Sources/SWBApplePlatform/IntentsCompiler.swift index 2a7564e6..e31cf5a4 100644 --- a/Sources/SWBApplePlatform/IntentsCompiler.swift +++ b/Sources/SWBApplePlatform/IntentsCompiler.swift @@ -12,6 +12,8 @@ import SWBUtil public import SWBCore +import SWBProtocol +import SWBMacro /// Payload information for Intents tasks. fileprivate struct IntentsTaskPayload: TaskPayload, Encodable { @@ -122,7 +124,7 @@ public final class IntentsCompilerSpec : GenericCompilerSpec, SpecIdentifierType let outputDir = cbc.scope.evaluate(BuiltinMacros.DERIVED_FILE_DIR).join("IntentDefinitionGenerated").join(modelName).normalize() guard - let target = cbc.producer.configuredTarget?.target as? BuildPhaseTarget, + let target = cbc.producer.configuredTarget?.target as? SWBCore.BuildPhaseTarget, target.sourcesBuildPhase != nil, let intentsCodegenVisibility = input.intentsCodegenVisibility else { return } @@ -136,7 +138,7 @@ public final class IntentsCompilerSpec : GenericCompilerSpec, SpecIdentifierType // When the build setting is empty or is set to Automatic, then use an appropriate string based on the predominant source code language for the target. if languageSettingValue.isEmpty || languageSettingValue == "Automatic" { // Note that it would be pretty weird here to not have a configured target, or to have a target which is not a StandardTarget. - let predominantSourceCodeLanguage = (cbc.producer.configuredTarget?.target as? StandardTarget)?.predominantSourceCodeLanguage ?? .undefined + let predominantSourceCodeLanguage = (cbc.producer.configuredTarget?.target as? SWBCore.StandardTarget)?.predominantSourceCodeLanguage ?? .undefined switch predominantSourceCodeLanguage { case .swift: codegenLanguage = "Swift" @@ -236,7 +238,7 @@ public final class IntentsCompilerSpec : GenericCompilerSpec, SpecIdentifierType } guard - let target = cbc.producer.configuredTarget?.target as? BuildPhaseTarget, + let target = cbc.producer.configuredTarget?.target as? SWBCore.BuildPhaseTarget, let outputPath = headerOutputPath, target.headersBuildPhase != nil else { continue } diff --git a/Sources/SWBApplePlatform/MiGCompiler.swift b/Sources/SWBApplePlatform/MiGCompiler.swift index 25f07a88..1f9c9ceb 100644 --- a/Sources/SWBApplePlatform/MiGCompiler.swift +++ b/Sources/SWBApplePlatform/MiGCompiler.swift @@ -13,6 +13,7 @@ public import SWBUtil public import SWBCore public import SWBMacro +import SWBProtocol public struct DiscoveredMiGToolSpecInfo: DiscoveredCommandLineToolSpecInfo { public let toolPath: Path diff --git a/Sources/SWBApplePlatform/RealityAssetsCompilerSpec.swift b/Sources/SWBApplePlatform/RealityAssetsCompilerSpec.swift index 54bdd6ad..e41cd491 100644 --- a/Sources/SWBApplePlatform/RealityAssetsCompilerSpec.swift +++ b/Sources/SWBApplePlatform/RealityAssetsCompilerSpec.swift @@ -13,6 +13,7 @@ import Foundation package import SWBCore import SWBUtil +import SWBMacro //--------------------- // diff --git a/Sources/SWBApplePlatform/ResMergerLinkerSpec.swift b/Sources/SWBApplePlatform/ResMergerLinkerSpec.swift index 0e2beae6..1380e2cd 100644 --- a/Sources/SWBApplePlatform/ResMergerLinkerSpec.swift +++ b/Sources/SWBApplePlatform/ResMergerLinkerSpec.swift @@ -12,6 +12,7 @@ import SWBUtil public import SWBCore +import SWBMacro public final class ResMergerLinkerSpec : GenericLinkerSpec, SpecIdentifierType, @unchecked Sendable { public static let identifier = "com.apple.pbx.linkers.resmerger" diff --git a/Sources/SWBApplePlatform/XCStringsCompiler.swift b/Sources/SWBApplePlatform/XCStringsCompiler.swift index e8107a78..07f6dd8b 100644 --- a/Sources/SWBApplePlatform/XCStringsCompiler.swift +++ b/Sources/SWBApplePlatform/XCStringsCompiler.swift @@ -12,6 +12,7 @@ import SWBUtil public import SWBCore +import Foundation public final class XCStringsCompilerSpec: GenericCompilerSpec, SpecIdentifierType, @unchecked Sendable { public static let identifier = "com.apple.compilers.xcstrings" diff --git a/Sources/SWBApplePlatform/XCStringsInputFileGroupingStrategy.swift b/Sources/SWBApplePlatform/XCStringsInputFileGroupingStrategy.swift index 5a8755f0..8532692d 100644 --- a/Sources/SWBApplePlatform/XCStringsInputFileGroupingStrategy.swift +++ b/Sources/SWBApplePlatform/XCStringsInputFileGroupingStrategy.swift @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// public import SWBCore +import SWBUtil /// A grouping strategy that places each xcstrings table in its own group, along with any other .strings or .stringsdicts with the same basename. /// diff --git a/Sources/SWBBuildService/BuildOperationMessages.swift b/Sources/SWBBuildService/BuildOperationMessages.swift index 39a79df8..c17616f5 100644 --- a/Sources/SWBBuildService/BuildOperationMessages.swift +++ b/Sources/SWBBuildService/BuildOperationMessages.swift @@ -21,6 +21,7 @@ import SWBTaskConstruction import SWBTaskExecution package import SWBUtil import SWBMacro +import Synchronization // FIXME: Workaround: Unable to prefer my own type over NS renamed types import class SWBTaskExecution.Task diff --git a/Sources/SWBBuildService/PreviewInfo.swift b/Sources/SWBBuildService/PreviewInfo.swift index 02425472..49221da5 100644 --- a/Sources/SWBBuildService/PreviewInfo.swift +++ b/Sources/SWBBuildService/PreviewInfo.swift @@ -15,6 +15,7 @@ package import SWBCore import SWBTaskConstruction package import SWBTaskExecution package import SWBUtil +import SWBMacro enum PreviewInfoErrors: Error { case noBuildDescription(any Error) diff --git a/Sources/SWBBuildService/Session.swift b/Sources/SWBBuildService/Session.swift index 7a8adbc8..56f06a01 100644 --- a/Sources/SWBBuildService/Session.swift +++ b/Sources/SWBBuildService/Session.swift @@ -17,6 +17,7 @@ public import SWBServiceCore package import SWBTaskExecution import SWBUtil import struct Foundation.UUID +import Synchronization enum SessionError: Error { case noSettings(String) diff --git a/Sources/SWBBuildSystem/CleanOperation.swift b/Sources/SWBBuildSystem/CleanOperation.swift index d797c680..fce5fa8b 100644 --- a/Sources/SWBBuildSystem/CleanOperation.swift +++ b/Sources/SWBBuildSystem/CleanOperation.swift @@ -22,6 +22,7 @@ package import var Foundation.NSLocalizedDescriptionKey package import class Foundation.NSError package import struct Foundation.URL package import struct Foundation.UUID +import SWBMacro package final class CleanOperation: BuildSystemOperation, TargetDependencyResolverDelegate { package var diagnosticContext: DiagnosticContextData { diff --git a/Sources/SWBBuildSystem/DependencyCycleFormatter.swift b/Sources/SWBBuildSystem/DependencyCycleFormatter.swift index bdbe027d..b0d7f6fa 100644 --- a/Sources/SWBBuildSystem/DependencyCycleFormatter.swift +++ b/Sources/SWBBuildSystem/DependencyCycleFormatter.swift @@ -15,6 +15,7 @@ import SWBTaskExecution import SWBUtil import Foundation private import SWBLLBuild +import SWBTaskConstruction /// Convenience enum to encode whether a task is the beginning or end of a target, or something else. /// "End of a target" in this case is a task which tasks in other targets may be directly depending on, and so can mark the point at which we cross a target boundary. diff --git a/Sources/SWBCore/BuildFileResolution.swift b/Sources/SWBCore/BuildFileResolution.swift index 29d99478..8c4ab089 100644 --- a/Sources/SWBCore/BuildFileResolution.swift +++ b/Sources/SWBCore/BuildFileResolution.swift @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// public import SWBUtil +import SWBMacro /// Protocol to support getting resolved information about a `BuildFile` within a `ConfiguredTarget`. public protocol BuildFileResolution: SpecLookupContext { diff --git a/Sources/SWBCore/ClangModuleVerifier/ModuleVerifierFramework.swift b/Sources/SWBCore/ClangModuleVerifier/ModuleVerifierFramework.swift index 51a4b9f5..614c3939 100644 --- a/Sources/SWBCore/ClangModuleVerifier/ModuleVerifierFramework.swift +++ b/Sources/SWBCore/ClangModuleVerifier/ModuleVerifierFramework.swift @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// public import SWBUtil +import Foundation public struct ModuleVerifierFramework { @_spi(Testing) public let directory: Path diff --git a/Sources/SWBCore/ClangModuleVerifier/ModuleVerifierHeader.swift b/Sources/SWBCore/ClangModuleVerifier/ModuleVerifierHeader.swift index 4ef43ee6..9bb47f05 100644 --- a/Sources/SWBCore/ClangModuleVerifier/ModuleVerifierHeader.swift +++ b/Sources/SWBCore/ClangModuleVerifier/ModuleVerifierHeader.swift @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// public import SWBUtil +import Foundation enum HeaderKind: String { case publicHeader = "public" diff --git a/Sources/SWBCore/ClangModuleVerifier/ModuleVerifierTarget.swift b/Sources/SWBCore/ClangModuleVerifier/ModuleVerifierTarget.swift index 69d64420..d8e5bbe0 100644 --- a/Sources/SWBCore/ClangModuleVerifier/ModuleVerifierTarget.swift +++ b/Sources/SWBCore/ClangModuleVerifier/ModuleVerifierTarget.swift @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// public import SWBUtil +import Foundation public struct ModuleVerifierTarget: Equatable { public let value: String diff --git a/Sources/SWBCore/ConfiguredTarget.swift b/Sources/SWBCore/ConfiguredTarget.swift index 561a1156..4f93f80e 100644 --- a/Sources/SWBCore/ConfiguredTarget.swift +++ b/Sources/SWBCore/ConfiguredTarget.swift @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// public import SWBUtil +import SWBProtocol public final class ConfiguredTarget: Hashable, CustomStringConvertible, Serializable, Comparable, Sendable, Encodable { /// The build parameters to use for this target. diff --git a/Sources/SWBCore/MacroConfigFileLoader.swift b/Sources/SWBCore/MacroConfigFileLoader.swift index 11d807fd..224e5e9f 100644 --- a/Sources/SWBCore/MacroConfigFileLoader.swift +++ b/Sources/SWBCore/MacroConfigFileLoader.swift @@ -12,6 +12,7 @@ public import SWBUtil public import SWBMacro +import Foundation /// Information on a macro config file. @_spi(Testing) public struct MacroConfigInfo: Sendable { diff --git a/Sources/SWBCore/MacroEvaluationExtensions.swift b/Sources/SWBCore/MacroEvaluationExtensions.swift index 57fc5441..2522d300 100644 --- a/Sources/SWBCore/MacroEvaluationExtensions.swift +++ b/Sources/SWBCore/MacroEvaluationExtensions.swift @@ -12,6 +12,7 @@ public import SWBUtil public import SWBMacro +import Foundation public extension PropertyListItem { diff --git a/Sources/SWBCore/MacroExpressionSourceExtensions.swift b/Sources/SWBCore/MacroExpressionSourceExtensions.swift index 18c2cef5..bfabdc89 100644 --- a/Sources/SWBCore/MacroExpressionSourceExtensions.swift +++ b/Sources/SWBCore/MacroExpressionSourceExtensions.swift @@ -12,6 +12,7 @@ public import SWBMacro public import SWBProtocol +import SWBUtil extension MacroNamespace { /// Parses `strings` as a macro expression string list, returning a MacroExpression object to represent it. The returned macro expression contains a copy of the input string and a compiled representation that can be used to evaluate the expression in a particular context. The diagnostics handler is invoked once for every issue found during the parsing. Even in the presence of errors, this method always returns an expression that’s as parsed as possible. diff --git a/Sources/SWBCore/PlatformFiltering.swift b/Sources/SWBCore/PlatformFiltering.swift index d3397bdb..630fd835 100644 --- a/Sources/SWBCore/PlatformFiltering.swift +++ b/Sources/SWBCore/PlatformFiltering.swift @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// public import SWBMacro +import SWBUtil extension PlatformFilter { public convenience init?(_ scope: MacroEvaluationScope) { diff --git a/Sources/SWBCore/ProjectModel/FilePathResolver.swift b/Sources/SWBCore/ProjectModel/FilePathResolver.swift index 1dab8cfd..49834473 100644 --- a/Sources/SWBCore/ProjectModel/FilePathResolver.swift +++ b/Sources/SWBCore/ProjectModel/FilePathResolver.swift @@ -12,7 +12,7 @@ public import SWBUtil public import SWBMacro - +import SWBProtocol /// A FilePathResolver is used to resolve the absolute paths for Reference objects. public final class FilePathResolver: Sendable diff --git a/Sources/SWBCore/ProjectModel/PIFLoader.swift b/Sources/SWBCore/ProjectModel/PIFLoader.swift index 3aeb0168..dc167904 100644 --- a/Sources/SWBCore/ProjectModel/PIFLoader.swift +++ b/Sources/SWBCore/ProjectModel/PIFLoader.swift @@ -13,6 +13,7 @@ public import SWBUtil public import SWBProtocol public import SWBMacro +import Foundation enum PIFLoadingError: Error { /// Indicates a general PIF object decoding error. diff --git a/Sources/SWBCore/ProjectModel/PlatformFilter.swift b/Sources/SWBCore/ProjectModel/PlatformFilter.swift index 02bbf3a9..16d089ce 100644 --- a/Sources/SWBCore/ProjectModel/PlatformFilter.swift +++ b/Sources/SWBCore/ProjectModel/PlatformFilter.swift @@ -12,6 +12,7 @@ import SWBUtil import SWBProtocol +import Foundation /// Provides a generic mechanism to provide project model items to be filterable for a given platform. public final class PlatformFilter: ProjectModelItem, Hashable, Codable { diff --git a/Sources/SWBCore/ProjectModel/Workspace.swift b/Sources/SWBCore/ProjectModel/Workspace.swift index 13b3cea4..d1c8af8b 100644 --- a/Sources/SWBCore/ProjectModel/Workspace.swift +++ b/Sources/SWBCore/ProjectModel/Workspace.swift @@ -13,6 +13,7 @@ import SWBProtocol public import SWBUtil public import SWBMacro +import Foundation public enum DuplicatedIdentifierObjectType: String, Sendable { case project diff --git a/Sources/SWBCore/Settings/BuildRuleFile.swift b/Sources/SWBCore/Settings/BuildRuleFile.swift index e7361d66..0eb4d746 100644 --- a/Sources/SWBCore/Settings/BuildRuleFile.swift +++ b/Sources/SWBCore/Settings/BuildRuleFile.swift @@ -12,6 +12,7 @@ import Foundation import SWBMacro +import SWBUtil /// Decodable representation of a .xcbuildrules file's on-disk format. struct BuildRuleFile: Codable { diff --git a/Sources/SWBCore/Settings/BuiltinMacros.swift b/Sources/SWBCore/Settings/BuiltinMacros.swift index 99ffffcc..cae0b6b6 100644 --- a/Sources/SWBCore/Settings/BuiltinMacros.swift +++ b/Sources/SWBCore/Settings/BuiltinMacros.swift @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// public import SWBMacro +import Synchronization /// The builtin macro declarations for things which are used directly by the build system. public final class BuiltinMacros { diff --git a/Sources/SWBCore/SpecImplementations/CommandLineToolSpec.swift b/Sources/SWBCore/SpecImplementations/CommandLineToolSpec.swift index 0286c0e7..5757442a 100644 --- a/Sources/SWBCore/SpecImplementations/CommandLineToolSpec.swift +++ b/Sources/SWBCore/SpecImplementations/CommandLineToolSpec.swift @@ -14,6 +14,7 @@ public import SWBUtil public import struct Foundation.Data public import class Foundation.JSONDecoder public import SWBMacro +import SWBProtocol /// Describes the type and other characteristics of a single kind of input file accepted by a build tool. struct InputFileTypeDescriptor: Encodable, Sendable { diff --git a/Sources/SWBCore/SpecImplementations/SpecRegistry.swift b/Sources/SWBCore/SpecImplementations/SpecRegistry.swift index af4a15c8..06ee3a20 100644 --- a/Sources/SWBCore/SpecImplementations/SpecRegistry.swift +++ b/Sources/SWBCore/SpecImplementations/SpecRegistry.swift @@ -13,6 +13,8 @@ import SWBLibc public import SWBUtil public import SWBMacro +import Foundation +import Synchronization /// Delegate protocol used by the registry to report diagnostics. @_spi(Testing) public protocol SpecRegistryDelegate: DiagnosticProducingDelegate {} diff --git a/Sources/SWBCore/SpecImplementations/Tools/CCompiler.swift b/Sources/SWBCore/SpecImplementations/Tools/CCompiler.swift index 7901bdfe..790f6a6d 100644 --- a/Sources/SWBCore/SpecImplementations/Tools/CCompiler.swift +++ b/Sources/SWBCore/SpecImplementations/Tools/CCompiler.swift @@ -12,6 +12,7 @@ public import SWBUtil public import SWBMacro +import Foundation /// Abstract C Compiler. This is not a concrete implementation, but rather it uses various information in the command build context to choose a specific compiler and to call `constructTasks()` on that compiler. This provides a level of indirection for projects that just want their source files compiled using the default C compiler. Depending on the context, the default C compiler for any particular combination of platform, architecture, and other factors may be Clang, ICC, GCC, or some other compiler. diff --git a/Sources/SWBCore/SpecImplementations/Tools/ClangStatCache.swift b/Sources/SWBCore/SpecImplementations/Tools/ClangStatCache.swift index 70d0fc73..76c69149 100644 --- a/Sources/SWBCore/SpecImplementations/Tools/ClangStatCache.swift +++ b/Sources/SWBCore/SpecImplementations/Tools/ClangStatCache.swift @@ -10,6 +10,8 @@ // //===----------------------------------------------------------------------===// +import SWBUtil + final public class ClangStatCacheSpec: GenericCommandLineToolSpec, SpecIdentifierType, @unchecked Sendable { public static let identifier = "com.apple.compilers.clang-stat-cache" diff --git a/Sources/SWBCore/SpecImplementations/Tools/CodeSign.swift b/Sources/SWBCore/SpecImplementations/Tools/CodeSign.swift index 33710aa1..d8d7ead2 100644 --- a/Sources/SWBCore/SpecImplementations/Tools/CodeSign.swift +++ b/Sources/SWBCore/SpecImplementations/Tools/CodeSign.swift @@ -12,6 +12,7 @@ public import SWBUtil public import SWBMacro +import Foundation public final class CodesignToolSpec : CommandLineToolSpec, SpecIdentifierType, @unchecked Sendable { public static let identifier = "com.apple.build-tools.codesign" diff --git a/Sources/SWBCore/SpecImplementations/Tools/ConcatenateTool.swift b/Sources/SWBCore/SpecImplementations/Tools/ConcatenateTool.swift index 02efc3e4..024d6db6 100644 --- a/Sources/SWBCore/SpecImplementations/Tools/ConcatenateTool.swift +++ b/Sources/SWBCore/SpecImplementations/Tools/ConcatenateTool.swift @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// public import SWBUtil +import SWBMacro public final class ConcatenateToolSpec : CommandLineToolSpec, SpecImplementationType, @unchecked Sendable { public static let identifier = "com.apple.build-tools.concatenate" diff --git a/Sources/SWBCore/SpecImplementations/Tools/CreateBuildDirectory.swift b/Sources/SWBCore/SpecImplementations/Tools/CreateBuildDirectory.swift index 2e389e18..4ea707da 100644 --- a/Sources/SWBCore/SpecImplementations/Tools/CreateBuildDirectory.swift +++ b/Sources/SWBCore/SpecImplementations/Tools/CreateBuildDirectory.swift @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// import SWBUtil +import SWBMacro public final class CreateBuildDirectorySpec: CommandLineToolSpec, SpecImplementationType, @unchecked Sendable { public static let identifier = "com.apple.tools.create-build-directory" diff --git a/Sources/SWBCore/SpecImplementations/Tools/InfoPlistTool.swift b/Sources/SWBCore/SpecImplementations/Tools/InfoPlistTool.swift index de3b5214..d0683f6f 100644 --- a/Sources/SWBCore/SpecImplementations/Tools/InfoPlistTool.swift +++ b/Sources/SWBCore/SpecImplementations/Tools/InfoPlistTool.swift @@ -11,6 +11,8 @@ //===----------------------------------------------------------------------===// public import SWBUtil +import SWBMacro +import Foundation public final class InfoPlistToolSpec : GenericCommandLineToolSpec, SpecIdentifierType, @unchecked Sendable { public static let identifier = "com.apple.tools.info-plist-utility" diff --git a/Sources/SWBCore/SpecImplementations/Tools/Lipo.swift b/Sources/SWBCore/SpecImplementations/Tools/Lipo.swift index 58e12a5f..9f3bd92d 100644 --- a/Sources/SWBCore/SpecImplementations/Tools/Lipo.swift +++ b/Sources/SWBCore/SpecImplementations/Tools/Lipo.swift @@ -12,6 +12,7 @@ import SWBProtocol import SWBUtil +import SWBMacro public final class LipoToolSpec: GenericCommandLineToolSpec, SpecIdentifierType, @unchecked Sendable { diff --git a/Sources/SWBCore/SpecImplementations/Tools/MasterObjectLink.swift b/Sources/SWBCore/SpecImplementations/Tools/MasterObjectLink.swift index 156cf3b6..ade7bd11 100644 --- a/Sources/SWBCore/SpecImplementations/Tools/MasterObjectLink.swift +++ b/Sources/SWBCore/SpecImplementations/Tools/MasterObjectLink.swift @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// import SWBUtil +import SWBMacro /// Spec to use the linker to run `ld -r` to create a prelinked object file (a.k.a. "master object file"). final class MasterObjectLinkSpec: CommandLineToolSpec, SpecImplementationType, @unchecked Sendable { diff --git a/Sources/SWBCore/SpecImplementations/Tools/MergeInfoPlist.swift b/Sources/SWBCore/SpecImplementations/Tools/MergeInfoPlist.swift index 656faa51..4a5e70fe 100644 --- a/Sources/SWBCore/SpecImplementations/Tools/MergeInfoPlist.swift +++ b/Sources/SWBCore/SpecImplementations/Tools/MergeInfoPlist.swift @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// public import SWBUtil +import SWBMacro public final class MergeInfoPlistSpec: CommandLineToolSpec, SpecImplementationType, @unchecked Sendable { public static func construct(registry: SpecRegistry, proxy: SpecProxy) -> Spec { diff --git a/Sources/SWBCore/SpecImplementations/Tools/MkdirTool.swift b/Sources/SWBCore/SpecImplementations/Tools/MkdirTool.swift index 8cacc8e5..88617ce2 100644 --- a/Sources/SWBCore/SpecImplementations/Tools/MkdirTool.swift +++ b/Sources/SWBCore/SpecImplementations/Tools/MkdirTool.swift @@ -10,6 +10,8 @@ // //===----------------------------------------------------------------------===// +import SWBUtil + public final class MkdirToolSpec : CommandLineToolSpec, SpecIdentifierType, @unchecked Sendable { public static let identifier = "com.apple.tools.mkdir" diff --git a/Sources/SWBCore/SpecImplementations/Tools/ProcessSDKImports.swift b/Sources/SWBCore/SpecImplementations/Tools/ProcessSDKImports.swift index 3830a095..9a92892b 100644 --- a/Sources/SWBCore/SpecImplementations/Tools/ProcessSDKImports.swift +++ b/Sources/SWBCore/SpecImplementations/Tools/ProcessSDKImports.swift @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// public import SWBUtil +import SWBMacro public final class ProcessSDKImportsSpec: CommandLineToolSpec, SpecImplementationType, @unchecked Sendable { public static let identifier = "com.apple.tools.process-sdk-imports" diff --git a/Sources/SWBCore/SpecImplementations/Tools/ProductPackaging.swift b/Sources/SWBCore/SpecImplementations/Tools/ProductPackaging.swift index c0bca1f0..f8f7eb58 100644 --- a/Sources/SWBCore/SpecImplementations/Tools/ProductPackaging.swift +++ b/Sources/SWBCore/SpecImplementations/Tools/ProductPackaging.swift @@ -12,6 +12,7 @@ public import SWBUtil import SWBMacro +import Foundation public final class ProductPackagingToolSpec : GenericCommandLineToolSpec, SpecIdentifierType, @unchecked Sendable { public static let identifier = "com.apple.tools.product-pkg-utility" diff --git a/Sources/SWBCore/SpecImplementations/Tools/SetAttributes.swift b/Sources/SWBCore/SpecImplementations/Tools/SetAttributes.swift index c9d2baf0..38d6534b 100644 --- a/Sources/SWBCore/SpecImplementations/Tools/SetAttributes.swift +++ b/Sources/SWBCore/SpecImplementations/Tools/SetAttributes.swift @@ -10,6 +10,9 @@ // //===----------------------------------------------------------------------===// +import SWBUtil +import SWBMacro + public final class SetAttributesSpec: CommandLineToolSpec, SpecImplementationType, @unchecked Sendable { public static let identifier = "com.apple.build-tools.set-attributes" diff --git a/Sources/SWBCore/SpecImplementations/Tools/StripTool.swift b/Sources/SWBCore/SpecImplementations/Tools/StripTool.swift index 612362a9..0f4a556d 100644 --- a/Sources/SWBCore/SpecImplementations/Tools/StripTool.swift +++ b/Sources/SWBCore/SpecImplementations/Tools/StripTool.swift @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// import SWBMacro +import SWBUtil public final class StripToolSpec : GenericCommandLineToolSpec, SpecIdentifierType, @unchecked Sendable { public static let identifier = "com.apple.build-tools.strip" diff --git a/Sources/SWBCore/SpecImplementations/Tools/TAPISymbolExtractor.swift b/Sources/SWBCore/SpecImplementations/Tools/TAPISymbolExtractor.swift index e45594e0..dfbeb75e 100644 --- a/Sources/SWBCore/SpecImplementations/Tools/TAPISymbolExtractor.swift +++ b/Sources/SWBCore/SpecImplementations/Tools/TAPISymbolExtractor.swift @@ -13,6 +13,7 @@ import Foundation public import SWBUtil public import SWBMacro +import SWBProtocol final public class TAPISymbolExtractor: GenericCompilerSpec, GCCCompatibleCompilerCommandLineBuilder, SpecIdentifierType, @unchecked Sendable { public static let identifier = "com.apple.compilers.documentation.objc-symbol-extract" diff --git a/Sources/SWBCore/SpecImplementations/Tools/TAPITools.swift b/Sources/SWBCore/SpecImplementations/Tools/TAPITools.swift index e3cf5869..818147fb 100644 --- a/Sources/SWBCore/SpecImplementations/Tools/TAPITools.swift +++ b/Sources/SWBCore/SpecImplementations/Tools/TAPITools.swift @@ -12,6 +12,7 @@ public import SWBUtil public import SWBMacro +import Foundation public struct DiscoveredTAPIToolSpecInfo: DiscoveredCommandLineToolSpecInfo { public let toolPath: Path diff --git a/Sources/SWBCore/SpecImplementations/Tools/UnifdefTool.swift b/Sources/SWBCore/SpecImplementations/Tools/UnifdefTool.swift index 5719b766..08091d21 100644 --- a/Sources/SWBCore/SpecImplementations/Tools/UnifdefTool.swift +++ b/Sources/SWBCore/SpecImplementations/Tools/UnifdefTool.swift @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// public import SWBUtil +import SWBMacro public final class UnifdefToolSpec : CommandLineToolSpec, SpecIdentifierType, @unchecked Sendable { public static let identifier = "public.build-task.unifdef" diff --git a/Sources/SWBCore/SpecImplementations/Tools/ValidateDevelopmentAssets.swift b/Sources/SWBCore/SpecImplementations/Tools/ValidateDevelopmentAssets.swift index 7418c883..5d130ef7 100644 --- a/Sources/SWBCore/SpecImplementations/Tools/ValidateDevelopmentAssets.swift +++ b/Sources/SWBCore/SpecImplementations/Tools/ValidateDevelopmentAssets.swift @@ -12,6 +12,7 @@ import SWBProtocol import SWBUtil +import SWBMacro public final class ValidateDevelopmentAssets: CommandLineToolSpec, SpecImplementationType, @unchecked Sendable { public static let identifier = "com.apple.tools.validate-development-assets" diff --git a/Sources/SWBCore/SpecImplementations/Tools/WriteFile.swift b/Sources/SWBCore/SpecImplementations/Tools/WriteFile.swift index 614728a7..eccf5cf1 100644 --- a/Sources/SWBCore/SpecImplementations/Tools/WriteFile.swift +++ b/Sources/SWBCore/SpecImplementations/Tools/WriteFile.swift @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// public import SWBUtil +import SWBMacro public final class WriteFileSpec: CommandLineToolSpec, SpecImplementationType, @unchecked Sendable { public static let identifier = "com.apple.build-tools.write-file" diff --git a/Sources/SWBCore/ToolInfo/ClangToolInfo.swift b/Sources/SWBCore/ToolInfo/ClangToolInfo.swift index dad597b3..dcc80ccc 100644 --- a/Sources/SWBCore/ToolInfo/ClangToolInfo.swift +++ b/Sources/SWBCore/ToolInfo/ClangToolInfo.swift @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// public import SWBUtil +import Foundation public struct DiscoveredClangToolSpecInfo: DiscoveredCommandLineToolSpecInfo { public let toolPath: Path diff --git a/Sources/SWBCore/ToolchainRegistry.swift b/Sources/SWBCore/ToolchainRegistry.swift index fdca83d4..2515b184 100644 --- a/Sources/SWBCore/ToolchainRegistry.swift +++ b/Sources/SWBCore/ToolchainRegistry.swift @@ -14,6 +14,7 @@ public import SWBUtil import struct Foundation.CharacterSet import Foundation +import SWBMacro /// Delegate protocol used to report diagnostics. @_spi(Testing) public protocol ToolchainRegistryDelegate: DiagnosticProducingDelegate { diff --git a/Sources/SWBCore/WorkspaceContext.swift b/Sources/SWBCore/WorkspaceContext.swift index e7db7ae0..1b61e537 100644 --- a/Sources/SWBCore/WorkspaceContext.swift +++ b/Sources/SWBCore/WorkspaceContext.swift @@ -15,6 +15,7 @@ import Foundation public import SWBUtil public import struct SWBProtocol.RunDestinationInfo public import SWBMacro +import Synchronization /// Wrapper for user context information. public struct UserInfo: Codable, Hashable, Sendable { diff --git a/Sources/SWBCore/XCFramework.swift b/Sources/SWBCore/XCFramework.swift index dbe0d713..1326f5fe 100644 --- a/Sources/SWBCore/XCFramework.swift +++ b/Sources/SWBCore/XCFramework.swift @@ -17,6 +17,7 @@ public import class Foundation.PropertyListDecoder public import class Foundation.PropertyListEncoder public import protocol Foundation.LocalizedError public import SWBMacro +import Synchronization /// Represents the various types of error cases possible when constructing an `XCFramework` type. /// diff --git a/Sources/SWBMacro/MacroConfigFileParser.swift b/Sources/SWBMacro/MacroConfigFileParser.swift index a465ac27..a1fa7ebf 100644 --- a/Sources/SWBMacro/MacroConfigFileParser.swift +++ b/Sources/SWBMacro/MacroConfigFileParser.swift @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// public import SWBUtil +import Foundation private extension UInt8 { var isASCIISpace: Bool { diff --git a/Sources/SWBMacro/MacroNamespace.swift b/Sources/SWBMacro/MacroNamespace.swift index ca351f92..eb42c54b 100644 --- a/Sources/SWBMacro/MacroNamespace.swift +++ b/Sources/SWBMacro/MacroNamespace.swift @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// public import SWBUtil +import Synchronization /// A namespace represents a set of named macro declarations and (in the future) a set of named macro conditions. MacroNamespace is the starting point for many of the APIs of the macro evaluation subsystem: declaring macros and conditions, parsing macro expressions as strings or string lists, etc. A namespace can reference an underlying namespace — this can be used to share, for example, built-in macro declarations among various projects, while still allowing each project to declare custom macros that don’t interfere with each other. /// diff --git a/Sources/SWBProtocol/AsyncSequence.swift b/Sources/SWBProtocol/AsyncSequence.swift index 67eea99d..55ac8e6c 100644 --- a/Sources/SWBProtocol/AsyncSequence.swift +++ b/Sources/SWBProtocol/AsyncSequence.swift @@ -10,6 +10,8 @@ // //===----------------------------------------------------------------------===// +import SWBUtil + extension FixedWidthInteger { public init(protocolEndian value: Self) { self.init(littleEndian: value) diff --git a/Sources/SWBProtocol/PlanningOperationMessages.swift b/Sources/SWBProtocol/PlanningOperationMessages.swift index e9fb3fed..80f3fa91 100644 --- a/Sources/SWBProtocol/PlanningOperationMessages.swift +++ b/Sources/SWBProtocol/PlanningOperationMessages.swift @@ -11,7 +11,7 @@ //===----------------------------------------------------------------------===// public import SWBUtil - +import Foundation // MARK: General planning operation messages diff --git a/Sources/SWBProtocol/ProjectDescriptorTypes.swift b/Sources/SWBProtocol/ProjectDescriptorTypes.swift index 197b998d..8b1b51b8 100644 --- a/Sources/SWBProtocol/ProjectDescriptorTypes.swift +++ b/Sources/SWBProtocol/ProjectDescriptorTypes.swift @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// public import SWBUtil +import Foundation public struct SchemeInput: Equatable, Hashable, Serializable, Sendable { public let name: String diff --git a/Sources/SWBServiceCore/Request.swift b/Sources/SWBServiceCore/Request.swift index 948451ed..25f6725c 100644 --- a/Sources/SWBServiceCore/Request.swift +++ b/Sources/SWBServiceCore/Request.swift @@ -12,6 +12,7 @@ public import SWBProtocol import SWBUtil +import Synchronization /// An individual request made by a service client. /// diff --git a/Sources/SWBTaskConstruction/BuildDirectoryContext.swift b/Sources/SWBTaskConstruction/BuildDirectoryContext.swift index 9cf0821a..6a29ce38 100644 --- a/Sources/SWBTaskConstruction/BuildDirectoryContext.swift +++ b/Sources/SWBTaskConstruction/BuildDirectoryContext.swift @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// import SWBUtil +import Synchronization /// Tracks the build directory creation usage across the build plan. This allows the usage information to be cached during task planning. final class BuildDirectoryContext: Sendable { diff --git a/Sources/SWBTaskConstruction/ProductPlanning/BuildPlanDumping.swift b/Sources/SWBTaskConstruction/ProductPlanning/BuildPlanDumping.swift index b60e0b79..a321ccc9 100644 --- a/Sources/SWBTaskConstruction/ProductPlanning/BuildPlanDumping.swift +++ b/Sources/SWBTaskConstruction/ProductPlanning/BuildPlanDumping.swift @@ -12,6 +12,8 @@ package import SWBUtil import SWBCore +import SWBMacro +import Foundation /// Ability to dump the contents of a build plan for diagnostic purposes. package extension BuildPlan { diff --git a/Sources/SWBTaskConstruction/ProductPlanning/ProductPlan.swift b/Sources/SWBTaskConstruction/ProductPlanning/ProductPlan.swift index e52138f1..88d2edfe 100644 --- a/Sources/SWBTaskConstruction/ProductPlanning/ProductPlan.swift +++ b/Sources/SWBTaskConstruction/ProductPlanning/ProductPlan.swift @@ -13,6 +13,8 @@ package import SWBUtil package import SWBCore import SWBMacro +import SWBProtocol +import Foundation /// The `GlobalProductPlanDelegate` is a subset of the more ubiquitous `TaskPlanningDelegate` which provides functionality only needed by a `GlobalProductPlan`, even if it exists outside the context of a build. package protocol GlobalProductPlanDelegate: CoreClientTargetDiagnosticProducingDelegate { @@ -38,7 +40,7 @@ package final class GlobalProductPlan: GlobalTargetInfoProvider /// /// The array of imparted build properties is ordered so that direct dependencies come first, followed by their direct /// transitive dependencies and so forth. - private var impartedBuildPropertiesByTarget: [ConfiguredTarget: [ImpartedBuildProperties]] + private var impartedBuildPropertiesByTarget: [ConfiguredTarget: [SWBCore.ImpartedBuildProperties]] /// The set of shared intermediate nodes that have been created, keyed by their sharing identifier. /// @@ -48,7 +50,7 @@ package final class GlobalProductPlan: GlobalTargetInfoProvider let delegate: any GlobalProductPlanDelegate struct VFSContentsKey: Hashable { - let project: Project + let project: SWBCore.Project let effectivePlatformName: String } @@ -118,15 +120,15 @@ package final class GlobalProductPlan: GlobalTargetInfoProvider } /// The mapping of original targets to dynamically building targets because of diamond-style linkage. - private var dynamicallyBuildingTargetsWithDiamondLinkage = [Target:Target]() + private var dynamicallyBuildingTargetsWithDiamondLinkage = [SWBCore.Target: SWBCore.Target]() /// Reverse mapping which allows looking up the corresponding dynamically building target for a static one. - private var staticallyBuildingTargetsWithDiamondLinkage = [Target:Target]() + private var staticallyBuildingTargetsWithDiamondLinkage = [SWBCore.Target: SWBCore.Target]() /// All targets in the product plan which are building dynamically because of diamond-style linkage or because of the client's build request. /// /// Note: currently this will only be package product targets. - package var dynamicallyBuildingTargets: Set { + package var dynamicallyBuildingTargets: Set { return Set(planRequest.buildGraph.dynamicallyBuildingTargets + Array(dynamicallyBuildingTargetsWithDiamondLinkage.keys)) } @@ -213,7 +215,7 @@ package final class GlobalProductPlan: GlobalTargetInfoProvider self.clientsOfBundlesByTarget = clientsOfBundlesByTarget var directlyLinkedDependenciesByTarget = [ConfiguredTarget:OrderedSet]() - var impartedBuildPropertiesByTarget = [ConfiguredTarget:[ImpartedBuildProperties]]() + var impartedBuildPropertiesByTarget = [ConfiguredTarget:[SWBCore.ImpartedBuildProperties]]() // We can skip computing contributing properties entirely if no target declares any and if there are no package products in the graph. let targetsContributingProperties = planRequest.buildGraph.allTargets.filter { !$0.target.hasImpartedBuildProperties || $0.target.type == .packageProduct } @@ -303,7 +305,7 @@ package final class GlobalProductPlan: GlobalTargetInfoProvider } // Record the target's products using both TARGET_BUILD_DIR and BUILT_PRODUCTS_DIR. - if let standardTarget = configuredTarget.target as? StandardTarget { + if let standardTarget = configuredTarget.target as? SWBCore.StandardTarget { productPathsToProducingTargets[settings.globalScope.evaluate(BuiltinMacros.TARGET_BUILD_DIR).join(standardTarget.productReference.name).normalize()] = configuredTarget productPathsToProducingTargets[settings.globalScope.evaluate(BuiltinMacros.BUILT_PRODUCTS_DIR).join(standardTarget.productReference.name).normalize()] = configuredTarget } @@ -465,7 +467,7 @@ package final class GlobalProductPlan: GlobalTargetInfoProvider targetsByCommandLineToolProductPath[executablePath] = configuredTarget } - for scriptPhase in (configuredTarget.target as? BuildPhaseTarget)?.buildPhases.compactMap({ $0 as? ShellScriptBuildPhase }) ?? [] { + for scriptPhase in (configuredTarget.target as? SWBCore.BuildPhaseTarget)?.buildPhases.compactMap({ $0 as? SWBCore.ShellScriptBuildPhase }) ?? [] { for scriptPhaseInput in scriptPhase.inputFilePaths.map({ Path(targetSettings.globalScope.evaluate($0)).normalize() }) { if let producingTarget = targetsByCommandLineToolProductPath[scriptPhaseInput] { targetsRequiredToBuildForIndexing.insert(producingTarget) @@ -699,7 +701,7 @@ package final class GlobalProductPlan: GlobalTargetInfoProvider continue } - var packageTargetsToSkip = [Target]() + var packageTargetsToSkip = [SWBCore.Target]() // Find all statically linked package products. let linkedPackageProducts = dependencies.filter { @@ -785,7 +787,7 @@ package final class GlobalProductPlan: GlobalTargetInfoProvider // If we have already emitted an error about a package product, don't emit an error about its targets. var packageTargetsToIgnore = [ConfiguredTarget]() - let updateConfiguration = { (configuredTarget: ConfiguredTarget, dynamicTarget: Target) in + let updateConfiguration = { (configuredTarget: ConfiguredTarget, dynamicTarget: SWBCore.Target) in // If the `targetTaskInfo` for the static target isn't present, we already made the decision to make this target dynamic. if self.targetTaskInfos[configuredTarget] == nil { return } @@ -822,7 +824,7 @@ package final class GlobalProductPlan: GlobalTargetInfoProvider packageTargetsToIgnore.append(contentsOf: dependenciesByTarget[product]?.map { $0.target } ?? []) let workspaceContext = self.planRequest.workspaceContext - if let packageProductTarget = product.target as? PackageProductTarget, let guid = packageProductTarget.dynamicTargetVariantGuid, let dynamicTarget = workspaceContext.workspace.target(for: guid) { + if let packageProductTarget = product.target as? SWBCore.PackageProductTarget, let guid = packageProductTarget.dynamicTargetVariantGuid, let dynamicTarget = workspaceContext.workspace.target(for: guid) { updateConfiguration(product, dynamicTarget) self.dynamicallyBuildingTargetsWithDiamondLinkage[packageProductTarget] = dynamicTarget } else { @@ -839,7 +841,7 @@ package final class GlobalProductPlan: GlobalTargetInfoProvider let name = "target '\(target.target.name)'" if let andOther = checkLinkage(for: name, topLevelTargets: topLevelTargets, kind: .target) { let workspaceContext = self.planRequest.workspaceContext - if let standardTarget = target.target as? StandardTarget, let guid = standardTarget.dynamicTargetVariantGuid, let dynamicTarget = workspaceContext.workspace.target(for: guid) { + if let standardTarget = target.target as? SWBCore.StandardTarget, let guid = standardTarget.dynamicTargetVariantGuid, let dynamicTarget = workspaceContext.workspace.target(for: guid) { updateConfiguration(target, dynamicTarget) self.dynamicallyBuildingTargetsWithDiamondLinkage[standardTarget] = dynamicTarget } else { @@ -874,7 +876,7 @@ package final class GlobalProductPlan: GlobalTargetInfoProvider /// Get the settings to use for an unconfigured target. /// /// This method is intended for use when querying cross-target information where the configuration parameters are not known. In this case, we will use the "best" configured target that we know of, ideally one for the current build. If no configured target is available, we will use one that is configured "as if" the target was building. - func getUnconfiguredTargetSettings(_ target: Target, viewedFrom: ConfiguredTarget) -> Settings { + func getUnconfiguredTargetSettings(_ target: SWBCore.Target, viewedFrom: ConfiguredTarget) -> Settings { // FIXME: Find the "best" configured target. // // FIXME: Make efficient. @@ -951,7 +953,7 @@ package final class GlobalProductPlan: GlobalTargetInfoProvider /// Construct the module info, if used, for a target. // // FIXME: We should just merge the ModuleInfo with the ProductPlan: [Swift Build] Merge ModuleInfo with ProductPlan - static func computeModuleInfo(workspaceContext: WorkspaceContext, target: Target, settings: Settings, diagnosticHandler: (_ message: String, _ location: Diagnostic.Location, _ component: Component, _ essential: Bool) -> Void) -> ModuleInfo? { + static func computeModuleInfo(workspaceContext: WorkspaceContext, target: SWBCore.Target, settings: Settings, diagnosticHandler: (_ message: String, _ location: Diagnostic.Location, _ component: Component, _ essential: Bool) -> Void) -> ModuleInfo? { let scope = settings.globalScope // If this product type doesn't support modules, do nothing. @@ -977,7 +979,7 @@ package final class GlobalProductPlan: GlobalTargetInfoProvider // Determine if the target includes Swift, which might contribute to the module definition. let specLookupContext = SpecLookupCtxt(specRegistry: workspaceContext.core.specRegistry, platform: settings.platform) - let buildingAnySwiftSourceFiles = (target as? BuildPhaseTarget)?.sourcesBuildPhase?.containsSwiftSources(workspaceContext.workspace, specLookupContext, scope, settings.filePathResolver) ?? false + let buildingAnySwiftSourceFiles = (target as? SWBCore.BuildPhaseTarget)?.sourcesBuildPhase?.containsSwiftSources(workspaceContext.workspace, specLookupContext, scope, settings.filePathResolver) ?? false // Determine if the target exports its Swift ObjC API. let exportsSwiftObjCAPI = buildingAnySwiftSourceFiles && scope.evaluate(BuiltinMacros.SWIFT_INSTALL_OBJC_HEADER) && !scope.evaluate(BuiltinMacros.SWIFT_OBJC_INTERFACE_HEADER_NAME).isEmpty @@ -1080,7 +1082,7 @@ package final class GlobalProductPlan: GlobalTargetInfoProvider } /// Determine if `configuredTarget` will generate a module map, and which umbrella header to use. - private static func generatesModuleMap(workspaceContext: WorkspaceContext, target: Target, settings: Settings) -> (Bool, String) { + private static func generatesModuleMap(workspaceContext: WorkspaceContext, target: SWBCore.Target, settings: Settings) -> (Bool, String) { let scope = settings.globalScope // A target generates a module map if DEFINES_MODULE is true, and it has an explicit module map (or contents), or it has an umbrella header. @@ -1092,7 +1094,7 @@ package final class GlobalProductPlan: GlobalTargetInfoProvider if !scope.evaluate(BuiltinMacros.MODULEMAP_FILE).isEmpty { return (true, "") } // Look for an umbrella header to use in a generated module map. - if let buildPhaseTarget = target as? BuildPhaseTarget, let headersBuildPhase = buildPhaseTarget.headersBuildPhase { + if let buildPhaseTarget = target as? SWBCore.BuildPhaseTarget, let headersBuildPhase = buildPhaseTarget.headersBuildPhase { let workspace = workspaceContext.workspace let headerFileTypes = workspaceContext.core.specRegistry.headerFileTypes let moduleName = scope.evaluate(BuiltinMacros.PRODUCT_MODULE_NAME) @@ -1246,7 +1248,7 @@ package final class ProductPlan } private extension ConfiguredTarget { - func getImpartedBuildProperties(using planRequest: BuildPlanRequest) -> ImpartedBuildProperties? { + func getImpartedBuildProperties(using planRequest: BuildPlanRequest) -> SWBCore.ImpartedBuildProperties? { let settings = planRequest.buildRequestContext.getCachedSettings(self.parameters, target: self.target) let defaultConfigurationName = planRequest.workspaceContext.workspace.project(for: self.target).defaultConfigurationName let buildConfiguration = self.target.getEffectiveConfiguration(settings.globalScope.evaluate(BuiltinMacros.CONFIGURATION), defaultConfigurationName: defaultConfigurationName) diff --git a/Sources/SWBTaskConstruction/ProductPlanning/ProductPlanner.swift b/Sources/SWBTaskConstruction/ProductPlanning/ProductPlanner.swift index 4f63753b..7dd6ef5b 100644 --- a/Sources/SWBTaskConstruction/ProductPlanning/ProductPlanner.swift +++ b/Sources/SWBTaskConstruction/ProductPlanning/ProductPlanner.swift @@ -12,6 +12,7 @@ import SWBCore import SWBUtil +import SWBMacro @PluginExtensionSystemActor private func taskProducerExtensions(_ workspaceContext: WorkspaceContext) -> [any TaskProducerExtension] { let extensions = workspaceContext.core.pluginManager.extensions(of: TaskProducerExtensionPoint.self) diff --git a/Sources/SWBTaskConstruction/StaleFileRemovalContext.swift b/Sources/SWBTaskConstruction/StaleFileRemovalContext.swift index 7eb5cf6b..3c742681 100644 --- a/Sources/SWBTaskConstruction/StaleFileRemovalContext.swift +++ b/Sources/SWBTaskConstruction/StaleFileRemovalContext.swift @@ -12,6 +12,8 @@ package import SWBCore import SWBUtil +import SWBMacro +import SWBProtocol /// Context of immutable data used to compute stale file removal identifiers for configured targets. package protocol StaleFileRemovalContext { diff --git a/Sources/SWBTaskConstruction/TaskProducerSandboxing.swift b/Sources/SWBTaskConstruction/TaskProducerSandboxing.swift index 9d085f15..802b7c98 100644 --- a/Sources/SWBTaskConstruction/TaskProducerSandboxing.swift +++ b/Sources/SWBTaskConstruction/TaskProducerSandboxing.swift @@ -12,6 +12,7 @@ import SWBCore import SWBUtil +import SWBMacro extension TaskProducerContext { func sandbox(builder: inout PlannedTaskBuilder, delegate: any TaskGenerationDelegate) { diff --git a/Sources/SWBTaskConstruction/TaskProducers/BuildPhaseTaskProducers/BuildRuleTaskProducer.swift b/Sources/SWBTaskConstruction/TaskProducers/BuildPhaseTaskProducers/BuildRuleTaskProducer.swift index 4027b4f9..7874ced4 100644 --- a/Sources/SWBTaskConstruction/TaskProducers/BuildPhaseTaskProducers/BuildRuleTaskProducer.swift +++ b/Sources/SWBTaskConstruction/TaskProducers/BuildPhaseTaskProducers/BuildRuleTaskProducer.swift @@ -13,14 +13,15 @@ import SWBUtil import SWBCore import SWBMacro +import SWBProtocol final class BuildRuleTaskProducer: StandardTaskProducer, TaskProducer, ShellBasedTaskProducer { private unowned let action: BuildRuleScriptAction private let cbc: CommandBuildContext private unowned let delegate: any TaskGenerationDelegate - private unowned let buildPhase: BuildPhase + private unowned let buildPhase: SWBCore.BuildPhase - init(_ context: TaskProducerContext, action: BuildRuleScriptAction, cbc: CommandBuildContext, delegate: any TaskGenerationDelegate, buildPhase: BuildPhase) { + init(_ context: TaskProducerContext, action: BuildRuleScriptAction, cbc: CommandBuildContext, delegate: any TaskGenerationDelegate, buildPhase: SWBCore.BuildPhase) { self.action = action self.cbc = cbc self.delegate = delegate @@ -122,7 +123,7 @@ final class BuildRuleTaskProducer: StandardTaskProducer, TaskProducer, ShellBase // If we are in a headers build phase, expose visibility and output dir // information to the script and set the HEADER_OUTPUT_DIR macro value // for output path resolution. - if buildPhase is HeadersBuildPhase { + if buildPhase is SWBCore.HeadersBuildPhase { if let headerVisibility = input.headerVisibility, let outputDir = TargetHeaderInfo.outputPath(for: input.absolutePath, visibility: headerVisibility, scope: cbc.scope)?.dirname { environment["SCRIPT_HEADER_VISIBILITY"] = headerVisibility.rawValue inputVariables[BuiltinMacros.HEADER_OUTPUT_DIR] = outputDir.str diff --git a/Sources/SWBTaskConstruction/TaskProducers/BuildPhaseTaskProducers/CopyFilesTaskProducer.swift b/Sources/SWBTaskConstruction/TaskProducers/BuildPhaseTaskProducers/CopyFilesTaskProducer.swift index 3322ba1d..04b6f569 100644 --- a/Sources/SWBTaskConstruction/TaskProducers/BuildPhaseTaskProducers/CopyFilesTaskProducer.swift +++ b/Sources/SWBTaskConstruction/TaskProducers/BuildPhaseTaskProducers/CopyFilesTaskProducer.swift @@ -13,12 +13,14 @@ import SWBCore import SWBUtil import SWBMacro +import SWBProtocol +import Foundation /// Produces tasks for files in a Copy Files build phase in an Xcode target. /// /// Also subclassed by ``SwiftPackageCopyFilesTaskProducer``. class CopyFilesTaskProducer: FilesBasedBuildPhaseTaskProducerBase, FilesBasedBuildPhaseTaskProducer { - typealias ManagedBuildPhase = CopyFilesBuildPhase + typealias ManagedBuildPhase = SWBCore.CopyFilesBuildPhase func prepare() { let scope = context.settings.globalScope @@ -324,7 +326,7 @@ class CopyFilesTaskProducer: FilesBasedBuildPhaseTaskProducerBase, FilesBasedBui for cTarget in [configuredTarget] + context.globalProductPlan.dependencies(of: configuredTarget) { // FIXME: Perhaps knowing "does this target link this XCFramework" is something that the GlobalProductPlan or XCFrameworkContext should know. var didFindBuildFile = false - if let frameworksBuildPhase = (cTarget.target as? BuildPhaseTarget)?.frameworksBuildPhase { + if let frameworksBuildPhase = (cTarget.target as? SWBCore.BuildPhaseTarget)?.frameworksBuildPhase { for linkedBuildFile in frameworksBuildPhase.buildFiles { // FIXME: This is sketchy: It's using the current context to evaluate a build file in potentially a different target. This might rarely matter since this code only applies to XCFrameworks, but it feels wrong. if let resolvedLinkedBuildFile = try? context.resolveBuildFileReference(linkedBuildFile), resolvedLinkedBuildFile.fileType.identifier == "wrapper.xcframework", resolvedBuildFile.absolutePath == resolvedLinkedBuildFile.absolutePath { diff --git a/Sources/SWBTaskConstruction/TaskProducers/BuildPhaseTaskProducers/FilesBasedBuildPhaseTaskProducer.swift b/Sources/SWBTaskConstruction/TaskProducers/BuildPhaseTaskProducers/FilesBasedBuildPhaseTaskProducer.swift index cfedebae..153632b3 100644 --- a/Sources/SWBTaskConstruction/TaskProducers/BuildPhaseTaskProducers/FilesBasedBuildPhaseTaskProducer.swift +++ b/Sources/SWBTaskConstruction/TaskProducers/BuildPhaseTaskProducers/FilesBasedBuildPhaseTaskProducer.swift @@ -14,6 +14,8 @@ public import SWBCore import SWBLibc public import SWBUtil package import SWBMacro +import SWBProtocol +import Foundation /// Convenience initializers for FileToBuild. extension FileToBuild { @@ -40,7 +42,7 @@ extension TaskProducerContext: InputFileGroupingStrategyContext { package final class BuildFilesProcessingContext: BuildFileFilteringContext { package let excludedSourceFileNames: [String] package let includedSourceFileNames: [String] - package let currentPlatformFilter: PlatformFilter? + package let currentPlatformFilter: SWBCore.PlatformFilter? // FIXME: It would be better to have simple heuristics for ordering these groups, but this logic was how the old build system worked. // @@ -273,7 +275,7 @@ final class BuildPhaseFileWarningContext { } // Warn the user if this build phase contains a file reference with a path which is being handled by a build setting. - func emitBuildPhaseFileWarningDiagnostics(buildPhase: BuildPhase, buildFile: BuildFile?, path: Path) { + func emitBuildPhaseFileWarningDiagnostics(buildPhase: SWBCore.BuildPhase, buildFile: SWBCore.BuildFile?, path: Path) { for (settingFilePath, kind) in paths where path == settingFilePath { context.emitBuildPhaseFileWarning(buildPhase: buildPhase, buildFile: buildFile, message: "The \(buildPhase.name) build phase contains this target's \(kind) file '\(settingFilePath.str)'.") } @@ -281,7 +283,7 @@ final class BuildPhaseFileWarningContext { } extension TaskProducerContext { - func emitBuildPhaseFileWarning(buildPhase: BuildPhase, buildFile: BuildFile?, message: String) { + func emitBuildPhaseFileWarning(buildPhase: SWBCore.BuildPhase, buildFile: SWBCore.BuildFile?, message: String) { let diagnosticLocation: Diagnostic.Location if let buildFile, let target = configuredTarget?.target { diagnosticLocation = .buildFile(buildFileGUID: buildFile.guid, buildPhaseGUID: buildPhase.guid, targetGUID: target.guid) @@ -299,10 +301,10 @@ extension TaskProducerContext { /// Protocol for build phase tasks producers which are based around processing file references. protocol FilesBasedBuildPhaseTaskProducer: AnyObject, TaskProducer { /// The type of build phase managed by this producer. - associatedtype ManagedBuildPhase: BuildPhaseWithBuildFiles + associatedtype ManagedBuildPhase: SWBCore.BuildPhaseWithBuildFiles /// The build phase managed by the producer. - var buildPhase: BuildPhaseWithBuildFiles { get } + var buildPhase: SWBCore.BuildPhaseWithBuildFiles { get } /// The managed build phase instance (equivalent to the buildPhase but with the appropriate type). var managedBuildPhase: ManagedBuildPhase { get } @@ -332,7 +334,7 @@ class FilesBasedBuildPhaseTaskProducerBase: PhasedTaskProducer { } /// The build phase managed by this producer. - unowned let buildPhase: BuildPhaseWithBuildFiles + unowned let buildPhase: SWBCore.BuildPhaseWithBuildFiles /// The map of compilers used during file processing, and the file types they processed. var usedTools = [CommandLineToolSpec: Set]() @@ -344,13 +346,13 @@ class FilesBasedBuildPhaseTaskProducerBase: PhasedTaskProducer { /// /// - phaseStartNode: A virtual node which should be used as an input for all tasks produced by the phase. /// - phaseEndNode: A virtual node which should be have as inputs all tasks produced by the phase. - init(_ context: TargetTaskProducerContext, buildPhase: BuildPhaseWithBuildFiles, phaseStartNodes: [any PlannedNode], phaseEndNode: any PlannedNode, phaseEndTask: any PlannedTask) { + init(_ context: TargetTaskProducerContext, buildPhase: SWBCore.BuildPhaseWithBuildFiles, phaseStartNodes: [any PlannedNode], phaseEndNode: any PlannedNode, phaseEndTask: any PlannedTask) { self.buildPhase = buildPhase super.init(context, phaseStartNodes: phaseStartNodes, phaseEndNode: phaseEndNode, phaseEndTask: phaseEndTask) } /// Allows subclasses to contribute additional build files. - func additionalBuildFiles(_ scope: MacroEvaluationScope) -> [BuildFile] { + func additionalBuildFiles(_ scope: MacroEvaluationScope) -> [SWBCore.BuildFile] { return [] } @@ -369,13 +371,13 @@ class FilesBasedBuildPhaseTaskProducerBase: PhasedTaskProducer { // FIXME: We should cache this, for phases which iterate over the build files multiple times. var seenBases = Set() var nonUniqueBases = Set() - typealias ResolvedBuildFile = (buildFile: BuildFile?, buildableReference: Reference?, path: Path, basename: String, fileTypeSpec: FileTypeSpec, shouldUsePrefixHeader: Bool) + typealias ResolvedBuildFile = (buildFile: SWBCore.BuildFile?, buildableReference: SWBCore.Reference?, path: Path, basename: String, fileTypeSpec: FileTypeSpec, shouldUsePrefixHeader: Bool) var resolvedBuildFiles: [ResolvedBuildFile] = [] let buildPhaseFileWarningContext = BuildPhaseFileWarningContext(context, scope) // Helper function for adding a resolved item. The build file can be nil here if the client wants to add a file divorced from any build file (e.g., because the build file contains context which shouldn't be applied to this file). - func addResolvedItem(buildFile: BuildFile?, path: Path, reference: Reference?, fileType: FileTypeSpec, shouldUsePrefixHeader: Bool = true) { + func addResolvedItem(buildFile: SWBCore.BuildFile?, path: Path, reference: SWBCore.Reference?, fileType: FileTypeSpec, shouldUsePrefixHeader: Bool = true) { let base = path.basenameWithoutSuffix.lowercased() if seenBases.contains(base) { nonUniqueBases.insert(base) @@ -403,10 +405,10 @@ class FilesBasedBuildPhaseTaskProducerBase: PhasedTaskProducer { do { let (reference, path, fileType) = try context.resolveBuildFileReference(buildFile) - let sourceFiles = (self.targetContext.configuredTarget?.target as? StandardTarget)?.sourcesBuildPhase?.buildFiles.count ?? 0 + let sourceFiles = (self.targetContext.configuredTarget?.target as? SWBCore.StandardTarget)?.sourcesBuildPhase?.buildFiles.count ?? 0 if scope.evaluate(BuiltinMacros.ASSETCATALOG_COMPILER_GENERATE_ASSET_SYMBOLS) && (sourceFiles > 0) { // Ignore xcassets in Resource Copy Phase since they're now added to the Compile Sources phase for codegen. - if producer.buildPhase is ResourcesBuildPhase && fileType.conformsTo(identifier: "folder.abstractassetcatalog") { + if producer.buildPhase is SWBCore.ResourcesBuildPhase && fileType.conformsTo(identifier: "folder.abstractassetcatalog") { continue } } @@ -418,7 +420,7 @@ class FilesBasedBuildPhaseTaskProducerBase: PhasedTaskProducer { guard !fileType.conformsTo(identifier: "folder.rkassets") else { continue } // Utility function to unwrap a variant group and add each child as a separate item. - func unwrapResolveAndAdd(variantGroup: VariantGroup, for buildFile: BuildFile) throws { + func unwrapResolveAndAdd(variantGroup: SWBCore.VariantGroup, for buildFile: SWBCore.BuildFile) throws { for childReference in variantGroup.children { let (reference, path, fileType) = try context.resolveBuildFileReference(buildFile, reference: childReference) addResolvedItem(buildFile: buildFile, path: path, reference: reference, fileType: fileType) @@ -431,7 +433,7 @@ class FilesBasedBuildPhaseTaskProducerBase: PhasedTaskProducer { // If this is a variant group and the file type doesn't expect to be grouped, expand it. // // FIXME: This is a very invasive way of handling the problem that variant groups can be built both as a single item (XIB + resources) or as an exploded list. We should push this higher into the model, or lower down into the actual rule. Or we might be able to just always unwrap if ibtool doesn't need combined compilation anymore. - if let asVariantGroup = reference as? VariantGroup { + if let asVariantGroup = reference as? SWBCore.VariantGroup { // If we're processing a single language for installLoc, then unwrap the variant group into a separate item for each of its child references. if installlocSpecificLanguages { try unwrapResolveAndAdd(variantGroup: asVariantGroup, for: buildFile) @@ -439,8 +441,8 @@ class FilesBasedBuildPhaseTaskProducerBase: PhasedTaskProducer { else { // If the first item in the variant group is an IB document with Base localization, then we need to handle it specially, since it may contain a mix of IB documents and strings files. // An exception to this is when String Catalogs are in play. - if let baseReference = asVariantGroup.children.first as? FileReference, SpecRegistry.interfaceBuilderDocumentFileTypeIdentifiers.contains(baseReference.fileTypeIdentifier), baseReference.regionVariantName == "Base" { - var ibDocRefs = [FileReference]() // These are specifically override nibs, not including Base. + if let baseReference = asVariantGroup.children.first as? SWBCore.FileReference, SpecRegistry.interfaceBuilderDocumentFileTypeIdentifiers.contains(baseReference.fileTypeIdentifier), baseReference.regionVariantName == "Base" { + var ibDocRefs = [SWBCore.FileReference]() // These are specifically override nibs, not including Base. var hasStringCatalog = false // Iterate over the children of the group - skipping the first reference - to put them into buckets. @@ -449,7 +451,7 @@ class FilesBasedBuildPhaseTaskProducerBase: PhasedTaskProducer { continue } // FIXME: It's only valid to have a single item in the variant group for any given localization, and we should emit an issue (an error?) about that. (It seems hard to get into that situation other than an SCM merge conflict.) Also maybe emit an issue if there's an item in the group with no localization. - if let fileRef = ref as? FileReference { + if let fileRef = ref as? SWBCore.FileReference { if SpecRegistry.interfaceBuilderDocumentFileTypeIdentifiers.contains(fileRef.fileTypeIdentifier) { // If it's an IB document, then remember it. ibDocRefs.append(fileRef) @@ -568,7 +570,7 @@ class FilesBasedBuildPhaseTaskProducerBase: PhasedTaskProducer { } } - let sourceFiles = (self.targetContext.configuredTarget?.target as? StandardTarget)?.sourcesBuildPhase?.buildFiles.count ?? 0 + let sourceFiles = (self.targetContext.configuredTarget?.target as? SWBCore.StandardTarget)?.sourcesBuildPhase?.buildFiles.count ?? 0 var compileToSwiftFileTypes : [String] = [] for groupingStragegyExtensions in await context.workspaceContext.core.pluginManager.extensions(of: InputFileGroupingStrategyExtensionPoint.self) { compileToSwiftFileTypes.append(contentsOf: groupingStragegyExtensions.fileTypesCompilingToSwiftSources()) diff --git a/Sources/SWBTaskConstruction/TaskProducers/BuildPhaseTaskProducers/ResourcesTaskProducer.swift b/Sources/SWBTaskConstruction/TaskProducers/BuildPhaseTaskProducers/ResourcesTaskProducer.swift index 63369026..222a0ea4 100644 --- a/Sources/SWBTaskConstruction/TaskProducers/BuildPhaseTaskProducers/ResourcesTaskProducer.swift +++ b/Sources/SWBTaskConstruction/TaskProducers/BuildPhaseTaskProducers/ResourcesTaskProducer.swift @@ -13,6 +13,7 @@ import SWBCore import SWBUtil import SWBMacro +import Foundation /// Produces tasks for files in a Copy Resources build phase in an Xcode target. final class ResourcesTaskProducer: FilesBasedBuildPhaseTaskProducerBase, FilesBasedBuildPhaseTaskProducer { diff --git a/Sources/SWBTaskConstruction/TaskProducers/BuildPhaseTaskProducers/ShellBasedTaskProducer.swift b/Sources/SWBTaskConstruction/TaskProducers/BuildPhaseTaskProducers/ShellBasedTaskProducer.swift index 59949d4d..0bb632e7 100644 --- a/Sources/SWBTaskConstruction/TaskProducers/BuildPhaseTaskProducers/ShellBasedTaskProducer.swift +++ b/Sources/SWBTaskConstruction/TaskProducers/BuildPhaseTaskProducers/ShellBasedTaskProducer.swift @@ -13,6 +13,7 @@ import SWBUtil import SWBCore import SWBMacro +import Foundation protocol ShellBasedTaskProducer { func handleFileLists(_ tasks: inout [any PlannedTask], _ inputs: inout [any PlannedNode], _ outputs: inout [any PlannedNode], _ environment: inout [String: String] , _ scope: MacroEvaluationScope, _ inputFileLists: [any PlannedNode], _ outputFileLists: [any PlannedNode], lookup: @escaping ((MacroDeclaration) -> MacroExpression?)) async diff --git a/Sources/SWBTaskConstruction/TaskProducers/BuildPhaseTaskProducers/ShellScriptTaskProducer.swift b/Sources/SWBTaskConstruction/TaskProducers/BuildPhaseTaskProducers/ShellScriptTaskProducer.swift index c38f4390..c3a86d90 100644 --- a/Sources/SWBTaskConstruction/TaskProducers/BuildPhaseTaskProducers/ShellScriptTaskProducer.swift +++ b/Sources/SWBTaskConstruction/TaskProducers/BuildPhaseTaskProducers/ShellScriptTaskProducer.swift @@ -13,12 +13,13 @@ import SWBUtil import SWBCore import SWBMacro +import SWBProtocol final class ShellScriptTaskProducer: PhasedTaskProducer, TaskProducer, ShellBasedTaskProducer { /// The shell script build phase this task producer is working with. - unowned let shellScriptBuildPhase: ShellScriptBuildPhase + unowned let shellScriptBuildPhase: SWBCore.ShellScriptBuildPhase - init(_ context: TargetTaskProducerContext, shellScriptBuildPhase: ShellScriptBuildPhase, phaseStartNodes: [any PlannedNode], phaseEndNode: any PlannedNode, phaseEndTask: any PlannedTask) { + init(_ context: TargetTaskProducerContext, shellScriptBuildPhase: SWBCore.ShellScriptBuildPhase, phaseStartNodes: [any PlannedNode], phaseEndNode: any PlannedNode, phaseEndTask: any PlannedTask) { self.shellScriptBuildPhase = shellScriptBuildPhase super.init(context, phaseStartNodes: phaseStartNodes, phaseEndNode: phaseEndNode, phaseEndTask: phaseEndTask) } @@ -307,7 +308,7 @@ final class ShellScriptTaskProducer: PhasedTaskProducer, TaskProducer, ShellBase /// Construct the tasks for an individual shell-script build rule. /// /// NOTE: External targets are basically shell scripts. It lives here because the behavior shares some significant logical pieces with the behavior of shell script build phases. - static func constructTasksForExternalTarget(_ target: ExternalTarget, _ context: TaskProducerContext, cbc: CommandBuildContext, delegate: any TaskGenerationDelegate) { + static func constructTasksForExternalTarget(_ target: SWBCore.ExternalTarget, _ context: TaskProducerContext, cbc: CommandBuildContext, delegate: any TaskGenerationDelegate) { let action = cbc.scope.evaluate(BuiltinMacros.ACTION) let (executable, arguments, workingDirectory, environment) = constructCommandLine(for: target, action: action, settings: context.settings, workspaceContext: context.workspaceContext, scope: cbc.scope) diff --git a/Sources/SWBTaskConstruction/TaskProducers/BuildPhaseTaskProducers/SwiftPackageCopyFilesTaskProducer.swift b/Sources/SWBTaskConstruction/TaskProducers/BuildPhaseTaskProducers/SwiftPackageCopyFilesTaskProducer.swift index 66e015eb..814cb269 100644 --- a/Sources/SWBTaskConstruction/TaskProducers/BuildPhaseTaskProducers/SwiftPackageCopyFilesTaskProducer.swift +++ b/Sources/SWBTaskConstruction/TaskProducers/BuildPhaseTaskProducers/SwiftPackageCopyFilesTaskProducer.swift @@ -15,6 +15,7 @@ import class Foundation.FileHandle import SWBCore import SWBUtil +import SWBMacro /// Produces tasks for a runtime-synthesized build phase includes linked frameworks produced by package targets, into non-package targets. final class SwiftPackageCopyFilesTaskProducer: CopyFilesTaskProducer { diff --git a/Sources/SWBTaskConstruction/TaskProducers/OtherTaskProducers/CopySwiftPackageResourcesTaskProducer.swift b/Sources/SWBTaskConstruction/TaskProducers/OtherTaskProducers/CopySwiftPackageResourcesTaskProducer.swift index 58ed86aa..1a7938e7 100644 --- a/Sources/SWBTaskConstruction/TaskProducers/OtherTaskProducers/CopySwiftPackageResourcesTaskProducer.swift +++ b/Sources/SWBTaskConstruction/TaskProducers/OtherTaskProducers/CopySwiftPackageResourcesTaskProducer.swift @@ -12,6 +12,7 @@ import SWBCore import SWBUtil +import SWBMacro /// Task producer for embedding the Swift package resource bundles into an app or framework. final class CopySwiftPackageResourcesTaskProducer: PhasedTaskProducer, TaskProducer { diff --git a/Sources/SWBTaskConstruction/TaskProducers/OtherTaskProducers/CustomTaskProducer.swift b/Sources/SWBTaskConstruction/TaskProducers/OtherTaskProducers/CustomTaskProducer.swift index 1ab088b5..57b15e66 100644 --- a/Sources/SWBTaskConstruction/TaskProducers/OtherTaskProducers/CustomTaskProducer.swift +++ b/Sources/SWBTaskConstruction/TaskProducers/OtherTaskProducers/CustomTaskProducer.swift @@ -12,6 +12,7 @@ import SWBCore import SWBUtil +import SWBMacro /// A task producer responsible for adding custom tasks specified in the project model to the graph. final class CustomTaskProducer: PhasedTaskProducer, TaskProducer { diff --git a/Sources/SWBTaskConstruction/TaskProducers/OtherTaskProducers/DevelopmentAssetsTaskProducer.swift b/Sources/SWBTaskConstruction/TaskProducers/OtherTaskProducers/DevelopmentAssetsTaskProducer.swift index e5c0f407..ad2105da 100644 --- a/Sources/SWBTaskConstruction/TaskProducers/OtherTaskProducers/DevelopmentAssetsTaskProducer.swift +++ b/Sources/SWBTaskConstruction/TaskProducers/OtherTaskProducers/DevelopmentAssetsTaskProducer.swift @@ -12,6 +12,7 @@ import SWBCore import SWBUtil +import SWBMacro final class DevelopmentAssetsTaskProducer: StandardTaskProducer, TaskProducer { func generateTasks() async -> [any PlannedTask] { diff --git a/Sources/SWBTaskConstruction/TaskProducers/OtherTaskProducers/InfoPlistTaskProducer.swift b/Sources/SWBTaskConstruction/TaskProducers/OtherTaskProducers/InfoPlistTaskProducer.swift index d50d3e02..1f740497 100644 --- a/Sources/SWBTaskConstruction/TaskProducers/OtherTaskProducers/InfoPlistTaskProducer.swift +++ b/Sources/SWBTaskConstruction/TaskProducers/OtherTaskProducers/InfoPlistTaskProducer.swift @@ -13,6 +13,7 @@ import SWBCore import SWBUtil import SWBMacro +import Foundation /// This task producer is responsible for creating tasks which result in the Info.plist file being produced in its final form and location. /// diff --git a/Sources/SWBTaskConstruction/TaskProducers/OtherTaskProducers/ProductPostprocessingTaskProducer.swift b/Sources/SWBTaskConstruction/TaskProducers/OtherTaskProducers/ProductPostprocessingTaskProducer.swift index 6cec535c..d8d82ac0 100644 --- a/Sources/SWBTaskConstruction/TaskProducers/OtherTaskProducers/ProductPostprocessingTaskProducer.swift +++ b/Sources/SWBTaskConstruction/TaskProducers/OtherTaskProducers/ProductPostprocessingTaskProducer.swift @@ -13,6 +13,8 @@ import SWBCore import SWBUtil import SWBMacro +import SWBProtocol +import Foundation /// Returns an array of build variant-macro evaluation scope pairs for the given scope for a list of build variants. /// - parameter scope: The base scope for which to return the varianted subscopes. @@ -770,7 +772,7 @@ private extension ProductTypeSpec { struct FilteringContext: PathResolvingBuildFileFilteringContext { let excludedSourceFileNames: [String] let includedSourceFileNames: [String] - let currentPlatformFilter: PlatformFilter? + let currentPlatformFilter: SWBCore.PlatformFilter? let filePathResolver: FilePathResolver } let filteringContext = FilteringContext( diff --git a/Sources/SWBTaskConstruction/TaskProducers/OtherTaskProducers/TAPISymbolExtractorTaskProducer.swift b/Sources/SWBTaskConstruction/TaskProducers/OtherTaskProducers/TAPISymbolExtractorTaskProducer.swift index fe378d01..95b8bf0e 100644 --- a/Sources/SWBTaskConstruction/TaskProducers/OtherTaskProducers/TAPISymbolExtractorTaskProducer.swift +++ b/Sources/SWBTaskConstruction/TaskProducers/OtherTaskProducers/TAPISymbolExtractorTaskProducer.swift @@ -14,6 +14,8 @@ import SWBCore import SWBUtil import class SWBCore.DocumentationCompilerSpec import SWBMacro +import SWBProtocol +import Foundation /// A task producer that constructs TAPI Symbol Extraction tasks. /// @@ -181,7 +183,7 @@ final class TAPISymbolExtractorTaskProducer: PhasedTaskProducer, TaskProducer { var headerList: [TAPIFileList.HeaderInfo] = { [headerBuildFiles = documentationHeaderInfo.headerBuildFiles] in let buildFilesContext = BuildFilesProcessingContext(scope) - func computeProductHeader(for fileRef: FileReference, isFramework: Bool, visibility: TAPIFileList.HeaderVisibility, inputNodes: inout [any PlannedNode]) -> TAPIFileList.HeaderInfo? { + func computeProductHeader(for fileRef: SWBCore.FileReference, isFramework: Bool, visibility: TAPIFileList.HeaderVisibility, inputNodes: inout [any PlannedNode]) -> TAPIFileList.HeaderInfo? { // The JSON file should have the product headers, not the source headers, so we need to compute the output path. // FIXME: We should be able to get this info from - or at least share it with - the HeadersTaskProducer. let path = producer.context.settings.filePathResolver.resolveAbsolutePath(fileRef) diff --git a/Sources/SWBTaskConstruction/TaskProducers/OtherTaskProducers/TargetOrderTaskProducer.swift b/Sources/SWBTaskConstruction/TaskProducers/OtherTaskProducers/TargetOrderTaskProducer.swift index 5423a898..73850277 100644 --- a/Sources/SWBTaskConstruction/TaskProducers/OtherTaskProducers/TargetOrderTaskProducer.swift +++ b/Sources/SWBTaskConstruction/TaskProducers/OtherTaskProducers/TargetOrderTaskProducer.swift @@ -12,6 +12,7 @@ import SWBCore import SWBUtil +import SWBMacro /// Wrapper for capturing the task information needed for the `TargetOrderTaskProducer`. /// diff --git a/Sources/SWBTaskConstruction/TaskProducers/WorkspaceTaskProducers/CreateBuildDirectoryTaskProducer.swift b/Sources/SWBTaskConstruction/TaskProducers/WorkspaceTaskProducers/CreateBuildDirectoryTaskProducer.swift index 5f3a7676..12cd9961 100644 --- a/Sources/SWBTaskConstruction/TaskProducers/WorkspaceTaskProducers/CreateBuildDirectoryTaskProducer.swift +++ b/Sources/SWBTaskConstruction/TaskProducers/WorkspaceTaskProducers/CreateBuildDirectoryTaskProducer.swift @@ -12,6 +12,7 @@ import SWBCore import SWBUtil +import SWBMacro /// This produces the tasks which create the build directories which are conceptually not part of any target, such as the `SYMROOT`, `OBJROOT` and `DSTROOT`. final class CreateBuildDirectoryTaskProducer: StandardTaskProducer, TaskProducer { diff --git a/Sources/SWBTaskConstruction/TaskProducers/WorkspaceTaskProducers/HeadermapVFSTaskProducer.swift b/Sources/SWBTaskConstruction/TaskProducers/WorkspaceTaskProducers/HeadermapVFSTaskProducer.swift index 614a4aac..f719ff12 100644 --- a/Sources/SWBTaskConstruction/TaskProducers/WorkspaceTaskProducers/HeadermapVFSTaskProducer.swift +++ b/Sources/SWBTaskConstruction/TaskProducers/WorkspaceTaskProducers/HeadermapVFSTaskProducer.swift @@ -12,6 +12,9 @@ import SWBCore import SWBUtil +import SWBMacro +import Foundation +import SWBProtocol final class HeadermapVFSTaskProducer: StandardTaskProducer, TaskProducer { @@ -33,7 +36,7 @@ final class HeadermapVFSTaskProducer: StandardTaskProducer, TaskProducer { let vfsContentsByPath = try Dictionary(try await targetContexts.concurrentMap(maximumParallelism: 100) { (targetContext: TaskProducerContext) async throws -> (Path, ByteString)? in let targetScope = targetContext.settings.globalScope let vfsSetting = targetScope.evaluate(BuiltinMacros.CPP_HEADERMAP_PRODUCT_HEADERS_VFS_FILE) - guard targetContext.configuredTarget?.target is StandardTarget, targetScope.evaluate(BuiltinMacros.USE_HEADERMAP), !vfsSetting.isEmpty else { + guard targetContext.configuredTarget?.target is SWBCore.StandardTarget, targetScope.evaluate(BuiltinMacros.USE_HEADERMAP), !vfsSetting.isEmpty else { return nil } let vfsPath = self.context.makeAbsolute(vfsSetting) @@ -80,7 +83,7 @@ extension TaskProducerContext { return try PropertyListItem(vfs.toVFSOverlay()).asJSONFragment() } - func forEachBuildProductToSourceMapping(mapToTempFilesOnly: Bool, _ body: ((target: Target, isActiveTarget: Bool, builtFile: Path, originalSource: Path)) throws -> Void) async rethrows { + func forEachBuildProductToSourceMapping(mapToTempFilesOnly: Bool, _ body: ((target: SWBCore.Target, isActiveTarget: Bool, builtFile: Path, originalSource: Path)) throws -> Void) async rethrows { let index = await workspaceContext.headerIndex @@ -96,7 +99,7 @@ extension TaskProducerContext { let hasEnabledIndexBuildArena = settings.globalScope.evaluate(BuiltinMacros.INDEX_ENABLE_BUILD_ARENA) let effectivePlatformName = settings.globalScope.evaluate(BuiltinMacros.EFFECTIVE_PLATFORM_NAME) - var settingsByTarget: [Target: Settings] = [:] + var settingsByTarget: [SWBCore.Target: Settings] = [:] for configuredTarget in globalProductPlan.allTargets { guard workspaceContext.workspace.project(for: configuredTarget.target) == project else { continue } let settings = globalProductPlan.getTargetSettings(configuredTarget) @@ -147,7 +150,7 @@ extension TaskProducerContext { let privateHeadersFolderPseudoPath = headerDestPaths.privatePath // Add the public and private headers. - func addEntry(_ fileRef: FileReference, installDir: Path) throws { + func addEntry(_ fileRef: SWBCore.FileReference, installDir: Path) throws { // Compute the header path. // // FIXME: This isn't the correct file resolver to use. diff --git a/Sources/SWBTaskConstruction/TaskProducers/WorkspaceTaskProducers/IndexBuildVFSDirectoryRemapTaskProducer.swift b/Sources/SWBTaskConstruction/TaskProducers/WorkspaceTaskProducers/IndexBuildVFSDirectoryRemapTaskProducer.swift index 31a80a2c..e66b3234 100644 --- a/Sources/SWBTaskConstruction/TaskProducers/WorkspaceTaskProducers/IndexBuildVFSDirectoryRemapTaskProducer.swift +++ b/Sources/SWBTaskConstruction/TaskProducers/WorkspaceTaskProducers/IndexBuildVFSDirectoryRemapTaskProducer.swift @@ -12,6 +12,7 @@ import SWBCore import SWBUtil +import SWBMacro final class IndexBuildVFSDirectoryRemapTaskProducer: StandardTaskProducer, TaskProducer { diff --git a/Sources/SWBTaskConstruction/TaskProducers/WorkspaceTaskProducers/PCHModuleMapTaskProducer.swift b/Sources/SWBTaskConstruction/TaskProducers/WorkspaceTaskProducers/PCHModuleMapTaskProducer.swift index 53637db0..0a608fe6 100644 --- a/Sources/SWBTaskConstruction/TaskProducers/WorkspaceTaskProducers/PCHModuleMapTaskProducer.swift +++ b/Sources/SWBTaskConstruction/TaskProducers/WorkspaceTaskProducers/PCHModuleMapTaskProducer.swift @@ -12,6 +12,8 @@ import SWBCore import SWBUtil +import Foundation +import SWBMacro final class PCHModuleMapTaskProducer: StandardTaskProducer, TaskProducer { diff --git a/Sources/SWBTaskConstruction/TaskProducers/WorkspaceTaskProducers/XCFrameworkTaskProducer.swift b/Sources/SWBTaskConstruction/TaskProducers/WorkspaceTaskProducers/XCFrameworkTaskProducer.swift index e082c7f4..a855ddae 100644 --- a/Sources/SWBTaskConstruction/TaskProducers/WorkspaceTaskProducers/XCFrameworkTaskProducer.swift +++ b/Sources/SWBTaskConstruction/TaskProducers/WorkspaceTaskProducers/XCFrameworkTaskProducer.swift @@ -15,6 +15,7 @@ import SWBUtil import struct Foundation.Data import class Foundation.PropertyListDecoder +import SWBMacro /// The XCFrameworkTaskProducer needs to look at a various number of build phases to determine what work actually needs to be done. As part of this, the XCFramework itself needs to be inspected. The matching library within the XCFramework will be copied into the build destination root for later processing by the other build phases, such as the `SourcesBuildPhase`, to handle the linking of the library. final class XCFrameworkTaskProducer: StandardTaskProducer, TaskProducer { diff --git a/Sources/SWBTaskConstruction/XCFrameworkContext.swift b/Sources/SWBTaskConstruction/XCFrameworkContext.swift index a1a34482..bb276ae9 100644 --- a/Sources/SWBTaskConstruction/XCFrameworkContext.swift +++ b/Sources/SWBTaskConstruction/XCFrameworkContext.swift @@ -12,6 +12,7 @@ import SWBCore import SWBUtil +import Synchronization /// Tracks the XCFramework usage across the build plan. This allows the usage information to be cached during task planning. final class XCFrameworkContext: Sendable { diff --git a/Sources/SWBTaskExecution/BuildDescription.swift b/Sources/SWBTaskExecution/BuildDescription.swift index e39f742e..a7de2774 100644 --- a/Sources/SWBTaskExecution/BuildDescription.swift +++ b/Sources/SWBTaskExecution/BuildDescription.swift @@ -18,6 +18,7 @@ package import struct SWBProtocol.BuildOperationTaskEnded package import struct SWBProtocol.TargetDependencyRelationship import class SWBTaskConstruction.ProductPlan package import SWBMacro +import Synchronization /// The delegate for constructing a build description. package protocol BuildDescriptionConstructionDelegate: ActivityReporter { diff --git a/Sources/SWBTaskExecution/BuildDescriptionManager.swift b/Sources/SWBTaskExecution/BuildDescriptionManager.swift index 7a7f8973..6dc77926 100644 --- a/Sources/SWBTaskExecution/BuildDescriptionManager.swift +++ b/Sources/SWBTaskExecution/BuildDescriptionManager.swift @@ -20,6 +20,7 @@ package import SWBUtil package import struct SWBProtocol.BuildDescriptionID package import struct SWBProtocol.BuildOperationTaskEnded import SWBMacro +import Synchronization /// An enum describing from where the build description was retrieved, for testing purposes. package enum BuildDescriptionRetrievalSource { diff --git a/Sources/SWBTaskExecution/DynamicTaskSpecs/CompilationCachingDataPruner.swift b/Sources/SWBTaskExecution/DynamicTaskSpecs/CompilationCachingDataPruner.swift index 1e0f1d68..eafc6b43 100644 --- a/Sources/SWBTaskExecution/DynamicTaskSpecs/CompilationCachingDataPruner.swift +++ b/Sources/SWBTaskExecution/DynamicTaskSpecs/CompilationCachingDataPruner.swift @@ -14,6 +14,7 @@ package import SWBCore import SWBProtocol package import SWBUtil package import SWBCAS +import Foundation package struct ClangCachingPruneDataTaskKey: Hashable, Serializable, CustomDebugStringConvertible, Sendable { let path: Path diff --git a/Sources/SWBTaskExecution/DynamicTaskSpecs/CompilationCachingUploader.swift b/Sources/SWBTaskExecution/DynamicTaskSpecs/CompilationCachingUploader.swift index 371e6a2e..2056e7d3 100644 --- a/Sources/SWBTaskExecution/DynamicTaskSpecs/CompilationCachingUploader.swift +++ b/Sources/SWBTaskExecution/DynamicTaskSpecs/CompilationCachingUploader.swift @@ -13,6 +13,11 @@ package import SWBCore import SWBProtocol import SWBUtil +import Foundation + +#if canImport(os) +import os +#endif /// Manages uploading compilation caching outputs in the background, when a remote cache is enabled. /// The network tasks are managed using Swift concurrency, without blocking execution lanes diff --git a/Sources/SWBTaskExecution/DynamicTaskSpecs/SwiftDriverJobDynamicTaskSpec.swift b/Sources/SWBTaskExecution/DynamicTaskSpecs/SwiftDriverJobDynamicTaskSpec.swift index 605787fe..e01273bc 100644 --- a/Sources/SWBTaskExecution/DynamicTaskSpecs/SwiftDriverJobDynamicTaskSpec.swift +++ b/Sources/SWBTaskExecution/DynamicTaskSpecs/SwiftDriverJobDynamicTaskSpec.swift @@ -242,7 +242,7 @@ final class SwiftDriverJobDynamicTaskSpec: DynamicTaskSpec { // rdar://91295617 (Swift produces empty serialized diagnostics if there are none which is not parseable by clang_loadDiagnostics) return expectedDiagnostics.filter { filePath in do { - let shouldAdd = try fs.exists(filePath) && (try fs.getFileInfo(filePath)).statBuf.st_size > 0 + let shouldAdd = try fs.exists(filePath) && (try fs.getFileSize(filePath)) > 0 return shouldAdd } catch { return false diff --git a/Sources/SWBTaskExecution/ProjectPlanner.swift b/Sources/SWBTaskExecution/ProjectPlanner.swift index 350c8620..287c35b7 100644 --- a/Sources/SWBTaskExecution/ProjectPlanner.swift +++ b/Sources/SWBTaskExecution/ProjectPlanner.swift @@ -13,6 +13,7 @@ package import SWBCore package import SWBProtocol import SWBUtil +import SWBMacro package struct ProjectPlanner { private let workspaceContext: WorkspaceContext diff --git a/Sources/SWBTaskExecution/TaskActions/AuxiliaryFileTaskAction.swift b/Sources/SWBTaskExecution/TaskActions/AuxiliaryFileTaskAction.swift index 5f36bc5c..72797811 100644 --- a/Sources/SWBTaskExecution/TaskActions/AuxiliaryFileTaskAction.swift +++ b/Sources/SWBTaskExecution/TaskActions/AuxiliaryFileTaskAction.swift @@ -13,6 +13,7 @@ public import SWBUtil import SWBLibc public import SWBCore +import Foundation public final class AuxiliaryFileTaskAction: TaskAction { public override class var toolIdentifier: String { diff --git a/Sources/SWBTaskExecution/TaskActions/ClangCachingKeyQueryTaskAction.swift b/Sources/SWBTaskExecution/TaskActions/ClangCachingKeyQueryTaskAction.swift index be5f3183..2750c9d7 100644 --- a/Sources/SWBTaskExecution/TaskActions/ClangCachingKeyQueryTaskAction.swift +++ b/Sources/SWBTaskExecution/TaskActions/ClangCachingKeyQueryTaskAction.swift @@ -12,6 +12,7 @@ public import SWBUtil public import SWBCore +import Foundation /// Used only when remote caching is enabled, for remote cache key querying. /// After the task completes, if the remote key is found, the local CAS will diff --git a/Sources/SWBTaskExecution/TaskActions/ClangCachingMaterializeKeyTaskAction.swift b/Sources/SWBTaskExecution/TaskActions/ClangCachingMaterializeKeyTaskAction.swift index 1177be3d..8192aa71 100644 --- a/Sources/SWBTaskExecution/TaskActions/ClangCachingMaterializeKeyTaskAction.swift +++ b/Sources/SWBTaskExecution/TaskActions/ClangCachingMaterializeKeyTaskAction.swift @@ -13,6 +13,7 @@ public import SWBUtil public import SWBCore public import SWBLLBuild +import Foundation /// Used only when remote caching is enabled, to manage tasks for remote key /// querying and compilation output downloading as dependency tasks. diff --git a/Sources/SWBTaskExecution/TaskActions/ClangCachingOutputMaterializerTaskAction.swift b/Sources/SWBTaskExecution/TaskActions/ClangCachingOutputMaterializerTaskAction.swift index 1c66ad7e..eb4c99ef 100644 --- a/Sources/SWBTaskExecution/TaskActions/ClangCachingOutputMaterializerTaskAction.swift +++ b/Sources/SWBTaskExecution/TaskActions/ClangCachingOutputMaterializerTaskAction.swift @@ -12,6 +12,7 @@ public import SWBUtil public import SWBCore +import Foundation /// Used only when remote caching is enabled for downloading a compilation output, /// using its ID, into the local CAS. diff --git a/Sources/SWBTaskExecution/TaskActions/ClangCompileTaskAction.swift b/Sources/SWBTaskExecution/TaskActions/ClangCompileTaskAction.swift index d64cc404..98c7bead 100644 --- a/Sources/SWBTaskExecution/TaskActions/ClangCompileTaskAction.swift +++ b/Sources/SWBTaskExecution/TaskActions/ClangCompileTaskAction.swift @@ -14,6 +14,8 @@ import SWBUtil import SWBLibc public import SWBCore public import SWBLLBuild +import Foundation +import SWBProtocol public final class ClangCompileTaskAction: TaskAction, BuildValueValidatingTaskAction { public override class var toolIdentifier: String { diff --git a/Sources/SWBTaskExecution/TaskActions/ClangScanTaskAction.swift b/Sources/SWBTaskExecution/TaskActions/ClangScanTaskAction.swift index 5ee3c0e8..d9d7e053 100644 --- a/Sources/SWBTaskExecution/TaskActions/ClangScanTaskAction.swift +++ b/Sources/SWBTaskExecution/TaskActions/ClangScanTaskAction.swift @@ -14,6 +14,7 @@ import SWBUtil import SWBLibc public import SWBCore public import enum SWBLLBuild.BuildValueKind +import Foundation public final class ClangScanTaskAction: TaskAction, BuildValueValidatingTaskAction { public override class var toolIdentifier: String { diff --git a/Sources/SWBTaskExecution/TaskActions/ConcatenateTaskAction.swift b/Sources/SWBTaskExecution/TaskActions/ConcatenateTaskAction.swift index 3acef5b8..a3669c7f 100644 --- a/Sources/SWBTaskExecution/TaskActions/ConcatenateTaskAction.swift +++ b/Sources/SWBTaskExecution/TaskActions/ConcatenateTaskAction.swift @@ -12,6 +12,7 @@ public import SWBCore import SWBUtil +import Foundation public final class ConcatenateTaskAction: TaskAction { public override class var toolIdentifier: String { diff --git a/Sources/SWBTaskExecution/TaskActions/ConstructStubExecutorInputFileListTaskAction.swift b/Sources/SWBTaskExecution/TaskActions/ConstructStubExecutorInputFileListTaskAction.swift index 4baef637..ebb79347 100644 --- a/Sources/SWBTaskExecution/TaskActions/ConstructStubExecutorInputFileListTaskAction.swift +++ b/Sources/SWBTaskExecution/TaskActions/ConstructStubExecutorInputFileListTaskAction.swift @@ -14,6 +14,7 @@ public import SWBCore import SWBLibc import SWBUtil public import SWBLLBuild +import Foundation /// rdar://125894897 (🚨 fetchOperationServiceEndpoint seems completely broken for app extensions implemented in Swift (SwiftUI: Swift entry point data not found.)) /// diff --git a/Sources/SWBTaskExecution/TaskActions/CopyPlistTaskAction.swift b/Sources/SWBTaskExecution/TaskActions/CopyPlistTaskAction.swift index 470bee7b..3e8f06ea 100644 --- a/Sources/SWBTaskExecution/TaskActions/CopyPlistTaskAction.swift +++ b/Sources/SWBTaskExecution/TaskActions/CopyPlistTaskAction.swift @@ -14,6 +14,7 @@ public import SWBCore import SWBLibc public import SWBUtil import SWBMacro +import Foundation /// Concrete implementation of task for copying a property list file. public final class CopyPlistTaskAction: TaskAction { diff --git a/Sources/SWBTaskExecution/TaskActions/CopyStringsFileTaskAction.swift b/Sources/SWBTaskExecution/TaskActions/CopyStringsFileTaskAction.swift index d85c2ebb..002b2a22 100644 --- a/Sources/SWBTaskExecution/TaskActions/CopyStringsFileTaskAction.swift +++ b/Sources/SWBTaskExecution/TaskActions/CopyStringsFileTaskAction.swift @@ -15,6 +15,7 @@ import Foundation public import SWBCore import SWBLibc public import SWBUtil +import SWBProtocol /// Concrete implementation of task for copying a strings file. public final class CopyStringsFileTaskAction: TaskAction { diff --git a/Sources/SWBTaskExecution/TaskActions/CopyTiffTaskAction.swift b/Sources/SWBTaskExecution/TaskActions/CopyTiffTaskAction.swift index aa1dfa22..cac4975e 100644 --- a/Sources/SWBTaskExecution/TaskActions/CopyTiffTaskAction.swift +++ b/Sources/SWBTaskExecution/TaskActions/CopyTiffTaskAction.swift @@ -13,6 +13,7 @@ public import SWBUtil import SWBLibc public import SWBCore +import Foundation /// Concrete implementation of task for copying a property list file. public final class CopyTiffTaskAction: TaskAction { diff --git a/Sources/SWBTaskExecution/TaskActions/CreateBuildDirectoryTaskAction.swift b/Sources/SWBTaskExecution/TaskActions/CreateBuildDirectoryTaskAction.swift index 72461bf9..10cc6af5 100644 --- a/Sources/SWBTaskExecution/TaskActions/CreateBuildDirectoryTaskAction.swift +++ b/Sources/SWBTaskExecution/TaskActions/CreateBuildDirectoryTaskAction.swift @@ -13,6 +13,7 @@ public import SWBCore import SWBLibc public import SWBUtil +import Foundation public final class CreateBuildDirectoryTaskAction: TaskAction { public override class var toolIdentifier: String { diff --git a/Sources/SWBTaskExecution/TaskActions/DeferredExecutionTaskAction.swift b/Sources/SWBTaskExecution/TaskActions/DeferredExecutionTaskAction.swift index e5fe682c..a0307227 100644 --- a/Sources/SWBTaskExecution/TaskActions/DeferredExecutionTaskAction.swift +++ b/Sources/SWBTaskExecution/TaskActions/DeferredExecutionTaskAction.swift @@ -13,6 +13,8 @@ public import SWBCore import SWBUtil public import SWBLLBuild +import Foundation +import SWBProtocol public final class DeferredExecutionTaskAction: TaskAction { public override class var toolIdentifier: String { diff --git a/Sources/SWBTaskExecution/TaskActions/EmbedSwiftStdLibTaskAction.swift b/Sources/SWBTaskExecution/TaskActions/EmbedSwiftStdLibTaskAction.swift index bc6e716f..f2ded2fd 100644 --- a/Sources/SWBTaskExecution/TaskActions/EmbedSwiftStdLibTaskAction.swift +++ b/Sources/SWBTaskExecution/TaskActions/EmbedSwiftStdLibTaskAction.swift @@ -15,7 +15,7 @@ import SWBLibc import SWBUtil import Foundation import struct SWBProtocol.BuildOperationMetrics - +import Synchronization fileprivate func executableFileNameMatchesSwiftRuntimeLibPattern(_ fileName: String) -> Bool { return fileName.hasPrefix("libswift") && fileName.hasSuffix(".dylib") diff --git a/Sources/SWBTaskExecution/TaskActions/LSRegisterURLTaskAction.swift b/Sources/SWBTaskExecution/TaskActions/LSRegisterURLTaskAction.swift index 80fbae02..93f1d0c4 100644 --- a/Sources/SWBTaskExecution/TaskActions/LSRegisterURLTaskAction.swift +++ b/Sources/SWBTaskExecution/TaskActions/LSRegisterURLTaskAction.swift @@ -12,6 +12,7 @@ import SWBUtil public import SWBCore +import Foundation /// Concrete implementation of task for registering a built app. public final class LSRegisterURLTaskAction: TaskAction { diff --git a/Sources/SWBTaskExecution/TaskActions/ODRAssetPackManifestTaskAction.swift b/Sources/SWBTaskExecution/TaskActions/ODRAssetPackManifestTaskAction.swift index 6fcd3ba6..72f1cfb3 100644 --- a/Sources/SWBTaskExecution/TaskActions/ODRAssetPackManifestTaskAction.swift +++ b/Sources/SWBTaskExecution/TaskActions/ODRAssetPackManifestTaskAction.swift @@ -17,6 +17,7 @@ import struct Foundation.CharacterSet import struct Foundation.Date import class Foundation.DateFormatter import typealias Foundation.TimeInterval +import SWBMacro public final class ODRAssetPackManifestTaskAction: TaskAction { public override class var toolIdentifier: String { diff --git a/Sources/SWBTaskExecution/TaskActions/ProcessXCFrameworkTaskAction.swift b/Sources/SWBTaskExecution/TaskActions/ProcessXCFrameworkTaskAction.swift index 56167f9f..aacfd3fb 100644 --- a/Sources/SWBTaskExecution/TaskActions/ProcessXCFrameworkTaskAction.swift +++ b/Sources/SWBTaskExecution/TaskActions/ProcessXCFrameworkTaskAction.swift @@ -13,6 +13,7 @@ public import SWBCore import SWBLibc import SWBUtil +import Foundation /// Performs the processing of a given XCFramework, doing the work to process an individual slice and outputting into a location that can be used during the build. public final class ProcessXCFrameworkTaskAction: TaskAction { diff --git a/Sources/SWBTaskExecution/TaskActions/SwiftCachingKeyQueryTaskAction.swift b/Sources/SWBTaskExecution/TaskActions/SwiftCachingKeyQueryTaskAction.swift index 42fc9a7a..14332233 100644 --- a/Sources/SWBTaskExecution/TaskActions/SwiftCachingKeyQueryTaskAction.swift +++ b/Sources/SWBTaskExecution/TaskActions/SwiftCachingKeyQueryTaskAction.swift @@ -12,6 +12,7 @@ public import SWBUtil public import SWBCore +import Foundation /// Used only when remote caching is enabled, for remote cache key querying. public final class SwiftCachingKeyQueryTaskAction: TaskAction { diff --git a/Sources/SWBTaskExecution/TaskActions/SwiftCachingMaterializeKeyTaskAction.swift b/Sources/SWBTaskExecution/TaskActions/SwiftCachingMaterializeKeyTaskAction.swift index ba0ee56e..0883b6f4 100644 --- a/Sources/SWBTaskExecution/TaskActions/SwiftCachingMaterializeKeyTaskAction.swift +++ b/Sources/SWBTaskExecution/TaskActions/SwiftCachingMaterializeKeyTaskAction.swift @@ -13,6 +13,7 @@ public import SWBUtil public import SWBCore public import SWBLLBuild +import Foundation /// Used only when remote caching is enabled, to manage tasks for remote key /// querying and compilation output downloading as dependency tasks. diff --git a/Sources/SWBTaskExecution/TaskActions/SwiftCachingOutputMaterializerTaskAction.swift b/Sources/SWBTaskExecution/TaskActions/SwiftCachingOutputMaterializerTaskAction.swift index 3ed88acd..e80c9b6c 100644 --- a/Sources/SWBTaskExecution/TaskActions/SwiftCachingOutputMaterializerTaskAction.swift +++ b/Sources/SWBTaskExecution/TaskActions/SwiftCachingOutputMaterializerTaskAction.swift @@ -12,6 +12,7 @@ public import SWBUtil public import SWBCore +import Foundation /// Used only when remote caching is enabled for downloading a compilation output, /// using its ID, into the local CAS. diff --git a/Sources/SWBTaskExecution/TaskActions/SwiftDriverJobSchedulingTaskAction.swift b/Sources/SWBTaskExecution/TaskActions/SwiftDriverJobSchedulingTaskAction.swift index fa1e3ac1..d75cbca8 100644 --- a/Sources/SWBTaskExecution/TaskActions/SwiftDriverJobSchedulingTaskAction.swift +++ b/Sources/SWBTaskExecution/TaskActions/SwiftDriverJobSchedulingTaskAction.swift @@ -14,6 +14,8 @@ import SWBUtil import SWBLibc public import SWBCore public import enum SWBLLBuild.BuildValueKind +import Foundation +import SWBProtocol open class SwiftDriverJobSchedulingTaskAction: TaskAction { public override class var toolIdentifier: String { diff --git a/Sources/SWBTaskExecution/TaskActions/SwiftDriverJobTaskAction.swift b/Sources/SWBTaskExecution/TaskActions/SwiftDriverJobTaskAction.swift index 67208a28..ea27280c 100644 --- a/Sources/SWBTaskExecution/TaskActions/SwiftDriverJobTaskAction.swift +++ b/Sources/SWBTaskExecution/TaskActions/SwiftDriverJobTaskAction.swift @@ -15,6 +15,7 @@ import Foundation public import SWBCore public import SWBUtil public import SWBLLBuild +import SWBProtocol public final class SwiftDriverJobTaskAction: TaskAction, BuildValueValidatingTaskAction { public override class var toolIdentifier: String { diff --git a/Sources/SWBTaskExecution/TaskActions/ValidateDevelopmentAssetsTaskAction.swift b/Sources/SWBTaskExecution/TaskActions/ValidateDevelopmentAssetsTaskAction.swift index 31ae6031..40c7a91c 100644 --- a/Sources/SWBTaskExecution/TaskActions/ValidateDevelopmentAssetsTaskAction.swift +++ b/Sources/SWBTaskExecution/TaskActions/ValidateDevelopmentAssetsTaskAction.swift @@ -12,6 +12,7 @@ public import SWBCore import SWBUtil +import SWBMacro public final class ValidateDevelopmentAssetsTaskAction: TaskAction { public override class var toolIdentifier: String { diff --git a/Sources/SWBTaskExecution/TaskActions/ValidateProductTaskAction.swift b/Sources/SWBTaskExecution/TaskActions/ValidateProductTaskAction.swift index 8e7fff22..398f01ee 100644 --- a/Sources/SWBTaskExecution/TaskActions/ValidateProductTaskAction.swift +++ b/Sources/SWBTaskExecution/TaskActions/ValidateProductTaskAction.swift @@ -13,6 +13,8 @@ public import SWBCore import SWBLibc public import SWBUtil +import SWBProtocol +import Foundation /// Concrete implementation of task for validating a a product. public final class ValidateProductTaskAction: TaskAction { diff --git a/Sources/SWBTaskExecution/TaskStore.swift b/Sources/SWBTaskExecution/TaskStore.swift index 615f10df..dc9ff3a2 100644 --- a/Sources/SWBTaskExecution/TaskStore.swift +++ b/Sources/SWBTaskExecution/TaskStore.swift @@ -12,6 +12,7 @@ package import SWBCore package import SWBUtil +import Synchronization package final class TaskStore { package enum Error: Swift.Error { diff --git a/Sources/SWBTestSupport/AssertMatch.swift b/Sources/SWBTestSupport/AssertMatch.swift index f6935eee..f7118634 100644 --- a/Sources/SWBTestSupport/AssertMatch.swift +++ b/Sources/SWBTestSupport/AssertMatch.swift @@ -12,6 +12,7 @@ package import SWBUtil package import Testing +import Synchronization package indirect enum StringPattern: Sendable { /// Matches only the start, when matching a list of inputs. diff --git a/Sources/SWBTestSupport/BuildOperationTester.swift b/Sources/SWBTestSupport/BuildOperationTester.swift index 0d01b828..46983a4c 100644 --- a/Sources/SWBTestSupport/BuildOperationTester.swift +++ b/Sources/SWBTestSupport/BuildOperationTester.swift @@ -36,6 +36,7 @@ package import struct SWBProtocol.BuildOperationMetrics // FIXME: Workaround: Unable to prefer my own type over NS renamed types package import class SWBTaskExecution.Task +import SWBMacro extension BuildRequest { func with(parameters: BuildParameters, buildTargets: [BuildTargetInfo]) -> BuildRequest { diff --git a/Sources/SWBTestSupport/CoreTestSupport.swift b/Sources/SWBTestSupport/CoreTestSupport.swift index 3255a806..356345fa 100644 --- a/Sources/SWBTestSupport/CoreTestSupport.swift +++ b/Sources/SWBTestSupport/CoreTestSupport.swift @@ -15,6 +15,7 @@ private import Foundation package import SWBUtil import SWBTaskConstruction import SWBTaskExecution +import SWBServiceCore #if USE_STATIC_PLUGIN_INITIALIZATION private import SWBAndroidPlatform diff --git a/Sources/SWBTestSupport/LibraryGeneration.swift b/Sources/SWBTestSupport/LibraryGeneration.swift index 69a6e758..02cc269d 100644 --- a/Sources/SWBTestSupport/LibraryGeneration.swift +++ b/Sources/SWBTestSupport/LibraryGeneration.swift @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// package import SWBUtil +import Foundation /// Helpers for creating frameworks and libraries for use in unit tests. extension InstalledXcode { diff --git a/Sources/SWBTestSupport/TaskConstructionTester.swift b/Sources/SWBTestSupport/TaskConstructionTester.swift index b65cc9e7..48816c10 100644 --- a/Sources/SWBTestSupport/TaskConstructionTester.swift +++ b/Sources/SWBTestSupport/TaskConstructionTester.swift @@ -17,6 +17,8 @@ package import struct SWBProtocol.RunDestinationInfo package import SWBTaskConstruction import SWBTaskExecution package import Testing +import SWBMacro +import Foundation /// Helper class for testing task construction. package final class TaskConstructionTester { diff --git a/Sources/SWBTestSupport/TaskExecutionTestSupport.swift b/Sources/SWBTestSupport/TaskExecutionTestSupport.swift index 73a1a011..0fc3b973 100644 --- a/Sources/SWBTestSupport/TaskExecutionTestSupport.swift +++ b/Sources/SWBTestSupport/TaskExecutionTestSupport.swift @@ -17,6 +17,7 @@ package import SWBUtil package import struct SWBProtocol.BuildDescriptionID package import struct SWBProtocol.BuildOperationTaskEnded package import struct SWBProtocol.TargetDependencyRelationship +import Synchronization /// An empty delegate implementation. package final class MockTestBuildDescriptionConstructionDelegate: BuildDescriptionConstructionDelegate, Sendable { diff --git a/Sources/SWBTestSupport/TaskPlanningTestSupport.swift b/Sources/SWBTestSupport/TaskPlanningTestSupport.swift index 623dd856..ae67ca1c 100644 --- a/Sources/SWBTestSupport/TaskPlanningTestSupport.swift +++ b/Sources/SWBTestSupport/TaskPlanningTestSupport.swift @@ -18,6 +18,8 @@ import SWBTaskExecution package import SWBUtil import Testing package import SWBMacro +import Foundation +import Synchronization extension PlannedTask { package var dependencyData: DependencyDataStyle? { diff --git a/Sources/SWBUniversalPlatform/CopyPlistFile.swift b/Sources/SWBUniversalPlatform/CopyPlistFile.swift index c0aa9322..506cf6e3 100644 --- a/Sources/SWBUniversalPlatform/CopyPlistFile.swift +++ b/Sources/SWBUniversalPlatform/CopyPlistFile.swift @@ -12,6 +12,7 @@ import SWBMacro import SWBCore +import SWBUtil final class CopyPlistFileSpec: GenericCommandLineToolSpec, SpecIdentifierType, @unchecked Sendable { static let identifier = "com.apple.build-tasks.copy-plist-file" diff --git a/Sources/SWBUniversalPlatform/CopyStringsFile.swift b/Sources/SWBUniversalPlatform/CopyStringsFile.swift index e05bd4a9..21fbbdc2 100644 --- a/Sources/SWBUniversalPlatform/CopyStringsFile.swift +++ b/Sources/SWBUniversalPlatform/CopyStringsFile.swift @@ -13,6 +13,7 @@ import SWBUtil import SWBMacro import SWBCore +import Foundation final class CopyStringsFileSpec: GenericCommandLineToolSpec, SpecIdentifierType, @unchecked Sendable { static let identifier = "com.apple.build-tasks.copy-strings-file" diff --git a/Sources/SWBUniversalPlatform/DiffTool.swift b/Sources/SWBUniversalPlatform/DiffTool.swift index c5c1b90f..18122950 100644 --- a/Sources/SWBUniversalPlatform/DiffTool.swift +++ b/Sources/SWBUniversalPlatform/DiffTool.swift @@ -11,6 +11,8 @@ //===----------------------------------------------------------------------===// import SWBCore +import SWBMacro +import SWBUtil final class DiffToolSpec: CommandLineToolSpec, SpecImplementationType, @unchecked Sendable { static let identifier = "com.apple.build-tools.diff" diff --git a/Sources/SWBUniversalPlatform/LexCompiler.swift b/Sources/SWBUniversalPlatform/LexCompiler.swift index 27190482..2c1cb199 100644 --- a/Sources/SWBUniversalPlatform/LexCompiler.swift +++ b/Sources/SWBUniversalPlatform/LexCompiler.swift @@ -12,6 +12,7 @@ import SWBUtil import SWBCore +import SWBMacro final class LexCompilerSpec : CompilerSpec, SpecIdentifierType, @unchecked Sendable { static let identifier = "com.apple.compilers.lex" diff --git a/Sources/SWBUniversalPlatform/TestEntryPointTaskProducer.swift b/Sources/SWBUniversalPlatform/TestEntryPointTaskProducer.swift index 4d589270..fe4b56ef 100644 --- a/Sources/SWBUniversalPlatform/TestEntryPointTaskProducer.swift +++ b/Sources/SWBUniversalPlatform/TestEntryPointTaskProducer.swift @@ -12,6 +12,7 @@ import SWBCore import SWBTaskConstruction +import SWBMacro class TestEntryPointTaskProducer: PhasedTaskProducer, TaskProducer { func generateTasks() async -> [any PlannedTask] { diff --git a/Sources/SWBUniversalPlatform/YaccCompiler.swift b/Sources/SWBUniversalPlatform/YaccCompiler.swift index e4755ce7..82a0641e 100644 --- a/Sources/SWBUniversalPlatform/YaccCompiler.swift +++ b/Sources/SWBUniversalPlatform/YaccCompiler.swift @@ -12,6 +12,7 @@ import SWBUtil import SWBCore +import SWBMacro final class YaccCompilerSpec : CompilerSpec, SpecIdentifierType, @unchecked Sendable { static let identifier = "com.apple.compilers.yacc" diff --git a/Sources/SWBUtil/DependencyInfo.swift b/Sources/SWBUtil/DependencyInfo.swift index c7e7a149..a39141fe 100644 --- a/Sources/SWBUtil/DependencyInfo.swift +++ b/Sources/SWBUtil/DependencyInfo.swift @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// import SWBLibc +import Foundation public enum DependencyInfoEncodingError: Error { case emptyString diff --git a/Sources/SWBUtil/DiagnosticsEngine.swift b/Sources/SWBUtil/DiagnosticsEngine.swift index 254b0424..db52c9cc 100644 --- a/Sources/SWBUtil/DiagnosticsEngine.swift +++ b/Sources/SWBUtil/DiagnosticsEngine.swift @@ -10,6 +10,8 @@ // //===----------------------------------------------------------------------===// +import Synchronization + /// The component of a diagnostic. public enum Component: Serializable, Equatable, Hashable, Sendable, Codable { case `default` diff --git a/Sources/SWBUtil/FSProxy.swift b/Sources/SWBUtil/FSProxy.swift index b446d219..40cfdb78 100644 --- a/Sources/SWBUtil/FSProxy.swift +++ b/Sources/SWBUtil/FSProxy.swift @@ -295,6 +295,10 @@ public extension FSProxy { var exists: Bool = false return isSymlink(path, &exists) } + + func getFileSize(_ path: Path) throws -> Int64 { + try Int64(getFileInfo(path).statBuf.st_size) + } } fileprivate extension FSProxy { diff --git a/Sources/SWBUtil/HeavyCache.swift b/Sources/SWBUtil/HeavyCache.swift index 886008c5..190457e2 100644 --- a/Sources/SWBUtil/HeavyCache.swift +++ b/Sources/SWBUtil/HeavyCache.swift @@ -10,6 +10,10 @@ // //===----------------------------------------------------------------------===// +#if canImport(os) +import os +#endif + /// Base protocol used for global operations over generic type. private protocol _HeavyCacheBase: AnyObject { /// Clear the cache. diff --git a/Sources/SWBUtil/Int.swift b/Sources/SWBUtil/Int.swift index 83dfeae2..d8196006 100644 --- a/Sources/SWBUtil/Int.swift +++ b/Sources/SWBUtil/Int.swift @@ -10,6 +10,8 @@ // //===----------------------------------------------------------------------===// +import Foundation + extension Int { // FIXME: Figure out what the best API for this is. Having a more explicit (non-format string based) API is easier to make efficient, but it ends up taking so many arguments just to get the same flexibility. public func toString(format: String = "%d") -> String { diff --git a/Sources/SWBUtil/LazyCache.swift b/Sources/SWBUtil/LazyCache.swift index ce8605f9..292d38b4 100644 --- a/Sources/SWBUtil/LazyCache.swift +++ b/Sources/SWBUtil/LazyCache.swift @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// import SWBLibc +import Synchronization // Workaround compiler crash: rdar://138854389 (Compiler crashes when compiling code using a Mutex with an Optional) #if os(Windows) diff --git a/Sources/SWBUtil/ScopedKeepAliveCache.swift b/Sources/SWBUtil/ScopedKeepAliveCache.swift index 1c5059d9..06a5b344 100644 --- a/Sources/SWBUtil/ScopedKeepAliveCache.swift +++ b/Sources/SWBUtil/ScopedKeepAliveCache.swift @@ -10,6 +10,8 @@ // //===----------------------------------------------------------------------===// +import Synchronization + /// Supports using an evicting base cache but temporarily preventing eviction during `cache.keepAlive { ... }`. /// /// - It doesn't prevent the base cache from evicting, but instead temporarily uses an additional non-evicting store diff --git a/Sources/SWBUtil/Static.swift b/Sources/SWBUtil/Static.swift index 89f8e9a7..28aa6a66 100644 --- a/Sources/SWBUtil/Static.swift +++ b/Sources/SWBUtil/Static.swift @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// import SWBLibc +import Synchronization // This is a workaround for Swift's lack of local-static (rdar://problem/17662275) or in // generics (rdar://problem/22882266). diff --git a/Sources/SwiftBuild/ConsoleCommands/SWBServiceConsoleSessionCommands.swift b/Sources/SwiftBuild/ConsoleCommands/SWBServiceConsoleSessionCommands.swift index 76f064c4..abad7e59 100644 --- a/Sources/SwiftBuild/ConsoleCommands/SWBServiceConsoleSessionCommands.swift +++ b/Sources/SwiftBuild/ConsoleCommands/SWBServiceConsoleSessionCommands.swift @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// import SWBProtocol +import SWBUtil class SWBServiceConsoleCreateSessionCommand: SWBServiceConsoleCommand { static let name = "createSession" diff --git a/Sources/SwiftBuild/SWBBuildServiceConnection.swift b/Sources/SwiftBuild/SWBBuildServiceConnection.swift index 5daa6d9a..60547066 100644 --- a/Sources/SwiftBuild/SWBBuildServiceConnection.swift +++ b/Sources/SwiftBuild/SWBBuildServiceConnection.swift @@ -16,6 +16,12 @@ import SWBUtil public import Foundation +#if canImport(System) +import System +#else +import SystemPackage +#endif + typealias swb_build_service_connection_message_handler_t = @Sendable (UInt64, SWBDispatchData) -> Void /// Represents and manages a connection to an Swift Build service subprocess. Clients do not normally talk directly to the connection; instead, they almost always go through a SWBBuildService object, which provides higher-level operations. The connection doesn’t know about the service-specific semantics, but instead provides general machinery for sending synchronous and asynchronous messages over one or more muxed communication “channels”, and for controlling the subprocess. diff --git a/Sources/SwiftBuild/SWBProvisioningTaskInputs.swift b/Sources/SwiftBuild/SWBProvisioningTaskInputs.swift index 94175b0c..6012ec1a 100644 --- a/Sources/SwiftBuild/SWBProvisioningTaskInputs.swift +++ b/Sources/SwiftBuild/SWBProvisioningTaskInputs.swift @@ -12,6 +12,7 @@ import SWBProtocol import SWBUtil +import Foundation @frozen public enum SWBProvisioningStyle: Sendable { case automatic diff --git a/Tests/SWBAndroidPlatformTests/SWBAndroidPlatformTests.swift b/Tests/SWBAndroidPlatformTests/SWBAndroidPlatformTests.swift index 91d7fc6a..2299add3 100644 --- a/Tests/SWBAndroidPlatformTests/SWBAndroidPlatformTests.swift +++ b/Tests/SWBAndroidPlatformTests/SWBAndroidPlatformTests.swift @@ -15,6 +15,7 @@ import SWBProtocol import SWBTestSupport import SWBTaskExecution import SWBUtil +import SWBCore @Suite fileprivate struct AndroidBuildOperationTests: CoreBasedTests { diff --git a/Tests/SWBApplePlatformTests/AppleCommandLineToolSpecDiscoveredInfoTests.swift b/Tests/SWBApplePlatformTests/AppleCommandLineToolSpecDiscoveredInfoTests.swift index dfa1da2d..97b45760 100644 --- a/Tests/SWBApplePlatformTests/AppleCommandLineToolSpecDiscoveredInfoTests.swift +++ b/Tests/SWBApplePlatformTests/AppleCommandLineToolSpecDiscoveredInfoTests.swift @@ -16,6 +16,7 @@ import Testing import SWBCore import SWBTestSupport import SWBUtil +import SWBProtocol @Suite fileprivate struct AppleCommandLineToolSpecDiscoveredInfoTests: CoreBasedTests { diff --git a/Tests/SWBBuildSystemPerfTests/ModulesVerifierPerfTests.swift b/Tests/SWBBuildSystemPerfTests/ModulesVerifierPerfTests.swift index 48499215..dd248926 100644 --- a/Tests/SWBBuildSystemPerfTests/ModulesVerifierPerfTests.swift +++ b/Tests/SWBBuildSystemPerfTests/ModulesVerifierPerfTests.swift @@ -15,6 +15,7 @@ import Testing import SWBCore import SWBTestSupport import SWBUtil +import SWBProtocol @Suite(.performance) fileprivate struct ModulesVerifierPerfTests: CoreBasedTests, PerfTests { diff --git a/Tests/SWBBuildSystemTests/AppIntentsNLTrainingTests.swift b/Tests/SWBBuildSystemTests/AppIntentsNLTrainingTests.swift index 5a1ea702..da54a2b7 100644 --- a/Tests/SWBBuildSystemTests/AppIntentsNLTrainingTests.swift +++ b/Tests/SWBBuildSystemTests/AppIntentsNLTrainingTests.swift @@ -17,6 +17,7 @@ import SWBCore import SWBTestSupport import SWBTaskExecution import SWBUtil +import SWBProtocol @Suite(.requireXcode16()) fileprivate struct AppIntentsNLTrainingTests: CoreBasedTests { diff --git a/Tests/SWBBuildSystemTests/AppShortcutsStringsValidationTests.swift b/Tests/SWBBuildSystemTests/AppShortcutsStringsValidationTests.swift index 5e94299e..94b0a9a6 100644 --- a/Tests/SWBBuildSystemTests/AppShortcutsStringsValidationTests.swift +++ b/Tests/SWBBuildSystemTests/AppShortcutsStringsValidationTests.swift @@ -17,6 +17,7 @@ import SWBCore import SWBTestSupport import SWBTaskExecution import SWBUtil +import SWBProtocol @Suite(.requireXcode16()) fileprivate struct AppShortcutsStringsValidationTests: CoreBasedTests { diff --git a/Tests/SWBBuildSystemTests/BuildCommandTests.swift b/Tests/SWBBuildSystemTests/BuildCommandTests.swift index 8c50a544..995e8a43 100644 --- a/Tests/SWBBuildSystemTests/BuildCommandTests.swift +++ b/Tests/SWBBuildSystemTests/BuildCommandTests.swift @@ -16,6 +16,7 @@ import SWBTestSupport import SwiftBuildTestSupport import SWBUtil import Testing +import Foundation /// Tests the behavior of various alternative build commands of a build request, including single-file compiles. @Suite diff --git a/Tests/SWBBuildSystemTests/BuildTaskBehaviorTests.swift b/Tests/SWBBuildSystemTests/BuildTaskBehaviorTests.swift index 132e72df..8c9b69f8 100644 --- a/Tests/SWBBuildSystemTests/BuildTaskBehaviorTests.swift +++ b/Tests/SWBBuildSystemTests/BuildTaskBehaviorTests.swift @@ -21,6 +21,7 @@ import SWBLibc import class SWBBuildSystem.BuildOperation import class SWBTaskExecution.Task +import SWBProtocol private final class MockTaskTypeDescription: TaskTypeDescription { init(isUnsafeToInterrupt: Bool = false) { diff --git a/Tests/SWBBuildSystemTests/CodeGenerationToolTests.swift b/Tests/SWBBuildSystemTests/CodeGenerationToolTests.swift index 22c74308..cb46d95a 100644 --- a/Tests/SWBBuildSystemTests/CodeGenerationToolTests.swift +++ b/Tests/SWBBuildSystemTests/CodeGenerationToolTests.swift @@ -17,6 +17,7 @@ import SWBTaskExecution import SWBTestSupport import SWBUtil import Testing +import SWBProtocol @Suite fileprivate struct CodeGenerationToolTests: CoreBasedTests { diff --git a/Tests/SWBBuildSystemTests/DependencyValidationTests.swift b/Tests/SWBBuildSystemTests/DependencyValidationTests.swift index 7780a36a..3eb2afc8 100644 --- a/Tests/SWBBuildSystemTests/DependencyValidationTests.swift +++ b/Tests/SWBBuildSystemTests/DependencyValidationTests.swift @@ -14,6 +14,7 @@ import SWBCore import SWBTestSupport import SWBUtil import Testing +import SWBProtocol @Suite fileprivate struct DependencyValidationTests: CoreBasedTests { diff --git a/Tests/SWBBuildSystemTests/DevelopmentAssetsDiagnosticTests.swift b/Tests/SWBBuildSystemTests/DevelopmentAssetsDiagnosticTests.swift index e4e285ef..5f97c1e4 100644 --- a/Tests/SWBBuildSystemTests/DevelopmentAssetsDiagnosticTests.swift +++ b/Tests/SWBBuildSystemTests/DevelopmentAssetsDiagnosticTests.swift @@ -15,6 +15,8 @@ import Testing import SWBCore import SWBUtil import SWBTestSupport +import SWBTaskExecution +import SWBProtocol @Suite fileprivate struct DevelopmentAssetsDiagnosticTests: CoreBasedTests { diff --git a/Tests/SWBBuildSystemTests/DriverKitBuildOperationTests.swift b/Tests/SWBBuildSystemTests/DriverKitBuildOperationTests.swift index d2b1c646..72c897e8 100644 --- a/Tests/SWBBuildSystemTests/DriverKitBuildOperationTests.swift +++ b/Tests/SWBBuildSystemTests/DriverKitBuildOperationTests.swift @@ -15,6 +15,7 @@ import Testing import SWBCore import SWBUtil import SWBTestSupport +import Foundation @Suite fileprivate struct DriverKitBuildOperationTests: CoreBasedTests { diff --git a/Tests/SWBBuildSystemTests/DsymGenerationBuildOperationTests.swift b/Tests/SWBBuildSystemTests/DsymGenerationBuildOperationTests.swift index b2013ac1..db117150 100644 --- a/Tests/SWBBuildSystemTests/DsymGenerationBuildOperationTests.swift +++ b/Tests/SWBBuildSystemTests/DsymGenerationBuildOperationTests.swift @@ -15,6 +15,8 @@ import Testing import SWBCore import SWBTestSupport import SWBUtil +import SWBMacro +import SWBProtocol @Suite fileprivate struct DsymGenerationBuildOperationTests: CoreBasedTests { diff --git a/Tests/SWBBuildSystemTests/EntitlementsBuildOperationTests.swift b/Tests/SWBBuildSystemTests/EntitlementsBuildOperationTests.swift index 12327b3d..2f77cc1a 100644 --- a/Tests/SWBBuildSystemTests/EntitlementsBuildOperationTests.swift +++ b/Tests/SWBBuildSystemTests/EntitlementsBuildOperationTests.swift @@ -20,6 +20,7 @@ import struct SWBProtocol.TargetDependencyRelationship import SWBTestSupport import SWBTaskExecution import SWBUtil +import SwiftBuildTestSupport @Suite fileprivate struct EntitlementsBuildOperationTests: CoreBasedTests { diff --git a/Tests/SWBBuildSystemTests/ExportLocBuildOperationTests.swift b/Tests/SWBBuildSystemTests/ExportLocBuildOperationTests.swift index 1bad334b..2f9b9e5a 100644 --- a/Tests/SWBBuildSystemTests/ExportLocBuildOperationTests.swift +++ b/Tests/SWBBuildSystemTests/ExportLocBuildOperationTests.swift @@ -16,6 +16,7 @@ import SWBCore import SWBTaskExecution import SWBTestSupport import SWBUtil +import SWBProtocol @Suite fileprivate struct ExportLocBuildOperationTests: CoreBasedTests { diff --git a/Tests/SWBBuildSystemTests/IndexBuildOperationTests.swift b/Tests/SWBBuildSystemTests/IndexBuildOperationTests.swift index 8a6ce13c..70ce2ea7 100644 --- a/Tests/SWBBuildSystemTests/IndexBuildOperationTests.swift +++ b/Tests/SWBBuildSystemTests/IndexBuildOperationTests.swift @@ -22,6 +22,7 @@ import class SWBTaskConstruction.ProductPlan import SWBTestSupport import SWBTaskExecution import SWBUtil +import SWBMacro @Suite fileprivate struct IndexBuildOperationTests: CoreBasedTests { diff --git a/Tests/SWBBuildSystemTests/InfoPlistBuildOperationTests.swift b/Tests/SWBBuildSystemTests/InfoPlistBuildOperationTests.swift index 6a96733b..64720f25 100644 --- a/Tests/SWBBuildSystemTests/InfoPlistBuildOperationTests.swift +++ b/Tests/SWBBuildSystemTests/InfoPlistBuildOperationTests.swift @@ -14,6 +14,8 @@ import SWBCore import SWBTestSupport import SWBUtil import Testing +import SWBProtocol +import SWBTaskExecution @Suite fileprivate struct InfoPlistBuildOperationTests: CoreBasedTests { diff --git a/Tests/SWBBuildSystemTests/InstrumentsPackageBuildOperationTests.swift b/Tests/SWBBuildSystemTests/InstrumentsPackageBuildOperationTests.swift index 936900b5..1dc85f60 100644 --- a/Tests/SWBBuildSystemTests/InstrumentsPackageBuildOperationTests.swift +++ b/Tests/SWBBuildSystemTests/InstrumentsPackageBuildOperationTests.swift @@ -13,7 +13,8 @@ import SWBCore import SWBTestSupport import SWBUtil -import Testing +import SWBProtocol +import SwiftBuildTestSupport import Testing diff --git a/Tests/SWBBuildSystemTests/LinkerTests.swift b/Tests/SWBBuildSystemTests/LinkerTests.swift index 8352a7fc..184f51d2 100644 --- a/Tests/SWBBuildSystemTests/LinkerTests.swift +++ b/Tests/SWBBuildSystemTests/LinkerTests.swift @@ -16,6 +16,8 @@ import Testing import SWBBuildSystem import SWBCore import SWBProtocol +import Foundation +import SWBTaskExecution @Suite fileprivate struct LinkerTests: CoreBasedTests { diff --git a/Tests/SWBBuildSystemTests/MergeableLibrariesBuildOperationTests.swift b/Tests/SWBBuildSystemTests/MergeableLibrariesBuildOperationTests.swift index 1021cc20..ce5ed097 100644 --- a/Tests/SWBBuildSystemTests/MergeableLibrariesBuildOperationTests.swift +++ b/Tests/SWBBuildSystemTests/MergeableLibrariesBuildOperationTests.swift @@ -18,6 +18,11 @@ import SwiftBuildTestSupport import struct SWBProtocol.RunDestinationInfo import SWBCore import class SwiftBuild.SWBBuildService +import SWBTaskExecution + +#if canImport(Darwin) +import MachO +#endif @Suite(.requireXcode16()) fileprivate struct MergeableLibrariesBuildOperationTests: CoreBasedTests { diff --git a/Tests/SWBBuildSystemTests/PreviewsBuildOperationTests.swift b/Tests/SWBBuildSystemTests/PreviewsBuildOperationTests.swift index 225b741d..7df199bf 100644 --- a/Tests/SWBBuildSystemTests/PreviewsBuildOperationTests.swift +++ b/Tests/SWBBuildSystemTests/PreviewsBuildOperationTests.swift @@ -18,6 +18,8 @@ import SWBTestSupport import SWBProtocol import SWBCore @_spi(Testing) import SWBBuildService +import SWBTaskExecution +import SwiftBuildTestSupport @Suite(.requireXcode16()) fileprivate struct PreviewsBuildOperationTests: CoreBasedTests { diff --git a/Tests/SWBBuildSystemTests/RebuildTests.swift b/Tests/SWBBuildSystemTests/RebuildTests.swift index 55521896..1ed9fb98 100644 --- a/Tests/SWBBuildSystemTests/RebuildTests.swift +++ b/Tests/SWBBuildSystemTests/RebuildTests.swift @@ -15,6 +15,7 @@ import Testing import SWBCore import SWBTestSupport import SWBUtil +import SWBProtocol /// Test suite for tests specifically examining rebuilding projects in interesting scenarios. @Suite diff --git a/Tests/SWBBuildSystemTests/SceneKitBuildOperationTests.swift b/Tests/SWBBuildSystemTests/SceneKitBuildOperationTests.swift index 26d09d5a..918f1936 100644 --- a/Tests/SWBBuildSystemTests/SceneKitBuildOperationTests.swift +++ b/Tests/SWBBuildSystemTests/SceneKitBuildOperationTests.swift @@ -14,6 +14,7 @@ import Testing import SWBTestSupport import SWBUtil +import SWBCore @Suite fileprivate struct SceneKitBuildOperationTests: CoreBasedTests { diff --git a/Tests/SWBBuildSystemTests/SpriteKitBuildOperationTests.swift b/Tests/SWBBuildSystemTests/SpriteKitBuildOperationTests.swift index 2000f555..45b6735d 100644 --- a/Tests/SWBBuildSystemTests/SpriteKitBuildOperationTests.swift +++ b/Tests/SWBBuildSystemTests/SpriteKitBuildOperationTests.swift @@ -16,6 +16,8 @@ import SWBTestSupport import SWBUtil import Testing +import SwiftBuildTestSupport +import SWBCore @Suite fileprivate struct SpriteKitBuildOperationTests: CoreBasedTests { diff --git a/Tests/SWBBuildSystemTests/StaleFileRemovalTests.swift b/Tests/SWBBuildSystemTests/StaleFileRemovalTests.swift index 1588691c..e927e72c 100644 --- a/Tests/SWBBuildSystemTests/StaleFileRemovalTests.swift +++ b/Tests/SWBBuildSystemTests/StaleFileRemovalTests.swift @@ -19,6 +19,7 @@ import SWBTestSupport import SWBUtil import SWBTaskExecution +import SWBProtocol @Suite fileprivate struct StaleFileRemovalTests: CoreBasedTests { diff --git a/Tests/SWBBuildSystemTests/SwiftDriverTests.swift b/Tests/SWBBuildSystemTests/SwiftDriverTests.swift index f2454e3a..31beab0a 100644 --- a/Tests/SWBBuildSystemTests/SwiftDriverTests.swift +++ b/Tests/SWBBuildSystemTests/SwiftDriverTests.swift @@ -19,6 +19,7 @@ import SWBTestSupport import SWBLLBuild import SWBCore +import SWBTaskExecution @Suite(.requireLLBuild(apiVersion: 12), .requireXcode16()) fileprivate struct SwiftDriverTests: CoreBasedTests { diff --git a/Tests/SWBBuildSystemTests/UnitTestBuildOperationTests.swift b/Tests/SWBBuildSystemTests/UnitTestBuildOperationTests.swift index 9d8df873..fba9edb1 100644 --- a/Tests/SWBBuildSystemTests/UnitTestBuildOperationTests.swift +++ b/Tests/SWBBuildSystemTests/UnitTestBuildOperationTests.swift @@ -17,6 +17,7 @@ import SWBTestSupport import SWBCore import SWBProtocol import SWBUtil +import SWBTaskExecution @Suite diff --git a/Tests/SWBBuildSystemTests/WatchBuildOperationTests.swift b/Tests/SWBBuildSystemTests/WatchBuildOperationTests.swift index 255ede4a..be5d8045 100644 --- a/Tests/SWBBuildSystemTests/WatchBuildOperationTests.swift +++ b/Tests/SWBBuildSystemTests/WatchBuildOperationTests.swift @@ -13,6 +13,7 @@ import SWBTestSupport import SWBUtil import Testing +import SWBCore @Suite fileprivate struct WatchBuildOperationTests: CoreBasedTests { diff --git a/Tests/SWBBuildSystemTests/XCFrameworkBuildOperationTests.swift b/Tests/SWBBuildSystemTests/XCFrameworkBuildOperationTests.swift index d558dccf..2d0bcaac 100644 --- a/Tests/SWBBuildSystemTests/XCFrameworkBuildOperationTests.swift +++ b/Tests/SWBBuildSystemTests/XCFrameworkBuildOperationTests.swift @@ -18,6 +18,7 @@ import SWBCore import SWBTestSupport import SWBTaskExecution import SWBUtil +import SWBProtocol @Suite fileprivate struct XCFrameworkBuildOperationTests: CoreBasedTests { diff --git a/Tests/SWBCorePerfTests/SerializationPerfTests.swift b/Tests/SWBCorePerfTests/SerializationPerfTests.swift index d440ad09..53952652 100644 --- a/Tests/SWBCorePerfTests/SerializationPerfTests.swift +++ b/Tests/SWBCorePerfTests/SerializationPerfTests.swift @@ -15,6 +15,7 @@ import SWBUtil import SWBCore import SWBMacro import SWBTestSupport +import Synchronization @Suite(.performance) fileprivate struct SerializationPerfTests: CoreBasedTests, PerfTests { diff --git a/Tests/SWBCorePerfTests/SettingsPerfTests.swift b/Tests/SWBCorePerfTests/SettingsPerfTests.swift index 1cab098d..255abf63 100644 --- a/Tests/SWBCorePerfTests/SettingsPerfTests.swift +++ b/Tests/SWBCorePerfTests/SettingsPerfTests.swift @@ -15,6 +15,7 @@ import SWBUtil import SWBCore import SWBTestSupport +import SWBProtocol @Suite(.performance) fileprivate struct SettingsPerfTests: CoreBasedTests, PerfTests { diff --git a/Tests/SWBCoreTests/BuildParametersTests.swift b/Tests/SWBCoreTests/BuildParametersTests.swift index 71a752ac..139d8a67 100644 --- a/Tests/SWBCoreTests/BuildParametersTests.swift +++ b/Tests/SWBCoreTests/BuildParametersTests.swift @@ -15,6 +15,7 @@ import Testing import SWBUtil import SWBCore import SWBProtocol +import SWBTestSupport @Suite fileprivate struct BuildParametersTests { @Test diff --git a/Tests/SWBCoreTests/CoreTests.swift b/Tests/SWBCoreTests/CoreTests.swift index fd1e13c6..b19b7a33 100644 --- a/Tests/SWBCoreTests/CoreTests.swift +++ b/Tests/SWBCoreTests/CoreTests.swift @@ -18,6 +18,7 @@ import SWBTestSupport import Foundation @_spi(Testing) import SWBCore +import SWBServiceCore @Suite fileprivate struct CoreTests: CoreBasedTests { @Test diff --git a/Tests/SWBCoreTests/FileTextEncodingTests.swift b/Tests/SWBCoreTests/FileTextEncodingTests.swift index a5efbe99..ed37a271 100644 --- a/Tests/SWBCoreTests/FileTextEncodingTests.swift +++ b/Tests/SWBCoreTests/FileTextEncodingTests.swift @@ -13,6 +13,9 @@ import Foundation import Testing import SWBCore +import SWBProtocol +import SWBUtil +import SWBTestSupport @Suite fileprivate struct FileTextEncodingTests { @Test diff --git a/Tests/SWBCoreTests/IncrementalPIFLoadingTests.swift b/Tests/SWBCoreTests/IncrementalPIFLoadingTests.swift index b0e817bb..03a5a101 100644 --- a/Tests/SWBCoreTests/IncrementalPIFLoadingTests.swift +++ b/Tests/SWBCoreTests/IncrementalPIFLoadingTests.swift @@ -16,6 +16,7 @@ import SWBCore import SWBUtil import SWBTestSupport @_spi(Testing) import SWBCore +import SWBProtocol /// Test of the incremental PIF loading mechanisms. @Suite(.serialized) fileprivate struct IncrementalPIFLoadingTests { @@ -340,12 +341,12 @@ import SWBTestSupport #expect(IncrementalPIFLoader.objectsTransferred.value == 3) // Validate that the file references are consistent. - var knownReferences = Set() - func visit(_ ref: Reference) { + var knownReferences = Set() + func visit(_ ref: SWBCore.Reference) { switch ref { - case let asGroup as FileGroup: + case let asGroup as SWBCore.FileGroup: asGroup.children.forEach(visit) - case let asFile as FileReference: + case let asFile as SWBCore.FileReference: knownReferences.insert(asFile) default: fatalError("unexpected reference: \(ref)") @@ -354,12 +355,12 @@ import SWBTestSupport for project in workspace.projects { knownReferences.removeAll() visit(project.groupTree) - for case let target as BuildPhaseTarget in project.targets { - for case let phase as BuildPhaseWithBuildFiles in target.buildPhases { + for case let target as SWBCore.BuildPhaseTarget in project.targets { + for case let phase as SWBCore.BuildPhaseWithBuildFiles in target.buildPhases { for buildFile in phase.buildFiles { switch buildFile.buildableItem { case .reference(let guid): - let ref = try #require(workspace.lookupReference(for: guid) as? FileReference) + let ref = try #require(workspace.lookupReference(for: guid) as? SWBCore.FileReference) #expect(knownReferences.contains(ref), "unexpected target reference: \(ref)") case .targetProduct(_): continue diff --git a/Tests/SWBCoreTests/ModuleVerifierFilenameMapTests.swift b/Tests/SWBCoreTests/ModuleVerifierFilenameMapTests.swift index 81006913..604b8311 100644 --- a/Tests/SWBCoreTests/ModuleVerifierFilenameMapTests.swift +++ b/Tests/SWBCoreTests/ModuleVerifierFilenameMapTests.swift @@ -14,6 +14,7 @@ import Foundation import SWBCore import SWBUtil import Testing +import SWBTestSupport @Suite fileprivate struct ModuleVerifierFilenameMapTests { @Test diff --git a/Tests/SWBCoreTests/PIFLoadingTests.swift b/Tests/SWBCoreTests/PIFLoadingTests.swift index 1f518fbe..f79bf378 100644 --- a/Tests/SWBCoreTests/PIFLoadingTests.swift +++ b/Tests/SWBCoreTests/PIFLoadingTests.swift @@ -15,6 +15,8 @@ import SWBTestSupport import SWBUtil @_spi(Testing) import SWBCore +import SWBMacro +import SWBProtocol // MARK: - Test cases for ProjectModelItem class static methods @@ -253,7 +255,7 @@ private final class ProjectModelItemClass: ProjectModelItem { } // Test the required version. - let requiredValue: [Reference] = try Reference.parseValueForKeyAsArrayOfProjectModelItems("arrayOfItemsKey", pifDict: pifDict, pifLoader: pifLoader, construct: { try Reference(fromDictionary: $0, withPIFLoader: pifLoader) }) + let requiredValue: [SWBCore.Reference] = try Reference.parseValueForKeyAsArrayOfProjectModelItems("arrayOfItemsKey", pifDict: pifDict, pifLoader: pifLoader, construct: { try Reference(fromDictionary: $0, withPIFLoader: pifLoader) }) #expect(requiredValue.count == 3) #expect(requiredValue[0].guid == "xib-fileReference-guid") #expect(requiredValue[1].guid == "fr-strings-fileReference-guid") @@ -293,13 +295,13 @@ private final class ProjectModelItemClass: ProjectModelItem { } // Test the optional version. - let presentValue: [Reference]? = try ProjectModelItemClass.parseOptionalValueForKeyAsArrayOfProjectModelItems("arrayOfItemsKey", pifDict: pifDict, pifLoader: pifLoader, construct: { try Reference(fromDictionary: $0, withPIFLoader: pifLoader) }) + let presentValue: [SWBCore.Reference]? = try ProjectModelItemClass.parseOptionalValueForKeyAsArrayOfProjectModelItems("arrayOfItemsKey", pifDict: pifDict, pifLoader: pifLoader, construct: { try Reference(fromDictionary: $0, withPIFLoader: pifLoader) }) #expect(presentValue?.count == 3) #expect(presentValue?[0].guid == "xib-fileReference-guid") #expect(presentValue?[1].guid == "fr-strings-fileReference-guid") #expect(presentValue?[2].guid == "some-fileGroup-guid") - let absentValue: [Reference]? = try ProjectModelItemClass.parseOptionalValueForKeyAsArrayOfProjectModelItems("missingKey", pifDict: pifDict, pifLoader: pifLoader, construct: { try Reference(fromDictionary: $0, withPIFLoader: pifLoader) }) + let absentValue: [SWBCore.Reference]? = try ProjectModelItemClass.parseOptionalValueForKeyAsArrayOfProjectModelItems("missingKey", pifDict: pifDict, pifLoader: pifLoader, construct: { try Reference(fromDictionary: $0, withPIFLoader: pifLoader) }) #expect(absentValue == nil) // Test failure cases. @@ -450,10 +452,10 @@ private final class ProjectModelItemClass: ProjectModelItem { } // Test the optional version. - let presentValue: FileGroup? = try FileGroup.parseOptionalValueForKeyAsProjectModelItem("fileGroupKey", pifDict: pifDict, pifLoader: pifLoader, construct: { try FileGroup(fromDictionary: $0, withPIFLoader: pifLoader, isRoot: false) }) + let presentValue: SWBCore.FileGroup? = try FileGroup.parseOptionalValueForKeyAsProjectModelItem("fileGroupKey", pifDict: pifDict, pifLoader: pifLoader, construct: { try FileGroup(fromDictionary: $0, withPIFLoader: pifLoader, isRoot: false) }) #expect(presentValue != nil) - let absentValue: FileGroup? = try FileGroup.parseOptionalValueForKeyAsProjectModelItem("missingKey", pifDict: pifDict, pifLoader: pifLoader, construct: { try FileGroup(fromDictionary: $0, withPIFLoader: pifLoader, isRoot: false) }) + let absentValue: SWBCore.FileGroup? = try FileGroup.parseOptionalValueForKeyAsProjectModelItem("missingKey", pifDict: pifDict, pifLoader: pifLoader, construct: { try FileGroup(fromDictionary: $0, withPIFLoader: pifLoader, isRoot: false) }) #expect(absentValue == nil) // Test failure cases. @@ -630,7 +632,7 @@ private final class ProjectModelItemClass: ProjectModelItem { Issue.record("property list is not a dictionary") return } - let fileRef = try #require(GroupTreeReference.parsePIFDictAsReference(fileRefPIF, pifLoader: pifLoader, isRoot: true) as? FileReference) + let fileRef = try #require(GroupTreeReference.parsePIFDictAsReference(fileRefPIF, pifLoader: pifLoader, isRoot: true) as? SWBCore.FileReference) // Examine the file reference. #expect(fileRef.guid == "some-fileReference-guid") @@ -673,7 +675,7 @@ private final class ProjectModelItemClass: ProjectModelItem { Issue.record("property list is not a dictionary") return } - let fileGroup = try #require(GroupTreeReference.parsePIFDictAsReference(fileGroupPIF, pifLoader: pifLoader, isRoot: true) as? FileGroup) + let fileGroup = try #require(GroupTreeReference.parsePIFDictAsReference(fileGroupPIF, pifLoader: pifLoader, isRoot: true) as? SWBCore.FileGroup) // Examine the file group. #expect(fileGroup.guid == "some-fileGroup-guid") @@ -683,14 +685,14 @@ private final class ProjectModelItemClass: ProjectModelItem { #expect(fileGroup.children.count == 2) // Examine its children - if let fileRef = try? #require(fileGroup.children.first as? FileReference) { + if let fileRef = try? #require(fileGroup.children.first as? SWBCore.FileReference) { #expect(fileRef.guid == "first-fileReference-guid") #expect(fileRef.sourceTree == SourceTree.groupRelative) #expect(fileRef.path.stringRep == "ClassOne.m") #expect(fileRef.fileTypeIdentifier == "sourcecode.c.objc") #expect(fileRef.regionVariantName == nil) } - if let fileRef = try? #require(fileGroup.children[1] as? FileReference) { + if let fileRef = try? #require(fileGroup.children[1] as? SWBCore.FileReference) { #expect(fileRef.guid == "second-fileReference-guid") #expect(fileRef.sourceTree == SourceTree.groupRelative) #expect(fileRef.path.stringRep == "ClassOne.h") @@ -731,7 +733,7 @@ private final class ProjectModelItemClass: ProjectModelItem { Issue.record("property list is not a dictionary") return } - let versionGroup = try #require(try GroupTreeReference.parsePIFDictAsReference(versionGroupPIF, pifLoader: pifLoader, isRoot: true) as? VersionGroup) + let versionGroup = try #require(try GroupTreeReference.parsePIFDictAsReference(versionGroupPIF, pifLoader: pifLoader, isRoot: true) as? SWBCore.VersionGroup) // Examine the file group. #expect(versionGroup.guid == "some-versionGroup-guid") @@ -740,14 +742,14 @@ private final class ProjectModelItemClass: ProjectModelItem { #expect(versionGroup.children.count == 2) // Examine its children - if let fileRef = try? #require(versionGroup.children[0] as? FileReference) { + if let fileRef = try? #require(versionGroup.children[0] as? SWBCore.FileReference) { #expect(fileRef.guid == "first-versionedFile-guid") #expect(fileRef.sourceTree == SourceTree.groupRelative) #expect(fileRef.path.stringRep == "CoreData-1.xcdatamodel") #expect(fileRef.fileTypeIdentifier == "wrapper.xcdatamodel") #expect(fileRef.regionVariantName == nil) } - if let fileRef = try? #require(versionGroup.children[1] as? FileReference) { + if let fileRef = try? #require(versionGroup.children[1] as? SWBCore.FileReference) { #expect(fileRef.guid == "second-versionedFile-guid") #expect(fileRef.sourceTree == SourceTree.groupRelative) #expect(fileRef.path.stringRep == "CoreData-2.xcdatamodel") @@ -769,7 +771,7 @@ private final class ProjectModelItemClass: ProjectModelItem { // Convert the test data into a property list, then read the file group from it. let versionGroupPlist = PropertyListItem(testVersionGroupData) let versionGroupPIF = try #require(versionGroupPlist.dictValue, "property list is not a dictionary") - let versionGroup = try #require(GroupTreeReference.parsePIFDictAsReference(versionGroupPIF, pifLoader: pifLoader, isRoot: true) as? VersionGroup) + let versionGroup = try #require(GroupTreeReference.parsePIFDictAsReference(versionGroupPIF, pifLoader: pifLoader, isRoot: true) as? SWBCore.VersionGroup) // Examine the file group. #expect(versionGroup.guid == "some-versionGroup-guid") @@ -814,28 +816,28 @@ private final class ProjectModelItemClass: ProjectModelItem { ] // Convert the test data into a property list, then read the variant group from it. - let variantGroup = try #require(GroupTreeReference.parsePIFDictAsReference( variantGroupPIF, pifLoader: pifLoader, isRoot: true) as? VariantGroup) + let variantGroup = try #require(GroupTreeReference.parsePIFDictAsReference( variantGroupPIF, pifLoader: pifLoader, isRoot: true) as? SWBCore.VariantGroup) // Examine the variant group. #expect(variantGroup.guid == "some-variantGroup-guid") #expect(variantGroup.name == "Thingy.xib") // Examine its children, the xib and its localized strings files - if let fileRef = try? #require(variantGroup.children[0] as? FileReference) { + if let fileRef = try? #require(variantGroup.children[0] as? SWBCore.FileReference) { #expect(fileRef.guid == "xib-fileReference-guid") #expect(fileRef.sourceTree == SourceTree.groupRelative) #expect(fileRef.path.stringRep == "Thingy.xib") #expect(fileRef.fileTypeIdentifier == "file.xib") #expect(fileRef.regionVariantName == nil) } - if let fileRef = try? #require(variantGroup.children[1] as? FileReference) { + if let fileRef = try? #require(variantGroup.children[1] as? SWBCore.FileReference) { #expect(fileRef.guid == "fr-strings-fileReference-guid") #expect(fileRef.sourceTree == SourceTree.groupRelative) #expect(fileRef.path.stringRep == "Thingy.strings") #expect(fileRef.fileTypeIdentifier == "text.plist.strings") #expect(fileRef.regionVariantName == "fr") } - if let fileRef = try? #require(variantGroup.children[2] as? FileReference) { + if let fileRef = try? #require(variantGroup.children[2] as? SWBCore.FileReference) { #expect(fileRef.guid == "de-strings-fileReference-guid") #expect(fileRef.sourceTree == SourceTree.groupRelative) #expect(fileRef.path.stringRep == "Thingy.strings") @@ -941,7 +943,7 @@ private final class ProjectModelItemClass: ProjectModelItem { ] // Convert the test data into a property list, then read the build phase from it. - if let buildPhase = try? #require(BuildPhase.parsePIFDictAsBuildPhase(buildPhasePIF, pifLoader: pifLoader) as? SourcesBuildPhase) { + if let buildPhase = try? #require(BuildPhase.parsePIFDictAsBuildPhase(buildPhasePIF, pifLoader: pifLoader) as? SWBCore.SourcesBuildPhase) { // Examine the build phase. #expect(buildPhase.buildFiles.count == 1) } @@ -962,7 +964,7 @@ private final class ProjectModelItemClass: ProjectModelItem { ] // Convert the test data into a property list, then read the build phase from it. - if let buildPhase = try? #require(BuildPhase.parsePIFDictAsBuildPhase(buildPhasePIF, pifLoader: pifLoader) as? HeadersBuildPhase) { + if let buildPhase = try? #require(BuildPhase.parsePIFDictAsBuildPhase(buildPhasePIF, pifLoader: pifLoader) as? SWBCore.HeadersBuildPhase) { // Examine the build phase. #expect(buildPhase.buildFiles.count == 1) } @@ -983,7 +985,7 @@ private final class ProjectModelItemClass: ProjectModelItem { ] // Convert the test data into a property list, then read the build phase from it. - if let buildPhase = try? #require(BuildPhase.parsePIFDictAsBuildPhase(buildPhasePIF, pifLoader: pifLoader) as? ResourcesBuildPhase) { + if let buildPhase = try? #require(BuildPhase.parsePIFDictAsBuildPhase(buildPhasePIF, pifLoader: pifLoader) as? SWBCore.ResourcesBuildPhase) { // Examine the build phase. #expect(buildPhase.buildFiles.count == 1) } @@ -1007,7 +1009,7 @@ private final class ProjectModelItemClass: ProjectModelItem { ] // Convert the test data into a property list, then read the build phase from it. - if let buildPhase = try? #require(BuildPhase.parsePIFDictAsBuildPhase(buildPhasePIF, pifLoader: pifLoader) as? CopyFilesBuildPhase) { + if let buildPhase = try? #require(BuildPhase.parsePIFDictAsBuildPhase(buildPhasePIF, pifLoader: pifLoader) as? SWBCore.CopyFilesBuildPhase) { // Examine the build phase. #expect(buildPhase.destinationSubfolder.stringRep == "Resources") #expect(buildPhase.destinationSubpath.stringRep == "Subpath") @@ -1036,7 +1038,7 @@ private final class ProjectModelItemClass: ProjectModelItem { ] // Convert the test data into a property list, then read the build phase from it. - if let buildPhase = try? #require(BuildPhase.parsePIFDictAsBuildPhase(buildPhasePIF, pifLoader: pifLoader) as? ShellScriptBuildPhase) { + if let buildPhase = try? #require(BuildPhase.parsePIFDictAsBuildPhase(buildPhasePIF, pifLoader: pifLoader) as? SWBCore.ShellScriptBuildPhase) { // Examine the build phase. #expect(buildPhase.guid == "some-shellScriptBuildPhase-guid") #expect(buildPhase.name == "A Shell Script Phase") @@ -1129,7 +1131,7 @@ private final class ProjectModelItemClass: ProjectModelItem { @Test func loadingStandardTarget() throws { // These file ref classes are only used for their GUIDs in this test, but the other data may be useful if the model changes in the future. - let classOneFileRef: FileReference = try { + let classOneFileRef: SWBCore.FileReference = try { let fileRefPIF: [String: PropertyListItem] = [ "guid": "framework-source-fileReference-guid", "type": "file", @@ -1141,7 +1143,7 @@ private final class ProjectModelItemClass: ProjectModelItem { // Convert the test data into a property list, then read the file reference from it. return try FileReference(fromDictionary: fileRefPIF, withPIFLoader: pifLoader, isRoot: true) }() - let classTwoFileRef: FileReference = try { + let classTwoFileRef: SWBCore.FileReference = try { let fileRefPIF: [String: PropertyListItem] = [ "guid": "app-source-fileReference-guid", "type": "file", @@ -1153,7 +1155,7 @@ private final class ProjectModelItemClass: ProjectModelItem { // Convert the test data into a property list, then read the file reference from it. return try FileReference(fromDictionary: fileRefPIF, withPIFLoader: pifLoader, isRoot: true) }() - let cocoaFwkFileRef: FileReference = try { + let cocoaFwkFileRef: SWBCore.FileReference = try { let fileRefPIF: [String: PropertyListItem] = [ "guid": "cocoa-framework-fileReference-guid", "type": "file", @@ -1167,7 +1169,7 @@ private final class ProjectModelItemClass: ProjectModelItem { }() // Load a framework target. - let frameworkTarget: StandardTarget = try { + let frameworkTarget: SWBCore.StandardTarget = try { let testBuildConfigurationData: [String: PropertyListItem] = [ "guid": "framework-buildConfiguration-guid", "name": "Debug", @@ -1244,7 +1246,7 @@ private final class ProjectModelItemClass: ProjectModelItem { } // Load an app target which depends on the framework target. - let appTarget: StandardTarget = try { + let appTarget: SWBCore.StandardTarget = try { let testBuildConfigurationData: [String: PropertyListItem] = [ "guid": "app-buildConfiguration-guid", "name": "Debug", @@ -1343,13 +1345,13 @@ private final class ProjectModelItemClass: ProjectModelItem { try #require(appTarget.buildPhases.count == 2) try #require(frameworkTarget.buildPhases.count == 2) - let appSourcesBuildPhase = try #require(appTarget.buildPhases[0] as? SourcesBuildPhase) - let appFrameworksBuildPhase = try #require(appTarget.buildPhases[1] as? FrameworksBuildPhase) - let frameworkSourcesBuildPhase = try #require(frameworkTarget.buildPhases[0] as? SourcesBuildPhase) - let frameworkFrameworksBuildPhase = try #require(frameworkTarget.buildPhases[1] as? FrameworksBuildPhase) + let appSourcesBuildPhase = try #require(appTarget.buildPhases[0] as? SWBCore.SourcesBuildPhase) + let appFrameworksBuildPhase = try #require(appTarget.buildPhases[1] as? SWBCore.FrameworksBuildPhase) + let frameworkSourcesBuildPhase = try #require(frameworkTarget.buildPhases[0] as? SWBCore.SourcesBuildPhase) + let frameworkFrameworksBuildPhase = try #require(frameworkTarget.buildPhases[1] as? SWBCore.FrameworksBuildPhase) // Because of the way reference resolution of a BuildFile.BuildableItem works, we don't have a context to resolve the build file's references to real references, so all we can do is check that the GUID is what we expect. - func checkBuildFileRef(of buildPhase: BuildPhaseWithBuildFiles, fileRef: FileReference) throws { + func checkBuildFileRef(of buildPhase: SWBCore.BuildPhaseWithBuildFiles, fileRef: SWBCore.FileReference) throws { guard let buildFileRef = try? #require(buildPhase.buildFiles.first) else { return } @@ -1374,7 +1376,7 @@ private final class ProjectModelItemClass: ProjectModelItem { @Test func loadingAggregateTarget() throws { - let target: AggregateTarget = try { + let target: SWBCore.AggregateTarget = try { let testBuildConfigurationData: [String: PropertyListItem] = [ "guid": "aggregate-target-guid", "name": "Debug", @@ -1405,7 +1407,7 @@ private final class ProjectModelItemClass: ProjectModelItem { @Test func loadingExternalTarget() throws { - let target: ExternalTarget = try { + let target: SWBCore.ExternalTarget = try { let testBuildConfigurationData: [String: PropertyListItem] = [ "guid": "external-buildConfiguration-guid", "name": "Debug", @@ -1564,33 +1566,33 @@ private final class ProjectModelItemClass: ProjectModelItem { XCTAssertMatch(rootGroup.guid, .prefix("G")) #expect(rootGroup.parent == nil) #expect(rootGroup.children.count == 5) - let sourceFileRef1 = try #require(rootGroup.children[0] as? FileReference) + let sourceFileRef1 = try #require(rootGroup.children[0] as? SWBCore.FileReference) XCTAssertMatch(sourceFileRef1.guid, .prefix("FR")) #expect(sourceFileRef1.parent === rootGroup) - let headerFileRef1 = try #require(rootGroup.children[1] as? FileReference) + let headerFileRef1 = try #require(rootGroup.children[1] as? SWBCore.FileReference) XCTAssertMatch(headerFileRef1.guid, .prefix("FR")) #expect(headerFileRef1.parent === rootGroup) - let sourceFileRef2 = try #require(rootGroup.children[2] as? FileReference) + let sourceFileRef2 = try #require(rootGroup.children[2] as? SWBCore.FileReference) XCTAssertMatch(sourceFileRef2.guid, .prefix("FR")) #expect(sourceFileRef2.parent === rootGroup) - let headerFileRef2 = try #require(rootGroup.children[3] as? FileReference) + let headerFileRef2 = try #require(rootGroup.children[3] as? SWBCore.FileReference) XCTAssertMatch(headerFileRef2.guid, .prefix("FR")) #expect(headerFileRef2.parent === rootGroup) - let xibVariantGroup = try #require(rootGroup.children[4] as? VariantGroup) + let xibVariantGroup = try #require(rootGroup.children[4] as? SWBCore.VariantGroup) XCTAssertMatch(xibVariantGroup.guid, .prefix("VG")) #expect(xibVariantGroup.parent === rootGroup) #expect(xibVariantGroup.children.count == 3) - let xibFile = try #require(xibVariantGroup.children[0] as? FileReference) + let xibFile = try #require(xibVariantGroup.children[0] as? SWBCore.FileReference) XCTAssertMatch(xibFile.guid, .prefix("FR")) #expect(xibFile.parent === xibVariantGroup) - let stringsFile = try #require(xibVariantGroup.children[1] as? FileReference) + let stringsFile = try #require(xibVariantGroup.children[1] as? SWBCore.FileReference) XCTAssertMatch(stringsFile.guid, .prefix("FR")) #expect(stringsFile.parent === xibVariantGroup) // Check the targets. - let aggregateTarget = try #require(project.targets[0] as? AggregateTarget) - let appTarget = try #require(project.targets[2] as? StandardTarget) - let externalTarget = try #require(project.targets[3] as? ExternalTarget) + let aggregateTarget = try #require(project.targets[0] as? SWBCore.AggregateTarget) + let appTarget = try #require(project.targets[2] as? SWBCore.StandardTarget) + let externalTarget = try #require(project.targets[3] as? SWBCore.ExternalTarget) XCTAssertMatch(aggregateTarget.guid, .prefix("AT")) #expect(aggregateTarget.name == "AggregateTarget") @@ -1598,7 +1600,7 @@ private final class ProjectModelItemClass: ProjectModelItem { #expect(aggregateTarget.buildConfigurations.count == 2) #expect(aggregateTarget.dependencies.map { $0.guid } == [appTarget.guid, externalTarget.guid]) - let fwkTarget = try #require(project.targets[1] as? StandardTarget) + let fwkTarget = try #require(project.targets[1] as? SWBCore.StandardTarget) XCTAssertMatch(fwkTarget.guid, .prefix("T")) #expect(fwkTarget.name == "FwkTarget") #expect(fwkTarget.buildPhases.count == 3) @@ -1623,39 +1625,39 @@ private final class ProjectModelItemClass: ProjectModelItem { #expect(externalTarget.workingDirectory.stringRep == "$(PROJECT_DIR)") #expect(externalTarget.passBuildSettingsInEnvironment) - #expect([Target](workspace.allTargets) == [aggregateTarget, fwkTarget, appTarget, externalTarget]) + #expect([SWBCore.Target](workspace.allTargets) == [aggregateTarget, fwkTarget, appTarget, externalTarget]) // Check the build phases of the framework target. - let headersBuildPhase = try #require(fwkTarget.buildPhases[0] as? HeadersBuildPhase) + let headersBuildPhase = try #require(fwkTarget.buildPhases[0] as? SWBCore.HeadersBuildPhase) let headerBuildFile = headersBuildPhase.buildFiles[0] XCTAssertMatch(headerBuildFile.guid, .prefix("BF")) #expect(headerBuildFile.buildableItem == .reference(guid: headerFileRef1.guid)) - let fwkSourcesBuildPhase = try #require(fwkTarget.buildPhases[1] as? SourcesBuildPhase) + let fwkSourcesBuildPhase = try #require(fwkTarget.buildPhases[1] as? SWBCore.SourcesBuildPhase) let fwkSourceBuildFile = fwkSourcesBuildPhase.buildFiles[0] XCTAssertMatch(fwkSourceBuildFile.guid, .prefix("BF")) #expect(fwkSourceBuildFile.buildableItem == .reference(guid: sourceFileRef1.guid)) - let fwkFrameworksBuildPhase = try #require(fwkTarget.buildPhases[2] as? FrameworksBuildPhase) + let fwkFrameworksBuildPhase = try #require(fwkTarget.buildPhases[2] as? SWBCore.FrameworksBuildPhase) #expect(fwkFrameworksBuildPhase.buildFiles.count == 0) // Check the build phases of the app target. - let appSourcesBuildPhase = try #require(appTarget.buildPhases[0] as? SourcesBuildPhase) + let appSourcesBuildPhase = try #require(appTarget.buildPhases[0] as? SWBCore.SourcesBuildPhase) let appSourceBuildFile = appSourcesBuildPhase.buildFiles[0] XCTAssertMatch(appSourceBuildFile.guid, .prefix("BF")) #expect(appSourceBuildFile.buildableItem == .reference(guid: sourceFileRef2.guid)) - let appFrameworksBuildPhase = try #require(appTarget.buildPhases[1] as? FrameworksBuildPhase) + let appFrameworksBuildPhase = try #require(appTarget.buildPhases[1] as? SWBCore.FrameworksBuildPhase) let appFrameworkBuildFile = appFrameworksBuildPhase.buildFiles[0] XCTAssertMatch(appFrameworkBuildFile.guid, .prefix("BF")) #expect(appFrameworkBuildFile.buildableItem == .targetProduct(guid: fwkProductReference.target!.guid)) - let resourcesBuildPhase = try #require(appTarget.buildPhases[2] as? ResourcesBuildPhase) + let resourcesBuildPhase = try #require(appTarget.buildPhases[2] as? SWBCore.ResourcesBuildPhase) let resourceBuildFile = resourcesBuildPhase.buildFiles[0] XCTAssertMatch(resourceBuildFile.guid, .prefix("BF")) #expect(resourceBuildFile.buildableItem == .reference(guid: xibVariantGroup.guid)) - let copyFilesBuildPhase = try #require(appTarget.buildPhases[3] as? CopyFilesBuildPhase) + let copyFilesBuildPhase = try #require(appTarget.buildPhases[3] as? SWBCore.CopyFilesBuildPhase) let copyFilesBuildFile = copyFilesBuildPhase.buildFiles[0] #expect(copyFilesBuildPhase.destinationSubfolder.stringRep == "$(FRAMEWORKS_FOLDER_PATH)") #expect(copyFilesBuildPhase.destinationSubpath.stringRep == "") diff --git a/Tests/SWBCoreTests/ProductTypesTests.swift b/Tests/SWBCoreTests/ProductTypesTests.swift index 96f79320..3baeb0ef 100644 --- a/Tests/SWBCoreTests/ProductTypesTests.swift +++ b/Tests/SWBCoreTests/ProductTypesTests.swift @@ -10,6 +10,7 @@ import Testing @_spi(Testing) import SWBCore import SWBTestSupport import SWBUtil +import SWBProtocol @Suite fileprivate struct ProductTypesTests: CoreBasedTests { diff --git a/Tests/SWBCoreTests/ProvisioningTests.swift b/Tests/SWBCoreTests/ProvisioningTests.swift index dac7ac4d..38edbadf 100644 --- a/Tests/SWBCoreTests/ProvisioningTests.swift +++ b/Tests/SWBCoreTests/ProvisioningTests.swift @@ -16,8 +16,9 @@ import Testing import SWBTestSupport import SWBUtil import SWBMacro +import SWBProtocol -private func createMockProject() throws -> Project { +private func createMockProject() throws -> SWBCore.Project { let projectPIF: [String: PropertyListItem] = [ "guid": "some-project-guid", "path": "/tmp/SomeProject/aProject.xcodeproj", @@ -190,7 +191,7 @@ private func setupMacroEvaluationScope(_ settings: [MacroDeclaration:String] = [ let workspaceContext = WorkspaceContext(core: core, workspace: testWorkspace, processExecutionCache: .sharedForTesting) let buildRequestContext = BuildRequestContext(workspaceContext: workspaceContext) - guard let target = testWorkspace.projects.first?.targets.first as? StandardTarget else { + guard let target = testWorkspace.projects.first?.targets.first as? SWBCore.StandardTarget else { Issue.record("unable to find target in test workspace") return } diff --git a/Tests/SWBCoreTests/ShellScriptEnvironmentTests.swift b/Tests/SWBCoreTests/ShellScriptEnvironmentTests.swift index 1eef0863..16100daf 100644 --- a/Tests/SWBCoreTests/ShellScriptEnvironmentTests.swift +++ b/Tests/SWBCoreTests/ShellScriptEnvironmentTests.swift @@ -15,6 +15,7 @@ import Testing import SWBUtil import SWBCore import SWBTestSupport +import SWBProtocol @Suite fileprivate struct ShellScriptEnvironmentTests: CoreBasedTests { @Test(.requireHostOS(.macOS)) diff --git a/Tests/SWBCoreTests/SwiftCompilerTests.swift b/Tests/SWBCoreTests/SwiftCompilerTests.swift index cd9ac612..0fb08d09 100644 --- a/Tests/SWBCoreTests/SwiftCompilerTests.swift +++ b/Tests/SWBCoreTests/SwiftCompilerTests.swift @@ -19,6 +19,7 @@ import SWBProtocol import SWBTestSupport import SWBMacro @_spi(Testing) import SWBCore +import Synchronization fileprivate final class TestSwiftParserDelegate: TaskOutputParserDelegate, Sendable { let buildOperationIdentifier: BuildSystemOperationIdentifier diff --git a/Tests/SWBCoreTests/TargetDependencyResolverTests.swift b/Tests/SWBCoreTests/TargetDependencyResolverTests.swift index ebce0b99..69a6a6ae 100644 --- a/Tests/SWBCoreTests/TargetDependencyResolverTests.swift +++ b/Tests/SWBCoreTests/TargetDependencyResolverTests.swift @@ -16,6 +16,7 @@ import SWBProtocol import SWBTestSupport @_spi(Testing) import SWBUtil import Foundation +import SWBMacro fileprivate enum TargetPlatformSpecializationMode { /// The v1 support of target platform specialization that uses SDKROOT=auto and SDK_VARIANT=auto to opt-in. diff --git a/Tests/SWBCoreTests/ToolchainRegistryTests.swift b/Tests/SWBCoreTests/ToolchainRegistryTests.swift index 2c8eb774..e8f8753d 100644 --- a/Tests/SWBCoreTests/ToolchainRegistryTests.swift +++ b/Tests/SWBCoreTests/ToolchainRegistryTests.swift @@ -16,6 +16,7 @@ import SWBTestSupport import SWBUtil @_spi(Testing) import SWBCore +import SWBServiceCore @Suite fileprivate struct ToolchainRegistryTests: CoreBasedTests { let fs: any FSProxy = localFS diff --git a/Tests/SWBCoreTests/WorkspaceHeaderIndexTests.swift b/Tests/SWBCoreTests/WorkspaceHeaderIndexTests.swift index 7dd23268..16176dfb 100644 --- a/Tests/SWBCoreTests/WorkspaceHeaderIndexTests.swift +++ b/Tests/SWBCoreTests/WorkspaceHeaderIndexTests.swift @@ -14,6 +14,7 @@ import Foundation import Testing import SWBTestSupport @_spi(Testing) import SWBCore +import SWBMacro @Suite fileprivate struct WorkspaceHeaderIndexTests: CoreBasedTests { @Test diff --git a/Tests/SWBCoreTests/XCFrameworkTests.swift b/Tests/SWBCoreTests/XCFrameworkTests.swift index 91b0bc2d..d90f4414 100644 --- a/Tests/SWBCoreTests/XCFrameworkTests.swift +++ b/Tests/SWBCoreTests/XCFrameworkTests.swift @@ -14,6 +14,7 @@ import Foundation import Testing import SWBTestSupport import SWBUtil +import SWBMacro @_spi(Testing) import SWBCore diff --git a/Tests/SWBQNXPlatformTests/SWBQNXPlatformTests.swift b/Tests/SWBQNXPlatformTests/SWBQNXPlatformTests.swift index 2109448e..3d9b9b92 100644 --- a/Tests/SWBQNXPlatformTests/SWBQNXPlatformTests.swift +++ b/Tests/SWBQNXPlatformTests/SWBQNXPlatformTests.swift @@ -15,6 +15,7 @@ import SWBProtocol import SWBTestSupport import SWBTaskExecution import SWBUtil +import SWBCore @Suite fileprivate struct QNXBuildOperationTests: CoreBasedTests { diff --git a/Tests/SWBTaskConstructionTests/AppClipTaskConstructionTests.swift b/Tests/SWBTaskConstructionTests/AppClipTaskConstructionTests.swift index 0c565321..6aed1c34 100644 --- a/Tests/SWBTaskConstructionTests/AppClipTaskConstructionTests.swift +++ b/Tests/SWBTaskConstructionTests/AppClipTaskConstructionTests.swift @@ -15,6 +15,7 @@ import SWBTestSupport import SWBCore import SWBUtil +import SWBProtocol @Suite fileprivate struct AppClipTaskConstructionTests: CoreBasedTests { diff --git a/Tests/SWBTaskConstructionTests/AppExtensionTaskConstructionTests.swift b/Tests/SWBTaskConstructionTests/AppExtensionTaskConstructionTests.swift index 414315b4..5832096a 100644 --- a/Tests/SWBTaskConstructionTests/AppExtensionTaskConstructionTests.swift +++ b/Tests/SWBTaskConstructionTests/AppExtensionTaskConstructionTests.swift @@ -15,6 +15,7 @@ import SWBTestSupport import SWBCore import SWBUtil +import SWBProtocol @Suite fileprivate struct AppExtensionTaskConstructionTests: CoreBasedTests { diff --git a/Tests/SWBTaskConstructionTests/AppIntentsMetadataTaskConstructionTests.swift b/Tests/SWBTaskConstructionTests/AppIntentsMetadataTaskConstructionTests.swift index d62ff168..afd64f3c 100644 --- a/Tests/SWBTaskConstructionTests/AppIntentsMetadataTaskConstructionTests.swift +++ b/Tests/SWBTaskConstructionTests/AppIntentsMetadataTaskConstructionTests.swift @@ -17,6 +17,8 @@ import SWBProtocol import SWBTaskConstruction import SWBTestSupport import SWBUtil +import Foundation +import SWBTaskExecution @Suite(.requireXcode16()) fileprivate struct AppIntentsMetadataTaskConstructionTests: CoreBasedTests { diff --git a/Tests/SWBTaskConstructionTests/BuildActionTaskConstructionTests.swift b/Tests/SWBTaskConstructionTests/BuildActionTaskConstructionTests.swift index 1d130ec7..20913228 100644 --- a/Tests/SWBTaskConstructionTests/BuildActionTaskConstructionTests.swift +++ b/Tests/SWBTaskConstructionTests/BuildActionTaskConstructionTests.swift @@ -15,6 +15,7 @@ import SWBUtil import SWBCore import SWBTestSupport +import SWBProtocol @Suite(.requireXcode16()) fileprivate struct BuildActionTaskConstructionTests: CoreBasedTests { diff --git a/Tests/SWBTaskConstructionTests/DebugInformationTests.swift b/Tests/SWBTaskConstructionTests/DebugInformationTests.swift index 1747a43b..6ae8abba 100644 --- a/Tests/SWBTaskConstructionTests/DebugInformationTests.swift +++ b/Tests/SWBTaskConstructionTests/DebugInformationTests.swift @@ -14,6 +14,8 @@ import Testing import SWBCore import SWBTestSupport +import SWBProtocol +import SWBUtil /// Tests of debug formats and dSYM generation. @Suite diff --git a/Tests/SWBTaskConstructionTests/DriverKitTaskConstructionTests.swift b/Tests/SWBTaskConstructionTests/DriverKitTaskConstructionTests.swift index a2887563..ee338491 100644 --- a/Tests/SWBTaskConstructionTests/DriverKitTaskConstructionTests.swift +++ b/Tests/SWBTaskConstructionTests/DriverKitTaskConstructionTests.swift @@ -17,6 +17,7 @@ import SWBCore import SWBTaskConstruction import SWBTestSupport @_spi(Testing) import SWBUtil +import SWBProtocol @Suite fileprivate struct DriverKitTaskConstructionTests: CoreBasedTests { diff --git a/Tests/SWBTaskConstructionTests/GenerateAppPlaygroundAssetCatalogTaskConstructionTests.swift b/Tests/SWBTaskConstructionTests/GenerateAppPlaygroundAssetCatalogTaskConstructionTests.swift index 0d661c37..10e657f9 100644 --- a/Tests/SWBTaskConstructionTests/GenerateAppPlaygroundAssetCatalogTaskConstructionTests.swift +++ b/Tests/SWBTaskConstructionTests/GenerateAppPlaygroundAssetCatalogTaskConstructionTests.swift @@ -18,6 +18,7 @@ import SWBCore import SWBUtil import SWBTaskConstruction +import SWBProtocol @Suite fileprivate struct GenerateAppPlaygroundAssetCatalogTaskConstructionTests: CoreBasedTests { diff --git a/Tests/SWBTaskConstructionTests/InAppPurchaseContentTaskConstructionTests.swift b/Tests/SWBTaskConstructionTests/InAppPurchaseContentTaskConstructionTests.swift index daf22e49..6b338d2a 100644 --- a/Tests/SWBTaskConstructionTests/InAppPurchaseContentTaskConstructionTests.swift +++ b/Tests/SWBTaskConstructionTests/InAppPurchaseContentTaskConstructionTests.swift @@ -14,6 +14,7 @@ import Testing import SWBTaskConstruction import SWBTestSupport import SWBUtil +import SWBCore @Suite fileprivate struct InAppPurchaseContentTaskConstructionTests: CoreBasedTests { diff --git a/Tests/SWBTaskConstructionTests/InfoPlistTaskConstructionTests.swift b/Tests/SWBTaskConstructionTests/InfoPlistTaskConstructionTests.swift index d42ec873..2021613d 100644 --- a/Tests/SWBTaskConstructionTests/InfoPlistTaskConstructionTests.swift +++ b/Tests/SWBTaskConstructionTests/InfoPlistTaskConstructionTests.swift @@ -17,6 +17,7 @@ import SWBTestSupport import SWBUtil import SWBTaskConstruction +import SWBProtocol @Suite fileprivate struct InfoPlistTaskConstructionTests: CoreBasedTests { diff --git a/Tests/SWBTaskConstructionTests/InstallLocTaskConstructionTests.swift b/Tests/SWBTaskConstructionTests/InstallLocTaskConstructionTests.swift index d70151b5..1ace97f1 100644 --- a/Tests/SWBTaskConstructionTests/InstallLocTaskConstructionTests.swift +++ b/Tests/SWBTaskConstructionTests/InstallLocTaskConstructionTests.swift @@ -17,6 +17,7 @@ import SWBTestSupport import SWBUtil import SWBTaskConstruction +import SWBProtocol @Suite fileprivate struct InstallLocTaskConstructionTests: CoreBasedTests { diff --git a/Tests/SWBTaskConstructionTests/InstallTaskConstructionTests.swift b/Tests/SWBTaskConstructionTests/InstallTaskConstructionTests.swift index 9d55f8bd..c0a1113f 100644 --- a/Tests/SWBTaskConstructionTests/InstallTaskConstructionTests.swift +++ b/Tests/SWBTaskConstructionTests/InstallTaskConstructionTests.swift @@ -15,6 +15,8 @@ import Testing import SWBCore import SWBTestSupport +import SWBUtil +import SWBProtocol /// Test interesting characteristics of install builds. @Suite diff --git a/Tests/SWBTaskConstructionTests/IntermediateStubTaskConstructionTests.swift b/Tests/SWBTaskConstructionTests/IntermediateStubTaskConstructionTests.swift index ce40beeb..d4010c7d 100644 --- a/Tests/SWBTaskConstructionTests/IntermediateStubTaskConstructionTests.swift +++ b/Tests/SWBTaskConstructionTests/IntermediateStubTaskConstructionTests.swift @@ -16,6 +16,7 @@ import SWBCore import SWBTestSupport import SWBUtil import SWBTaskConstruction +import SWBProtocol @Suite fileprivate struct IntermediateStubTaskConstructionTests: CoreBasedTests { diff --git a/Tests/SWBTaskConstructionTests/KernelExtensionTaskConstructionTests.swift b/Tests/SWBTaskConstructionTests/KernelExtensionTaskConstructionTests.swift index 40d6da97..806c0084 100644 --- a/Tests/SWBTaskConstructionTests/KernelExtensionTaskConstructionTests.swift +++ b/Tests/SWBTaskConstructionTests/KernelExtensionTaskConstructionTests.swift @@ -14,6 +14,8 @@ import Testing import SWBCore import SWBTaskConstruction import SWBTestSupport +import SWBUtil +import SWBProtocol @Suite fileprivate struct KernelExtensionTaskConstructionTests: CoreBasedTests { diff --git a/Tests/SWBTaskConstructionTests/LibtoolTaskConstructionTests.swift b/Tests/SWBTaskConstructionTests/LibtoolTaskConstructionTests.swift index adbad16e..e2fb0236 100644 --- a/Tests/SWBTaskConstructionTests/LibtoolTaskConstructionTests.swift +++ b/Tests/SWBTaskConstructionTests/LibtoolTaskConstructionTests.swift @@ -15,6 +15,7 @@ import Testing import SWBCore import SWBTaskConstruction import SWBTestSupport +import SWBUtil @Suite fileprivate struct LibtoolTaskConstructionTests: CoreBasedTests { diff --git a/Tests/SWBTaskConstructionTests/MasterObjectFileTests.swift b/Tests/SWBTaskConstructionTests/MasterObjectFileTests.swift index 2aa8eccd..dea36b88 100644 --- a/Tests/SWBTaskConstructionTests/MasterObjectFileTests.swift +++ b/Tests/SWBTaskConstructionTests/MasterObjectFileTests.swift @@ -15,6 +15,7 @@ import SWBCore import SWBTestSupport import SWBTaskConstruction import SWBUtil +import SWBProtocol @Suite fileprivate struct MasterObjectFileTests: CoreBasedTests { diff --git a/Tests/SWBTaskConstructionTests/ObjectiveCSymbolExtractorTests.swift b/Tests/SWBTaskConstructionTests/ObjectiveCSymbolExtractorTests.swift index eda99f97..0222dd1a 100644 --- a/Tests/SWBTaskConstructionTests/ObjectiveCSymbolExtractorTests.swift +++ b/Tests/SWBTaskConstructionTests/ObjectiveCSymbolExtractorTests.swift @@ -17,6 +17,7 @@ import SWBTestSupport import SWBCore @_spi(Testing) import SWBTaskConstruction +import SWBProtocol @Suite fileprivate struct ObjectiveCSymbolExtractorTests: CoreBasedTests { diff --git a/Tests/SWBTaskConstructionTests/OnDemandResourcesTaskConstructionTests.swift b/Tests/SWBTaskConstructionTests/OnDemandResourcesTaskConstructionTests.swift index f23f9fed..5695b3e5 100644 --- a/Tests/SWBTaskConstructionTests/OnDemandResourcesTaskConstructionTests.swift +++ b/Tests/SWBTaskConstructionTests/OnDemandResourcesTaskConstructionTests.swift @@ -17,6 +17,7 @@ import SWBProtocol import SWBTaskConstruction import SWBTestSupport import SWBUtil +import SWBCore @Suite fileprivate struct OnDemandResourcesTaskConstructionTests: CoreBasedTests { diff --git a/Tests/SWBTaskConstructionTests/PlatformTaskConstructionTests.swift b/Tests/SWBTaskConstructionTests/PlatformTaskConstructionTests.swift index b3268f0a..f2e561d3 100644 --- a/Tests/SWBTaskConstructionTests/PlatformTaskConstructionTests.swift +++ b/Tests/SWBTaskConstructionTests/PlatformTaskConstructionTests.swift @@ -20,6 +20,7 @@ import SWBTestSupport import SWBUtil import SWBTaskConstruction +import SWBMacro @Suite fileprivate struct PlatformTaskConstructionTests: CoreBasedTests { diff --git a/Tests/SWBTaskConstructionTests/PostprocessingTaskConstructionTests.swift b/Tests/SWBTaskConstructionTests/PostprocessingTaskConstructionTests.swift index 11221dbb..85fd06e1 100644 --- a/Tests/SWBTaskConstructionTests/PostprocessingTaskConstructionTests.swift +++ b/Tests/SWBTaskConstructionTests/PostprocessingTaskConstructionTests.swift @@ -17,6 +17,7 @@ import SWBTestSupport import SWBUtil import SWBTaskConstruction +import SWBProtocol @Suite fileprivate struct PostprocessingTaskConstructionTests: CoreBasedTests { diff --git a/Tests/SWBTaskConstructionTests/ResourceTaskConstructionTests.swift b/Tests/SWBTaskConstructionTests/ResourceTaskConstructionTests.swift index 239ba792..2dac3859 100644 --- a/Tests/SWBTaskConstructionTests/ResourceTaskConstructionTests.swift +++ b/Tests/SWBTaskConstructionTests/ResourceTaskConstructionTests.swift @@ -17,6 +17,7 @@ import SWBTestSupport import SWBUtil import SWBTaskConstruction +import SWBProtocol /// Task construction tests related to resource processing. @Suite diff --git a/Tests/SWBTaskConstructionTests/ShellScriptTaskConstructionTests.swift b/Tests/SWBTaskConstructionTests/ShellScriptTaskConstructionTests.swift index 38060e64..ed758671 100644 --- a/Tests/SWBTaskConstructionTests/ShellScriptTaskConstructionTests.swift +++ b/Tests/SWBTaskConstructionTests/ShellScriptTaskConstructionTests.swift @@ -14,6 +14,7 @@ import Testing import SWBTaskConstruction import SWBTestSupport import SWBUtil +import SWBCore @Suite fileprivate struct ShellScriptTaskConstructionTests: CoreBasedTests { diff --git a/Tests/SWBTaskConstructionTests/SwiftABICheckerTaskConstructionTests.swift b/Tests/SWBTaskConstructionTests/SwiftABICheckerTaskConstructionTests.swift index fa6a1e04..75c6b9c7 100644 --- a/Tests/SWBTaskConstructionTests/SwiftABICheckerTaskConstructionTests.swift +++ b/Tests/SWBTaskConstructionTests/SwiftABICheckerTaskConstructionTests.swift @@ -17,6 +17,7 @@ import SWBTestSupport import SWBUtil import SWBTaskConstruction +import SWBProtocol @Suite fileprivate struct SwiftABICheckerTaskConstructionTests: CoreBasedTests { diff --git a/Tests/SWBTaskConstructionTests/SwiftTaskConstructionTests.swift b/Tests/SWBTaskConstructionTests/SwiftTaskConstructionTests.swift index 28dde189..997e5fec 100644 --- a/Tests/SWBTaskConstructionTests/SwiftTaskConstructionTests.swift +++ b/Tests/SWBTaskConstructionTests/SwiftTaskConstructionTests.swift @@ -18,6 +18,7 @@ import SWBTestSupport @_spi(Testing) import SWBUtil import SWBTaskConstruction +import Foundation /// Task construction tests related to Swift compilation. @Suite diff --git a/Tests/SWBTaskConstructionTests/TaskConstructionTests.swift b/Tests/SWBTaskConstructionTests/TaskConstructionTests.swift index fe57944d..4511d270 100644 --- a/Tests/SWBTaskConstructionTests/TaskConstructionTests.swift +++ b/Tests/SWBTaskConstructionTests/TaskConstructionTests.swift @@ -21,6 +21,8 @@ import SWBUtil import SWBTaskConstruction +import class SWBMacro.StringMacroDeclaration + @Suite fileprivate struct TaskConstructionTests: CoreBasedTests { @Test(.requireSDKs(.macOS)) diff --git a/Tests/SWBTaskConstructionTests/TaskOrderingTests.swift b/Tests/SWBTaskConstructionTests/TaskOrderingTests.swift index 5f39b3cb..7ec04ecd 100644 --- a/Tests/SWBTaskConstructionTests/TaskOrderingTests.swift +++ b/Tests/SWBTaskConstructionTests/TaskOrderingTests.swift @@ -16,6 +16,7 @@ import SWBCore import SWBTaskConstruction import SWBTestSupport +import SWBProtocol @Suite fileprivate struct TaskOrderingTests: CoreBasedTests { diff --git a/Tests/SWBTaskConstructionTests/TrackedDomainTaskConstructionTests.swift b/Tests/SWBTaskConstructionTests/TrackedDomainTaskConstructionTests.swift index ad6aeb95..950f8855 100644 --- a/Tests/SWBTaskConstructionTests/TrackedDomainTaskConstructionTests.swift +++ b/Tests/SWBTaskConstructionTests/TrackedDomainTaskConstructionTests.swift @@ -18,6 +18,7 @@ import SWBTestSupport import SWBUtil import SWBTaskConstruction +import SWBProtocol @Suite(.requireXcode16()) fileprivate struct TrackedDomainTaskConstructionTests: CoreBasedTests { diff --git a/Tests/SWBTaskConstructionTests/UnitTestTaskConstructionTests.swift b/Tests/SWBTaskConstructionTests/UnitTestTaskConstructionTests.swift index ff97e120..d40bc363 100644 --- a/Tests/SWBTaskConstructionTests/UnitTestTaskConstructionTests.swift +++ b/Tests/SWBTaskConstructionTests/UnitTestTaskConstructionTests.swift @@ -15,6 +15,7 @@ import SWBCore import SWBProtocol import SWBTestSupport import SWBUtil +import Foundation @Suite(.requireXcode16()) fileprivate struct UnitTestTaskConstructionTests: CoreBasedTests { diff --git a/Tests/SWBTaskConstructionTests/XCFrameworkTaskConstructionTests.swift b/Tests/SWBTaskConstructionTests/XCFrameworkTaskConstructionTests.swift index 247b9672..0e5b09a0 100644 --- a/Tests/SWBTaskConstructionTests/XCFrameworkTaskConstructionTests.swift +++ b/Tests/SWBTaskConstructionTests/XCFrameworkTaskConstructionTests.swift @@ -15,6 +15,8 @@ import Testing import SWBTestSupport import SWBUtil import SWBTaskConstruction +import SWBProtocol +import Foundation @Suite fileprivate struct XCFrameworkTaskConstructionTests: CoreBasedTests { diff --git a/Tests/SWBTaskExecutionTests/FileCopyTaskTests.swift b/Tests/SWBTaskExecutionTests/FileCopyTaskTests.swift index 4443ab5f..da70238e 100644 --- a/Tests/SWBTaskExecutionTests/FileCopyTaskTests.swift +++ b/Tests/SWBTaskExecutionTests/FileCopyTaskTests.swift @@ -15,6 +15,7 @@ import Testing import SWBTestSupport import SWBUtil import SWBTaskExecution +import SWBCore @Suite fileprivate struct FileCopyTaskTests { diff --git a/Tests/SWBTaskExecutionTests/InProcessTaskTestSupport.swift b/Tests/SWBTaskExecutionTests/InProcessTaskTestSupport.swift index aecbf67b..ac43422e 100644 --- a/Tests/SWBTaskExecutionTests/InProcessTaskTestSupport.swift +++ b/Tests/SWBTaskExecutionTests/InProcessTaskTestSupport.swift @@ -21,6 +21,7 @@ import SWBUtil import enum SWBProtocol.ExternalToolResult import struct SWBProtocol.BuildOperationMetrics import SWBMacro +import Synchronization struct MockExecutionDelegate: TaskExecutionDelegate { struct Lookup: PlatformInfoLookup { diff --git a/Tests/SWBTaskExecutionTests/PBXCpTests.swift b/Tests/SWBTaskExecutionTests/PBXCpTests.swift index 43e68176..c4b0237f 100644 --- a/Tests/SWBTaskExecutionTests/PBXCpTests.swift +++ b/Tests/SWBTaskExecutionTests/PBXCpTests.swift @@ -14,6 +14,13 @@ import Foundation import Testing import SWBUtil import SWBTestSupport +import SWBCore + +#if canImport(System) +import System +#else +import SystemPackage +#endif @Suite fileprivate struct PBXCpTests: CoreBasedTests { diff --git a/Tests/SWBTaskExecutionTests/ProcessProductEntitlementsTaskActionTests.swift b/Tests/SWBTaskExecutionTests/ProcessProductEntitlementsTaskActionTests.swift index 46e1d58a..0ff0f27f 100644 --- a/Tests/SWBTaskExecutionTests/ProcessProductEntitlementsTaskActionTests.swift +++ b/Tests/SWBTaskExecutionTests/ProcessProductEntitlementsTaskActionTests.swift @@ -16,6 +16,7 @@ import SWBCore import SWBUtil import SWBTaskExecution import SWBMacro +import SWBTestSupport @Suite fileprivate struct ProcessProductEntitlementsTaskActionTests { diff --git a/Tests/SWBUtilTests/CacheTests.swift b/Tests/SWBUtilTests/CacheTests.swift index 2cdc24fe..7c584010 100644 --- a/Tests/SWBUtilTests/CacheTests.swift +++ b/Tests/SWBUtilTests/CacheTests.swift @@ -13,6 +13,7 @@ import Foundation import Testing import SWBUtil +import Synchronization @Suite fileprivate struct CacheTests { @Test diff --git a/Tests/SWBUtilTests/HashContextTests.swift b/Tests/SWBUtilTests/HashContextTests.swift index 006e737d..3160b3b4 100644 --- a/Tests/SWBUtilTests/HashContextTests.swift +++ b/Tests/SWBUtilTests/HashContextTests.swift @@ -13,6 +13,7 @@ import Foundation import Testing import SWBUtil +import SWBTestSupport @Suite fileprivate struct HashContextTests { @Test diff --git a/Tests/SWBUtilTests/HeavyCacheTests.swift b/Tests/SWBUtilTests/HeavyCacheTests.swift index fb05d8a2..49c496b4 100644 --- a/Tests/SWBUtilTests/HeavyCacheTests.swift +++ b/Tests/SWBUtilTests/HeavyCacheTests.swift @@ -13,6 +13,7 @@ import Foundation import Testing @_spi(Testing) import SWBUtil +import Synchronization @Suite fileprivate struct HeavyCacheTests { diff --git a/Tests/SWBUtilTests/LazyCacheTests.swift b/Tests/SWBUtilTests/LazyCacheTests.swift index d06b2586..5b54da13 100644 --- a/Tests/SWBUtilTests/LazyCacheTests.swift +++ b/Tests/SWBUtilTests/LazyCacheTests.swift @@ -13,6 +13,7 @@ import Foundation import SWBUtil import Testing +import Synchronization @Suite fileprivate struct LazyCacheTests { @Test diff --git a/Tests/SWBUtilTests/PathTests.swift b/Tests/SWBUtilTests/PathTests.swift index 8500774e..3d704983 100644 --- a/Tests/SWBUtilTests/PathTests.swift +++ b/Tests/SWBUtilTests/PathTests.swift @@ -14,6 +14,7 @@ import Foundation import Testing import SWBTestSupport import SWBUtil +import SWBCore @Suite(.skipHostOS(.windows, "path tests need a big overhaul for Windows")) fileprivate struct PathTests { diff --git a/Tests/SWBUtilTests/SignaturesTests.swift b/Tests/SWBUtilTests/SignaturesTests.swift index 300cbf7f..ca93d8fd 100644 --- a/Tests/SWBUtilTests/SignaturesTests.swift +++ b/Tests/SWBUtilTests/SignaturesTests.swift @@ -13,6 +13,7 @@ import Foundation import Testing import SWBUtil +import SWBTestSupport @Suite(.requireHostOS(.macOS), .requireSDKs(.macOS)) fileprivate struct SignaturesTests { diff --git a/Tests/SWBUtilTests/VersionTests.swift b/Tests/SWBUtilTests/VersionTests.swift index 7ef9d123..96c46f88 100644 --- a/Tests/SWBUtilTests/VersionTests.swift +++ b/Tests/SWBUtilTests/VersionTests.swift @@ -13,6 +13,7 @@ import Foundation import Testing import SWBUtil +import SWBTestSupport @Suite fileprivate struct VersionTests { func checkEq(_ a: Version, _ b: Version) { diff --git a/Tests/SWBWindowsPlatformTests/WindowsTestSupport.swift b/Tests/SWBWindowsPlatformTests/WindowsTestSupport.swift index c90ccfed..95226ce5 100644 --- a/Tests/SWBWindowsPlatformTests/WindowsTestSupport.swift +++ b/Tests/SWBWindowsPlatformTests/WindowsTestSupport.swift @@ -12,6 +12,7 @@ import SWBCore @_spi(Testing) import SWBWindowsPlatform +import SWBUtil extension VSInstallation.Component.ID { static let visualCppBuildTools_x86_x64 = Self("Microsoft.VisualStudio.Component.VC.Tools.x86.x64") diff --git a/Tests/SwiftBuildTests/ConsoleCommands/BuildCommandTests.swift b/Tests/SwiftBuildTests/ConsoleCommands/BuildCommandTests.swift index d85a137a..7bb4e1f5 100644 --- a/Tests/SwiftBuildTests/ConsoleCommands/BuildCommandTests.swift +++ b/Tests/SwiftBuildTests/ConsoleCommands/BuildCommandTests.swift @@ -15,6 +15,7 @@ import SWBTestSupport import SwiftBuild import SWBUtil import Testing +import SwiftBuildTestSupport @Suite(.skipHostOS(.windows)) fileprivate struct BuildCommandTests { diff --git a/Tests/SwiftBuildTests/ConsoleCommands/SessionCommandsTests.swift b/Tests/SwiftBuildTests/ConsoleCommands/SessionCommandsTests.swift index 1e5438f1..6dc5fece 100644 --- a/Tests/SwiftBuildTests/ConsoleCommands/SessionCommandsTests.swift +++ b/Tests/SwiftBuildTests/ConsoleCommands/SessionCommandsTests.swift @@ -12,6 +12,7 @@ import SWBTestSupport import Testing +import SWBUtil @Suite fileprivate struct SessionCommandsTests { diff --git a/Tests/SwiftBuildTests/ConsoleCommands/XcodeCommandsTests.swift b/Tests/SwiftBuildTests/ConsoleCommands/XcodeCommandsTests.swift index e504cf0c..78173376 100644 --- a/Tests/SwiftBuildTests/ConsoleCommands/XcodeCommandsTests.swift +++ b/Tests/SwiftBuildTests/ConsoleCommands/XcodeCommandsTests.swift @@ -12,6 +12,7 @@ import SWBTestSupport import Testing +import SWBUtil @Suite fileprivate struct XcodeCommandsTests { diff --git a/Tests/SwiftBuildTests/IndexingInfoTests.swift b/Tests/SwiftBuildTests/IndexingInfoTests.swift index 1180255f..575ca27a 100644 --- a/Tests/SwiftBuildTests/IndexingInfoTests.swift +++ b/Tests/SwiftBuildTests/IndexingInfoTests.swift @@ -16,6 +16,8 @@ import SwiftBuild import SwiftBuildTestSupport import SWBTestSupport @_spi(Testing) import SWBUtil +import SWBProtocol +import SWBCore // These tests use the old model, ie. the index build arena is disabled. @Suite(.requireHostOS(.macOS))