Files
sourcekit-lsp/Sources/SKCore/BuildSetup.swift
2024-03-20 11:48:50 +01:00

68 lines
2.2 KiB
Swift

//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2019 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
import SKSupport
@preconcurrency import struct PackageModel.BuildFlags
import struct TSCBasic.AbsolutePath
/// Build configuration
public struct BuildSetup: Sendable {
/// Default configuration
public static let `default` = BuildSetup(
configuration: nil,
defaultWorkspaceType: nil,
path: nil,
flags: BuildFlags()
)
/// Build configuration (debug|release).
public var configuration: BuildConfiguration?
/// Default workspace type (buildserver|compdb|swiftpm). Overrides workspace type selection logic.
public var defaultWorkspaceType: WorkspaceType?
/// Build artifacts directory path. If nil, the build system may choose a default value.
public var path: AbsolutePath?
/// Additional build flags
public var flags: BuildFlags
public init(
configuration: BuildConfiguration?,
defaultWorkspaceType: WorkspaceType?,
path: AbsolutePath?,
flags: BuildFlags
) {
self.configuration = configuration
self.defaultWorkspaceType = defaultWorkspaceType
self.path = path
self.flags = flags
}
/// Create a new `BuildSetup` merging this and `other`.
///
/// For any option that only takes a single value (like `configuration`), `other` takes precedence. For all array
/// arguments, `other` is appended to the options provided by this setup.
public func merging(_ other: BuildSetup) -> BuildSetup {
var flags = self.flags
flags = flags.merging(other.flags)
return BuildSetup(
configuration: other.configuration ?? self.configuration,
defaultWorkspaceType: other.defaultWorkspaceType ?? self.defaultWorkspaceType,
path: other.path ?? self.path,
flags: flags
)
}
}