cocoapods-mapfile 0.2.0 → 0.2.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.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +80 -43
  3. data/bin/{hmap_writer → hmapfile} +2 -2
  4. data/lib/cocoapods_plugin.rb +18 -6
  5. data/lib/hmap/command/hmap_gen.rb +52 -0
  6. data/lib/{cocoapods-hmap → hmap}/command/hmap_reader.rb +14 -11
  7. data/lib/hmap/command/hmap_writer.rb +55 -0
  8. data/lib/hmap/command.rb +28 -0
  9. data/lib/hmap/constants.rb +198 -0
  10. data/lib/{cocoapods-hmap → hmap}/exceptions.rb +0 -0
  11. data/lib/{cocoapods-hmap → hmap/helper}/executable.rb +5 -6
  12. data/lib/{cocoapods-hmap → hmap/helper}/utils.rb +0 -4
  13. data/lib/hmap/hmap/hmap_bucketstr.rb +20 -0
  14. data/lib/{cocoapods-hmap → hmap/hmap}/hmap_reader.rb +4 -19
  15. data/lib/{cocoapods-hmap/hmap_save.rb → hmap/hmap/hmap_saver.rb} +21 -6
  16. data/lib/{cocoapods-hmap → hmap/hmap}/hmap_struct.rb +5 -4
  17. data/lib/hmap/hmap/hmap_writer.rb +52 -0
  18. data/lib/{cocoapods-hmap → hmap/hmap}/mapfile.rb +1 -1
  19. data/lib/hmap/user_interface.rb +22 -0
  20. data/lib/hmap/version.rb +5 -0
  21. data/lib/hmap/xc/context.rb +23 -0
  22. data/lib/hmap/xc/header_entry.rb +55 -0
  23. data/lib/hmap/xc/header_type.rb +32 -0
  24. data/lib/hmap/xc/pbx_helper.rb +68 -0
  25. data/lib/hmap/xc/product_helper.rb +36 -0
  26. data/lib/hmap/xc/resolver.rb +129 -0
  27. data/lib/hmap/xc/target/build_setting.rb +126 -0
  28. data/lib/hmap/xc/target/target.rb +76 -0
  29. data/lib/hmap/xc/target/target_context.rb +29 -0
  30. data/lib/hmap/xc/target/target_helper.rb +114 -0
  31. data/lib/hmap/xc/target/target_vfs.rb +122 -0
  32. data/lib/hmap/xc/target/xcconfig_helper.rb +109 -0
  33. data/lib/hmap/xc/workspace/project.rb +120 -0
  34. data/lib/hmap/xc/workspace/project_helper.rb +92 -0
  35. data/lib/hmap/xc/workspace/workspace.rb +83 -0
  36. data/lib/hmap.rb +24 -0
  37. metadata +76 -38
  38. data/bin/hmap_reader +0 -12
  39. data/lib/cocoapods-hmap/command/hmap_gen.rb +0 -52
  40. data/lib/cocoapods-hmap/framework/framework_vfs.rb +0 -95
  41. data/lib/cocoapods-hmap/helper/build_setting_helper.rb +0 -40
  42. data/lib/cocoapods-hmap/helper/pods_helper.rb +0 -104
  43. data/lib/cocoapods-hmap/helper/xcconfig_helper.rb +0 -82
  44. data/lib/cocoapods-hmap/hmap_writer.rb +0 -107
  45. data/lib/cocoapods-hmap/pods_specification.rb +0 -60
  46. data/lib/cocoapods-hmap/version.rb +0 -5
  47. data/lib/cocoapods-hmap/view.rb +0 -34
  48. data/lib/cocoapods_hmap.rb +0 -21
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7e843368c99922210970ea7de9ab8d2bcc895a158901d054a1cd076d29d73310
4
- data.tar.gz: 8f7430064b4472cb4fd6c9fa42dfdd7a144d314c702ab7500a42b0ff302d9ab5
3
+ metadata.gz: 8eb57eb32ca81d86a3af1b1fa9b49115c3a7607bf1e6c2c546060e865a855652
4
+ data.tar.gz: 78ce44dbd5d258ffa4baa8d27201447fc8c2c995163239ec48cdc163fa1ab661
5
5
  SHA512:
6
- metadata.gz: e1b0fbf54c2976dd6f7fcba6eca0d1d421a1df6360216e2049643d6ec1133592f19ce49786f58d0c100d71ce923492cf0135be75cbffbaae6e5a40f8b2a1c749
7
- data.tar.gz: 9429682a00e5c633baf19f845f691b7fd64b6fa687af9afcb776b5beb86245338e5d1b2d910482809f66d91f660fb02e69c6ce1d3026922f1c6cf447e4345d0d
6
+ metadata.gz: e5acfc25fe04df059e746b82d1e4d6661ef598a378a19790bad48b04f5b10e11ad3e975bb61aa38b53a801bfe98234ed526744090be4cbb6477de4f982dce515
7
+ data.tar.gz: 73714efd5ea58856fd5170f2df67a036a15c9581bd5b4fd935f416b1508bf8b41d50f1e220d1cf81930891fb010ad3552583ee9925f8011801ca57feac14f18d
data/README.md CHANGED
@@ -7,23 +7,21 @@ A CocoaPods plugin which can gen/read header map file.
7
7
  **hmap-gen** is able to scan the header files of the target referenced components in the specified Cocoapods project, and generates a header map file that public to all the components
8
8
  as well as generates a public and private header map file for each referenced component.
9
9
 
10
- - `<header.h>` : -I<hmap file path>
11
- - `header.h` : iquote <hmap file path>
10
+ - <header.h> : -I<hmap file path>
11
+ - "header.h" : -iquote <hmap file path>
12
12
 
13
13
  For framework, use [yaml-vfs](https://github.com/Cat1237/yaml-vfs) create VFS file to map framework Headers and Modules dir and pass VFS file to `-ivfsoverlay` parameter.
14
14
 
15
- A hmap file includes four types of headers:
16
-
17
- - header.h
18
- - <module/header.h> **based on podspec**
19
- - <project_name/header.h> **based on podspec**
20
- - <podspec source header/**/header.h> **based on podspec**
21
-
22
- At the same time, **hmap-reader** can read the header, bucktes, string_table information saved in the header map file.
15
+ - vfs : -ivfsoverlay <all-product-headers.yaml>
23
16
 
24
- - It can read hmap file.
17
+ A hmap file includes four types of headers:
25
18
 
26
- - ✅ It can generate header map file.
19
+ - "header.h"
20
+ - <module/header.h> **based on project**
21
+ - <project_name/header.h> **based on project**
22
+ - <*\*/**/header.h> **based on project**
23
+ - "*\*/**/header.h" **based on project**
24
+ - "module/header.h" **based on project**
27
25
 
28
26
  ## Installation
29
27
 
@@ -47,56 +45,95 @@ Or install it yourself as:
47
45
  $ gem install cocoapods-mapfile
48
46
  ```
49
47
 
50
- ## Usage
48
+ ## Quickstart
49
+ To begin gen hmap file by opening an Xcodeproj dir, and to your command line with:
50
+ ```shell
51
+ $ hmapfile gen
52
+ ```
53
+ or to your podfile, add this line:
54
+ ```
55
+ $ plugin 'cocoapods-mapfile'
56
+ ```
57
+
58
+
59
+ ## Command Line Tool
60
+
61
+ Installing the `cocoapods-mapfile` gem will also install two command-line tool `hmapfile reader` and `hmapfile writer` which you can use to generate header map file and read hmap file.
62
+
63
+ For more information consult
64
+ - `hmapfile --help`
65
+ - `hmapfile gen --help`
66
+ - `hmapfile reader --help`
67
+ - `hmapfile writer --help`
68
+
69
+ ### Usage
70
+
71
+ ```shell
72
+
73
+ # Read or write header map file.
74
+ $ hmapfile COMMAND
75
+
76
+ ```
77
+
78
+ #### Commands
79
+
80
+ 1. `hmapfile gen`:
81
+
82
+ - `--project-directory=/porject/dir`: Read .xcworkspace/.xcodeproj file to gen hmap files.
83
+ - `--clean-hmap`: Clean up hmap file settings.
51
84
 
52
- The command should be executed in directory that contains podfile.
85
+ 2. `hmapfile reader`:
86
+ - `--hmap-path=/hmap/dir/file`: Read this path of the hmap file.
87
+
88
+ 3. `hmapfile writer`:
89
+ - `--json-path=/project/dir/json`: The path to the hmap json data.
90
+ - `--output-path=/project/dir/hmap file`: The path json data to the hmap file.
91
+
92
+ example:
53
93
 
54
94
  ```shell
55
- # write the hmap file to podfile/Pods/Headers/HMap
56
- $ pod hmap-gen
95
+ # Read current dir .xcworkspace/.xcodeproj file to Gen hmap files.
96
+ $ hmapfile gen
57
97
 
58
- # write the hmap file to /project/dir/Pods/Headers/HMap
59
- $ pod hmap-gen --project-directory=/project/dir/
98
+ # Read the specified directory .xcworkspace/.xcodeproj file to Gen hmap files.
99
+ $ hmapfile gen --project-directory=<project path>
60
100
 
61
- # write the hmap file to /project/dir/Pods/Headers/HMap and no save origin [HEADER_SEARCH_PATHS]
62
- $ pod hmap-gen --project-directory=/project/dir/ --nosave-origin-header-search-paths
101
+ # Clean up hmap file settings.
102
+ $ hmapfile gen --clean-hmap
103
+ $ hmapfile gen --project-directory=<project path> --clean-hmap
63
104
 
64
- # cleanup the hmap file
65
- $ pod hmap-gen --clean-hmap
105
+ $ hmapfile writer --json-path=../cat.json --output-path=../cat.hmap
66
106
 
67
- # read the hmap file from /hmap/dir/file
68
- $ pod hmap-reader --hmap-path=/hmap/dir/file
107
+ $ hmapfile reader --hmap-path=../cat.hmap
69
108
  ```
70
109
 
71
- At same time, you can put this line in your podfile:
110
+ ## For Cocoapods
111
+
112
+ Add this line in your podfile:
72
113
 
73
114
  ```rb
74
115
  plugin 'cocoapods-mapfile'
75
116
  ```
117
+
76
118
  This was equl:
119
+
77
120
  ```rb
78
- pod hmap-gen --project-directory=/project/dir/
121
+ $ hmapfile gen --project-directory=<project path>
79
122
  ```
123
+ or, you can set some value:
80
124
 
81
- Every time you execute pod install or pod update, `cocoapods-mapfile` will automatically generate a `header map file` for you and modify `HEAD_SEARCH_PATHS`.
82
-
83
- ### Option && Flags
84
-
85
- `hmap-gen/hmap-writer`:
86
-
87
- - `--project-directory=/project/dir/`: The path to the root of the project directory.
88
- - `--nosave-origin-header-search-paths`: This option will not save xcconfig origin [HEADER_SEARCH_PATHS] and put `hmap file path` first.
89
- - `--clean-hmap`: This option will clean up all `hmap-gen/hmap-writer` setup for hmap.
90
-
91
- `hmap-reader`:
92
-
93
- - `--hmap-path=/hmap/dir/file`: The path of the hmap file.
94
-
95
- ## Command Line Tool
125
+ Every time you execute pod install or pod update, `cocoapods-mapfile` will automatically generate a `header map file` for you and modify:
126
+ - `OTHER_CPLUSPLUSFLAGS`
127
+ - `OTHER_CFLAGS`
128
+ - `USE_HEADERMAP`
129
+ - `USER_HEADER_SEARCH_PATHS`
130
+ - `HEAD_SEARCH_PATHS`
96
131
 
97
- Installing the 'cocoapods-mapfile' gem will also install two command-line tool `hmap_reader` and `hmap-writer` which you can use to generate header map file and read hmap file.
132
+ ## TODO
98
133
 
99
- For more information consult `hmap_reader --help` or `hmap_writer --help`.
134
+ - File generation speed
135
+ - Perfect interface
136
+ - Optimize the code
100
137
 
101
138
  ## Contributing
102
139
 
@@ -6,6 +6,6 @@ if $PROGRAM_NAME == __FILE__
6
6
  require 'bundler/setup'
7
7
  end
8
8
 
9
- require 'cocoapods-hmap/command/hmap_gen'
9
+ require 'hmap'
10
10
 
11
- Pod::Command::HMapGen.run(ARGV)
11
+ HMap::Command.run(ARGV)
@@ -1,13 +1,25 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'cocoapods-hmap/command/hmap_gen'
4
- require 'cocoapods-hmap/command/hmap_reader'
3
+ require 'hmap'
5
4
 
6
5
  module Pod
7
6
  # hook
8
- module CocoaPodsHMapHook
9
- HooksManager.register('cocoapods-mapfile', :post_install) do
10
- Command::HMapGen.run(["--project-directory=#{Config.instance.installation_root}"])
11
- end
7
+ @HooksManager = HooksManager
8
+ @HooksManager.register('cocoapods-mapfile', :post_install) do |_, _options|
9
+ args = ['gen', "--project-directory=#{Config.instance.installation_root}"]
10
+ # allow_targets = options['allow_targets']
11
+ # unless allow_targets.nil?
12
+ # if allow_targets.is_a?(Array)
13
+ # args << "--allow-targets=#{allow_targets.join(', ')}" unless allow_targets.empty?
14
+ # else
15
+ # print 'waring:'.yellow, \
16
+ # 'plugin cocoapods-mapfile args allow_targets must be a array, like ## allow_targets: [target1, targte2] ##'
17
+ # end
18
+ # end
19
+ # save_origin = options['save_oripodgin'].nil? ? true : options['save_origin']
20
+ # use_origin_headermap = options['use_origin_headermap'].nil? ? true : options['use_origin_headermap']
21
+ # args << '--fno-save-origin' unless save_origin
22
+ # args << '--fno-use-origin-headermap' unless use_origin_headermap
23
+ HMap::Command.run(args)
12
24
  end
13
25
  end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ module HMap
4
+ class Command
5
+ # hmap file gen cmd
6
+ class Gen < Command
7
+ # summary
8
+ self.summary = 'Analyzes the dependencies and gen each dependencie hmap file.'
9
+
10
+ self.description = <<-DESC
11
+ Analyzes the dependencies of any projects and gen each dependencie hmap file.
12
+ DESC
13
+
14
+ self.arguments = [
15
+ CLAide::Argument.new('--project-directory', false),
16
+ CLAide::Argument.new('--clean-hmap', false)
17
+ ]
18
+
19
+ def initialize(argv)
20
+ super
21
+ project_directory = argv.option('project-directory')
22
+ @clean_hmap = argv.flag?('clean-hmap', false)
23
+ project_directory = Dir.pwd if project_directory.nil?
24
+ @project_directory = Pathname.new(project_directory).expand_path
25
+ end
26
+
27
+ def validate!
28
+ super
29
+ if @project_directory.nil?
30
+ help! 'error: no input project directory which to use with the `--project-directory` option.'
31
+ end
32
+ end
33
+
34
+ # help
35
+ def self.options
36
+ [
37
+ ['--project-directory=/project/dir/', 'The path to the root of the project directory'],
38
+ ['--clean-hmap', 'This option will clean up all hmap-gen setup for hmap.']
39
+ ].concat(super)
40
+ end
41
+
42
+ def run
43
+ name = 'Gen'
44
+ name = 'Clean' if @clean_hmap
45
+ UserInterface.puts("\n[hmapfile] #{name} start..............")
46
+ HMap::MapFileWriter.new(true, @project_directory, @clean_hmap)
47
+ UserInterface.puts("[hmapfile] #{name} finish..............")
48
+ end
49
+ end
50
+ end
51
+ end
52
+
@@ -1,27 +1,31 @@
1
1
  # frozen_string_literal: false
2
2
 
3
- require 'cocoapods_hmap'
4
- require 'cocoapods'
5
-
6
- module Pod
3
+ module HMap
7
4
  class Command
8
5
  # hmap file reader cmd
9
- class HMapReader < Command
6
+ class Reader < Command
10
7
  self.summary = 'Read mapfile and puts result.'
11
8
 
12
9
  self.description = <<-DESC
13
10
  Read mapfile and puts result, header, buckets, string_table.
14
11
  DESC
15
12
 
13
+ self.arguments = [
14
+ # framework_p, r_header, r_m
15
+ CLAide::Argument.new('--hmap-path', true)
16
+ ]
17
+
16
18
  def initialize(argv)
17
19
  super
18
20
  mapfile_path = argv.option('hmap-path')
19
- @mapfile_path = Pathname.new(mapfile_path).expand_path unless mapfile_path.nil?
21
+ raise ArgumentError, "#{mapfile_path}: no such file!" if mapfile_path.nil? || !File.exist?(mapfile_path)
22
+
23
+ @mapfile_path = Pathname.new(mapfile_path).expand_path
20
24
  end
21
25
 
22
26
  def validate!
23
27
  super
24
- banner! if help?
28
+ # banner! if help?
25
29
  raise '[ERROR]: --hmap-path no set'.red unless File.exist?(@mapfile_path)
26
30
  end
27
31
 
@@ -32,10 +36,9 @@ module Pod
32
36
  end
33
37
 
34
38
  def run
35
- UI.section "\n[hmap-reader] start..............\n".yellow do
36
- HMap::MapFileReader.new(@mapfile_path)
37
- end
38
- UI.puts("\n[hmap-reader] finish..............\n".yellow)
39
+ UserInterface.puts "\n[hmapfile] Reader start..............\n".yellow
40
+ HMap::MapFileReader.new(@mapfile_path)
41
+ UserInterface.puts "\n[hmapfile] Reader finish..............\n".yellow
39
42
  end
40
43
  end
41
44
  end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ module HMap
4
+ class Command
5
+ # hmap file gen cmd
6
+ class Writer < Command
7
+ # summary
8
+ self.summary = 'Analyzes the input json and gen each dependencie mapfile.'
9
+
10
+ self.description = <<-DESC
11
+ Analyzes the input json and gen each dependencie mapfile.
12
+ DESC
13
+
14
+ self.arguments = [
15
+ # framework_p, r_header, r_m
16
+ CLAide::Argument.new('--json-path', true),
17
+ CLAide::Argument.new('--output-path', false)
18
+ ]
19
+
20
+ def initialize(argv)
21
+ super
22
+ json_path = argv.option('json-path')
23
+ @json_path = json_path unless json_path.nil?
24
+ output_path = argv.option('output-path')
25
+ @output_path = output_path.nil? ? Pathname('.') : Pathname(output_path)
26
+ end
27
+
28
+ def validate!
29
+ super
30
+ help! 'error: no input json files which to use with the `--json-path` option.' if @json_path.nil?
31
+ help! "error: Input json file #{@json_path}: no such file" unless File.exist?(@json_path)
32
+ end
33
+
34
+ # help
35
+ def self.options
36
+ [
37
+ ['--json-path=/project/dir/json', 'The path to the hmap json data.'],
38
+ ['--output-path=/project/dir/hmap file', 'The path json data to the hmap file.']
39
+ ].concat(super)
40
+ end
41
+
42
+ def run
43
+ require 'json'
44
+ UserInterface.puts "\n[hmapfile-from-json] start..............".yellow
45
+ json_file = File.read(@json_path)
46
+ json = JSON.parse(json_file)
47
+ strs = json.map { |e| HMap::BucketStr.new(*e) }
48
+ path = @output_path
49
+ path = path.join("#{File.basename(@json_path, '.*')}.hmap") if path.directory?
50
+ HMapSaver.new_from_buckets(strs).write_to(path)
51
+ UserInterface.puts '[hmapfile-from-json] finish..............'.yellow
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ # The primary namespace for VFS.
4
+ module HMap
5
+ require 'colored2'
6
+ require 'claide'
7
+ # The primary Command for VFS.
8
+ class Command < CLAide::Command
9
+ require 'hmap/command/hmap_writer'
10
+ require 'hmap/command/hmap_reader'
11
+ require 'hmap/command/hmap_gen'
12
+
13
+
14
+ self.abstract_command = false
15
+ self.command = 'hmapfile'
16
+ self.version = VERSION
17
+ self.description = 'Read or write header map file.'
18
+ self.plugin_prefixes = %w[claide writer reader gen]
19
+
20
+ def initialize(argv)
21
+ super
22
+ return if ansi_output?
23
+
24
+ Colored2.disable!
25
+ String.send(:define_method, :colorize) { |string, _| string }
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,198 @@
1
+ module HMap
2
+ # This modules groups all the constants known to HMap.
3
+ #
4
+ class Constants
5
+ BUILD_DIR = 'BUILD_DIR'
6
+ BUILD_DIR_KEY = '${BUILD_DIR}'
7
+ OBJROOT = 'OBJROOT'
8
+ SRCROOT = '${SRCROOT}'
9
+ HMAP_DIR = 'HMap'
10
+ HMAP_GEN_DIR = 'HMAP_GEN_DIR'
11
+ HMAP_GEN_DIR_VALUE = '${HMAP_GEN_DIR}'
12
+ XCBuildData = 'XCBuildData'
13
+ PROJECT_TEMP_DIR = '${PROJECT}.build'
14
+ TARGET_TEMP_DIR = '${TARGET_NAME}.build'
15
+ TARGET_NAME = '${TARGET_NAME}'
16
+ PRODUCT_NAME = 'PRODUCT_NAME'
17
+ PRODUCT_NAME_VALUE = '${PRODUCT_NAME}'
18
+ CONFIGURATION_EFFECTIVE_PLATFORM = '$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)'
19
+ USE_HEADERMAP = 'USE_HEADERMAP'
20
+ USER_HEADER_SEARCH_PATHS = 'USER_HEADER_SEARCH_PATHS'
21
+ HEADER_SEARCH_PATHS = 'HEADER_SEARCH_PATHS'
22
+ HMAP_HEADER_SETTING = 'HMAP_HEADER_SETTING'
23
+ HMAP_HEADER_SETTING_KEY = '${HMAP_HEADER_SETTING}'
24
+
25
+ OTHER_CFLAGS = 'OTHER_CFLAGS'
26
+ OTHER_CPLUSPLUSFLAGS = 'OTHER_CPLUSPLUSFLAGS'
27
+ CONFIGURATION_BUILD_DIR = 'CONFIGURATION_BUILD_DIR'
28
+
29
+ XCBuildConfiguration = Xcodeproj::Project::Object::XCBuildConfiguration
30
+ PBXSourcesBuildPhase = Xcodeproj::Project::Object::PBXSourcesBuildPhase
31
+ PBXHeadersBuildPhase = Xcodeproj::Project::Object::PBXHeadersBuildPhase
32
+ PBXGroup = Xcodeproj::Project::Object::PBXGroup
33
+ PBXFileReference = Xcodeproj::Project::Object::PBXFileReference
34
+ PBXBuildFile = Xcodeproj::Project::Object::PBXBuildFile
35
+ PBXAggregateTarget = Xcodeproj::Project::Object::PBXAggregateTarget
36
+
37
+ HMAP_TARGET_ROOT = [BUILD_DIR_KEY, '..', '..', HMAP_DIR,
38
+ PROJECT_TEMP_DIR, CONFIGURATION_EFFECTIVE_PLATFORM,
39
+ TARGET_TEMP_DIR].join('/')
40
+
41
+ HMAP_GEN_DIR_ATTRIBUTE = { HMAP_GEN_DIR => HMAP_TARGET_ROOT }
42
+
43
+ HMAP_FILE_TYPE = %i[own_target_headers all_non_framework_target_headers all_target_headers all_product_headers
44
+ project_headers workspace_headers]
45
+
46
+ def self.instance
47
+ @instance ||= new
48
+ end
49
+
50
+ # Sets the current config instance. If set to nil the config will be
51
+ # recreated when needed.
52
+ #
53
+ # @param [Config, Nil] the instance.
54
+ #
55
+ # @return [void]
56
+ #
57
+ class << self
58
+ attr_writer :instance
59
+ end
60
+
61
+ # def full_product_name(name, type)
62
+ # name.join('.', FILE_TYPES_BY_EXTENSION[type])
63
+ # end
64
+
65
+ def hmap_filename(type)
66
+ filenames[type]
67
+ end
68
+
69
+ def full_hmap_filename(type, product_name = nil)
70
+ name = hmap_filename(type)
71
+ name = "#{product_name}-#{name}" if type != :all_product_headers && !product_name.nil?
72
+ name
73
+ end
74
+
75
+ def full_hmap_filepath(type, path, dir = nil, product_name = nil)
76
+ name = full_hmap_filename(type, product_name) unless path.end_with?(hmap_filename(type))
77
+ path = Pathname.new(path)
78
+ path = path.join(dir) unless dir.nil?
79
+ path = path.join(name) unless name.nil?
80
+ path
81
+ end
82
+
83
+ def hmap_build_setting_key(type)
84
+ build_setting_keys(type)
85
+ end
86
+
87
+ def hmap_build_setting_values
88
+ ss = build_setting_values.values.join(' ')
89
+ ['$(inherited)', ss].join(' ')
90
+ end
91
+
92
+ def hmap_build_setting_value(type)
93
+ build_setting_values[type]
94
+ end
95
+
96
+ def hmap_xc_filename(type)
97
+ xc_filenames[type]
98
+ end
99
+
100
+ def hmap_build_settings
101
+ build_settings
102
+ end
103
+
104
+ private
105
+
106
+ def build_settings
107
+ return @build_settings if defined? @build_settings
108
+
109
+ attributes = HMAP_GEN_DIR_ATTRIBUTE
110
+ settings = hmap_build_setting_values
111
+ # attributes[HMAP_HEADER_SETTING] = settings
112
+ attributes[HEADER_SEARCH_PATHS] = build_setting_values_i
113
+ attributes[OTHER_CFLAGS] = build_setting_values_c
114
+ attributes[OTHER_CPLUSPLUSFLAGS] = build_setting_values_c
115
+ attributes[USER_HEADER_SEARCH_PATHS] = build_setting_values_iquote
116
+ # attributes[OTHER_CFLAGS] = HMAP_HEADER_SETTING_KEY
117
+ # attributes[OTHER_CPLUSPLUSFLAGS] = HMAP_HEADER_SETTING_KEY
118
+ attributes[USE_HEADERMAP] = 'NO'
119
+ @build_settings = attributes
120
+ end
121
+
122
+ def filenames
123
+ return @filenames if defined? @filenames
124
+
125
+ @filenames = Hash[HMAP_FILE_TYPE.map do |type|
126
+ t_type = type
127
+ t_type = :all_target_headers if type == :workspace_headers
128
+ name = t_type.to_s.gsub(/_/, '-')
129
+ extname = '.hmap'
130
+ extname = '.yaml' if type == :all_product_headers
131
+ [type, name + extname]
132
+ end]
133
+ end
134
+
135
+ def build_setting_values_i
136
+ %i[own_target_headers all_non_framework_target_headers].map do |type|
137
+ value = xc_filenames[type]
138
+ "\"#{HMAP_GEN_DIR_VALUE}/#{value}\""
139
+ end.join(' ')
140
+ end
141
+
142
+ def build_setting_values_iquote
143
+ %i[project_headers all_target_headers].map do |type|
144
+ value = xc_filenames[type]
145
+ "\"#{HMAP_GEN_DIR_VALUE}/#{value}\""
146
+ end.join(' ')
147
+ end
148
+
149
+ def build_setting_values_c
150
+ %i[all_target_headers all_product_headers].map do |type|
151
+ key = build_setting_keys[type]
152
+ value = xc_filenames[type]
153
+ blank = ' ' unless key == :I
154
+ ["-#{key}", "\"#{HMAP_GEN_DIR_VALUE}/#{value}\""].join(blank || '')
155
+ end.join(' ')
156
+ end
157
+
158
+ def build_setting_keys
159
+ return @build_setting_keys if defined? @build_setting_keys
160
+
161
+ @build_setting_keys =
162
+ Hash[HMAP_FILE_TYPE.map do |type|
163
+ [type, case type
164
+ when :workspace_headers, :project_headers then :iquote
165
+ when :all_product_headers then :ivfsoverlay
166
+ else
167
+ :I
168
+ end]
169
+ end]
170
+ end
171
+
172
+ def build_setting_values
173
+ return @build_setting_values if defined? @build_setting_values
174
+
175
+ @build_setting_values =
176
+ Hash[HMAP_FILE_TYPE.map do |type|
177
+ key = build_setting_keys[type]
178
+ value = xc_filenames[type]
179
+ blank = ' ' unless key == :I
180
+ [type, ["-#{key}", "\"#{HMAP_GEN_DIR_VALUE}/#{value}\""].join(blank || '')]
181
+ end]
182
+ end
183
+
184
+ def xc_filenames
185
+ return @xc_filenames if defined? @xc_filenames
186
+
187
+ @xc_filenames =
188
+ Hash[HMAP_FILE_TYPE.map do |type|
189
+ file_name = filenames[type]
190
+ [type, case type
191
+ when :all_product_headers then file_name
192
+ else
193
+ "#{Constants::PRODUCT_NAME_VALUE}-#{file_name}"
194
+ end]
195
+ end]
196
+ end
197
+ end
198
+ end
File without changes
@@ -44,10 +44,10 @@ module HMap
44
44
  end
45
45
  full_command = "#{bin} #{command.join(' ')}"
46
46
 
47
- if Pod::Config.instance.verbose?
47
+ if Resolver.instance.verbose?
48
48
  p("$ #{full_command}")
49
- stdout = Indenter.new(STDOUT)
50
- stderr = Indenter.new(STDERR)
49
+ stdout = Indenter.new($stdout)
50
+ stderr = Indenter.new($stderr)
51
51
  else
52
52
  stdout = Indenter.new
53
53
  stderr = Indenter.new
@@ -64,7 +64,6 @@ module HMap
64
64
  p("[!] Failed: #{full_command}".red)
65
65
  end
66
66
  end
67
-
68
67
  stdout
69
68
  end
70
69
 
@@ -185,8 +184,8 @@ module HMap
185
184
  output << (string << separator)
186
185
  end
187
186
  end
188
- rescue EOFError, IOError
189
- output << (buf << $/) unless buf.empty?
187
+ rescue IOError, EOFError
188
+ output << (buf << $RS) unless buf.empty?
190
189
  end
191
190
  end
192
191
  end
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: false
2
2
 
3
- require 'cocoapods'
4
-
5
3
  module HMap
6
4
  # A collection of utility functions used throughout cocoapods-hmap.
7
5
  module Utils
@@ -94,5 +92,3 @@ module HMap
94
92
  end
95
93
  end
96
94
  end
97
-
98
-
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module HMap
4
+ # hmap bucket string
5
+ class BucketStr
6
+ attr_reader :key, :perfix, :suffix
7
+
8
+ def initialize(key, perfix, suffix)
9
+ @key = key
10
+ @perfix = perfix
11
+ @suffix = suffix
12
+ end
13
+
14
+ def description
15
+ <<-DESC
16
+ Key #{@key} -> Prefix #{@perfix}, Suffix #{@suffix}
17
+ DESC
18
+ end
19
+ end
20
+ end