Skip to content

Commit

Permalink
Merge pull request #22 from sergeykhliustin/remove-user-option
Browse files Browse the repository at this point in the history
Delete (-=) operator for `--user-options`
  • Loading branch information
sergeykhliustin authored Feb 2, 2023
2 parents bdad747 + 669367a commit 0d17e15
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 11 deletions.
9 changes: 5 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ Enjoy :)

### Generator options
```
USAGE: Generator <pods-json> --src <src> [--min-ios <min-ios>] [--deps-prefix <deps-prefix>] [--pods-root <pods-root>] [--frameworks] [--concurrent] [--print-output] [--dry-run] [--add-podspec] [--color <color>] [--user-options <user-options> ...]
UUSAGE: Generator <pods-json> --src <src> [--min-ios <min-ios>] [--deps-prefix <deps-prefix>] [--pods-root <pods-root>] [--frameworks] [--concurrent] [--print-output] [--dry-run] [--add-podspec] [--color <color>] [--user-options <user-options> ...]
ARGUMENTS:
<pods-json> Pods.json
Expand All @@ -106,10 +106,11 @@ OPTIONS:
--color <color> Logs color (auto|yes|no) (default: auto)
--user-options <user-options>
User extra options.
Supported fields for '+=' (add): 'sdk_dylibs', 'sdk_frameworks', 'weak_sdk_frameworks'.
Supported fields for '+=' (add): 'sdk_dylibs', 'sdk_frameworks', 'weak_sdk_frameworks', 'deps'.
Supported fields for '-=' (remove): 'sdk_dylibs', 'sdk_frameworks', 'weak_sdk_frameworks', 'deps'.
Supported fields for ':=' (override): 'testonly', 'link_dynamic'.
Example:
'SomePod.sdk_dylibs += something'
'SomePod.sdk_dylibs += something,something'
'SomePod.testonly := true'
-h, --help Show help information.
```
Expand All @@ -133,7 +134,7 @@ OPTIONS:
Supported fields for '+=' (add): 'sdk_dylibs', 'sdk_frameworks', 'weak_sdk_frameworks'.
Supported fields for ':=' (override): 'testonly', 'link_dynamic'.
Example:
'SomePod.sdk_dylibs += something'
'SomePod.sdk_dylibs += something,something'
'SomePod.testonly := true'
-h, --help Show help information.
```
Expand Down
5 changes: 3 additions & 2 deletions Sources/Compiler/RootCommand.swift
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,11 @@ struct RootCommand: ParsableCommand {
@Option(name: .long, parsing: .upToNextOption,
help: """
User extra options.
Supported fields for '+=' (add): 'sdk_dylibs', 'sdk_frameworks', 'weak_sdk_frameworks'.
Supported fields for '+=' (add): 'sdk_dylibs', 'sdk_frameworks', 'weak_sdk_frameworks', 'deps'.
Supported fields for '-=' (remove): 'sdk_dylibs', 'sdk_frameworks', 'weak_sdk_frameworks', 'deps'.
Supported fields for ':=' (override): 'testonly', 'link_dynamic'.
Example:
'SomePod.sdk_dylibs += something'
'SomePod.sdk_dylibs += something,something'
'SomePod.testonly := true'
"""
)
Expand Down
34 changes: 31 additions & 3 deletions Sources/CompilerCore/Targets/AppleFramework.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,11 @@
// Created by Sergey Khliustin on 04.08.2022.
//

public enum AppleFrameworkConfigurableAddKeys : String {
public enum AppleFrameworkConfigurableAddDeleteKeys : String {
case sdkDylibs = "sdk_dylibs"
case sdkFrameworks = "sdk_frameworks"
case weakSdkFrameworks = "weak_sdk_frameworks"
case deps = "deps"
}

public enum AppleFrameworkConfigurableOverriderKeys: String {
Expand Down Expand Up @@ -40,7 +41,7 @@ struct AppleFramework: BazelTarget, UserConfigurable {
let resourceBundles: AttrSet<[String: Set<String>]>

var deps: AttrSet<[String]>
let conditionalDeps: [String: [Arch]]
var conditionalDeps: [String: [Arch]]
let vendoredXCFrameworks: AttrSet<[XCFramework]>
let vendoredStaticFrameworks: AttrSet<Set<String>>
let vendoredDynamicFrameworks: AttrSet<Set<String>>
Expand Down Expand Up @@ -142,7 +143,7 @@ struct AppleFramework: BazelTarget, UserConfigurable {
}

mutating func add(configurableKey: String, value: Any) {
guard let key = AppleFrameworkConfigurableAddKeys(rawValue: configurableKey) else { return }
guard let key = AppleFrameworkConfigurableAddDeleteKeys(rawValue: configurableKey) else { return }
switch key {
case .sdkDylibs:
if let value = value as? String {
Expand All @@ -156,6 +157,33 @@ struct AppleFramework: BazelTarget, UserConfigurable {
if let value = value as? String {
self.weakSdkFrameworks = self.weakSdkFrameworks <> AttrSet(basic: [value])
}
case .deps:
if let value = value as? String {
self.deps = self.deps <> AttrSet(basic: [value])
}
}
}

mutating func delete(configurableKey: String, value: Any) {
guard let key = AppleFrameworkConfigurableAddDeleteKeys(rawValue: configurableKey) else { return }
switch key {
case .sdkDylibs:
if let value = value as? String {
self.sdkDylibs = self.sdkDylibs.map({ $0.filter({ $0 != value }) })
}
case .sdkFrameworks:
if let value = value as? String {
self.sdkFrameworks = self.sdkFrameworks.map({ $0.filter({ $0 != value }) })
}
case .weakSdkFrameworks:
if let value = value as? String {
self.weakSdkFrameworks = self.weakSdkFrameworks.map({ $0.filter({ $0 != value }) })
}
case .deps:
if let value = value as? String {
self.deps = self.deps.map({ $0.filter({ $0 != value }) })
self.conditionalDeps = self.conditionalDeps.filter({ $0.key != value })
}
}
}

Expand Down
17 changes: 17 additions & 0 deletions Sources/CompilerCore/UserConfigurable.swift
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ enum UserConfigurableOpt: String {
/// EX: "Some.copts += -foo, -bar"
case Append = "+="

/// Remove values
/// EX: "Some.deps -= dep"
case Delete = "-="

/// Override value
/// EX: "Some.testonly := true"
case Override = ":="
Expand All @@ -38,6 +42,9 @@ protocol UserConfigurable: BazelTarget {
/// Add a given value to a key
mutating func add(configurableKey: String, value: Any)

/// Remove a given value
mutating func delete(configurableKey: String, value: Any)

/// Override a given key with new value
mutating func override(configurableKey: String, value: Any)

Expand Down Expand Up @@ -65,6 +72,16 @@ extension UserConfigurable {
let value = value.trimmingCharacters(in: .whitespaces)
copy.add(configurableKey: key, value: value)
}
} else if keyPathOperator.contains(UserConfigurableOpt.Delete.rawValue) {
let components = keyPathOperator.components(separatedBy: UserConfigurableOpt.Delete.rawValue)
guard components.count > 1 else { continue }

let key = components[0].trimmingCharacters(in: .whitespaces)
let values = components[1].components(separatedBy: ",")
for value in values {
let value = value.trimmingCharacters(in: .whitespaces)
copy.delete(configurableKey: key, value: value)
}
} else if keyPathOperator.contains(UserConfigurableOpt.Override.rawValue) {
let components = keyPathOperator.components(separatedBy: UserConfigurableOpt.Override.rawValue)
guard components.count > 1 else { continue }
Expand Down
5 changes: 3 additions & 2 deletions Sources/Generator/RootCommand.swift
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,11 @@ struct RootCommand: ParsableCommand {
@Option(name: .long, parsing: .upToNextOption,
help: """
User extra options.
Supported fields for '+=' (add): 'sdk_dylibs', 'sdk_frameworks', 'weak_sdk_frameworks'.
Supported fields for '+=' (add): 'sdk_dylibs', 'sdk_frameworks', 'weak_sdk_frameworks', 'deps'.
Supported fields for '-=' (remove): 'sdk_dylibs', 'sdk_frameworks', 'weak_sdk_frameworks', 'deps'.
Supported fields for ':=' (override): 'testonly', 'link_dynamic'.
Example:
'SomePod.sdk_dylibs += something'
'SomePod.sdk_dylibs += something,something'
'SomePod.testonly := true'
"""
)
Expand Down

0 comments on commit 0d17e15

Please sign in to comment.