@@ -8,9 +8,6 @@ let isXcodeEnv = ProcessInfo.processInfo.environment["__CFBundleIdentifier"] ==
8
8
// Xcode use clang as linker which supports "-iframework" while SwiftPM use swiftc as linker which supports "-Fsystem"
9
9
let systemFrameworkSearchFlag = isXcodeEnv ? " -iframework " : " -Fsystem "
10
10
11
- // https://github.com/llvm/llvm-project/issues/48757
12
- let clangEnumFixSetting = CSetting . unsafeFlags ( [ " -Wno-elaborated-enum-base " ] , . when( platforms: [ . linux] ) )
13
-
14
11
let openSwiftUITarget = Target . target (
15
12
name: " OpenSwiftUI " ,
16
13
dependencies: [
@@ -42,20 +39,26 @@ let openSwiftUITestTarget = Target.testTarget(
42
39
)
43
40
let openSwiftUICompatibilityTestTarget = Target . testTarget (
44
41
name: " OpenSwiftUICompatibilityTests " ,
45
- dependencies: [
46
- " OpenSwiftUI " ,
47
- ] ,
48
42
exclude: [ " README.md " ]
49
43
)
50
44
51
45
let package = Package (
52
46
name: " OpenSwiftUI " ,
53
- platforms: [ . iOS( . v13) , . macOS( . v10_15) , . macCatalyst( . v13) , . tvOS( . v13) , . watchOS( . v6) , . visionOS( . v1) ] ,
47
+ platforms: [
48
+ . iOS( . v13) ,
49
+ . macOS( . v10_15) ,
50
+ . macCatalyst( . v13) ,
51
+ . tvOS( . v13) ,
52
+ . watchOS( . v6) ,
53
+ . visionOS( . v1) ,
54
+ ] ,
54
55
products: [
55
56
. library( name: " OpenSwiftUI " , targets: [ " OpenSwiftUI " ] ) ,
56
57
] ,
57
58
dependencies: [
58
- . package ( url: " https://github.com/Kyle-Ye/OpenFoundation " , from: " 0.0.1 " ) ,
59
+ . package ( url: " https://github.com/OpenSwiftUIProject/OpenFoundation " , from: " 0.0.1 " ) ,
60
+ // FIXME: on Linux platform: OG contains unsafe build flags which prevents us using version dependency
61
+ . package ( url: " https://github.com/OpenSwiftUIProject/OpenGraph " , branch: " main " ) ,
59
62
] ,
60
63
targets: [
61
64
// TODO: Add SwiftGTK as an backend alternative for UIKit/AppKit on Linux and macOS
@@ -80,133 +83,94 @@ let package = Package(
80
83
]
81
84
)
82
85
83
- // FIXME: The binary of AG for macOS is copied from dyld shared cache and it will cause a link error when running. Use iOS Simulator to run this target as a temporary workaround
84
- let graphCompatibilityTest = ProcessInfo . processInfo. environment [ " OPENGRAPH_COMPATIBILITY_TEST " ] != nil
85
- let openGraphCompatibilityTestTarget = Target . testTarget (
86
- name: " OpenGraphCompatibilityTests " ,
87
- dependencies: [
88
- graphCompatibilityTest ? " AttributeGraph " : " OpenGraph " ,
89
- ] ,
90
- exclude: [ " README.md " ] ,
91
- swiftSettings: graphCompatibilityTest ? [
92
- . define( " OPENGRAPH_COMPATIBILITY_TEST " )
93
- ] : [ ]
94
- )
95
- package . targets. append ( openGraphCompatibilityTestTarget)
96
-
97
- let useAG = ProcessInfo . processInfo. environment [ " OPENSWIFTUI_USE_AG " ] != nil
98
- if useAG {
99
- if !graphCompatibilityTest {
100
- let targets : [ Target ] = [
101
- // FIXME: Merge into one target
102
- // OpenGraph is a C++ & Swift mix target.
103
- // The SwiftPM support for such usage is still in progress.
104
- . target(
105
- name: " _OpenGraph " ,
106
- dependencies: [ . product( name: " OpenFoundation " , package : " OpenFoundation " ) ] ,
107
- cSettings: [ clangEnumFixSetting]
108
- ) ,
109
- . target(
110
- name: " OpenGraph " ,
111
- dependencies: [ " _OpenGraph " ] ,
112
- cSettings: [ clangEnumFixSetting]
113
- ) ,
114
- ]
115
- package . targets. append ( contentsOf: targets)
86
+ func envEnable( _ key: String , default defaultValue: Bool = false ) -> Bool {
87
+ guard let value = ProcessInfo . processInfo. environment [ key] else {
88
+ return defaultValue
116
89
}
117
- let targets : [ Target ] = [
118
- . binaryTarget( name: " AttributeGraph " , path: " Sources/AttributeGraph.xcframework " ) ,
119
- ]
120
- package . targets. append ( contentsOf: targets)
90
+ if value == " 1 " {
91
+ return true
92
+ } else if value == " 0 " {
93
+ return false
94
+ } else {
95
+ return defaultValue
96
+ }
97
+ }
98
+
99
+ #if os(macOS)
100
+ let attributeGraphCondition = envEnable ( " OPENSWIFTUI_ATTRIBUTEGRAPH " , default: true )
101
+ #else
102
+ let attributeGraphCondition = envEnable ( " OPENSWIFTUI_ATTRIBUTEGRAPH " )
103
+ #endif
104
+ if attributeGraphCondition {
121
105
openSwiftUITarget. dependencies. append (
122
- " AttributeGraph "
106
+ . product ( name : " AttributeGraph " , package : " OpenGraph " )
123
107
)
124
- var swiftSettings : [ SwiftSetting ] = ( openSwiftUITarget. swiftSettings ?? [ ] )
125
- swiftSettings. append ( . define( " OPENSWIFTUI_USE_AG " ) )
108
+ var swiftSettings = openSwiftUITarget. swiftSettings ?? [ ]
109
+ swiftSettings. append ( . define( " OPENSWIFTUI_ATTRIBUTEGRAPH " ) )
126
110
openSwiftUITarget. swiftSettings = swiftSettings
111
+ var linkerSettings = openSwiftUITarget. linkerSettings ?? [ ]
112
+ linkerSettings. append ( . unsafeFlags( [ systemFrameworkSearchFlag, " /System/Library/PrivateFrameworks/ " ] , . when( platforms: [ . macOS] ) ) )
113
+ linkerSettings. append ( . linkedFramework( " AttributeGraph " , . when( platforms: [ . macOS] ) ) )
114
+ openSwiftUITarget. linkerSettings = linkerSettings
127
115
} else {
128
- if graphCompatibilityTest {
129
- let targets : [ Target ] = [
130
- . binaryTarget( name: " AttributeGraph " , path: " Sources/AttributeGraph.xcframework " ) ,
131
- ]
132
- package . targets. append ( contentsOf: targets)
133
- }
134
- package . products. append (
135
- . library( name: " OpenGraph " , targets: [ " OpenGraph " , " _OpenGraph " ] )
136
- )
137
- let targets : [ Target ] = [
138
- // FIXME: Merge into one target
139
- // OpenGraph is a C++ & Swift mix target.
140
- // The SwiftPM support for such usage is still in progress.
141
- . target(
142
- name: " _OpenGraph " ,
143
- dependencies: [ . product( name: " OpenFoundation " , package : " OpenFoundation " ) ] ,
144
- cSettings: [ clangEnumFixSetting]
145
- ) ,
146
- . target(
147
- name: " OpenGraph " ,
148
- dependencies: [ " _OpenGraph " ] ,
149
- cSettings: [ clangEnumFixSetting]
150
- ) ,
151
- . testTarget(
152
- name: " OpenGraphTests " ,
153
- dependencies: [
154
- " OpenGraph " ,
155
- ]
156
- ) ,
157
- ]
158
- package . targets. append ( contentsOf: targets)
159
116
openSwiftUITarget. dependencies. append (
160
- " OpenGraph "
117
+ . product ( name : " OpenGraph " , package : " OpenGraph " )
161
118
)
162
119
}
163
120
164
- let useCombine = ProcessInfo . processInfo . environment [ " OPENSWIFTUI_USE_COMBINE " ] != nil
165
- if useCombine {
166
- var swiftSettings : [ SwiftSetting ] = ( openSwiftUITarget . swiftSettings ?? [ ] )
167
- swiftSettings . append ( . define ( " OPENSWIFTUI_USE_COMBINE " ) )
168
- openSwiftUITarget . swiftSettings = swiftSettings
169
- } else {
121
+ #if os(macOS)
122
+ let openCombineCondition = envEnable ( " OPENSWIFTUI_OPENCOMBINE " )
123
+ #else
124
+ let openCombineCondition = envEnable ( " OPENSWIFTUI_OPENCOMBINE " , default : true )
125
+ #endif
126
+ if openCombineCondition {
170
127
package . dependencies. append (
171
- . package ( url: " https://github.com/OpenCombine /OpenCombine.git " , from: " 0.14 .0 " )
128
+ . package ( url: " https://github.com/OpenSwiftUIProject /OpenCombine.git " , from: " 0.15 .0 " )
172
129
)
173
130
openSwiftUITarget. dependencies. append (
174
131
. product( name: " OpenCombine " , package : " OpenCombine " )
175
132
)
176
- }
177
-
178
- let useOSLog = ProcessInfo . processInfo. environment [ " OPENSWIFTUI_USE_OS_LOG " ] != nil
179
- if useOSLog {
180
133
var swiftSettings : [ SwiftSetting ] = ( openSwiftUITarget. swiftSettings ?? [ ] )
181
- swiftSettings. append ( . define( " OPENSWIFTUI_USE_OS_LOG " ) )
134
+ swiftSettings. append ( . define( " OPENSWIFTUI_OPENCOMBINE " ) )
182
135
openSwiftUITarget. swiftSettings = swiftSettings
183
- } else {
136
+ }
137
+
138
+ #if os(macOS)
139
+ let swiftLogCondition = envEnable ( " OPENSWIFTUI_SWIFT_LOG " )
140
+ #else
141
+ let swiftLogCondition = envEnable ( " OPENSWIFTUI_SWIFT_LOG " , default: true )
142
+ #endif
143
+ if swiftLogCondition {
184
144
package . dependencies. append (
185
145
. package ( url: " https://github.com/apple/swift-log " , from: " 1.5.3 " )
186
146
)
187
147
openSwiftUITarget. dependencies. append (
188
148
. product( name: " Logging " , package : " swift-log " )
189
149
)
150
+ var swiftSettings : [ SwiftSetting ] = ( openSwiftUITarget. swiftSettings ?? [ ] )
151
+ swiftSettings. append ( . define( " OPENSWIFTUI_SWIFT_LOG " ) )
152
+ openSwiftUITarget. swiftSettings = swiftSettings
190
153
}
191
154
192
- // Remove this when swift-testing is 1.0.0
193
- let useSwiftTesting = ProcessInfo . processInfo. environment [ " OPENSWIFTUI_USE_SWIFT_TESTING " ] != nil
194
- if useSwiftTesting {
195
- var swiftSettings : [ SwiftSetting ] = ( openSwiftUITestTarget. swiftSettings ?? [ ] )
196
- swiftSettings. append ( . define( " OPENSWIFTUI_USE_SWIFT_TESTING " ) )
197
- openSwiftUITestTarget. swiftSettings = swiftSettings
155
+ // Remove the check when swift-testing reaches 1.0.0
156
+ let swiftTestingCondition = envEnable ( " OPENSWIFTUI_SWIFT_TESTING " )
157
+ if swiftTestingCondition {
198
158
package . dependencies. append (
199
- // TODO: use `from` when a new version beside 0.1.0 is released
200
- . package ( url: " https://github.com/apple/swift-testing " , branch: " main " )
159
+ . package ( url: " https://github.com/apple/swift-testing " , from: " 0.2.0 " )
201
160
)
202
161
openSwiftUITestTarget. dependencies. append (
203
162
. product( name: " Testing " , package : " swift-testing " )
204
163
)
164
+ var swiftSettings : [ SwiftSetting ] = ( openSwiftUITestTarget. swiftSettings ?? [ ] )
165
+ swiftSettings. append ( . define( " OPENSWIFTUI_SWIFT_TESTING " ) )
166
+ openSwiftUITestTarget. swiftSettings = swiftSettings
205
167
}
206
168
207
- let compatibilityTest = ProcessInfo . processInfo . environment [ " OPENSWIFTUI_COMPATIBILITY_TEST " ] != nil
208
- if compatibilityTest {
169
+ let compatibilityTestCondition = envEnable ( " OPENSWIFTUI_COMPATIBILITY_TEST " )
170
+ if compatibilityTestCondition {
209
171
var swiftSettings : [ SwiftSetting ] = ( openSwiftUICompatibilityTestTarget. swiftSettings ?? [ ] )
210
172
swiftSettings. append ( . define( " OPENSWIFTUI_COMPATIBILITY_TEST " ) )
211
173
openSwiftUICompatibilityTestTarget. swiftSettings = swiftSettings
174
+ } else {
175
+ openSwiftUICompatibilityTestTarget. dependencies. append ( " OpenSwiftUI " )
212
176
}
0 commit comments