44import PackageDescription
55import Foundation
66
7- // let isBuildingCode = ProcessInfo.processInfo.environment["BUILD_CODE"] == "true"
8- let isBuildingCode = true
9- let isBuildingDocC = ProcessInfo . processInfo. environment [ " GITHUB_PAGES " ] == " true "
10-
11- let package = Package (
12- name: " GitHubRestAPISwiftOpenAPI " ,
13- platforms: [ . macOS( . v10_15) ] ,
14- products: GitHubRestAPIOpenAPITag . allCases. map ( \. library) ,
15- dependencies: [
16- . package ( url: " https://github.com/apple/swift-openapi-runtime " , from: " 1.0.0 " ) ,
17- . package ( url: " https://github.com/apple/swift-openapi-urlsession " , from: " 1.0.0 " ) ,
18- ] ,
19- targets: GitHubRestAPIOpenAPITag . allCases. map ( \. target)
20- + GitHubRestAPIOpenAPITag. allCases. compactMap ( \. testTarget)
21- )
22-
23- // dependencies is needed for package users
24- if !isBuildingCode {
25- package . targets += [
26- GitHubRestAPIOpenAPITag . dependenciesTarget
27- ]
28- }
29-
30- // swift-docs is not needed for package users
31- if isBuildingDocC {
32- package . dependencies += [
33- . package ( url: " https://github.com/apple/swift-docc-plugin " , from: " 1.3.0 " ) ,
34- ]
35- }
36-
377/// The generator supports filtering the OpenAPI document prior to generation,
388/// which can be useful when generating client code for a subset of a large API,
399/// or splitting an implementation of a server across multiple modules.
@@ -76,64 +46,67 @@ enum GitHubRestAPIOpenAPITag: String, CaseIterable {
7646 case classroom
7747 case desktop
7848
79- var library : PackageDescription . Product {
80- let targetName = targetName
81- if isBuildingCode {
82- return . library(
83- name: targetName,
84- targets: [ targetName]
85- )
86- } else {
87- return . library(
88- name: targetName,
89- targets: [ targetName, Self . dependenciesTarget. name]
90- )
91- }
92- }
93-
94- private var targetName : String {
49+ var targetName : String {
9550 let name = rawValue. replacingOccurrences ( of: " - " , with: " _ " ) . capitalized
9651 return " GitHubRestAPI \( name) "
9752 }
98-
99- var target : PackageDescription . Target {
100- let targetName = targetName
101- if isBuildingCode {
53+
54+ var sourcePath : String { " Sources/ \( rawValue) " }
55+
56+ }
57+
58+ protocol PackageConfigSpec {
59+ var libraries : [ PackageDescription . Product ] { get }
60+ var targets : [ PackageDescription . Target ] { get }
61+ }
62+
63+ struct SourceCodePackageConfigSpec : PackageConfigSpec {
64+ let allCases = GitHubRestAPIOpenAPITag . allCases
65+
66+ var libraries : [ PackageDescription . Product ] {
67+ return allCases. map ( \. targetName) . map { targetName in
68+ . library( name: targetName, targets: [ targetName] )
69+ }
70+ }
71+
72+ var targets : [ PackageDescription . Target ] {
73+ return allCases. map { aCase in
74+ let ( targetName, sourcePath) = ( aCase. targetName, aCase. sourcePath)
10275 return . target(
10376 name: targetName,
10477 dependencies: [
10578 . product( name: " OpenAPIRuntime " , package : " swift-openapi-runtime " ) ,
10679 . product( name: " OpenAPIURLSession " , package : " swift-openapi-urlsession " ) ,
10780 ] ,
108- path: " Sources/ \( rawValue ) " ,
81+ path: sourcePath ,
10982 exclude: [
11083 " openapi-generator-config.yml " ,
11184 " openapi.yml " ,
11285 ]
11386 )
114- } else {
115- return . binaryTarget(
116- name: targetName,
117- path: " XCFrameworks/ \( targetName) .zip " )
118- }
87+ } + testTargets
11988 }
120-
121- var testTarget : PackageDescription . Target ? {
122- guard self == . users else { return nil }
123- let dependencies : [ Target . Dependency ] = [
124- . product( name: " OpenAPIRuntime " , package : " swift-openapi-runtime " ) ,
125- . product( name: " OpenAPIURLSession " , package : " swift-openapi-urlsession " ) ,
89+
90+ private var testTargets : [ PackageDescription . Target ] {
91+ let targetName = GitHubRestAPIOpenAPITag . users. targetName
92+ return [
93+ . testTarget(
94+ name: " UserTests " ,
95+ dependencies: [
96+ . product( name: " OpenAPIRuntime " , package : " swift-openapi-runtime " ) ,
97+ . product( name: " OpenAPIURLSession " , package : " swift-openapi-urlsession " ) ,
98+ . target( name: targetName) ,
99+ ]
100+ )
126101 ]
127- let targetName = targetName
128- return . testTarget(
129- name: " UserTests " ,
130- dependencies: dependencies + [
131- . target( name: targetName)
132- ]
133- )
134102 }
135103
136- static var dependenciesTarget : PackageDescription . Target = . target(
104+ }
105+
106+ struct XCFrameworkPackageConfigSpec : PackageConfigSpec {
107+ let allCases = GitHubRestAPIOpenAPITag . allCases
108+
109+ var dependenciesTarget : PackageDescription . Target = . target(
137110 name: " DependenciesTarget " ,
138111 dependencies: [
139112 . product( name: " OpenAPIRuntime " , package : " swift-openapi-runtime " ) ,
@@ -142,4 +115,59 @@ enum GitHubRestAPIOpenAPITag: String, CaseIterable {
142115 path: " XCFrameworks/DependenciesTarget "
143116 )
144117
118+ var libraries : [ PackageDescription . Product ] {
119+ return allCases. map ( \. targetName) . map { targetName in
120+ . library( name: targetName, targets: [ targetName, dependenciesTarget. name] )
121+ }
122+ }
123+
124+ var targets : [ PackageDescription . Target ] {
125+ return allCases. map ( \. targetName) . map { targetName in
126+ return . binaryTarget( name: targetName, path: " XCFrameworks/ \( targetName) .zip " )
127+ } + testTargets + [ dependenciesTarget]
128+ }
129+
130+ private var testTargets : [ PackageDescription . Target ] {
131+ let targetName = GitHubRestAPIOpenAPITag . users. targetName
132+ return [
133+ . testTarget(
134+ name: " UserTests " ,
135+ dependencies: [
136+ . product( name: " OpenAPIRuntime " , package : " swift-openapi-runtime " ) ,
137+ . product( name: " OpenAPIURLSession " , package : " swift-openapi-urlsession " ) ,
138+ . target( name: targetName) ,
139+ ]
140+ )
141+ ]
142+ }
143+
144+ }
145+
146+ let config : PackageConfigSpec = {
147+ /// Currently Disabled XCFrameworkPackageConfig
148+ let isSourceCodePackageConfigSpec = true
149+ if isSourceCodePackageConfigSpec {
150+ return SourceCodePackageConfigSpec ( )
151+ } else {
152+ return XCFrameworkPackageConfigSpec ( )
153+ }
154+ } ( )
155+
156+ let package = Package (
157+ name: " GitHubRestAPISwiftOpenAPI " ,
158+ platforms: [ . macOS( . v10_15) ] ,
159+ products: config. libraries,
160+ dependencies: [
161+ . package ( url: " https://github.com/apple/swift-openapi-runtime " , from: " 1.0.0 " ) ,
162+ . package ( url: " https://github.com/apple/swift-openapi-urlsession " , from: " 1.0.0 " ) ,
163+ ] ,
164+ targets: config. targets
165+ )
166+
167+ let isBuildingDocC = ProcessInfo . processInfo. environment [ " GITHUB_PAGES " ] == " true "
168+ // swift-docs is not needed for package users
169+ if isBuildingDocC {
170+ package . dependencies += [
171+ . package ( url: " https://github.com/apple/swift-docc-plugin " , from: " 1.3.0 " ) ,
172+ ]
145173}
0 commit comments