Skip to content

Commit

Permalink
Fix objc_defines (#121)
Browse files Browse the repository at this point in the history
  • Loading branch information
sergiikhliustin authored Mar 4, 2024
1 parent bd31b2b commit 1227822
Show file tree
Hide file tree
Showing 28 changed files with 173 additions and 42 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ struct BuildSettingsAnalyzer<S: XCConfigRepresentable> {
let swiftCopts: [String]
let objcCopts: [String]
let linkOpts: [String]
let objcDefines: [String]
let xcconfig: [String: StarlarkNode]
}
private let platform: Platform
Expand Down Expand Up @@ -46,6 +47,7 @@ struct BuildSettingsAnalyzer<S: XCConfigRepresentable> {
swiftCopts: parser.swiftCopts,
objcCopts: parser.objcCopts,
linkOpts: parser.linkOpts,
objcDefines: parser.objcDefines,
xcconfig: parser.xcconfig
)
}
Expand Down
11 changes: 9 additions & 2 deletions Sources/BazelPodsCore/RuleUtils.swift
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public func replacePodsEnvVars(_ value: String, options: BuildOptions, absoluteP
}

public func xcconfigSettingToList(_ value: String) -> [String] {
return value
let result = value
.components(separatedBy: "=\"")
.map {
let components = $0.components(separatedBy: "\"")
Expand All @@ -36,8 +36,15 @@ public func xcconfigSettingToList(_ value: String) -> [String] {
.joined(separator: "=\\\"")
.components(separatedBy: .whitespaces)
.map { $0.removingPercentEncoding ?? "" }
.map { $0.replacingOccurrences(of: "\"", with: "") }
.map {
if $0.contains(" ") {
return $0.replacingOccurrences(of: "\"", with: "'")
} else {
return $0.replacingOccurrences(of: "\"", with: "")
}
}
.map { $0.replacingOccurrences(of: "\\", with: "") }
.filter({ $0 != "$(inherited)"})
.filter({ !$0.isEmpty })
return result
}
2 changes: 1 addition & 1 deletion Sources/BazelPodsCore/Targets/AppleFramework.swift
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ struct AppleFramework: BazelTarget {
self.conditionalDeps = conditionalDeps

self.swiftDefines = AttrSet(basic: ["COCOAPODS"])
self.objcDefines = AttrSet(basic: ["COCOAPODS=1"])
self.objcDefines = AttrSet(basic: ["COCOAPODS=1"] + buildSettings.objcDefines)

sdkDylibs = sdkDeps.sdkDylibs
sdkFrameworks = sdkDeps.sdkFrameworks
Expand Down
6 changes: 1 addition & 5 deletions Sources/BazelPodsCore/Targets/AppleFrameworkImport.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,7 @@ import Foundation
struct AppleFrameworkImport: BazelTarget {
var loadNode: String {
let rule = appleFrameworkImport(isDynamic: isDynamic, isXCFramework: isXCFramework)
if isXCFramework {
return "load('@build_bazel_rules_apple//apple:apple.bzl', '\(rule)')"
} else {
return "load('@build_bazel_rules_ios//rules:apple_patched.bzl', '\(rule)')"
}
return "load('@build_bazel_rules_apple//apple:apple.bzl', '\(rule)')"
}
let name: String // A unique name for this rule.
// The list of files under a .framework directory which are provided to Objective-C targets that depend on this target.
Expand Down
16 changes: 12 additions & 4 deletions Sources/BazelPodsCore/XCConfig/XCConfigParser.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,15 @@ final class XCConfigParser {
private(set) var swiftCopts: [String] = []
private(set) var objcCopts: [String] = []
private(set) var linkOpts: [String] = []
private(set) var objcDefines: [String] = []
private let transformers: [String: XCConfigSettingTransformer]
private static let defaultTransformers: [XCConfigSettingTransformer] = [
HeaderSearchPathTransformer(),
ApplicationExtensionAPIOnlyTransformer(),
LinkOptsListTransformer("OTHER_LDFLAGS"),
ObjCOptsListTransformer("OTHER_CFLAGS"),
ObjCOptsListTransformer("OTHER_CPLUSPLUSFLAGS")
ObjCOptsListTransformer("OTHER_CPLUSPLUSFLAGS"),
ObjcDefinesListTransformer("GCC_PREPROCESSOR_DEFINITIONS")
]

convenience init(spec: PodSpec, subspecs: [PodSpec] = [], options: BuildOptions) {
Expand All @@ -40,7 +42,7 @@ final class XCConfigParser {
return result
})

for key in config.keys {
for key in config.keys.sorted() {
guard !XCSpecs.forceIgnore.contains(key) else { continue }
let node: StarlarkNode?
let value = replacePodsEnvVars(config[key]!, options: options, absolutePath: false)
Expand All @@ -56,13 +58,19 @@ final class XCConfigParser {
case .none:
node = nil
}
var handled = false
if let node = node {
xcconfig[key] = node
} else if let transformer = self.transformers[key] {
handled = true
}
if let transformer = self.transformers[key] {
swiftCopts += (transformer as? SwiftCoptsProvider)?.swiftCopts(value) ?? []
objcCopts += (transformer as? ObjcCoptsProvider)?.objcCopts(value) ?? []
linkOpts += (transformer as? LinkOptsProvider)?.linkOpts(value) ?? []
} else {
objcDefines += (transformer as? ObjcDefinesProvider)?.objcDefines(value) ?? []
handled = true
}
if !handled {
log_debug("unhandled xcconfig \(key)")
}
}
Expand Down
16 changes: 16 additions & 0 deletions Sources/BazelPodsCore/XCConfig/XCConfigSettingTransformer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ protocol LinkOptsProvider {
func linkOpts(_ value: String) -> [String]
}

protocol ObjcDefinesProvider {
func objcDefines(_ value: String) -> [String]
}

struct HeaderSearchPathTransformer: XCConfigSettingTransformer,
SwiftCoptsProvider,
ObjcCoptsProvider {
Expand Down Expand Up @@ -92,3 +96,15 @@ struct SwiftOptsListTransformer: XCConfigSettingTransformer,
return xcconfigSettingToList(value)
}
}

struct ObjcDefinesListTransformer: XCConfigSettingTransformer,
ObjcDefinesProvider {
let key: String
init(_ key: String) {
self.key = key
}

func objcDefines(_ value: String) -> [String] {
return xcconfigSettingToList(value)
}
}
2 changes: 1 addition & 1 deletion Sources/BazelPodsCore/XCConfig/XCSpecs.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ struct XCSpecs {
}()

// TODO: Investigate
static let forceIgnore = [
static let forceIgnore: [String] = [
"GCC_C_LANGUAGE_STANDARD"
]

Expand Down
14 changes: 7 additions & 7 deletions TestTools/Pods_Integration.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"version": "5.0.0"
},
"Alamofire": {
"version": "5.6.2"
"version": "5.9.0"
},
"Appboy-iOS-SDK": {
"version": "4.5.0"
Expand All @@ -34,10 +34,10 @@
"version": "11.2.1"
},
"Firebase": {
"version": "9.5.0"
"version": "10.20.0"
},
"FirebaseAnalytics": {
"version": "9.5.0"
"version": "10.20.0"
},
"GoogleMaps": {
"version": "7.3.0"
Expand All @@ -52,7 +52,7 @@
"version": "6.5.10"
},
"JTAppleCalendar": {
"version": "8.0.4"
"version": "8.0.5"
},
"KeychainAccess": {
"version": "4.2.2"
Expand Down Expand Up @@ -153,7 +153,7 @@
"version": "5.0.0"
},
"Alamofire": {
"version": "5.6.2"
"version": "5.9.0"
},
"Cartography": {
"version": "4.0.0"
Expand All @@ -168,10 +168,10 @@
"version": "1.5.1"
},
"Firebase": {
"version": "9.5.0"
"version": "10.20.0"
},
"FirebaseAnalytics": {
"version": "9.5.0"
"version": "10.20.0"
},
"KeychainAccess": {
"version": "4.2.2"
Expand Down
6 changes: 4 additions & 2 deletions Tests/Recorded/FirebaseCore/BUILD.bazel

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 6 additions & 2 deletions Tests/Recorded/FirebaseCrashlytics/BUILD.bazel

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 5 additions & 1 deletion Tests/Recorded/FirebasePerformance/BUILD.bazel

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 4 additions & 1 deletion Tests/Recorded/FirebaseSessions/BUILD.bazel

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 4 additions & 1 deletion Tests/Recorded/GoogleDataTransport/BUILD.bazel

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion Tests/Recorded/LookinServer/BUILD.bazel

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion Tests/Recorded/MMKVAppExtension/BUILD.bazel

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Tests/Recorded/PLMediaStreamingKit/BUILD.bazel

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion Tests/Recorded/Protobuf/BUILD.bazel

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 4 additions & 1 deletion Tests/Recorded/Realm/BUILD.bazel

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 17 additions & 2 deletions Tests/Recorded/WCDB/BUILD.bazel

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 1227822

Please sign in to comment.