From 44593730f43651fcb02647dc78fd70ebea972e22 Mon Sep 17 00:00:00 2001 From: Alex Hoppen Date: Thu, 14 Sep 2023 09:39:12 -0700 Subject: [PATCH 1/3] Move the environment variables that we check for in Package.swift to the top and add documentation to them MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also, make some easy clean-ups: - Don’t set `SWIFTSYNTAX_NO_OSLOG_DEPENDENCY` because it’s not needed - Use the Swift settings of a target also for the corresponding test target. That’s what we already did for SwiftParser and SwiftParserTests. We should be consistent here. --- Package.swift | 54 +++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 42 insertions(+), 12 deletions(-) diff --git a/Package.swift b/Package.swift index 2354a088271..08023b22d52 100644 --- a/Package.swift +++ b/Package.swift @@ -3,36 +3,64 @@ import Foundation import PackageDescription +// MARK: - Parse build arguments + +func hasEnvironmentVariable(_ name: String) -> Bool { + return ProcessInfo.processInfo.environment[name] != nil +} + +/// Set when building swift-syntax using swift-syntax-dev-utils or in Swift CI in general. +/// +/// Modifies the build in the following ways +/// - Enables assertions even in release builds +/// - Removes the dependency of swift-syntax on os_log +/// - Enables raw syntax validation (ie. implies `SWIFTSYNTAX_ENABLE_RAWSYNTAX_VALIDATION`) +/// - Enables alternate token introspection (ie. implies `SWIFTPARSER_ENABLE_ALTERNATE_TOKEN_INTROSPECTION`) +let buildScriptEnvironment = hasEnvironmentVariable("SWIFT_BUILD_SCRIPT_ENVIRONMENT") + +/// Check that the layout of the syntax tree is correct. +/// +/// See CONTRIBUTING.md for more information +let rawSyntaxValidation = hasEnvironmentVariable("SWIFTSYNTAX_ENABLE_RAWSYNTAX_VALIDATION") + +/// Mutate the input of `assertParse` test cases. +/// +/// See CONTRIBUTING.md for more information +let alternateTokenIntrospection = hasEnvironmentVariable("SWIFTPARSER_ENABLE_ALTERNATE_TOKEN_INTROSPECTION") + +/// Assume that swift-argument-parser is checked out next to swift-syntax and use that instead of fetching a remote dependency. +let useLocalDependencies = hasEnvironmentVariable("SWIFTCI_USE_LOCAL_DEPS") + +// MARK: - Compute custom build settings + +// These build settings apply to the target and the corresponding test target. var swiftSyntaxSwiftSettings: [SwiftSetting] = [] var swiftSyntaxBuilderSwiftSettings: [SwiftSetting] = [] var swiftParserSwiftSettings: [SwiftSetting] = [] -/// If we are in a controlled CI environment, we can use internal compiler flags -/// to speed up the build or improve it. -if ProcessInfo.processInfo.environment["SWIFT_BUILD_SCRIPT_ENVIRONMENT"] != nil { +if buildScriptEnvironment { swiftSyntaxSwiftSettings += [ .define("SWIFTSYNTAX_ENABLE_ASSERTIONS") ] swiftSyntaxBuilderSwiftSettings += [ .define("SWIFTSYNTAX_NO_OSLOG_DEPENDENCY") ] - swiftParserSwiftSettings += [ - .define("SWIFTSYNTAX_NO_OSLOG_DEPENDENCY") - ] } -if ProcessInfo.processInfo.environment["SWIFTSYNTAX_ENABLE_RAWSYNTAX_VALIDATION"] != nil { +if rawSyntaxValidation { swiftSyntaxSwiftSettings += [ .define("SWIFTSYNTAX_ENABLE_RAWSYNTAX_VALIDATION") ] } -if ProcessInfo.processInfo.environment["SWIFTPARSER_ENABLE_ALTERNATE_TOKEN_INTROSPECTION"] != nil { +if alternateTokenIntrospection { swiftParserSwiftSettings += [ .define("SWIFTPARSER_ENABLE_ALTERNATE_TOKEN_INTROSPECTION") ] } +// MARK: - Build the package + let package = Package( name: "swift-syntax", platforms: [ @@ -153,10 +181,11 @@ let package = Package( .testTarget( name: "SwiftSyntaxTest", - dependencies: ["_SwiftSyntaxTestSupport", "SwiftSyntax", "SwiftSyntaxBuilder"] + dependencies: ["_SwiftSyntaxTestSupport", "SwiftSyntax", "SwiftSyntaxBuilder"], + swiftSettings: swiftSyntaxSwiftSettings ), - // MARK: Verison marker modules + // MARK: Version marker modules .target( name: "SwiftSyntax509", @@ -174,7 +203,8 @@ let package = Package( .testTarget( name: "SwiftSyntaxBuilderTest", - dependencies: ["_SwiftSyntaxTestSupport", "SwiftSyntaxBuilder"] + dependencies: ["_SwiftSyntaxTestSupport", "SwiftSyntaxBuilder"], + swiftSettings: swiftSyntaxBuilderSwiftSettings ), // MARK: SwiftSyntaxMacros @@ -303,7 +333,7 @@ package.targets.append( ) ) -if ProcessInfo.processInfo.environment["SWIFTCI_USE_LOCAL_DEPS"] == nil { +if useLocalDependencies { // Building standalone. package.dependencies += [ .package(url: "https://github.com/apple/swift-argument-parser.git", from: "1.2.2") From 672dbad4ad171a8dc325134c0818201490ce6f7a Mon Sep 17 00:00:00 2001 From: Alex Hoppen Date: Thu, 14 Sep 2023 09:40:15 -0700 Subject: [PATCH 2/3] =?UTF-8?q?Don=E2=80=99t=20set=20`--verbose`=20twice?= =?UTF-8?q?=20when=20invoking=20SwiftPM?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `invokeSwiftPM` already sets `--verbose`. No need to pass it again in the `additionalArguments`. --- .../commands/Test.swift | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/SwiftSyntaxDevUtils/Sources/swift-syntax-dev-utils/commands/Test.swift b/SwiftSyntaxDevUtils/Sources/swift-syntax-dev-utils/commands/Test.swift index 6a5c3270cf0..2e1394b42a8 100644 --- a/SwiftSyntaxDevUtils/Sources/swift-syntax-dev-utils/commands/Test.swift +++ b/SwiftSyntaxDevUtils/Sources/swift-syntax-dev-utils/commands/Test.swift @@ -32,18 +32,11 @@ struct Test: ParsableCommand, BuildCommand { private func runTests() throws { logSection("Running SwiftSyntax Tests") - var swiftpmCallArguments = [ - "--test-product", "swift-syntaxPackageTests", - ] - - if arguments.verbose { - swiftpmCallArguments += ["--verbose"] - } try invokeSwiftPM( action: "test", packageDir: Paths.packageDir, - additionalArguments: swiftpmCallArguments, + additionalArguments: ["--test-product", "swift-syntaxPackageTests"], additionalEnvironment: swiftPMEnvironmentVariables, captureStdout: false, captureStderr: false @@ -52,18 +45,10 @@ struct Test: ParsableCommand, BuildCommand { private func runCodeGenerationTests() throws { logSection("Running CodeGeneration Tests") - var swiftpmCallArguments = [ - "--test-product", "CodeGenerationPackageTests", - ] - - if arguments.verbose { - swiftpmCallArguments += ["--verbose"] - } - try invokeSwiftPM( action: "test", packageDir: Paths.codeGenerationDir, - additionalArguments: swiftpmCallArguments, + additionalArguments: ["--test-product", "CodeGenerationPackageTests"], additionalEnvironment: swiftPMEnvironmentVariables, captureStdout: false, captureStderr: false From e2f928df19f3f7d5ae5067d3aaea3430175fc191 Mon Sep 17 00:00:00 2001 From: Alex Hoppen Date: Thu, 14 Sep 2023 09:40:38 -0700 Subject: [PATCH 3/3] Remove `--disable-sandbox` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This flag wasn’t used anywhere. --- Package.swift | 2 -- .../swift-syntax-dev-utils/common/BuildArguments.swift | 3 --- .../Sources/swift-syntax-dev-utils/common/BuildCommand.swift | 4 ---- 3 files changed, 9 deletions(-) diff --git a/Package.swift b/Package.swift index 08023b22d52..2728c51e315 100644 --- a/Package.swift +++ b/Package.swift @@ -14,8 +14,6 @@ func hasEnvironmentVariable(_ name: String) -> Bool { /// Modifies the build in the following ways /// - Enables assertions even in release builds /// - Removes the dependency of swift-syntax on os_log -/// - Enables raw syntax validation (ie. implies `SWIFTSYNTAX_ENABLE_RAWSYNTAX_VALIDATION`) -/// - Enables alternate token introspection (ie. implies `SWIFTPARSER_ENABLE_ALTERNATE_TOKEN_INTROSPECTION`) let buildScriptEnvironment = hasEnvironmentVariable("SWIFT_BUILD_SCRIPT_ENVIRONMENT") /// Check that the layout of the syntax tree is correct. diff --git a/SwiftSyntaxDevUtils/Sources/swift-syntax-dev-utils/common/BuildArguments.swift b/SwiftSyntaxDevUtils/Sources/swift-syntax-dev-utils/common/BuildArguments.swift index 9d2439a47a9..6dbe6eb9c76 100644 --- a/SwiftSyntaxDevUtils/Sources/swift-syntax-dev-utils/common/BuildArguments.swift +++ b/SwiftSyntaxDevUtils/Sources/swift-syntax-dev-utils/common/BuildArguments.swift @@ -39,9 +39,6 @@ struct BuildArguments: ParsableArguments { ) var multirootDataFile: URL? - @Flag(help: "Disable sandboxes when building with SwiftPM") - var disableSandbox: Bool = false - @Flag(help: "Build in release mode.") var release: Bool = false diff --git a/SwiftSyntaxDevUtils/Sources/swift-syntax-dev-utils/common/BuildCommand.swift b/SwiftSyntaxDevUtils/Sources/swift-syntax-dev-utils/common/BuildCommand.swift index 6895ccec838..6a1d4f383f9 100644 --- a/SwiftSyntaxDevUtils/Sources/swift-syntax-dev-utils/common/BuildCommand.swift +++ b/SwiftSyntaxDevUtils/Sources/swift-syntax-dev-utils/common/BuildCommand.swift @@ -62,10 +62,6 @@ extension BuildCommand { args += ["--multiroot-data-file", multirootDataFile] } - if arguments.disableSandbox { - args += ["--disable-sandbox"] - } - if arguments.verbose { args += ["--verbose"] }