cocoapods-spm 0.0.4 → 0.1.0

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: 7d90d3841df89cb8d7eb74c8ad184992ae08ec0ed58581827bae94fecdbb9d71
4
- data.tar.gz: 90220d0a9b57102775d8819e972098f5d43a8ddb367e091f1963fe24fead0232
3
+ metadata.gz: 82ee497116a843f58d7c720e348099991ffa073f2666496fab41c807197c8e60
4
+ data.tar.gz: c057825ee4c7e194d2a45c76373e280090fd175611be45dc456d756cb5997f1f
5
5
  SHA512:
6
- metadata.gz: e67677e877f86e94e159630506ab0638429f374cb2aeed940630db7c0b05450ac40cc23fc21868caeef91be9c2c5feed11b61d4e1d2d2f23383da6329d3a1f7c
7
- data.tar.gz: cb91b35ceff530f2b475ab25a5a645cc4e9622401de79064cf0841403135c83aa440265803b7c9520931dd37d18745be7a9dcda7f030a6cfdc36000d79f30279
6
+ metadata.gz: 682233630b82af675249d02cebbb97df63887741b27b0c2036ca05d3b762f3ea8e9c58020dca8a09c58889e907e33d3316c8565ee9c102b7d27b0b6cf6f86fe3
7
+ data.tar.gz: '070698bb276319f11d4a133276cc3b4e4694770f07bfc52c946409130f4b0b22516f500e00294a6185b6e4edbc62b25fe3cc6b5be6b841dda824036a8cb41efb'
@@ -8,11 +8,28 @@ module Pod
8
8
 
9
9
  def initialize(name, options = {})
10
10
  @name = name
11
- @options = options
12
- @requirement = requirement_from(options)
13
- @url = options[:url]
14
- @relative_path = options[:relative_path]
11
+ @_options = options
12
+ @relative_path = nil
13
+ @linkage = nil
14
+ @url = nil
15
+ @requirement = nil
16
+ parse_options(options)
17
+ end
18
+
19
+ def parse_options(options)
20
+ @url = options[:url] || options[:git]
15
21
  @linkage = options[:linkage]
22
+ @relative_path = relative_path_from(options)
23
+ @requirement = requirement_from(options)
24
+ end
25
+
26
+ def relative_path_from(options)
27
+ if (relative_path = options[:relative_path])
28
+ relative_path
29
+ elsif (path = options[:path])
30
+ path = Pathname(path).expand_path
31
+ path.relative_path_from(File.absolute_path("Pods")).to_s
32
+ end
16
33
  end
17
34
 
18
35
  def inspect
@@ -24,7 +41,7 @@ module Pod
24
41
  end
25
42
 
26
43
  def to_dependencies
27
- if (products = @options[:products])
44
+ if (products = @_options[:products])
28
45
  products.map { |product| Dependency.new(@name, product: product, pkg: self) }
29
46
  else
30
47
  [Dependency.new(@name, pkg: self)]
@@ -47,16 +64,16 @@ module Pod
47
64
  private
48
65
 
49
66
  def requirement_from(options)
50
- if options[:requirement]
51
- options[:requirement]
52
- elsif (version = options.delete(:version))
67
+ return if @relative_path
68
+
69
+ if (requirement = options[:requirement])
70
+ requirement
71
+ elsif (version = options.delete(:version) || options.delete(:tag))
53
72
  { :kind => "exactVersion", :version => version }
54
73
  elsif (branch = options.delete(:branch))
55
74
  { :kind => "branch", :branch => branch }
56
75
  elsif (revision = options.delete(:commit))
57
76
  { :kind => "revision", :revision => revision }
58
- elsif options[:relative_path]
59
- nil
60
77
  else
61
78
  raise "Missing requirement for SPM package: #{name}"
62
79
  end
@@ -0,0 +1,9 @@
1
+ module Pod
2
+ module SPM
3
+ module Executables
4
+ extend Executable
5
+
6
+ executable :swift
7
+ end
8
+ end
9
+ end
@@ -45,8 +45,9 @@ module Pod
45
45
  require f
46
46
  id = File.basename(f, ".*")
47
47
  cls_name = "Pod::SPM::Hook::#{id.camelize}"
48
- UI.message "Running hook: #{cls_name}"
49
- cls_name.constantize.new(context, options).run
48
+ UI.message "- Running hook: #{cls_name}" do
49
+ cls_name.constantize.new(context, options).run
50
+ end
50
51
  end
51
52
  end
52
53
 
@@ -3,9 +3,9 @@ module Pod
3
3
  class SPMAnalyzer
4
4
  attr_reader :spm_pkgs, :spm_dependencies_by_target
5
5
 
6
- def initialize(podfile, umbrella_targets)
6
+ def initialize(podfile, aggregate_targets)
7
7
  @podfile = podfile
8
- @umbrella_targets = umbrella_targets
8
+ @aggregate_targets = aggregate_targets
9
9
  @spm_pkgs = []
10
10
  @spm_dependencies_by_target = {}
11
11
  end
@@ -27,19 +27,19 @@ module Pod
27
27
 
28
28
  def analyze_spm_dependencies_by_target
29
29
  analyze_dependencies_for_targets
30
- analyze_dependencies_for_umbrella_targets
30
+ analyze_dependencies_for_aggregate_targets
31
31
  @spm_dependencies_by_target.values.flatten.each { |d| d.pkg = spm_pkg_for(d.name) }
32
32
  end
33
33
 
34
34
  def analyze_dependencies_for_targets
35
- specs = @umbrella_targets.flat_map(&:specs).uniq
35
+ specs = @aggregate_targets.flat_map(&:specs).uniq
36
36
  specs.each do |spec|
37
37
  @spm_dependencies_by_target[spec.name] = spec.spm_dependencies
38
38
  end
39
39
  end
40
40
 
41
- def analyze_dependencies_for_umbrella_targets
42
- @umbrella_targets.each do |target|
41
+ def analyze_dependencies_for_aggregate_targets
42
+ @aggregate_targets.each do |target|
43
43
  spm_dependencies = target.specs.flat_map(&:spm_dependencies)
44
44
  @spm_dependencies_by_target[target.to_s] = merge_spm_dependencies(spm_dependencies)
45
45
  end
@@ -4,6 +4,7 @@ module Pod
4
4
  module SPM
5
5
  class MacroPrebuilder
6
6
  include Config::Mixin
7
+ include Executables
7
8
 
8
9
  attr_reader :name
9
10
 
@@ -36,12 +37,13 @@ module Pod
36
37
  raise "Package.swift not exist in #{macro_downloaded_dir}" \
37
38
  unless (macro_downloaded_dir / "Package.swift").exist?
38
39
 
39
- cmd =
40
- "cd #{macro_downloaded_dir} " \
41
- "&& swift package dump-package " \
42
- "> #{metadata_path.relative_path_from(macro_downloaded_dir)}"
43
- `#{cmd}`
44
- @metadata = Metadata.from_file(metadata_path)
40
+ UI.message "Generating metadata at: #{metadata_path}" do
41
+ raw = Dir.chdir(macro_downloaded_dir) do
42
+ swift! ["package", "dump-package"]
43
+ end
44
+ metadata_path.write(raw)
45
+ @metadata = Metadata.from_s(raw)
46
+ end
45
47
  end
46
48
 
47
49
  def prebuild_macro_impl
@@ -51,8 +53,12 @@ module Pod
51
53
  impl_module_name = @metadata.macro_impl_name
52
54
  return if spm_config.dont_prebuild_macros_if_exist? && (macro_prebuilt_dir / config / impl_module_name).exist?
53
55
 
54
- UI.puts "Building macro implementation: #{impl_module_name} (#{config})...".green
55
- `cd #{macro_downloaded_dir} && swift build -c #{config}`
56
+ UI.section "Building macro implementation: #{impl_module_name} (#{config})...".green do
57
+ Dir.chdir(macro_downloaded_dir) do
58
+ swift! ["build", "-c", config, "--product", impl_module_name]
59
+ end
60
+ end
61
+
56
62
  (macro_prebuilt_dir / config).mkpath
57
63
  FileUtils.copy_entry(
58
64
  macro_downloaded_dir / ".build" / config / impl_module_name,
@@ -1,3 +1,6 @@
1
+ require "cocoapods-spm/config"
2
+ require "cocoapods-spm/metadata"
3
+ require "cocoapods-spm/executables"
1
4
  require "cocoapods-spm/def/target_definition"
2
5
  require "cocoapods-spm/def/podfile"
3
6
  require "cocoapods-spm/def/spec"
@@ -9,8 +9,12 @@ module Pod
9
9
  @raw = raw
10
10
  end
11
11
 
12
+ def self.from_s(str)
13
+ new(JSON.parse(str))
14
+ end
15
+
12
16
  def self.from_file(path)
13
- new(JSON.parse(File.read(path)))
17
+ from_s(File.read(path))
14
18
  end
15
19
 
16
20
  def self.for_pod(name)
@@ -55,7 +55,6 @@ module Pod
55
55
  end
56
56
 
57
57
  def resolve_spm_dependencies
58
- # TODO: convert aggregate_targets to umbrella_targets?
59
58
  UI.section "Analyzing SPM dependencies" do
60
59
  @spm_analyzer ||= Pod::Installer::SPMAnalyzer.new(podfile, aggregate_targets)
61
60
  @spm_analyzer.analyze
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.0.4
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thuyen Trinh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-12-26 00:00:00.000000000 Z
11
+ date: 2023-12-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: xcodeproj
@@ -42,6 +42,7 @@ files:
42
42
  - lib/cocoapods-spm/def/spm_package.rb
43
43
  - lib/cocoapods-spm/def/target_definition.rb
44
44
  - lib/cocoapods-spm/def/xcodeproj.rb
45
+ - lib/cocoapods-spm/executables.rb
45
46
  - lib/cocoapods-spm/hooks/base.rb
46
47
  - lib/cocoapods-spm/hooks/post_integrate/add_spm_pkgs.rb
47
48
  - lib/cocoapods-spm/hooks/post_integrate/update_embed_frameworks_script.rb