Hi! I'm maintaining a macros library with the following dependency on swift-syntax:
let dependencies: [Package.Dependency] = [
.package(url: "https://github.com/apple/swift-syntax.git", "509.0.0"..<"600.0.0"),
]
My goal is to iterate through those supported versions and run my unit tests against each one. Here is what that ends up looking like when I try validating my package "manually" across versions by-hand:
let dependencies: [Package.Dependency] = [
// .package(url: "https://github.com/apple/swift-syntax.git", "509.0.0"..<"600.0.0"),
// .package(url: "https://github.com/apple/swift-syntax.git", exact: "510.0.2"),
// .package(url: "https://github.com/apple/swift-syntax.git", exact: "510.0.1"),
// .package(url: "https://github.com/apple/swift-syntax.git", exact: "510.0.0"),
// .package(url: "https://github.com/apple/swift-syntax.git", exact: "509.1.1"),
// .package(url: "https://github.com/apple/swift-syntax.git", exact: "509.1.0"),
// .package(url: "https://github.com/apple/swift-syntax.git", exact: "509.0.2"),
// .package(url: "https://github.com/apple/swift-syntax.git", exact: "509.0.1"),
.package(url: "https://github.com/apple/swift-syntax.git", exact: "509.0.0"),
]
Ehh… not great. My preference would be to somehow "override" the dependency through the command-line (and then write a script that iterates through those options for me before a clean test build).
I attempted to try and pass a flag through to Xswiftc:
// swift build -Xswiftc -DSWIFT_SYNTAX_509_0_0
#if SWIFT_SYNTAX_509_0_0
let dependencies: [Package.Dependency] = [
.package(url: "https://github.com/apple/swift-syntax.git", exact: "509.0.0"),
]
// swift build -Xswiftc -DSWIFT_SYNTAX_509_0_1
#elseif SWIFT_SYNTAX_509_0_1
let dependencies: [Package.Dependency] = [
.package(url: "https://github.com/apple/swift-syntax.git", exact: "509.0.1"),
]
#else
...
#endif
But it looks like it is a known issue that these flags are meant for forwarding to targets and are not accessible to SwiftPM while the package itself is constructed.
It sounds like using environment variables (which are available to SwiftPM) might be a legit workaround… but I'm also open to any other modern patterns the community might know about. Does anyone have a repo or an example for doing something along these lines? Thanks!