cocoapods-spm 0.1.2 → 0.1.3

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: 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