xcode-archive-cache 0.0.10.pre.1 → 0.0.10.pre.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ea58d5804a6b809038af9c443a49426935c3f1b82673ce4029cadcd5dcdb21a2
4
- data.tar.gz: edae37d1c99f73465be2486e910e32bb4b445811d4ef8dd4db91e45853f34a6e
3
+ metadata.gz: de08375420b8d97642ead0ec3ebc63a78f9f2c372347038054f3b66927d7cad4
4
+ data.tar.gz: 3712950c9e6038a5193a0db108127a5e89cb29edea098929e527346db24d838c
5
5
  SHA512:
6
- metadata.gz: a753ce67b8129209b5da8e0afbdbd542da9660651ae47559fcfacbcf25ed9d35bedc45dbc05d23f13b33b1e4d05885f54bb43aaea2d3e2b4085f3fc1e960be63
7
- data.tar.gz: c90dee530d492db4c3986c0e0ca6d651e0099a8f0348cdb4f5fa0110a32d143932809bdfce295ab4dc36e8180456320a208ff9f927cc2478f9b8d086cc016c32
6
+ metadata.gz: 8e6f791d1a84b4835981617e9092e5a24db3beaa6ee3119b351c47ff99cbed1a222c0168659e5b2bc89c3bc999fb57fd47611c0eb6daf601ef50985ef4959469
7
+ data.tar.gz: 588243bf92bf878d5020296f69252a83bc99eb58da5150237b62881a9e023539f6365e630e191b1f39bfc6681dbfeda87d321ce915459b1f624280e65c6ce3af
@@ -23,6 +23,28 @@ module XcodeArchiveCache
23
23
  end
24
24
  end
25
25
 
26
+ # @param [Xcodeproj::Project::Object::XCBuildConfiguration] build_configuration
27
+ # @param [XcodeArchiveCache::BuildGraph::Node] node
28
+ #
29
+ def add_static_lib_linker_flag(build_configuration, node)
30
+ flag = get_linker_flag(node)
31
+ if flag
32
+ debug("using ld flag #{flag}")
33
+ add_linker_flag(build_configuration, flag)
34
+ end
35
+ end
36
+
37
+ # @param [Xcodeproj::Project::Object::XCBuildConfiguration] build_configuration
38
+ # @param [XcodeArchiveCache::BuildGraph::Node] node
39
+ #
40
+ def add_static_lib_libtool_flag(build_configuration, node)
41
+ flag = get_linker_flag(node)
42
+ if flag
43
+ debug("using libtool flag #{flag}")
44
+ add_libtool_flag(build_configuration, flag)
45
+ end
46
+ end
47
+
26
48
  # @param [Xcodeproj::Project::Object::XCBuildConfiguration] build_configuration
27
49
  # @param [XcodeArchiveCache::BuildGraph::Node] node
28
50
  #
@@ -93,6 +115,7 @@ module XcodeArchiveCache
93
115
  OTHER_CFLAGS_KEY = "OTHER_CFLAGS"
94
116
  OTHER_CPLUSPLUSFLAGS_KEY = "OTHER_CPLUSPLUSFLAGS"
95
117
  OTHER_LDFLAGS_KEY = "OTHER_LDFLAGS"
118
+ OTHER_LIBTOOLFLAGS_KEY = "OTHER_LIBTOOLFLAGS"
96
119
  OTHER_SWIFT_FLAGS_KEY = "OTHER_SWIFT_FLAGS"
97
120
  INHERITED_SETTINGS_VALUE = "$(inherited)"
98
121
 
@@ -103,6 +126,13 @@ module XcodeArchiveCache
103
126
  add_flag_to_configuration(build_configuration, OTHER_LDFLAGS_KEY, flag)
104
127
  end
105
128
 
129
+ # @param [Xcodeproj::Project::Object::XCBuildConfiguration] build_configuration
130
+ # @param [String] flag
131
+ #
132
+ def add_libtool_flag(build_configuration, flag)
133
+ add_flag_to_configuration(build_configuration, OTHER_LIBTOOLFLAGS_KEY, flag)
134
+ end
135
+
106
136
  # @param [Xcodeproj::Project::Object::XCBuildConfiguration] build_configuration
107
137
  # @param [String] flag
108
138
  #
@@ -191,6 +221,18 @@ module XcodeArchiveCache
191
221
  "-framework \"#{framework_name}\""
192
222
  end
193
223
 
224
+ # @param [XcodeArchiveCache::BuildGraph::Node] node
225
+ #
226
+ # @return [String]
227
+ #
228
+ # libSomething.a -> -lSomething
229
+ #
230
+ def get_linker_flag(node)
231
+ return unless node.product_file_name
232
+
233
+ node.product_file_name.gsub(/^lib/, "-l").gsub(/\.a$/, "")
234
+ end
235
+
194
236
  # @param [Hash] build_settings
195
237
  # @param [String] flags_key
196
238
  # @param [Array<String>] old_modulemap_names
@@ -12,11 +12,21 @@ module XcodeArchiveCache
12
12
  debug("removing #{prebuilt_target.name} from #{dependent_target.display_name}")
13
13
 
14
14
  remove_from_dependencies(prebuilt_target, dependent_target)
15
+ remove_from_linking(prebuilt_node, dependent_target)
15
16
  remove_from_schemes(prebuilt_target, dependent_target)
16
17
 
17
18
  debug("finished removing #{prebuilt_target.name} from #{dependent_target.display_name}")
18
19
  end
19
20
 
21
+ # @param [XcodeArchiveCache::BuildGraph::Node] prebuilt_node
22
+ # @param [Xcodeproj::Project::Object::PBXNativeTarget] dependent_target
23
+ #
24
+ # @return [Boolean]
25
+ #
26
+ def is_linked(prebuilt_node, dependent_target)
27
+ !find_linked(prebuilt_node, dependent_target).empty?
28
+ end
29
+
20
30
  private
21
31
 
22
32
  # @param [Xcodeproj::Project::Object::PBXNativeTarget] prebuilt_target
@@ -46,7 +56,7 @@ module XcodeArchiveCache
46
56
  #
47
57
  def remove_from_linking(prebuilt_node, dependent_target)
48
58
  debug("product name is #{prebuilt_node.product_file_name}")
49
- frameworks = dependent_target.frameworks_build_phase.files.select {|file| file.display_name == prebuilt_node.product_file_name}
59
+ frameworks = find_linked(prebuilt_node, dependent_target)
50
60
  debug("found #{frameworks.length} linked products")
51
61
 
52
62
  frameworks.each do |framework|
@@ -67,6 +77,17 @@ module XcodeArchiveCache
67
77
  end
68
78
  end
69
79
 
80
+ # @param [Xcodeproj::Project::Object::PBXNativeTarget] dependent_target
81
+ # @param [XcodeArchiveCache::BuildGraph::Node] prebuilt_node
82
+ #
83
+ # @return [Array<PBXBuildFile>]
84
+ #
85
+ def find_linked(prebuilt_node, dependent_target)
86
+ return [] unless dependent_target.frameworks_build_phase
87
+
88
+ dependent_target.frameworks_build_phase.files.select {|file| file.display_name == prebuilt_node.product_file_name}
89
+ end
90
+
70
91
  # @param [Xcodeproj::Project::Object::PBXNativeTarget] target
71
92
  #
72
93
  # @return [Array<Xcodeproj::XCScheme>]
@@ -43,7 +43,7 @@ module XcodeArchiveCache
43
43
  modulemap_fixer.fix_modulemap(node)
44
44
  end
45
45
 
46
- add_as_prebuilt_dependency(node, target, node.is_root)
46
+ add_as_prebuilt_dependency(node, target)
47
47
  remove_native_target_from_project(node)
48
48
  end
49
49
 
@@ -146,8 +146,7 @@ module XcodeArchiveCache
146
146
  .all_dependent_nodes
147
147
  .select(&:waiting_for_rebuild)
148
148
  dependent_to_rebuild.each do |dependent_node|
149
- should_link = prebuilt_node.dependent.include?(dependent_node)
150
- add_as_prebuilt_dependency(prebuilt_node, dependent_node.native_target, should_link)
149
+ add_as_prebuilt_dependency(prebuilt_node, dependent_node.native_target)
151
150
  end
152
151
 
153
152
  remove_native_target_from_project(prebuilt_node)
@@ -164,7 +163,7 @@ module XcodeArchiveCache
164
163
  # @param [XcodeArchiveCache::BuildGraph::Node] prebuilt_node
165
164
  # @param [Xcodeproj::Project::Object::PBXNativeTarget] dependent_target
166
165
  #
167
- def add_as_prebuilt_dependency(prebuilt_node, dependent_target, should_link)
166
+ def add_as_prebuilt_dependency(prebuilt_node, dependent_target)
168
167
  debug("adding #{prebuilt_node.name} as prebuilt to #{dependent_target.display_name}")
169
168
 
170
169
  unless prebuilt_node.has_acceptable_product?
@@ -174,7 +173,7 @@ module XcodeArchiveCache
174
173
  if prebuilt_node.has_framework_product?
175
174
  add_as_prebuilt_framework(prebuilt_node, dependent_target)
176
175
  elsif prebuilt_node.has_static_library_product?
177
- add_as_prebuilt_static_lib(prebuilt_node, dependent_target, should_link)
176
+ add_as_prebuilt_static_lib(prebuilt_node, dependent_target)
178
177
  end
179
178
 
180
179
  debug("done with #{prebuilt_node.name} for #{dependent_target.display_name}")
@@ -190,14 +189,17 @@ module XcodeArchiveCache
190
189
  build_flags_changer.add_framework_search_path(build_configuration, artifact_location)
191
190
  build_flags_changer.add_framework_headers_iquote(build_configuration, artifact_location, prebuilt_node)
192
191
 
192
+ if dependency_remover.is_linked(prebuilt_node, dependent_target)
193
+ build_flags_changer.add_framework_linker_flag(build_configuration, prebuilt_node)
194
+ end
195
+
193
196
  dependency_remover.remove_dependency(prebuilt_node, dependent_target)
194
197
  end
195
198
 
196
199
  # @param [XcodeArchiveCache::BuildGraph::Node] prebuilt_node
197
200
  # @param [Xcodeproj::Project::Object::PBXNativeTarget] dependent_target
198
- # @param [Boolean] should_link
199
201
  #
200
- def add_as_prebuilt_static_lib(prebuilt_node, dependent_target, should_link)
202
+ def add_as_prebuilt_static_lib(prebuilt_node, dependent_target)
201
203
  build_configuration = find_build_configuration(dependent_target)
202
204
 
203
205
  injected_modulemap_file_path = storage.get_modulemap_path(prebuilt_node)
@@ -206,10 +208,16 @@ module XcodeArchiveCache
206
208
  build_flags_changer.fix_module_map_path(build_configuration, modulemap_file_names, injected_modulemap_file_path)
207
209
  end
208
210
 
209
- # if should_link
210
- artifact_location = storage.get_storage_path(prebuilt_node)
211
- build_flags_changer.add_library_search_path(build_configuration, artifact_location)
212
- # end
211
+ artifact_location = storage.get_storage_path(prebuilt_node)
212
+ build_flags_changer.add_library_search_path(build_configuration, artifact_location)
213
+
214
+ if dependency_remover.is_linked(prebuilt_node, dependent_target)
215
+ if dependent_target.product_type == Xcodeproj::Constants::PRODUCT_TYPE_UTI[:static_library]
216
+ build_flags_changer.add_static_lib_libtool_flag(build_configuration, prebuilt_node)
217
+ else
218
+ build_flags_changer.add_static_lib_linker_flag(build_configuration, prebuilt_node)
219
+ end
220
+ end
213
221
 
214
222
  dependency_remover.remove_dependency(prebuilt_node, dependent_target)
215
223
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xcode-archive-cache
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10.pre.1
4
+ version: 0.0.10.pre.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ilya Dyakonov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-13 00:00:00.000000000 Z
11
+ date: 2020-04-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: xcodeproj