cocoapods-mapfile 0.2.2 → 0.2.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 +4 -4
- data/README.md +65 -64
- data/lib/cocoapods_plugin.rb +16 -16
- data/lib/hmap/command/hmap_gen.rb +19 -27
- data/lib/hmap/command/hmap_reader.rb +5 -5
- data/lib/hmap/command/hmap_writer.rb +5 -3
- data/lib/hmap/command.rb +3 -1
- data/lib/hmap/constants.rb +198 -0
- data/lib/hmap/{executable.rb → helper/executable.rb} +5 -6
- data/lib/hmap/hmap/hmap_bucketstr.rb +20 -0
- data/lib/hmap/{hmap_reader.rb → hmap/hmap_reader.rb} +4 -20
- data/lib/hmap/{hmap_saver.rb → hmap/hmap_saver.rb} +11 -6
- data/lib/hmap/{hmap_struct.rb → hmap/hmap_struct.rb} +0 -0
- data/lib/hmap/hmap/hmap_writer.rb +52 -0
- data/lib/hmap/{mapfile.rb → hmap/mapfile.rb} +1 -1
- data/lib/hmap/user_interface.rb +22 -0
- data/lib/hmap/version.rb +1 -1
- data/lib/hmap/xc/context.rb +23 -0
- data/lib/hmap/xc/header_entry.rb +55 -0
- data/lib/hmap/xc/header_type.rb +32 -0
- data/lib/hmap/xc/pbx_helper.rb +68 -0
- data/lib/hmap/xc/product_helper.rb +36 -0
- data/lib/hmap/xc/resolver.rb +129 -0
- data/lib/hmap/xc/target/build_setting.rb +126 -0
- data/lib/hmap/xc/target/target.rb +76 -0
- data/lib/hmap/xc/target/target_context.rb +29 -0
- data/lib/hmap/xc/target/target_helper.rb +114 -0
- data/lib/hmap/xc/target/target_vfs.rb +122 -0
- data/lib/hmap/xc/target/xcconfig_helper.rb +109 -0
- data/lib/hmap/xc/workspace/project.rb +120 -0
- data/lib/hmap/xc/workspace/project_helper.rb +92 -0
- data/lib/hmap/xc/workspace/workspace.rb +83 -0
- data/lib/hmap.rb +16 -14
- metadata +58 -20
- data/lib/hmap/framework/framework_vfs.rb +0 -94
- data/lib/hmap/helper/build_setting_constants.rb +0 -13
- data/lib/hmap/helper/hmap_helper.rb +0 -212
- data/lib/hmap/helper/pods_helper.rb +0 -98
- data/lib/hmap/helper/xcconfig_helper.rb +0 -105
- data/lib/hmap/hmap_writer.rb +0 -99
- data/lib/hmap/pods_specification.rb +0 -65
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cd22ad1c9300a50d1e79ad4e19c349784d632ef50766b00741faad26d4e350a4
|
4
|
+
data.tar.gz: 425b0e5b884e3eaa4ad9f9f60bdc8680e5a4d4573e72e97af2f2f0707305e0e9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bad97e72c3cde2ae26a510a8f1e3cf97e0f60ab219f187d440658950a47d0d9a46af541bfa18f46a9e37f2bec39512e84e3da7aa750a9e04bfe1f5963216e729
|
7
|
+
data.tar.gz: 96a82f5e9926050be9cb1fb4c225cdd5b54a0ae4c5e982736680bf97558145a2f1a5ca1058259d4ba366272bb073abcca9d96c3020cce7847cb16408db3821a2
|
data/README.md
CHANGED
@@ -7,19 +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
|
-
|
11
|
-
|
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
|
-
|
15
|
+
- vfs : -ivfsoverlay <all-product-headers.yaml>
|
16
16
|
|
17
17
|
A hmap file includes four types of headers:
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
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**
|
23
25
|
|
24
26
|
## Installation
|
25
27
|
|
@@ -43,91 +45,90 @@ Or install it yourself as:
|
|
43
45
|
$ gem install cocoapods-mapfile
|
44
46
|
```
|
45
47
|
|
46
|
-
##
|
47
|
-
|
48
|
-
The command should be executed in directory that contains podfile.
|
49
|
-
|
48
|
+
## Quickstart
|
49
|
+
To begin gen hmap file by opening an Xcodeproj dir, and to your command line with:
|
50
50
|
```shell
|
51
|
-
|
52
|
-
$ pod hmap-gen
|
53
|
-
|
54
|
-
# write the hmap file to /project/dir/Pods/Headers/HMap
|
55
|
-
$ pod hmap-gen --project-directory=/project/dir/
|
56
|
-
|
57
|
-
# write the hmap file to /project/dir/Pods/Headers/HMap and no save origin [HEADER_SEARCH_PATHS]
|
58
|
-
$ pod hmap-gen --project-directory=/project/dir/ --nosave-origin-header-search-paths
|
59
|
-
|
60
|
-
# cleanup the hmap file
|
61
|
-
$ pod hmap-gen --clean-hmap
|
62
|
-
|
63
|
-
# no keep xcconfig file [HEADER_SEARCH_PATHS] and [USER_HEADER_SEARCH_PATHS] value
|
64
|
-
$ pod hmap-gen --fno-save-origin
|
65
|
-
|
66
|
-
# ⚠️no keep xcconfig file [HEADER_SEARCH_PATHS] and [USER_HEADER_SEARCH_PATHS] value, except for the values set by[--allow-targets]
|
67
|
-
$ pod hmap-gen --fno-save-origin --allow-targets=Realm, YYKit
|
68
|
-
|
69
|
-
# not use automatically generated hmap file from Xcode, use [hmap-gen]
|
70
|
-
$ pod hmap-gen --fno-use-origin-headermap
|
71
|
-
|
72
|
-
# read the hmap file from /hmap/dir/file
|
73
|
-
$ pod hmap-reader --hmap-path=/hmap/dir/file
|
74
|
-
```
|
75
|
-
|
76
|
-
```rb
|
77
|
-
plugin 'cocoapods-mapfile'
|
78
|
-
```
|
79
|
-
This was equl:
|
80
|
-
```rb
|
81
|
-
$ pod hmap-gen --project-directory=/project/dir/
|
51
|
+
$ hmapfile gen
|
82
52
|
```
|
83
|
-
or
|
84
|
-
|
85
|
-
```rb
|
86
|
-
plugin('cocoapods-mapfile', allow_targets: ['Realm', 'YYKit'], save_origin: false, use_origin_headermap: false)
|
53
|
+
or to your podfile, add this line:
|
87
54
|
```
|
88
|
-
|
89
|
-
```rb
|
90
|
-
$ pod hmap-gen --fno-save-origin --fno-use-origin-headermap --allow-targets=Realm, YYKit
|
55
|
+
$ plugin 'cocoapods-mapfile'
|
91
56
|
```
|
92
57
|
|
93
|
-
Every time you execute pod install or pod update, `cocoapods-mapfile` will automatically generate a `header map file` for you and modify:
|
94
|
-
- `OTHER_CPLUSPLUSFLAGS`
|
95
|
-
- `OTHER_CFLAGS`
|
96
|
-
- `USE_HEADERMAP`
|
97
|
-
- `USER_HEADER_SEARCH_PATHS`
|
98
|
-
- `HEAD_SEARCH_PATHS`
|
99
58
|
|
100
59
|
## Command Line Tool
|
101
60
|
|
102
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.
|
103
62
|
|
104
|
-
For more information consult
|
105
|
-
- `hmapfile --help
|
63
|
+
For more information consult
|
64
|
+
- `hmapfile --help`
|
65
|
+
- `hmapfile gen --help`
|
106
66
|
- `hmapfile reader --help`
|
107
67
|
- `hmapfile writer --help`
|
108
68
|
|
109
69
|
### Usage
|
110
70
|
|
111
71
|
```shell
|
72
|
+
|
112
73
|
# Read or write header map file.
|
113
74
|
$ hmapfile COMMAND
|
75
|
+
|
114
76
|
```
|
77
|
+
|
115
78
|
#### Commands
|
116
|
-
`hmapfile reader`:
|
117
|
-
- `--hmap-path=/hmap/dir/file`: Read this path of the hmap file.
|
118
79
|
|
119
|
-
`hmapfile
|
120
|
-
|
121
|
-
- `--
|
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.
|
84
|
+
|
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.
|
122
91
|
|
123
92
|
example:
|
124
93
|
|
125
94
|
```shell
|
126
|
-
|
95
|
+
# Read current dir .xcworkspace/.xcodeproj file to Gen hmap files.
|
96
|
+
$ hmapfile gen
|
97
|
+
|
98
|
+
# Read the specified directory .xcworkspace/.xcodeproj file to Gen hmap files.
|
99
|
+
$ hmapfile gen --project-directory=<project path>
|
100
|
+
|
101
|
+
# Clean up hmap file settings.
|
102
|
+
$ hmapfile gen --clean-hmap
|
103
|
+
$ hmapfile gen --project-directory=<project path> --clean-hmap
|
127
104
|
|
128
|
-
hmapfile
|
105
|
+
$ hmapfile writer --json-path=../cat.json --output-path=../cat.hmap
|
106
|
+
|
107
|
+
$ hmapfile reader --hmap-path=../cat.hmap
|
108
|
+
```
|
109
|
+
|
110
|
+
## For Cocoapods
|
111
|
+
|
112
|
+
Add this line in your podfile:
|
113
|
+
|
114
|
+
```rb
|
115
|
+
plugin 'cocoapods-mapfile'
|
129
116
|
```
|
130
117
|
|
118
|
+
This was equl:
|
119
|
+
|
120
|
+
```rb
|
121
|
+
$ hmapfile gen --project-directory=<project path>
|
122
|
+
```
|
123
|
+
or, you can set some value:
|
124
|
+
|
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`
|
131
|
+
|
131
132
|
## Contributing
|
132
133
|
|
133
134
|
Bug reports and pull requests are welcome on GitHub at [cocoapods-hmap](https://github.com/Cat1237/cocoapods-hmap). This project is intended to be a safe, welcoming space for collaboration.
|
data/lib/cocoapods_plugin.rb
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'hmap
|
3
|
+
require 'hmap'
|
4
4
|
|
5
5
|
module Pod
|
6
6
|
# hook
|
7
7
|
module CocoaPodsHMapHook
|
8
8
|
@HooksManager = HooksManager
|
9
9
|
@HooksManager.register('cocoapods-mapfile', :post_install) do |_, options|
|
10
|
-
args = ["--project-directory=#{Config.instance.installation_root}"]
|
11
|
-
allow_targets = options['allow_targets']
|
12
|
-
unless allow_targets.nil?
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
end
|
20
|
-
save_origin = options['save_oripodgin'].nil? ? true : options['save_origin']
|
21
|
-
use_origin_headermap = options['use_origin_headermap'].nil? ? true : options['use_origin_headermap']
|
22
|
-
args << '--fno-save-origin' unless save_origin
|
23
|
-
args << '--fno-use-origin-headermap' unless use_origin_headermap
|
24
|
-
Command
|
10
|
+
args = ["gen", "--project-directory=#{Config.instance.installation_root}"]
|
11
|
+
# allow_targets = options['allow_targets']
|
12
|
+
# unless allow_targets.nil?
|
13
|
+
# if allow_targets.is_a?(Array)
|
14
|
+
# args << "--allow-targets=#{allow_targets.join(', ')}" unless allow_targets.empty?
|
15
|
+
# else
|
16
|
+
# print 'waring:'.yellow, \
|
17
|
+
# 'plugin cocoapods-mapfile args allow_targets must be a array, like ## allow_targets: [target1, targte2] ##'
|
18
|
+
# end
|
19
|
+
# end
|
20
|
+
# save_origin = options['save_oripodgin'].nil? ? true : options['save_origin']
|
21
|
+
# use_origin_headermap = options['use_origin_headermap'].nil? ? true : options['use_origin_headermap']
|
22
|
+
# args << '--fno-save-origin' unless save_origin
|
23
|
+
# args << '--fno-use-origin-headermap' unless use_origin_headermap
|
24
|
+
HMap::Command.run(args)
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
@@ -1,60 +1,52 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
module Pod
|
3
|
+
module HMap
|
6
4
|
class Command
|
7
5
|
# hmap file gen cmd
|
8
|
-
class
|
6
|
+
class Gen < Command
|
9
7
|
# summary
|
10
|
-
self.summary = 'Analyzes the dependencies and gen each dependencie
|
8
|
+
self.summary = 'Analyzes the dependencies and gen each dependencie hmap file.'
|
11
9
|
|
12
10
|
self.description = <<-DESC
|
13
|
-
Analyzes the dependencies of any
|
11
|
+
Analyzes the dependencies of any projects and gen each dependencie hmap file.
|
14
12
|
DESC
|
15
13
|
|
14
|
+
self.arguments = [
|
15
|
+
CLAide::Argument.new('--project-directory', false),
|
16
|
+
CLAide::Argument.new('--clean-hmap', false)
|
17
|
+
]
|
18
|
+
|
16
19
|
def initialize(argv)
|
17
20
|
super
|
18
21
|
project_directory = argv.option('project-directory')
|
19
|
-
targets = argv.option('allow-targets') || ''
|
20
|
-
@allow_targets = targets.split(%r{,\s*})
|
21
|
-
@no_use_build_in_headermap = !argv.flag?('fno-use-origin-headermap', false)
|
22
|
-
@save_origin_build_setting = !argv.flag?('fno-save-origin', false)
|
23
22
|
@clean_hmap = argv.flag?('clean-hmap', false)
|
24
|
-
|
25
|
-
|
23
|
+
project_directory = Dir.pwd if project_directory.nil?
|
26
24
|
@project_directory = Pathname.new(project_directory).expand_path
|
27
|
-
config.installation_root = @project_directory
|
28
25
|
end
|
29
26
|
|
30
27
|
def validate!
|
31
28
|
super
|
32
|
-
|
29
|
+
if @project_directory.nil?
|
30
|
+
help! 'error: no input project directory which to use with the `--project-directory` option.'
|
31
|
+
end
|
33
32
|
end
|
34
33
|
|
35
34
|
# help
|
36
35
|
def self.options
|
37
36
|
[
|
38
37
|
['--project-directory=/project/dir/', 'The path to the root of the project directory'],
|
39
|
-
['--allow-targets=target, target1, target2', 'If we set --fno-use-origin-headermap and ' \
|
40
|
-
'--fno-save-origin, we can use this option to decide which targets to use hmap file while keeping the initial settings'],
|
41
|
-
['--fno-save-origin',
|
42
|
-
'This option will not save xcconfig origin [HEADER_SEARCH_PATHS] and put hmap file first'],
|
43
|
-
['--fno-use-origin-headermap',
|
44
|
-
'This option will use Xcode built-in options Use Header Maps and not use this code gen hmap file'],
|
45
38
|
['--clean-hmap', 'This option will clean up all hmap-gen setup for hmap.']
|
46
39
|
].concat(super)
|
47
40
|
end
|
48
41
|
|
49
42
|
def run
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
end
|
56
|
-
UI.puts('[hmap-gen] finish..............')
|
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..............")
|
57
48
|
end
|
58
49
|
end
|
59
50
|
end
|
60
51
|
end
|
52
|
+
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: false
|
2
2
|
|
3
|
-
require 'hmap'
|
4
|
-
|
5
3
|
module HMap
|
6
4
|
class Command
|
7
5
|
# hmap file reader cmd
|
@@ -20,7 +18,9 @@ module HMap
|
|
20
18
|
def initialize(argv)
|
21
19
|
super
|
22
20
|
mapfile_path = argv.option('hmap-path')
|
23
|
-
|
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
|
24
24
|
end
|
25
25
|
|
26
26
|
def validate!
|
@@ -36,9 +36,9 @@ module HMap
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def run
|
39
|
-
puts "\n[
|
39
|
+
UserInterface.puts "\n[hmapfile] Reader start..............\n".yellow
|
40
40
|
HMap::MapFileReader.new(@mapfile_path)
|
41
|
-
puts "\n[
|
41
|
+
UserInterface.puts "\n[hmapfile] Reader finish..............\n".yellow
|
42
42
|
end
|
43
43
|
end
|
44
44
|
end
|
@@ -40,13 +40,15 @@ module HMap
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def run
|
43
|
-
|
43
|
+
require 'json'
|
44
|
+
UserInterface.puts "\n[hmapfile-from-json] start..............".yellow
|
44
45
|
json_file = File.read(@json_path)
|
45
46
|
json = JSON.parse(json_file)
|
47
|
+
strs = json.map { |e| HMap::BucketStr.new(*e) }
|
46
48
|
path = @output_path
|
47
49
|
path = path.join("#{File.basename(@json_path, '.*')}.hmap") if path.directory?
|
48
|
-
HMapSaver.new_from_buckets(
|
49
|
-
puts '[
|
50
|
+
HMapSaver.new_from_buckets(strs).write_to(path)
|
51
|
+
UserInterface.puts '[hmapfile-from-json] finish..............'.yellow
|
50
52
|
end
|
51
53
|
end
|
52
54
|
end
|
data/lib/hmap/command.rb
CHANGED
@@ -8,12 +8,14 @@ module HMap
|
|
8
8
|
class Command < CLAide::Command
|
9
9
|
require 'hmap/command/hmap_writer'
|
10
10
|
require 'hmap/command/hmap_reader'
|
11
|
+
require 'hmap/command/hmap_gen'
|
12
|
+
|
11
13
|
|
12
14
|
self.abstract_command = false
|
13
15
|
self.command = 'hmapfile'
|
14
16
|
self.version = VERSION
|
15
17
|
self.description = 'Read or write header map file.'
|
16
|
-
self.plugin_prefixes = %w[claide writer reader]
|
18
|
+
self.plugin_prefixes = %w[claide writer reader gen]
|
17
19
|
|
18
20
|
def initialize(argv)
|
19
21
|
super
|
@@ -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
|
@@ -44,10 +44,10 @@ module HMap
|
|
44
44
|
end
|
45
45
|
full_command = "#{bin} #{command.join(' ')}"
|
46
46
|
|
47
|
-
if
|
47
|
+
if Resolver.instance.verbose?
|
48
48
|
p("$ #{full_command}")
|
49
|
-
stdout = Indenter.new(
|
50
|
-
stderr = Indenter.new(
|
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
|
189
|
-
output << (buf <<
|
187
|
+
rescue IOError, EOFError
|
188
|
+
output << (buf << $RS) unless buf.empty?
|
190
189
|
end
|
191
190
|
end
|
192
191
|
end
|
@@ -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
|