Files
XcodeGen/Sources/ProjectSpec/BuildScript.swift
T
Bartosz Polaczyk 2c600a7c64 Add Discovered Dependency File (#1012)
* Upgrade XCodeProj to 7.14.0

* Bump to XcodeProj to fork

* Add script discoveredDependencyFile

* Align cfbundle test

* Add changelog mock

* Update Documentation

* Update SPM manifest

* Change property name

* Verify defult dependency file to nil

* Add JSON encodable test

* Add PR number

Co-authored-by: Fernanda Geraissate <fernandag@spotify.com>
2021-02-15 12:43:41 +11:00

119 lines
4.1 KiB
Swift

import Foundation
import JSONUtilities
public struct BuildScript: Equatable {
public static let runOnlyWhenInstallingDefault = false
public static let showEnvVarsDefault = true
public static let basedOnDependencyAnalysisDefault = true
public var script: ScriptType
public var name: String?
public var shell: String?
public var inputFiles: [String]
public var outputFiles: [String]
public var inputFileLists: [String]
public var outputFileLists: [String]
public var runOnlyWhenInstalling: Bool
public let showEnvVars: Bool
public let basedOnDependencyAnalysis: Bool
public let discoveredDependencyFile: String?
public enum ScriptType: Equatable {
case path(String)
case script(String)
}
public init(
script: ScriptType,
name: String? = nil,
inputFiles: [String] = [],
outputFiles: [String] = [],
inputFileLists: [String] = [],
outputFileLists: [String] = [],
shell: String? = nil,
runOnlyWhenInstalling: Bool = runOnlyWhenInstallingDefault,
showEnvVars: Bool = showEnvVarsDefault,
basedOnDependencyAnalysis: Bool = basedOnDependencyAnalysisDefault,
discoveredDependencyFile: String? = nil
) {
self.script = script
self.name = name
self.inputFiles = inputFiles
self.outputFiles = outputFiles
self.inputFileLists = inputFileLists
self.outputFileLists = outputFileLists
self.shell = shell
self.runOnlyWhenInstalling = runOnlyWhenInstalling
self.showEnvVars = showEnvVars
self.basedOnDependencyAnalysis = basedOnDependencyAnalysis
self.discoveredDependencyFile = discoveredDependencyFile
}
}
extension BuildScript: JSONObjectConvertible {
public init(jsonDictionary: JSONDictionary) throws {
name = jsonDictionary.json(atKeyPath: "name")
inputFiles = jsonDictionary.json(atKeyPath: "inputFiles") ?? []
outputFiles = jsonDictionary.json(atKeyPath: "outputFiles") ?? []
inputFileLists = jsonDictionary.json(atKeyPath: "inputFileLists") ?? []
outputFileLists = jsonDictionary.json(atKeyPath: "outputFileLists") ?? []
if let string: String = jsonDictionary.json(atKeyPath: "script") {
script = .script(string)
} else {
let path: String = try jsonDictionary.json(atKeyPath: "path")
script = .path(path)
}
shell = jsonDictionary.json(atKeyPath: "shell")
runOnlyWhenInstalling = jsonDictionary.json(atKeyPath: "runOnlyWhenInstalling") ?? BuildScript.runOnlyWhenInstallingDefault
showEnvVars = jsonDictionary.json(atKeyPath: "showEnvVars") ?? BuildScript.showEnvVarsDefault
basedOnDependencyAnalysis = jsonDictionary.json(atKeyPath: "basedOnDependencyAnalysis") ?? BuildScript.basedOnDependencyAnalysisDefault
discoveredDependencyFile = jsonDictionary.json(atKeyPath: "discoveredDependencyFile")
}
}
extension BuildScript: JSONEncodable {
public func toJSONValue() -> Any {
var dict: [String: Any?] = [
"inputFiles": inputFiles,
"inputFileLists": inputFileLists,
"outputFiles": outputFiles,
"outputFileLists": outputFileLists,
"runOnlyWhenInstalling": runOnlyWhenInstalling,
"name": name,
"shell": shell,
]
if showEnvVars != BuildScript.showEnvVarsDefault {
dict["showEnvVars"] = showEnvVars
}
if basedOnDependencyAnalysis != BuildScript.basedOnDependencyAnalysisDefault {
dict["basedOnDependencyAnalysis"] = basedOnDependencyAnalysis
}
switch script {
case .path(let string):
dict["path"] = string
case .script(let string):
dict["script"] = string
}
if let discoveredDependencyFile = discoveredDependencyFile {
dict["discoveredDependencyFile"] = discoveredDependencyFile
}
return dict
}
}
extension BuildScript: PathContainer {
static var pathProperties: [PathProperty] {
[
.string("path"),
]
}
}