cocoapods-spm 0.1.4 → 0.1.5
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 +4 -4
- data/lib/cocoapods-spm/command/clean.rb +31 -0
- data/lib/cocoapods-spm/command/macro/deprecated.rb +35 -0
- data/lib/cocoapods-spm/command/macro/fetch.rb +33 -0
- data/lib/cocoapods-spm/command/macro/prebuild.rb +37 -0
- data/lib/cocoapods-spm/command/macro.rb +14 -0
- data/lib/cocoapods-spm/command/spm.rb +2 -2
- data/lib/cocoapods-spm/config/spm.rb +6 -2
- data/lib/cocoapods-spm/def/podfile.rb +2 -3
- data/lib/cocoapods-spm/helpers/io.rb +13 -0
- data/lib/cocoapods-spm/hooks/post_integrate/5.update_settings.rb +19 -29
- data/lib/cocoapods-spm/macro/prebuilder.rb +5 -4
- data/lib/cocoapods-spm/main.rb +2 -0
- data/lib/cocoapods-spm/resolver/umbrella_package.rb +9 -4
- data/lib/cocoapods-spm/swift/package/dependency.rb +27 -0
- data/lib/cocoapods-spm/swift/package/description.rb +22 -2
- data/lib/cocoapods-spm/swift/package/project_packages.rb +14 -12
- data/lib/cocoapods-spm/swift/package/target.rb +64 -6
- metadata +9 -4
- data/lib/cocoapods-spm/command/fetch.rb +0 -31
- data/lib/cocoapods-spm/command/prebuild.rb +0 -35
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 815b5b5db4530e4fd685d421cd33fb1cde41b29abfa667aa0ba9d3c1b61f8ef0
|
4
|
+
data.tar.gz: 6befd92a1d7528b4da4a5f62a1f8676c8bfb8be0dd5cc65d8c134a7df01d5b01
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: abf5bf865306d931a1fbe53d230d17d80f62a1813a96b199c902c9f7da9dfc7ecbfff44eac5a3c7043ca73f856d66225c94f38d6ca5cf634f3b475d29f4a5476
|
7
|
+
data.tar.gz: 87e9e3935e947420740e3bdbd2d4c8ca0f36c8ad955a9ab15b2d7756c6bf58dc37aa7a3b9378df75b4db60b30c2e1e1a8b666b19d547cbe5216c907a0f89607a
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Pod
|
2
|
+
class Command
|
3
|
+
class Spm < Command
|
4
|
+
class Clean < Spm
|
5
|
+
self.summary = "Clean caches"
|
6
|
+
def self.options
|
7
|
+
[
|
8
|
+
["--all", "Clean all"],
|
9
|
+
["--macros", "Clean macros"],
|
10
|
+
["--packages", "Clean packages"],
|
11
|
+
].concat(super)
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(argv)
|
15
|
+
super
|
16
|
+
@clean_all = argv.flag?("all")
|
17
|
+
@clean_macros = argv.flag?("macros")
|
18
|
+
@clean_pkgs = argv.flag?("packages")
|
19
|
+
end
|
20
|
+
|
21
|
+
def run
|
22
|
+
to_clean = []
|
23
|
+
to_clean << spm_config.pkg_root_dir if @clean_pkgs
|
24
|
+
to_clean << spm_config.macro_root_dir if @clean_macros
|
25
|
+
to_clean << spm_config.root_dir if @clean_all
|
26
|
+
to_clean.each { |dir| dir.rmtree if dir.exist? }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Pod
|
2
|
+
class Command
|
3
|
+
class Spm < Command
|
4
|
+
def self.bind_command(cls)
|
5
|
+
Class.new(Spm) do
|
6
|
+
define_method(:cls) { cls }
|
7
|
+
|
8
|
+
self.summary = "[Deprecated] #{cls.summary}"
|
9
|
+
|
10
|
+
def self.options
|
11
|
+
cls.options
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(argv)
|
15
|
+
name = self.class.name.demodulize.downcase
|
16
|
+
warn "[DEPRECATION] `pod spm #{name}` is deprecated. Please use `pod spm macro #{name}` instead.".yellow
|
17
|
+
@_binded = cls.new(argv)
|
18
|
+
super
|
19
|
+
end
|
20
|
+
|
21
|
+
def validate!
|
22
|
+
@_binded.validate!
|
23
|
+
end
|
24
|
+
|
25
|
+
def run
|
26
|
+
@_binded.run
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
Fetch = bind_command(Macro::Fetch)
|
32
|
+
Prebuild = bind_command(Macro::Prebuild)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require "cocoapods-spm/macro/fetcher"
|
2
|
+
|
3
|
+
module Pod
|
4
|
+
class Command
|
5
|
+
class Spm < Command
|
6
|
+
class Macro < Spm
|
7
|
+
class Fetch < Macro
|
8
|
+
self.summary = "Fetch macros"
|
9
|
+
def self.options
|
10
|
+
[
|
11
|
+
["--all", "Prebuild all macros"],
|
12
|
+
["--macros=foo", "Macros to prebuild, separated by comma (,)"],
|
13
|
+
].concat(super)
|
14
|
+
end
|
15
|
+
|
16
|
+
def initialize(argv)
|
17
|
+
super
|
18
|
+
update_cli_config(
|
19
|
+
all: argv.flag?("all"),
|
20
|
+
macros: argv.option("macros", "").split(",")
|
21
|
+
)
|
22
|
+
end
|
23
|
+
|
24
|
+
def run
|
25
|
+
spm_config.macros.each do |name|
|
26
|
+
SPM::MacroFetcher.new(name: name, can_cache: true).run
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require "cocoapods-spm/macro/prebuilder"
|
2
|
+
|
3
|
+
module Pod
|
4
|
+
class Command
|
5
|
+
class Spm < Command
|
6
|
+
class Macro < Spm
|
7
|
+
class Prebuild < Macro
|
8
|
+
self.summary = "Prebuild macros"
|
9
|
+
def self.options
|
10
|
+
[
|
11
|
+
["--all", "Prebuild all macros"],
|
12
|
+
["--macros=foo", "Macros to prebuild, separated by comma (,)"],
|
13
|
+
["--config=foo", "Config (debug/release) to prebuild macros"],
|
14
|
+
].concat(super)
|
15
|
+
end
|
16
|
+
|
17
|
+
def initialize(argv)
|
18
|
+
super
|
19
|
+
update_cli_config(
|
20
|
+
all: argv.flag?("all"),
|
21
|
+
macros: argv.option("macros", "").split(","),
|
22
|
+
config: argv.option("config"),
|
23
|
+
dont_prebuild_macros: false,
|
24
|
+
dont_prebuild_macros_if_exist: false
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
def run
|
29
|
+
spm_config.macros.each do |name|
|
30
|
+
SPM::MacroPrebuilder.new(name: name).run
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require "cocoapods-spm/command/macro/fetch"
|
2
|
+
require "cocoapods-spm/command/macro/prebuild"
|
3
|
+
require "cocoapods-spm/command/macro/deprecated"
|
4
|
+
|
5
|
+
module Pod
|
6
|
+
class Command
|
7
|
+
class Spm < Command
|
8
|
+
class Macro < Spm
|
9
|
+
self.summary = "Working with macros"
|
10
|
+
self.abstract_command = true
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -58,19 +58,23 @@ module Pod
|
|
58
58
|
end
|
59
59
|
|
60
60
|
def macro_root_dir
|
61
|
-
|
61
|
+
@macro_root_dir ||= prepare_dir(root_dir / "macros")
|
62
62
|
end
|
63
63
|
|
64
64
|
def macro_downloaded_root_dir
|
65
65
|
macro_root_dir / ".downloaded"
|
66
66
|
end
|
67
67
|
|
68
|
+
def macro_prebuilt_root_dir
|
69
|
+
macro_root_dir / ".prebuilt"
|
70
|
+
end
|
71
|
+
|
68
72
|
def macro_downloaded_sandbox
|
69
73
|
@macro_downloaded_sandbox ||= Sandbox.new(macro_downloaded_root_dir)
|
70
74
|
end
|
71
75
|
|
72
76
|
def pkg_umbrella_dir
|
73
|
-
@pkg_umbrella_dir ||= prepare_dir(
|
77
|
+
@pkg_umbrella_dir ||= prepare_dir(pkg_root_dir / ".umbrella")
|
74
78
|
end
|
75
79
|
|
76
80
|
def pkg_checkouts_dir
|
@@ -18,7 +18,7 @@ module Pod
|
|
18
18
|
macro = requirements[0].delete(:macro) if requirements.first.is_a?(Hash)
|
19
19
|
macro ||= {}
|
20
20
|
unless macro.empty?
|
21
|
-
requirements[0][:path] = prepare_macro_pod_dir(name, macro)
|
21
|
+
requirements[0][:path] = prepare_macro_pod_dir(name, macro).to_s
|
22
22
|
macro_pods[name] = macro
|
23
23
|
end
|
24
24
|
origin_pod(name, *requirements)
|
@@ -67,8 +67,7 @@ module Pod
|
|
67
67
|
end
|
68
68
|
HEREDOC
|
69
69
|
|
70
|
-
path =
|
71
|
-
(path / ".prebuilt").mkpath
|
70
|
+
path = Pod::SPM::Config.instance.macro_root_dir / name
|
72
71
|
(path / "Sources").mkpath
|
73
72
|
(path / "#{name}.podspec").write(podspec_content)
|
74
73
|
path
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Pod
|
2
|
+
module IOUtils
|
3
|
+
def self.symlink(src, dst)
|
4
|
+
# NOTE: File operations are case-insensitive (foo.json and Foo.json are identical)
|
5
|
+
return if File.identical?(src, dst)
|
6
|
+
|
7
|
+
src = Pathname.new(src) unless src.is_a?(Pathname)
|
8
|
+
dst = Pathname.new(dst) unless dst.is_a?(Pathname)
|
9
|
+
dst.delete if dst.exist?
|
10
|
+
File.symlink(src.absolute? ? src : src.realpath, dst)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -7,22 +7,21 @@ module Pod
|
|
7
7
|
class UpdateSettings < Hook
|
8
8
|
def run
|
9
9
|
update_macro_plugin_flags
|
10
|
-
|
11
|
-
update_swift_include_paths
|
12
|
-
update_linker_flags
|
10
|
+
update_packages_flags
|
13
11
|
end
|
14
12
|
|
15
13
|
private
|
16
14
|
|
17
15
|
def macro_plugin_flag_by_config
|
16
|
+
path_prefix = "${PODS_ROOT}/../#{spm_config.macro_prebuilt_root_dir}"
|
18
17
|
@macro_plugin_flag_by_config ||= begin
|
19
18
|
hash = user_build_configurations.keys.to_h do |config|
|
20
19
|
flags = macro_pods.keys.map do |name|
|
21
20
|
metadata = MacroMetadata.for_pod(name)
|
22
21
|
impl_module_name = metadata.macro_impl_name
|
23
22
|
plugin_executable_path =
|
24
|
-
"
|
25
|
-
"#{impl_module_name}##{impl_module_name}"
|
23
|
+
"#{path_prefix}/#{name}/" \
|
24
|
+
"#{impl_module_name}-#{config.to_s.downcase}##{impl_module_name}"
|
26
25
|
"-load-plugin-executable \"#{plugin_executable_path}\""
|
27
26
|
end.join(" ")
|
28
27
|
[config, flags]
|
@@ -42,27 +41,20 @@ module Pod
|
|
42
41
|
)
|
43
42
|
end
|
44
43
|
|
45
|
-
def
|
46
|
-
perform_settings_update(
|
47
|
-
update_targets: lambda do |target, _, _|
|
48
|
-
{
|
49
|
-
"OTHER_SWIFT_FLAGS" => modulemap_args_for_target(target, prefix: "-Xcc"),
|
50
|
-
"OTHER_CFLAGS" => modulemap_args_for_target(target),
|
51
|
-
}
|
52
|
-
end
|
53
|
-
)
|
54
|
-
end
|
55
|
-
|
56
|
-
def update_linker_flags
|
44
|
+
def update_packages_flags
|
57
45
|
return if @spm_resolver.result.spm_pkgs.empty?
|
58
46
|
|
59
|
-
# For packages to work in the main target
|
60
47
|
perform_settings_update(
|
61
48
|
update_targets: lambda do |target, _, _|
|
62
49
|
{
|
63
|
-
"
|
50
|
+
"SOURCE_PACKAGES_CHECKOUTS_DIR" => "${PODS_CONFIGURATION_BUILD_DIR}/../../../SourcePackages/checkouts",
|
64
51
|
"FRAMEWORK_SEARCH_PATHS" => "\"${PODS_CONFIGURATION_BUILD_DIR}/PackageFrameworks\"",
|
65
52
|
"LIBRARY_SEARCH_PATHS" => "\"${PODS_CONFIGURATION_BUILD_DIR}\"",
|
53
|
+
"SWIFT_INCLUDE_PATHS" => "$(PODS_CONFIGURATION_BUILD_DIR)",
|
54
|
+
"OTHER_SWIFT_FLAGS" => modulemap_args_for_target(target, prefix: "-Xcc"),
|
55
|
+
"OTHER_CFLAGS" => modulemap_args_for_target(target),
|
56
|
+
"HEADER_SEARCH_PATHS" => header_search_paths_for(target),
|
57
|
+
"OTHER_LDFLAGS" => linker_flags_for(target),
|
66
58
|
}
|
67
59
|
end
|
68
60
|
)
|
@@ -74,16 +66,6 @@ module Pod
|
|
74
66
|
@spm_resolver.result.linker_flags_for(target)
|
75
67
|
end
|
76
68
|
|
77
|
-
def update_swift_include_paths
|
78
|
-
return if @spm_resolver.result.spm_pkgs.empty? && spm_config.all_macros.empty?
|
79
|
-
|
80
|
-
perform_settings_update(
|
81
|
-
update_targets: lambda do |_, _, _|
|
82
|
-
{ "SWIFT_INCLUDE_PATHS" => "$(PODS_CONFIGURATION_BUILD_DIR)" }
|
83
|
-
end
|
84
|
-
)
|
85
|
-
end
|
86
|
-
|
87
69
|
def modulemap_args_for_target(target, prefix: nil)
|
88
70
|
@spm_resolver
|
89
71
|
.result
|
@@ -92,6 +74,14 @@ module Pod
|
|
92
74
|
.map { |v| prefix.nil? ? v : "#{prefix} #{v}" }
|
93
75
|
.join(" ")
|
94
76
|
end
|
77
|
+
|
78
|
+
def header_search_paths_for(target)
|
79
|
+
@spm_resolver
|
80
|
+
.result
|
81
|
+
.spm_targets_for(target)
|
82
|
+
.filter_map(&:header_search_path_arg)
|
83
|
+
.join(" ")
|
84
|
+
end
|
95
85
|
end
|
96
86
|
end
|
97
87
|
end
|
@@ -26,7 +26,7 @@ module Pod
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def macro_prebuilt_dir
|
29
|
-
|
29
|
+
spm_config.macro_prebuilt_root_dir / name
|
30
30
|
end
|
31
31
|
|
32
32
|
def metadata_path
|
@@ -47,7 +47,8 @@ module Pod
|
|
47
47
|
|
48
48
|
config = spm_config.macro_config
|
49
49
|
impl_module_name = @metadata.macro_impl_name
|
50
|
-
|
50
|
+
prebuilt_binary = macro_prebuilt_dir / "#{impl_module_name}-#{config}"
|
51
|
+
return if spm_config.dont_prebuild_macros_if_exist? && prebuilt_binary.exist?
|
51
52
|
|
52
53
|
UI.section "Building macro implementation: #{impl_module_name} (#{config})...".green do
|
53
54
|
Dir.chdir(macro_downloaded_dir) do
|
@@ -55,10 +56,10 @@ module Pod
|
|
55
56
|
end
|
56
57
|
end
|
57
58
|
|
58
|
-
|
59
|
+
prebuilt_binary.parent.mkpath
|
59
60
|
FileUtils.copy_entry(
|
60
61
|
macro_downloaded_dir / ".build" / config / impl_module_name,
|
61
|
-
|
62
|
+
prebuilt_binary
|
62
63
|
)
|
63
64
|
end
|
64
65
|
end
|
data/lib/cocoapods-spm/main.rb
CHANGED
@@ -56,10 +56,15 @@ module Pod
|
|
56
56
|
end
|
57
57
|
|
58
58
|
def create_symlinks_to_local_pkgs
|
59
|
-
@spm_pkgs.select(&:local?)
|
60
|
-
|
61
|
-
|
62
|
-
|
59
|
+
local_spm_pkgs = @spm_pkgs.select(&:local?)
|
60
|
+
symlinks = local_spm_pkgs.to_h { |p| [p.slug, p.absolute_path] }
|
61
|
+
local_spm_pkgs.each do |pkg|
|
62
|
+
pkg_desc = Swift::PackageDescription.from_dir(pkg.absolute_path)
|
63
|
+
pkg_desc.dependencies.select(&:local?).each { |d| symlinks[d.slug] = d.path }
|
64
|
+
end
|
65
|
+
|
66
|
+
symlinks.each do |slug, src_dir|
|
67
|
+
IOUtils.symlink(src_dir, spm_config.pkg_checkouts_dir / slug)
|
63
68
|
end
|
64
69
|
end
|
65
70
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "cocoapods-spm/swift/package/base"
|
2
|
+
|
3
|
+
module Pod
|
4
|
+
module Swift
|
5
|
+
class PackageDescription
|
6
|
+
class Dependency < PackageDescriptionBaseObject
|
7
|
+
def local?
|
8
|
+
raw.key?("fileSystem")
|
9
|
+
end
|
10
|
+
|
11
|
+
def slug
|
12
|
+
hash["identity"]
|
13
|
+
end
|
14
|
+
|
15
|
+
def path
|
16
|
+
hash["path"]
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def hash
|
22
|
+
raw.values.flatten[0] || {}
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -4,9 +4,15 @@ module Pod
|
|
4
4
|
module Swift
|
5
5
|
class PackageDescription < PackageDescriptionBaseObject
|
6
6
|
include SPM::Config::Mixin
|
7
|
+
autoload :Dependency, "cocoapods-spm/swift/package/dependency"
|
7
8
|
autoload :Target, "cocoapods-spm/swift/package/target"
|
8
9
|
autoload :Product, "cocoapods-spm/swift/package/product"
|
9
10
|
|
11
|
+
def self.from_dir(dir)
|
12
|
+
raw = `swift package dump-package --package-path #{dir.shellescape}`
|
13
|
+
from_s(raw)
|
14
|
+
end
|
15
|
+
|
10
16
|
def src_dir
|
11
17
|
@src_dir ||= begin
|
12
18
|
path = raw.fetch("packageKind", {}).fetch("root", [])[0]
|
@@ -14,6 +20,10 @@ module Pod
|
|
14
20
|
end
|
15
21
|
end
|
16
22
|
|
23
|
+
def checkouts_dir
|
24
|
+
src_dir.parent
|
25
|
+
end
|
26
|
+
|
17
27
|
def artifacts_dir
|
18
28
|
spm_config.pkg_artifacts_dir / slug
|
19
29
|
end
|
@@ -22,12 +32,16 @@ module Pod
|
|
22
32
|
src_dir.nil? ? name : src_dir.basename.to_s
|
23
33
|
end
|
24
34
|
|
35
|
+
def dependencies
|
36
|
+
@dependencies ||= convert_field("dependencies", Dependency)
|
37
|
+
end
|
38
|
+
|
25
39
|
def targets
|
26
|
-
@targets ||=
|
40
|
+
@targets ||= convert_field("targets", Target)
|
27
41
|
end
|
28
42
|
|
29
43
|
def products
|
30
|
-
@products ||=
|
44
|
+
@products ||= convert_field("products", Product)
|
31
45
|
end
|
32
46
|
|
33
47
|
def targets_of_product(name)
|
@@ -51,6 +65,12 @@ module Pod
|
|
51
65
|
pkg = pod_config.podfile.spm_pkgs.find { |t| t.name == name }
|
52
66
|
@use_default_xcode_linking = pkg&.use_default_xcode_linking?
|
53
67
|
end
|
68
|
+
|
69
|
+
private
|
70
|
+
|
71
|
+
def convert_field(name, type)
|
72
|
+
raw.fetch(name, []).flat_map { |h| type.new(h, parent: self) }
|
73
|
+
end
|
54
74
|
end
|
55
75
|
end
|
56
76
|
end
|
@@ -21,7 +21,9 @@ module Pod
|
|
21
21
|
until to_visit.empty?
|
22
22
|
target = to_visit.pop
|
23
23
|
res << target
|
24
|
-
|
24
|
+
# Exclude macros as they wont be linked to the project's binary
|
25
|
+
# https://github.com/trinhngocthuyen/cocoapods-spm/issues/107
|
26
|
+
to_visit += target.resolve_dependencies(@pkg_desc_cache).reject(&:macro?)
|
25
27
|
end
|
26
28
|
@recursive_targets_cache[product_name] = res.uniq(&:name)
|
27
29
|
end
|
@@ -38,17 +40,17 @@ module Pod
|
|
38
40
|
@src_dir.glob("*").each do |dir|
|
39
41
|
next if dir.glob("Package*.swift").empty?
|
40
42
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
43
|
+
pkg_desc = PackageDescription.from_dir(dir)
|
44
|
+
name = pkg_desc.name
|
45
|
+
slug = dir.basename.to_s
|
46
|
+
@pkg_desc_cache[name] = pkg_desc
|
47
|
+
@pkg_desc_cache[slug] = pkg_desc
|
48
|
+
next if @json_dir.nil?
|
49
|
+
|
50
|
+
json_path = @json_dir / "#{name}.json"
|
51
|
+
slug_json_path = @json_dir / "#{slug}.json"
|
52
|
+
json_path.write(pkg_desc.raw.to_json)
|
53
|
+
IOUtils.symlink(json_path, slug_json_path) unless name == slug
|
52
54
|
end
|
53
55
|
end
|
54
56
|
end
|
@@ -28,18 +28,66 @@ module Pod
|
|
28
28
|
@product_name || name
|
29
29
|
end
|
30
30
|
|
31
|
+
def sources_path
|
32
|
+
@sources_path ||= begin
|
33
|
+
path = raw["path"] || "Sources/#{name}"
|
34
|
+
root.src_dir / path
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def header_search_path_arg
|
39
|
+
return nil if public_headers_path.nil?
|
40
|
+
|
41
|
+
path = public_headers_path.to_s.sub(root.checkouts_dir.to_s, "${SOURCE_PACKAGES_CHECKOUTS_DIR}")
|
42
|
+
"\"#{path}\""
|
43
|
+
end
|
44
|
+
|
31
45
|
def public_headers_path
|
32
|
-
raw["publicHeadersPath"]
|
46
|
+
res = sources_path / raw["publicHeadersPath"] if raw.key?("publicHeadersPath")
|
47
|
+
res = implicit_public_headers if res.nil?
|
48
|
+
res
|
49
|
+
end
|
50
|
+
|
51
|
+
def implicit_public_headers
|
52
|
+
path = sources_path / "include"
|
53
|
+
path unless path.glob("**/*.h*").empty?
|
54
|
+
end
|
55
|
+
|
56
|
+
def use_generated_modulemap?
|
57
|
+
return false if public_headers_path.nil?
|
58
|
+
|
59
|
+
# If there exists module.modulemap, it'll be auto picked up during compilation
|
60
|
+
true if public_headers_path.glob("module.modulemap").empty?
|
33
61
|
end
|
34
62
|
|
35
63
|
def clang_modulemap_arg
|
36
|
-
return nil
|
64
|
+
return nil unless use_generated_modulemap?
|
37
65
|
|
38
66
|
"-fmodule-map-file=\"${GENERATED_MODULEMAP_DIR}/#{name}.modulemap\""
|
39
67
|
end
|
40
68
|
|
41
69
|
def resources
|
42
|
-
raw.fetch("resources", []).flat_map { |h| Resources.new(h, parent: self) }
|
70
|
+
res = raw.fetch("resources", []).flat_map { |h| Resources.new(h, parent: self) }
|
71
|
+
res = implicit_resources if res.empty?
|
72
|
+
res
|
73
|
+
end
|
74
|
+
|
75
|
+
def implicit_resources
|
76
|
+
target_sources_path = raw["path"] || "Sources/#{name}"
|
77
|
+
target_sources_path = root.src_dir / target_sources_path
|
78
|
+
|
79
|
+
# Refer to the following link for the implicit resources
|
80
|
+
# https://developer.apple.com/documentation/xcode/bundling-resources-with-a-swift-package#Add-resource-files
|
81
|
+
patterns = [
|
82
|
+
"*.xcassets",
|
83
|
+
"*.xib",
|
84
|
+
"*.storyboard",
|
85
|
+
"*.xcdatamodeld",
|
86
|
+
"*.lproj",
|
87
|
+
]
|
88
|
+
return [] if patterns.all? { |p| target_sources_path.glob(p).empty? }
|
89
|
+
|
90
|
+
[Resources.new({}, parent: self)]
|
43
91
|
end
|
44
92
|
|
45
93
|
def linker_flags
|
@@ -48,8 +96,8 @@ module Pod
|
|
48
96
|
|
49
97
|
case binary_basename
|
50
98
|
when /(\S+)\.framework/ then ["-framework \"#{$1}\""]
|
51
|
-
when /lib(\S+)\.a/ then ["-
|
52
|
-
when /(\S+\.a)/ then ["\"${PODS_CONFIGURATION_BUILD_DIR}/#{$1}\""]
|
99
|
+
when /lib(\S+)\.(a|dylib)/ then ["-l\"#{$1}\""]
|
100
|
+
when /(\S+\.(a|dylib))/ then ["\"${PODS_CONFIGURATION_BUILD_DIR}/#{$1}\""]
|
53
101
|
else []
|
54
102
|
end
|
55
103
|
end
|
@@ -78,11 +126,21 @@ module Pod
|
|
78
126
|
"${BUILT_PRODUCTS_DIR}/PackageFrameworks/#{framework_name}.framework"
|
79
127
|
end
|
80
128
|
|
129
|
+
def xcframework
|
130
|
+
@xcframework ||= begin
|
131
|
+
path = (root.artifacts_dir / name).glob("*.xcframework")[0]
|
132
|
+
Xcode::XCFramework.new(name, path.realpath) unless path.nil?
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
81
136
|
def binary_basename
|
82
137
|
return nil unless binary?
|
83
138
|
|
84
139
|
@binary_basename ||= begin
|
85
|
-
|
140
|
+
xcframework_dir ||= (root.artifacts_dir / name).glob("*.xcframework")[0]
|
141
|
+
xcframework_dir ||= root.src_dir / raw["path"] if raw.key?("path")
|
142
|
+
paths = xcframework_dir.glob("*/*.{a,framework}")
|
143
|
+
UI.warn "Cannot detect binary_basename for #{name}" if paths.empty?
|
86
144
|
paths[0].basename.to_s unless paths.empty?
|
87
145
|
end
|
88
146
|
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.
|
4
|
+
version: 0.1.5
|
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-
|
11
|
+
date: 2024-08-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: xcodeproj
|
@@ -32,8 +32,11 @@ extensions: []
|
|
32
32
|
extra_rdoc_files: []
|
33
33
|
files:
|
34
34
|
- lib/cocoapods-spm.rb
|
35
|
-
- lib/cocoapods-spm/command/
|
36
|
-
- lib/cocoapods-spm/command/
|
35
|
+
- lib/cocoapods-spm/command/clean.rb
|
36
|
+
- lib/cocoapods-spm/command/macro.rb
|
37
|
+
- lib/cocoapods-spm/command/macro/deprecated.rb
|
38
|
+
- lib/cocoapods-spm/command/macro/fetch.rb
|
39
|
+
- lib/cocoapods-spm/command/macro/prebuild.rb
|
37
40
|
- lib/cocoapods-spm/command/spm.rb
|
38
41
|
- lib/cocoapods-spm/config.rb
|
39
42
|
- lib/cocoapods-spm/config/pod.rb
|
@@ -46,6 +49,7 @@ files:
|
|
46
49
|
- lib/cocoapods-spm/def/target_definition.rb
|
47
50
|
- lib/cocoapods-spm/def/xcodeproj.rb
|
48
51
|
- lib/cocoapods-spm/executables.rb
|
52
|
+
- lib/cocoapods-spm/helpers/io.rb
|
49
53
|
- lib/cocoapods-spm/helpers/patch.rb
|
50
54
|
- lib/cocoapods-spm/hooks/base.rb
|
51
55
|
- lib/cocoapods-spm/hooks/helpers/update_script.rb
|
@@ -67,6 +71,7 @@ files:
|
|
67
71
|
- lib/cocoapods-spm/resolver/umbrella_package.rb
|
68
72
|
- lib/cocoapods-spm/resolver/validator.rb
|
69
73
|
- lib/cocoapods-spm/swift/package/base.rb
|
74
|
+
- lib/cocoapods-spm/swift/package/dependency.rb
|
70
75
|
- lib/cocoapods-spm/swift/package/description.rb
|
71
76
|
- lib/cocoapods-spm/swift/package/product.rb
|
72
77
|
- lib/cocoapods-spm/swift/package/project_packages.rb
|
@@ -1,31 +0,0 @@
|
|
1
|
-
require "cocoapods-spm/macro/fetcher"
|
2
|
-
|
3
|
-
module Pod
|
4
|
-
class Command
|
5
|
-
class Spm < Command
|
6
|
-
class Fetch < Spm
|
7
|
-
self.summary = "Fetch macros"
|
8
|
-
def self.options
|
9
|
-
[
|
10
|
-
["--all", "Prebuild all macros"],
|
11
|
-
["--macros=foo", "Macros to prebuild, separated by comma (,)"],
|
12
|
-
].concat(super)
|
13
|
-
end
|
14
|
-
|
15
|
-
def initialize(argv)
|
16
|
-
super
|
17
|
-
update_cli_config(
|
18
|
-
all: argv.flag?("all"),
|
19
|
-
macros: argv.option("macros", "").split(",")
|
20
|
-
)
|
21
|
-
end
|
22
|
-
|
23
|
-
def run
|
24
|
-
spm_config.macros.each do |name|
|
25
|
-
SPM::MacroFetcher.new(name: name, can_cache: true).run
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
require "cocoapods-spm/macro/prebuilder"
|
2
|
-
|
3
|
-
module Pod
|
4
|
-
class Command
|
5
|
-
class Spm < Command
|
6
|
-
class Prebuild < Spm
|
7
|
-
self.summary = "Prebuild macros"
|
8
|
-
def self.options
|
9
|
-
[
|
10
|
-
["--all", "Prebuild all macros"],
|
11
|
-
["--macros=foo", "Macros to prebuild, separated by comma (,)"],
|
12
|
-
["--config=foo", "Config (debug/release) to prebuild macros"],
|
13
|
-
].concat(super)
|
14
|
-
end
|
15
|
-
|
16
|
-
def initialize(argv)
|
17
|
-
super
|
18
|
-
update_cli_config(
|
19
|
-
all: argv.flag?("all"),
|
20
|
-
macros: argv.option("macros", "").split(","),
|
21
|
-
config: argv.option("config"),
|
22
|
-
dont_prebuild_macros: false,
|
23
|
-
dont_prebuild_macros_if_exist: false
|
24
|
-
)
|
25
|
-
end
|
26
|
-
|
27
|
-
def run
|
28
|
-
spm_config.macros.each do |name|
|
29
|
-
SPM::MacroPrebuilder.new(name: name).run
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|