Skip to content
This repository was archived by the owner on Apr 11, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 12 additions & 12 deletions Package.resolved

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

23 changes: 19 additions & 4 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,13 @@
import PackageDescription

let dependencies: [Package.Dependency]
#if swift(>=5.5)
#if swift(>=5.6)
dependencies = [
.package(url: "https://github.com/apple/swift-argument-parser.git", .exact("1.0.3")),
.package(name: "SwiftPM", url: "https://github.com/apple/swift-package-manager.git", .branch("release/5.6")),
.package(url: "https://github.com/apple/swift-tools-support-core.git", .exact("0.2.5"))
]
#elseif swift(>=5.5)
dependencies = [
.package(url: "https://github.com/apple/swift-argument-parser.git", .exact("0.4.4")),
.package(name: "SwiftPM", url: "https://github.com/apple/swift-package-manager.git", .branch("release/5.5")),
Expand All @@ -18,13 +24,22 @@ dependencies = [
]
#endif

let platforms: [SupportedPlatform]
#if swift(>=5.6)
platforms = [
.macOS(.v11),
]
#else
platforms = [
.macOS(.v10_15),
]
#endif

let package = Package(
name: "swift-create-xcframework",

// TODO: Add Linux / Windows support
platforms: [
.macOS(.v10_15),
],
platforms: platforms,

products: [
.executable(name: "swift-create-xcframework", targets: [ "CreateXCFramework" ]),
Expand Down
53 changes: 46 additions & 7 deletions Sources/CreateXCFramework/PackageInfo.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,20 @@
//

import ArgumentParser
#if swift(>=5.6)
import Basics
#endif
import Build
import Foundation
#if swift(>=5.6)
import PackageGraph
#endif
import PackageLoading
import PackageModel
import SPMBuildCore
#if swift(>=5.6)
import TSCBasic
#endif
import Workspace
import Xcodeproj

Expand Down Expand Up @@ -53,19 +62,24 @@ struct PackageInfo {
}

// TODO: Map diagnostics to swift-log
#if swift(>=5.6)
let observabilitySystem = ObservabilitySystem { _, diagnostics in
print("\(diagnostics.severity): \(diagnostics.message)")
}
#else
let diagnostics = DiagnosticsEngine()
#endif

let options: Command.Options
// let package: Package
let graph: PackageGraph
let manifest: Manifest
let toolchain: Toolchain
let toolchain: UserToolchain
let workspace: Workspace


// MARK: - Initialisation

init (options: Command.Options) throws {
init (options: Command.Options) throws { // swiftlint:disable:this function_body_length
self.options = options
self.rootDirectory = Foundation.URL(fileURLWithPath: options.packagePath, isDirectory: true).absoluteURL
self.buildDirectory = self.rootDirectory.appendingPathComponent(options.buildPath, isDirectory: true).absoluteURL
Expand All @@ -74,15 +88,32 @@ struct PackageInfo {

self.toolchain = try UserToolchain(destination: try .hostDestination())

#if swift(>=5.6)
let resources = ToolchainConfiguration(swiftCompilerPath: self.toolchain.swiftCompilerPath)
let loader = ManifestLoader(toolchain: resources)
self.workspace = try Workspace(forRootPackage: root, customManifestLoader: loader)
#else
#if swift(>=5.5)
let resources = try UserManifestResources(swiftCompiler: self.toolchain.swiftCompiler, swiftCompilerFlags: [])
#else
let resources = try UserManifestResources(swiftCompiler: self.toolchain.swiftCompiler)
#endif
let loader = ManifestLoader(manifestResources: resources)
self.workspace = Workspace.create(forRootPackage: root, manifestLoader: loader)

#if swift(>=5.5)
#endif

#if swift(>=5.6)
self.graph = try workspace.loadPackageGraph(rootPath: root, observabilityScope: self.observabilitySystem.topScope)
let workspace = self.workspace
let scope = observabilitySystem.topScope
self.manifest = try tsc_await {
workspace.loadRootManifest(
at: root,
observabilityScope: scope,
completion: $0
)
}
#elseif swift(>=5.5)
self.graph = try self.workspace.loadPackageGraph(rootPath: root, diagnostics: self.diagnostics)
let swiftCompiler = toolchain.swiftCompiler
self.manifest = try tsc_await {
Expand Down Expand Up @@ -165,7 +196,7 @@ struct PackageInfo {
Invalid product/target name(s):
\(invalidProducts.joined(separator: "\n "))

Available \(self.manifest.name) products:
Available \(self.manifest.displayName) products:
\(allLibraryProductNames.sorted().joined(separator: "\n "))

Additional available targets:
Expand All @@ -184,7 +215,7 @@ struct PackageInfo {

print (
"""
\nAvailable \(self.manifest.name) products:
\nAvailable \(self.manifest.displayName) products:
\(allLibraryProductNames.sorted().joined(separator: "\n "))

Additional available targets:
Expand Down Expand Up @@ -280,3 +311,11 @@ enum PackageValidationError: LocalizedError {
}
}
}

#if swift(<5.6)
extension Manifest {
var displayName: String {
name
}
}
#endif
21 changes: 20 additions & 1 deletion Sources/CreateXCFramework/ProjectGenerator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ struct ProjectGenerator {

var projectPath: AbsolutePath {
let dir = AbsolutePath(self.package.projectBuildDirectory.path)
return buildXcodeprojPath(outputDir: dir, projectName: self.package.manifest.name)
return buildXcodeprojPath(outputDir: dir, projectName: self.package.manifest.displayName)
}


Expand Down Expand Up @@ -72,6 +72,20 @@ struct ProjectGenerator {
try makeDirectories(path)

// Generate the contents of project.xcodeproj (inside the .xcodeproj).
#if swift(>=5.6)
let project = try pbxproj (
xcodeprojPath: path,
graph: self.package.graph,
extraDirs: [],
extraFiles: [],
options: XcodeprojOptions (
xcconfigOverrides: (self.package.overridesXcconfig?.path).flatMap { AbsolutePath($0) },
useLegacySchemeGenerator: true
),
fileSystem: localFileSystem,
observabilityScope: self.package.observabilitySystem.topScope
)
#else
let project = try pbxproj (
xcodeprojPath: path,
graph: self.package.graph,
Expand All @@ -83,6 +97,7 @@ struct ProjectGenerator {
),
diagnostics: self.package.diagnostics
)
#endif

return project
}
Expand Down Expand Up @@ -122,7 +137,11 @@ extension Xcode.Project {
try open(path.appending(component: "project.pbxproj")) { stream in
// Serialize the project model we created to a plist, and return
// its string description.
#if swift(>=5.6)
let str = try "// !$*UTF8*$!\n" + self.generatePlist().description
#else
let str = "// !$*UTF8*$!\n" + self.generatePlist().description
#endif
stream(str)
}

Expand Down
20 changes: 19 additions & 1 deletion Sources/CreateXCFramework/Zipper.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@
//

import Foundation
#if swift(>=5.6)
import PackageGraph
#endif
import PackageModel
import TSCBasic
import Workspace
Expand Down Expand Up @@ -51,7 +54,11 @@ struct Zipper {
}

func checksum (file: Foundation.URL) throws -> Foundation.URL {
#if swift(>=5.6)
let sum = try self.package.workspace.checksum(forBinaryArtifactAt: AbsolutePath(file.path))
#else
let sum = self.package.workspace.checksum(forBinaryArtifactAt: AbsolutePath(file.path), diagnostics: self.package.diagnostics)
#endif
let checksumFile = file.deletingPathExtension().appendingPathExtension("sha256")
try Data(sum.utf8).write(to: checksumFile)
return checksumFile
Expand All @@ -73,13 +80,22 @@ struct Zipper {
// find the package that contains our target
guard let packageRef = self.package.graph.packages.first(where: { $0.targets.contains(where: { $0.name == target }) }) else { return nil }

#if swift(>=5.6)
guard
let dependency = self.package.workspace.state.dependencies[packageRef.identity],
case let .custom(version, _) = dependency.state
else {
return fallback.flatMap { "-" + $0 }
}
#else
guard
let dependency = self.package.workspace.state.dependencies[forNameOrIdentity: packageRef.packageName],
case let .checkout(checkout) = dependency.state,
let version = checkout.version
else {
return fallback.flatMap { "-" + $0 }
}
#endif

return "-" + version.description
}
Expand All @@ -92,7 +108,9 @@ struct Zipper {
}
}

#if swift(>=5.5)
#if swift(>=5.6)
// Intentionally left blank
#elseif swift(>=5.5)
private extension ResolvedPackage {
var packageName: String {
self.manifestName
Expand Down