cocoapods-spm 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4b9b83e3ac7c7282f49cce528a02e34e2fed09ca2223678d1163e19cc207622d
4
- data.tar.gz: 5f53852020f6c43d8f30b779b5d368c5e12947879dce8bd36ebc957432b0a526
3
+ metadata.gz: e61ad227d509165fab0c8f3e832aa06d05524fa7c2cbfd4d7cc8f393252fc60f
4
+ data.tar.gz: 66f6bf9e254c7a99edc55f304fcf34ea60867fbbb9f138a6473eb200b6fa9f32
5
5
  SHA512:
6
- metadata.gz: e4ded83745f975f6c72c5e1661f819f402b29a86265afdb7769b3109e9ea457bd4305fcb022af68240b1181860027ca16f5c659616b5ce550f0277b338ff00f7
7
- data.tar.gz: ace85ea8679705143e58c81f0c0f4d1831a2848939f083031baff3469fb41a982172c41a7caca23a3368f3afb1ef11302ced2445497afceb35c0e35c8fcf8d12
6
+ metadata.gz: e48c19f9a2ed81601a69cca75ceda44b9353bf76f996458dc3398dad8e7b0ed2fa6fff8ce03cad91122cdcf6f7603a5cc1070b9944dfab98a0d1ff5081f82740
7
+ data.tar.gz: d26d1674591412b761b92e51154142b5e76f7515464b0e462d5b26a06caeadd3162df96308d2ff34b1cb3d27c554eb33715d2248b7e66e2e58e1d56ceb4b1214
@@ -33,10 +33,14 @@ module Pod
33
33
 
34
34
  def spm_pkgs_by_aggregate_target
35
35
  @spm_pkgs_by_aggregate_target ||= begin
36
- common_spm_pkgs = root_target_definitions.flat_map(&:spm_pkgs)
37
- target_definition_list.reject(&:abstract?).to_h do |target|
38
- [target.to_s, (common_spm_pkgs + target.spm_pkgs).uniq(&:name)]
36
+ dict = {}
37
+ to_visit = root_target_definitions.map { |t| [t, []] }
38
+ until to_visit.empty?
39
+ target, acc = to_visit.pop
40
+ dict[target.to_s] = (target.spm_pkgs + acc).uniq
41
+ to_visit += target.children.map { |t| [t, dict[target.to_s]] }
39
42
  end
43
+ dict
40
44
  end
41
45
  end
42
46
 
@@ -4,7 +4,7 @@ require "cocoapods-spm/def/spm_dependency"
4
4
  module Pod
5
5
  module SPM
6
6
  class Package
7
- attr_reader :name, :requirement, :url, :relative_path
7
+ attr_reader :name, :requirement, :url, :relative_path, :linking_opts
8
8
 
9
9
  def initialize(name, options = {})
10
10
  @name = name
@@ -13,6 +13,7 @@ module Pod
13
13
  @linkage = nil
14
14
  @url = nil
15
15
  @requirement = nil
16
+ @linking_opts = {}
16
17
  parse_options(options)
17
18
  end
18
19
 
@@ -20,6 +21,7 @@ module Pod
20
21
  @url = options[:url] || options[:git]
21
22
  @relative_path = relative_path_from(options)
22
23
  @requirement = requirement_from(options)
24
+ @linking_opts = options[:linking] || {}
23
25
  end
24
26
 
25
27
  def slug
@@ -47,6 +49,14 @@ module Pod
47
49
  @relative_path != nil
48
50
  end
49
51
 
52
+ def use_default_xcode_linking?
53
+ @linking_opts.fetch(:use_default_xcode_linking, false)
54
+ end
55
+
56
+ def linker_flags
57
+ @linking_opts[:linker_flags] || []
58
+ end
59
+
50
60
  def to_dependencies
51
61
  if (products = @_options[:products])
52
62
  products.map { |product| Dependency.new(@name, product: product, pkg: self) }
@@ -37,6 +37,7 @@ module Pod
37
37
  pkg_ref = spm_pkg_refs[dep.pkg.name]
38
38
  target_dep_ref = pkg_ref.create_target_dependency_ref(dep.product)
39
39
  target.dependencies << target_dep_ref
40
+ target.package_product_dependencies << target_dep_ref.product_ref if dep.pkg.use_default_xcode_linking?
40
41
  end
41
42
  end
42
43
  end
@@ -71,9 +71,7 @@ module Pod
71
71
  def linker_flags_for(target)
72
72
  return [] if !target.is_a?(Pod::AggregateTarget) && target.build_as_static?
73
73
 
74
- @spm_resolver.result.spm_products_for(target).map do |p|
75
- p.dynamic? ? "-framework \"#{p.name}\"" : "-l\"#{p.name}.o\""
76
- end
74
+ @spm_resolver.result.linker_flags_for(target)
77
75
  end
78
76
 
79
77
  def update_swift_include_paths
@@ -2,13 +2,16 @@ module Pod
2
2
  module SPM
3
3
  class Resolver
4
4
  class Product
5
- attr_reader :pkg, :name, :linkage, :headers_path
5
+ attr_reader :pkg, :name, :linkage, :headers_path, :binary
6
+
7
+ alias binary? binary
6
8
 
7
9
  def initialize(options = {})
8
10
  @pkg = options[:pkg]
9
11
  @name = options[:name]
10
12
  @linkage = options.fetch(:linkage, :static)
11
13
  @headers_path = options[:headers_path]
14
+ @binary = options[:binary]
12
15
  end
13
16
 
14
17
  def inspect
@@ -18,6 +21,10 @@ module Pod
18
21
  def dynamic?
19
22
  @linkage == :dynamic
20
23
  end
24
+
25
+ def linked_as_framework?
26
+ dynamic? || binary?
27
+ end
21
28
  end
22
29
  end
23
30
  end
@@ -14,6 +14,7 @@ module Pod
14
14
  def resolve
15
15
  generate_metadata
16
16
  resolve_dynamic_products
17
+ resolve_binary_targets
17
18
  resolve_headers_path_by_target
18
19
  resolve_product_deps
19
20
  end
@@ -48,6 +49,15 @@ module Pod
48
49
  end
49
50
  end
50
51
 
52
+ def resolve_binary_targets
53
+ @binary_targets ||= Set.new
54
+ @result.metadata_cache.each_value do |metadata|
55
+ metadata.targets.each do |h|
56
+ @binary_targets << h["name"] if h["type"] == "binary"
57
+ end
58
+ end
59
+ end
60
+
51
61
  def resolve_headers_path_by_target
52
62
  @headers_path_by_product ||= {}
53
63
  @result.metadata_cache.each_value do |metadata|
@@ -62,7 +72,9 @@ module Pod
62
72
  end
63
73
 
64
74
  def resolve_product_deps
65
- @result.spm_dependencies_by_target.values.flatten.uniq(&:name).each do |dep|
75
+ @result.spm_dependencies_by_target.values.flatten.uniq(&:product).each do |dep|
76
+ next if dep.pkg.use_default_xcode_linking?
77
+
66
78
  verify_product_exists_in_pkg(dep.pkg.name, dep.product)
67
79
  product = create_product(dep.pkg.name, dep.product)
68
80
  recursive_products_of(product)
@@ -78,7 +90,7 @@ module Pod
78
90
  def recursive_products_of(product)
79
91
  products = [product] + direct_products_of(product).flat_map do |child|
80
92
  [child] + recursive_products_of(child)
81
- end
93
+ end.uniq(&:name)
82
94
  @result.spm_products[product.name] = products
83
95
  products
84
96
  end
@@ -100,14 +112,10 @@ module Pod
100
112
  end
101
113
 
102
114
  def product_from_hash(hash, metadata)
103
- if hash.key?("byName")
104
- name = hash["byName"][0]
105
- pkg = metadata["name"]
106
- elsif hash.key?("product")
107
- name, pkg = hash["product"]
108
- elsif hash.key?("target")
109
- # TODO: Handle this
110
- end
115
+ type = ["byName", "target", "product"].find { |k| hash.key?(k) }
116
+ name = hash[type][0] unless type.nil?
117
+ pkg = metadata["name"]
118
+ pkg = hash["product"][1] if hash.key?("product")
111
119
  create_product(pkg, name)
112
120
  end
113
121
 
@@ -116,7 +124,8 @@ module Pod
116
124
  pkg: pkg,
117
125
  name: name,
118
126
  linkage: @dynamic_products.include?(name) ? :dynamic : :static,
119
- headers_path: @headers_path_by_product[name]
127
+ headers_path: @headers_path_by_product[name],
128
+ binary: @binary_targets.include?(name)
120
129
  )
121
130
  end
122
131
  end
@@ -31,11 +31,19 @@ module Pod
31
31
  end
32
32
 
33
33
  def spm_dependencies_for(target)
34
- @spm_dependencies_by_target[target.to_s]
34
+ @spm_dependencies_by_target[target.to_s].to_a
35
35
  end
36
36
 
37
37
  def spm_products_for(target)
38
- spm_dependencies_for(target).flat_map { |d| @spm_products[d.product] }.uniq(&:name)
38
+ spm_dependencies_for(target).flat_map { |d| @spm_products[d.product].to_a }.uniq(&:name)
39
+ end
40
+
41
+ def linker_flags_for(target)
42
+ flags = spm_dependencies_for(target).flat_map { |d| d.pkg.linker_flags }
43
+ flags += spm_products_for(target).map do |p|
44
+ p.linked_as_framework? ? "-framework \"#{p.name}\"" : "-l\"#{p.name}.o\""
45
+ end
46
+ flags.uniq
39
47
  end
40
48
  end
41
49
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocoapods-spm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thuyen Trinh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-04-12 00:00:00.000000000 Z
11
+ date: 2024-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: xcodeproj