-
Notifications
You must be signed in to change notification settings - Fork 2.6k
/
private_pod_xcconfig.rb
120 lines (104 loc) · 3.53 KB
/
private_pod_xcconfig.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
module Pod
module Generator
module XCConfig
# Generates the private xcconfigs for the pod targets.
#
# The private xcconfig file for a Pod target merges the configuration
# values of the public namespaced xcconfig with the default private
# configuration values required by CocoaPods.
#
class PrivatePodXCConfig
# @return [Target] the target represented by this xcconfig.
#
attr_reader :target
# @return [Xcodeproj::Config] The public xcconfig which this one will
# use.
#
attr_reader :public_xcconfig
# @param [Target] target @see target
# @param [Xcodeproj::Config] public_xcconfig @see public_xcconfig
#
def initialize(target, public_xcconfig)
@target = target
@public_xcconfig = public_xcconfig
end
# @return [Xcodeproj::Config] The generated xcconfig.
#
attr_reader :xcconfig
# Generates and saves the xcconfig to the given path.
#
# @param [Pathname] path
# the path where the prefix header should be stored.
#
# @return [void]
#
def save_as(path)
generate.save_as(path)
end
# Generates the xcconfig.
#
# @return [Xcodeproj::Config]
#
def generate
target_build_headers = target.build_headers.search_paths(target.platform)
sandbox_public_headers = target.sandbox.public_headers.search_paths(target.platform)
search_paths = target_build_headers.concat(sandbox_public_headers).uniq
config = {
'OTHER_LDFLAGS' => XCConfigHelper.default_ld_flags(target),
'PODS_ROOT' => '${SRCROOT}',
'HEADER_SEARCH_PATHS' => XCConfigHelper.quote(search_paths),
'GCC_PREPROCESSOR_DEFINITIONS' => 'COCOAPODS=1',
# 'USE_HEADERMAP' => 'NO'
}
xcconfig_hash = add_xcconfig_namespaced_keys(public_xcconfig.to_hash, config, target.xcconfig_prefix)
@xcconfig = Xcodeproj::Config.new(xcconfig_hash)
@xcconfig.includes = [target.name]
@xcconfig
end
private
#-----------------------------------------------------------------------#
# !@group Private Helpers
# Returns the hash representation of an xcconfig which inherit from the
# namespaced keys of a given one.
#
# @param [Hash] source_config
# The xcconfig whose keys need to be inherited.
#
# @param [Hash] destination_config
# The config which should inherit the source config keys.
#
# @return [Hash] The inheriting xcconfig.
#
def add_xcconfig_namespaced_keys(source_config, destination_config, prefix)
result = destination_config.dup
source_config.each do |key, value|
prefixed_key = prefix + conditional_less_key(key)
current_value = destination_config[key]
if current_value
result[key] = "#{current_value} ${#{prefixed_key}}"
else
result[key] = "${#{prefixed_key}}"
end
end
result
end
# Strips the [*]-syntax from the given xcconfig key.
#
# @param [String] key
# The key to strip.
#
# @return [String] The stripped key.
#
def conditional_less_key(key)
brackets_index = key.index('[')
if brackets_index
key[0...brackets_index]
else
key
end
end
#-----------------------------------------------------------------------#
end
end
end
end