@@ -16,15 +16,16 @@ let package = Package(
16
16
. library( name: " CXShim " , targets: [ " CXShim " ] ) ,
17
17
] ,
18
18
dependencies: [
19
- . package ( url: " https://github.com/Quick/Quick.git " , from: " 2.0.0 " ) ,
19
+ . package ( url: " https://github.com/wickwirew/Runtime " , from: " 2.0.0 " ) ,
20
+ . package ( url: " https://github.com/Quick/Quick " , from: " 2.0.0 " ) ,
20
21
// TODO: Use "8.0.2" until https://github.com/Quick/Nimble/issues/705 is fixed.
21
- . package ( url: " https://github.com/Quick/Nimble.git " , . exact( " 8.0.2 " ) ) ,
22
+ . package ( url: " https://github.com/Quick/Nimble " , . exact( " 8.0.2 " ) ) ,
22
23
] ,
23
24
targets: [
24
25
. target( name: " CXLibc " ) ,
25
26
. target( name: " CXUtility " ) ,
26
27
. target( name: " CXNamespace " ) ,
27
- . target( name: " CombineX " , dependencies: [ " CXLibc " , " CXUtility " , " CXNamespace " ] ) ,
28
+ . target( name: " CombineX " , dependencies: [ " CXLibc " , " CXUtility " , " CXNamespace " , " Runtime " ] ) ,
28
29
. target( name: " CXFoundation " , dependencies: [ " CXUtility " , " CXNamespace " , " CombineX " ] ) ,
29
30
. target( name: " CXCompatible " , dependencies: [ " CXNamespace " ] ) ,
30
31
. target( name: " CXShim " , dependencies: [ /* depends on combine implementation */] ) ,
@@ -51,88 +52,11 @@ extension Optional where Wrapped: RangeReplaceableCollection {
51
52
}
52
53
}
53
54
54
- // MARK: CombineX Experimental Features
55
-
56
- /// Some of the implementations in CombineX are experimental.
57
- struct CXExperimentalFeatures : OptionSet , CaseIterable {
58
-
59
- let rawValue : Int
60
-
61
- static let observableObject = CXExperimentalFeatures ( rawValue: 1 )
62
-
63
- static var allCases : [ CXExperimentalFeatures ] {
64
- return [ . observableObject]
65
- }
66
-
67
- var flags : [ String ] {
68
- var result : [ String ] = [ ]
69
- if contains ( . observableObject) {
70
- result += [ " EXPERIMENTAL_OBSERVABLE_OBJECT " ]
71
- }
72
- return result
73
- }
74
-
75
- func configure( _ package : Package ) {
76
- guard let cxTarget = package . targets. first ( where: { $0. name == " CombineX " } ) else { return }
77
-
78
- // extra package dependencies
79
- package . dependencies. append ( contentsOf: self . extraPackageDependencies)
80
-
81
- // extra swift settings
82
- cxTarget. swiftSettings. append ( contentsOf: self . extraSwiftSettings)
83
-
84
- // extra target dependencies
85
- cxTarget. dependencies. append ( contentsOf: self . extraTargetDependencies)
86
- }
87
-
88
- var extraPackageDependencies : [ Package . Dependency ] {
89
- var deps : [ Package . Dependency ] = [ ]
90
- if contains ( . observableObject) {
91
- deps += [ . package ( url: " https://github.com/wickwirew/Runtime " , from: " 2.0.0 " ) ]
92
- }
93
- return deps
94
- }
95
-
96
- var extraSwiftSettings : [ SwiftSetting ] {
97
- var settings : [ SwiftSetting ] = [ ]
98
- settings += self . flags. map { . define( $0) }
99
- return settings
100
- }
101
-
102
- var extraTargetDependencies : [ Target . Dependency ] {
103
- var deps : [ Target . Dependency ] = [ ]
104
- if contains ( . observableObject) {
105
- deps += [ " Runtime " ]
106
- }
107
- return deps
108
- }
109
- }
110
-
111
- func getEnabledCXExperimentalFeatures( ) -> CXExperimentalFeatures {
112
- let enabledFeatures = CXExperimentalFeatures . allCases. filter {
113
- guard let flag = $0. flags. first, let value = env [ " CX_ \( flag) " ] else { return false }
114
- return NSString ( string: value) . boolValue
115
- }
116
- return . init( enabledFeatures)
117
- }
118
-
119
- let enabledCXExperimentalFeatures = getEnabledCXExperimentalFeatures ( )
120
- enabledCXExperimentalFeatures. configure ( package )
121
-
122
55
// MARK: Combine Implementations
123
56
enum CombineImplementation {
124
57
125
58
case combine, combineX, openCombine
126
-
127
- func configure( _ package : Package ) {
128
- package . dependencies. append ( contentsOf: self . extraPackageDependencies)
129
-
130
- guard let shimTarget = package . targets. first ( where: { $0. name == " CXShim " } ) else { return }
131
-
132
- shimTarget. dependencies = shimTargetDependencies
133
- shimTarget. swiftSettings. append ( contentsOf: shimTargetSwiftSettings)
134
- }
135
-
59
+
136
60
var extraPackageDependencies : [ Package . Dependency ] {
137
61
switch self {
138
62
case . openCombine: return [ . package ( url: " https://github.com/broadwaylamb/OpenCombine " , . branch( " master " ) ) ]
@@ -157,6 +81,22 @@ enum CombineImplementation {
157
81
}
158
82
}
159
83
84
+ func configure( _ package : Package , with imp: CombineImplementation ) {
85
+ package . dependencies. append ( contentsOf: imp. extraPackageDependencies)
86
+
87
+ guard let shimTarget = package . targets. first ( where: { $0. name == " CXShim " } ) else { return }
88
+
89
+ shimTarget. dependencies = imp. shimTargetDependencies
90
+ shimTarget. swiftSettings. append ( contentsOf: imp. shimTargetSwiftSettings)
91
+
92
+ // Pass the swift settings of current combine implementation to all test targets.
93
+ package . targets
94
+ . filter { $0. isTest}
95
+ . forEach {
96
+ $0. swiftSettings. append ( contentsOf: imp. shimTargetSwiftSettings)
97
+ }
98
+ }
99
+
160
100
func selectCombineImp( ) -> CombineImplementation {
161
101
let key = " CX_COMBINE_IMPLEMENTATION "
162
102
// CombineX -> combinex
@@ -176,15 +116,7 @@ func selectCombineImp() -> CombineImplementation {
176
116
}
177
117
178
118
let currentCombineImp = selectCombineImp ( )
179
- currentCombineImp. configure ( package )
180
-
181
- // Pass the swift settings of current combine implementation and enabled experimental features to all test targets.
182
- let testSwiftSettings = currentCombineImp. shimTargetSwiftSettings + enabledCXExperimentalFeatures. extraSwiftSettings
183
- package . targets. forEach {
184
- if $0. isTest {
185
- $0. swiftSettings. append ( contentsOf: testSwiftSettings)
186
- }
187
- }
119
+ configure ( package , with: currentCombineImp)
188
120
189
121
// Travis does not yet support macOS 10.15, so we have to generate an iOS project to test against `Combine`.
190
122
if currentCombineImp == . combine && ProcessInfo . processInfo. environment [ " TRAVIS " ] != nil {
0 commit comments