1313import PackageDescription
1414import CompilerPluginSupport
1515
16+ /// Information about the current state of the package's git repository.
17+ let git = Context . gitInformation
18+
19+ /// Whether or not this package is being built for development rather than
20+ /// distribution as a package dependency.
21+ let buildingForDevelopment = ( git? . currentTag == nil )
22+
1623let package = Package (
1724 name: " swift-testing " ,
1825
@@ -67,19 +74,21 @@ let package = Package(
6774 . product( name: " SwiftCompilerPlugin " , package : " swift-syntax " ) ,
6875 ] ,
6976 exclude: [ " CMakeLists.txt " ] ,
70- swiftSettings: . packageSettings + [
71- // When building as a package, the macro plugin always builds as an
72- // executable rather than a library.
73- . define( " SWT_NO_LIBRARY_MACRO_PLUGINS " ) ,
77+ swiftSettings: . packageSettings + {
78+ var result = [ PackageDescription . SwiftSetting] ( )
7479
7580 // The only target which needs the ability to import this macro
7681 // implementation target's module is its unit test target. Users of the
7782 // macros this target implements use them via their declarations in the
7883 // Testing module. This target's module is never distributed to users,
7984 // but as an additional guard against accidental misuse, this specifies
8085 // the unit test target as the only allowable client.
81- . unsafeFlags( [ " -Xfrontend " , " -allowable-client " , " -Xfrontend " , " TestingMacrosTests " ] ) ,
82- ]
86+ if buildingForDevelopment {
87+ result. append ( . unsafeFlags( [ " -Xfrontend " , " -allowable-client " , " -Xfrontend " , " TestingMacrosTests " ] ) )
88+ }
89+
90+ return result
91+ } ( )
8392 ) ,
8493
8594 // "Support" targets: These contain C family code and are used exclusively
@@ -122,14 +131,23 @@ extension Array where Element == PackageDescription.SwiftSetting {
122131 /// Settings intended to be applied to every Swift target in this package.
123132 /// Analogous to project-level build settings in an Xcode project.
124133 static var packageSettings : Self {
125- availabilityMacroSettings + [
126- . unsafeFlags( [ " -require-explicit-sendable " ] ) ,
134+ var result = availabilityMacroSettings
135+
136+ if buildingForDevelopment {
137+ result. append ( . unsafeFlags( [ " -require-explicit-sendable " ] ) )
138+ }
139+
140+ result += [
127141 . enableUpcomingFeature( " ExistentialAny " ) ,
128142 . enableExperimentalFeature( " SuppressedAssociatedTypes " ) ,
129143
130144 . enableExperimentalFeature( " AccessLevelOnImport " ) ,
131145 . enableUpcomingFeature( " InternalImportsByDefault " ) ,
132146
147+ // When building as a package, the macro plugin always builds as an
148+ // executable rather than a library.
149+ . define( " SWT_NO_LIBRARY_MACRO_PLUGINS " ) ,
150+
133151 . define( " SWT_TARGET_OS_APPLE " , . when( platforms: [ . macOS, . iOS, . macCatalyst, . watchOS, . tvOS, . visionOS] ) ) ,
134152
135153 . define( " SWT_NO_EXIT_TESTS " , . when( platforms: [ . iOS, . watchOS, . tvOS, . visionOS, . wasi, . android] ) ) ,
@@ -138,6 +156,8 @@ extension Array where Element == PackageDescription.SwiftSetting {
138156 . define( " SWT_NO_DYNAMIC_LINKING " , . when( platforms: [ . wasi] ) ) ,
139157 . define( " SWT_NO_PIPES " , . when( platforms: [ . wasi] ) ) ,
140158 ]
159+
160+ return result
141161 }
142162
143163 /// Settings which define commonly-used OS availability macros.
@@ -175,7 +195,7 @@ extension Array where Element == PackageDescription.CXXSetting {
175195 ]
176196
177197 // Capture the testing library's version as a C++ string constant.
178- if let git = Context . gitInformation {
198+ if let git {
179199 let testingLibraryVersion = if let tag = git. currentTag {
180200 tag
181201 } else if git. hasUncommittedChanges {
0 commit comments