plasmo_xcodeproj 1.21.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +19 -0
  3. data/README.md +95 -0
  4. data/bin/xcodeproj +10 -0
  5. data/lib/xcodeproj/command/config_dump.rb +91 -0
  6. data/lib/xcodeproj/command/project_diff.rb +56 -0
  7. data/lib/xcodeproj/command/show.rb +60 -0
  8. data/lib/xcodeproj/command/sort.rb +44 -0
  9. data/lib/xcodeproj/command/target_diff.rb +43 -0
  10. data/lib/xcodeproj/command.rb +63 -0
  11. data/lib/xcodeproj/config/other_linker_flags_parser.rb +73 -0
  12. data/lib/xcodeproj/config.rb +386 -0
  13. data/lib/xcodeproj/constants.rb +465 -0
  14. data/lib/xcodeproj/differ.rb +239 -0
  15. data/lib/xcodeproj/gem_version.rb +5 -0
  16. data/lib/xcodeproj/helper.rb +30 -0
  17. data/lib/xcodeproj/plist.rb +94 -0
  18. data/lib/xcodeproj/project/case_converter.rb +90 -0
  19. data/lib/xcodeproj/project/object/build_configuration.rb +255 -0
  20. data/lib/xcodeproj/project/object/build_file.rb +84 -0
  21. data/lib/xcodeproj/project/object/build_phase.rb +369 -0
  22. data/lib/xcodeproj/project/object/build_rule.rb +109 -0
  23. data/lib/xcodeproj/project/object/configuration_list.rb +117 -0
  24. data/lib/xcodeproj/project/object/container_item_proxy.rb +116 -0
  25. data/lib/xcodeproj/project/object/file_reference.rb +338 -0
  26. data/lib/xcodeproj/project/object/group.rb +506 -0
  27. data/lib/xcodeproj/project/object/helpers/build_settings_array_settings_by_object_version.rb +72 -0
  28. data/lib/xcodeproj/project/object/helpers/file_references_factory.rb +245 -0
  29. data/lib/xcodeproj/project/object/helpers/groupable_helper.rb +260 -0
  30. data/lib/xcodeproj/project/object/native_target.rb +751 -0
  31. data/lib/xcodeproj/project/object/reference_proxy.rb +86 -0
  32. data/lib/xcodeproj/project/object/root_object.rb +100 -0
  33. data/lib/xcodeproj/project/object/swift_package_product_dependency.rb +29 -0
  34. data/lib/xcodeproj/project/object/swift_package_remote_reference.rb +33 -0
  35. data/lib/xcodeproj/project/object/target_dependency.rb +94 -0
  36. data/lib/xcodeproj/project/object.rb +534 -0
  37. data/lib/xcodeproj/project/object_attributes.rb +522 -0
  38. data/lib/xcodeproj/project/object_dictionary.rb +210 -0
  39. data/lib/xcodeproj/project/object_list.rb +223 -0
  40. data/lib/xcodeproj/project/project_helper.rb +341 -0
  41. data/lib/xcodeproj/project/uuid_generator.rb +132 -0
  42. data/lib/xcodeproj/project.rb +874 -0
  43. data/lib/xcodeproj/scheme/abstract_scheme_action.rb +100 -0
  44. data/lib/xcodeproj/scheme/analyze_action.rb +19 -0
  45. data/lib/xcodeproj/scheme/archive_action.rb +59 -0
  46. data/lib/xcodeproj/scheme/build_action.rb +298 -0
  47. data/lib/xcodeproj/scheme/buildable_product_runnable.rb +55 -0
  48. data/lib/xcodeproj/scheme/buildable_reference.rb +129 -0
  49. data/lib/xcodeproj/scheme/command_line_arguments.rb +162 -0
  50. data/lib/xcodeproj/scheme/environment_variables.rb +170 -0
  51. data/lib/xcodeproj/scheme/execution_action.rb +86 -0
  52. data/lib/xcodeproj/scheme/launch_action.rb +179 -0
  53. data/lib/xcodeproj/scheme/location_scenario_reference.rb +49 -0
  54. data/lib/xcodeproj/scheme/macro_expansion.rb +34 -0
  55. data/lib/xcodeproj/scheme/profile_action.rb +57 -0
  56. data/lib/xcodeproj/scheme/remote_runnable.rb +92 -0
  57. data/lib/xcodeproj/scheme/send_email_action_content.rb +84 -0
  58. data/lib/xcodeproj/scheme/shell_script_action_content.rb +77 -0
  59. data/lib/xcodeproj/scheme/test_action.rb +394 -0
  60. data/lib/xcodeproj/scheme/xml_element_wrapper.rb +82 -0
  61. data/lib/xcodeproj/scheme.rb +375 -0
  62. data/lib/xcodeproj/user_interface.rb +22 -0
  63. data/lib/xcodeproj/workspace/file_reference.rb +79 -0
  64. data/lib/xcodeproj/workspace/group_reference.rb +67 -0
  65. data/lib/xcodeproj/workspace/reference.rb +40 -0
  66. data/lib/xcodeproj/workspace.rb +277 -0
  67. data/lib/xcodeproj/xcodebuild_helper.rb +108 -0
  68. data/lib/xcodeproj.rb +29 -0
  69. metadata +208 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 99a4a91204cd3726ab80fc803b00c604bc03ba07ccbbbcf3fba4c8728988cba9
4
+ data.tar.gz: eb423e8051caa38c89502e06cc968354ab2fae5e584dc63bfc5a4cd1d15ddade
5
+ SHA512:
6
+ metadata.gz: eb8daf92c6bbba4de52cf3d8e461b02731f49d319e444eb24af887ccc58d6c4d56bdda8f09b9923ca76d5db09e03010f4b2b63f560b29dd11295c19599b6332a
7
+ data.tar.gz: 7853926e3813c3fac9a1e9db280d2908a94ea2d5b4b97eb998523558db8be702ccbc5a587a713dd216b28e260a634873d17fed2d36aa24843ba14fdbcb1d538f
data/LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2012 Eloy Durán <eloy.de.enige@gmail.com>
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,95 @@
1
+ # Xcodeproj
2
+
3
+ [![Build Status](https://img.shields.io/github/workflow/status/CocoaPods/Xcodeproj/Specs)](https://github.com/CocoaPods/Xcodeproj/actions)
4
+ [![Maintainability](https://api.codeclimate.com/v1/badges/40ae104586c859d3581e/maintainability)](https://codeclimate.com/github/CocoaPods/Xcodeproj/maintainability)
5
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/40ae104586c859d3581e/test_coverage)](https://codeclimate.com/github/CocoaPods/Xcodeproj/test_coverage)
6
+
7
+ Xcodeproj lets you create and modify Xcode projects from [Ruby][ruby].
8
+ Script boring management tasks or build Xcode-friendly libraries. Also includes
9
+ support for Xcode workspaces (`.xcworkspace`), configuration files (`.xcconfig`) and
10
+ Xcode Scheme files (`.xcscheme`).
11
+
12
+ It is used in [CocoaPods](https://github.com/CocoaPods/CocoaPods) to create a
13
+ collection of supplemental libraries or frameworks, for all platforms Xcode supports.
14
+
15
+ The API reference can be found [here](http://www.rubydoc.info/gems/xcodeproj).
16
+
17
+ ## Installing Xcodeproj
18
+
19
+ Xcodeproj itself installs through RubyGems, the Ruby package manager. Install it
20
+ by performing the following command:
21
+
22
+ $ [sudo] gem install xcodeproj
23
+
24
+ ## Quickstart
25
+
26
+ To begin editing an xcodeproj file start by opening it as an Xcodeproj with:
27
+
28
+ ```ruby
29
+ require 'xcodeproj'
30
+ project_path = '/your_path/your_project.xcodeproj'
31
+ project = Xcodeproj::Project.open(project_path)
32
+ ```
33
+
34
+ #### Some Small Examples To Get You Started
35
+
36
+ > Look through all targets
37
+
38
+ ```ruby
39
+ project.targets.each do |target|
40
+ puts target.name
41
+ end
42
+ ```
43
+
44
+ > Get all source files for a target
45
+
46
+ ```ruby
47
+ target = project.targets.first
48
+ files = target.source_build_phase.files.to_a.map do |pbx_build_file|
49
+ pbx_build_file.file_ref.real_path.to_s
50
+
51
+ end.select do |path|
52
+ path.end_with?(".m", ".mm", ".swift")
53
+
54
+ end.select do |path|
55
+ File.exists?(path)
56
+ end
57
+ ```
58
+
59
+ > Set a specific build configuration to all targets
60
+
61
+ ```ruby
62
+ project.targets.each do |target|
63
+ target.build_configurations.each do |config|
64
+ config.build_settings['MY_CUSTOM_FLAG'] ||= 'TRUE'
65
+ end
66
+ end
67
+ project.save
68
+ ```
69
+
70
+ ## Command Line Tool
71
+
72
+ Installing the Xcodeproj gem will also install a command-line tool `xcodeproj` which you can
73
+ use to generate project diffs, target diffs, output all configurations and show a YAML representation.
74
+
75
+ For more information consult `xcodeproj --help`.
76
+
77
+ ## Collaborate
78
+
79
+ All Xcodeproj development happens on [GitHub][xcodeproj]. Contributing patches
80
+ is really easy and gratifying.
81
+
82
+ Follow [@CocoaPods][twitter] to get up to date information about what's
83
+ going on in the CocoaPods world.
84
+
85
+
86
+ ## LICENSE
87
+
88
+ These works are available under the MIT license. See the [LICENSE][license] file
89
+ for more info.
90
+
91
+ [twitter]: http://twitter.com/CocoaPods
92
+ [ruby]: http://www.ruby-lang.org/en/
93
+ [xcodeproj]: https://github.com/cocoapods/xcodeproj
94
+ [tickets]: https://github.com/cocoapods/xcodeproj/issues
95
+ [license]: LICENSE
data/bin/xcodeproj ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ if $PROGRAM_NAME == __FILE__
4
+ ENV['BUNDLE_GEMFILE'] = File.expand_path('../../Gemfile', __FILE__)
5
+ require 'bundler/setup'
6
+ end
7
+
8
+ require 'xcodeproj'
9
+
10
+ Xcodeproj::Command.run(ARGV)
@@ -0,0 +1,91 @@
1
+ module Xcodeproj
2
+ class Command
3
+ class ConfigDump < Command
4
+ self.description = <<-eos
5
+ Dumps the build settings of all project targets for all configurations in
6
+ directories named by the target in given output directory.
7
+
8
+ It extracts common build settings in a per target base.xcconfig file.
9
+
10
+ If no `PROJECT` is specified then the current work directory is searched
11
+ for one.
12
+
13
+ If no `OUTPUT` is specified then the project directory will be used.
14
+ eos
15
+
16
+ self.summary = 'Dumps the build settings of all project targets for ' \
17
+ 'all configurations in directories named by the target ' \
18
+ 'in the given output directory.'
19
+
20
+ self.arguments = [
21
+ CLAide::Argument.new('PROJECT', false),
22
+ CLAide::Argument.new('OUTPUT', false),
23
+ ]
24
+
25
+ def initialize(argv)
26
+ self.xcodeproj_path = argv.shift_argument
27
+ @output_path = Pathname(argv.shift_argument || '.')
28
+
29
+ super
30
+ end
31
+
32
+ def validate!
33
+ super
34
+
35
+ raise Informative, 'The output path must be a directory.' unless @output_path.directory?
36
+ open_project!
37
+ end
38
+
39
+ def run
40
+ dump_all_configs(xcodeproj, 'Project')
41
+
42
+ xcodeproj.targets.each do |target|
43
+ dump_all_configs(target, target.name)
44
+ end
45
+ end
46
+
47
+ def dump_all_configs(configurable, name)
48
+ path = Pathname(name)
49
+
50
+ # Dump base configuration to file
51
+ base_settings = extract_common_settings!(configurable.build_configurations)
52
+ base_file_path = path + "#{name}_base.xcconfig"
53
+ dump_config_to_file(base_settings, base_file_path)
54
+
55
+ # Dump each configuration to file
56
+ configurable.build_configurations.each do |config|
57
+ settings = config.build_settings
58
+ dump_config_to_file(settings, path + "#{name}_#{config.name.downcase}.xcconfig", [base_file_path])
59
+ end
60
+ end
61
+
62
+ def extract_common_settings!(build_configurations)
63
+ # Grasp all common build settings
64
+ all_build_settings = build_configurations.map(&:build_settings)
65
+ common_build_settings = all_build_settings.reduce do |settings, config_build_settings|
66
+ settings.select { |key, value| value == config_build_settings[key] }
67
+ end
68
+
69
+ # Remove all common build settings from each configuration specific build settings
70
+ build_configurations.each do |config|
71
+ config.build_settings.reject! { |key| !common_build_settings[key].nil? }
72
+ end
73
+
74
+ common_build_settings
75
+ end
76
+
77
+ def dump_config_to_file(settings, file_path, includes = [])
78
+ dir = @output_path + file_path + '..'
79
+ dir.mkpath
80
+
81
+ settings = Hash[settings.map do |k, v|
82
+ [k, Array(v).join(' ')]
83
+ end]
84
+
85
+ config = Config.new(settings)
86
+ config.includes = includes
87
+ config.save_as(@output_path + file_path)
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,56 @@
1
+ module Xcodeproj
2
+ class Command
3
+ class ProjectDiff < Command
4
+ self.summary = 'Shows the difference between two projects'
5
+
6
+ self.description = summary + <<-EOS.gsub(/ {8}/, '')
7
+
8
+ It shows the difference in a UUID agnostic fashion.
9
+
10
+ To reduce the noise (and to simplify implementation) differences in the
11
+ order of arrays are ignored.
12
+ EOS
13
+
14
+ def self.options
15
+ [
16
+ ['--ignore=KEY', 'A key to ignore in the comparison. Can be specified multiple times.'],
17
+ ].concat(super)
18
+ end
19
+
20
+ self.arguments = [
21
+ CLAide::Argument.new('PROJECT1', true),
22
+ CLAide::Argument.new('PROJECT2', true),
23
+ ]
24
+
25
+ def initialize(argv)
26
+ @path_project1 = argv.shift_argument
27
+ @path_project2 = argv.shift_argument
28
+ @keys_to_ignore = argv.all_options('ignore')
29
+ super
30
+ end
31
+
32
+ def validate!
33
+ super
34
+ @project1, @project2 = open_project!(@path_project1, @path_project2)
35
+ end
36
+
37
+ def run
38
+ hash_1 = @project1.to_tree_hash.dup
39
+ hash_2 = @project2.to_tree_hash.dup
40
+ @keys_to_ignore.each do |key|
41
+ Differ.clean_hash!(hash_1, key)
42
+ Differ.clean_hash!(hash_2, key)
43
+ end
44
+
45
+ diff = Differ.project_diff(hash_1, hash_2, @path_project1, @path_project2)
46
+
47
+ require 'yaml'
48
+ yaml = diff.to_yaml
49
+ yaml.gsub!(@path_project1, @path_project1.cyan)
50
+ yaml.gsub!(@path_project2, @path_project2.magenta)
51
+ yaml.gsub!(':diff:', 'diff:'.yellow)
52
+ puts yaml
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,60 @@
1
+ module Xcodeproj
2
+ class Command
3
+ class Show < Command
4
+ self.summary = 'Shows an overview of a project in a YAML representation.'
5
+
6
+ def self.options
7
+ [
8
+ ['--format=[hash|tree_hash|raw]', 'YAML output format'],
9
+ ].concat(super)
10
+ end
11
+
12
+ self.arguments = [
13
+ CLAide::Argument.new('PROJECT', false),
14
+ ]
15
+
16
+ def initialize(argv)
17
+ self.xcodeproj_path = argv.shift_argument
18
+ @output_format = argv.option('format')
19
+ @output_format &&= @output_format.to_sym
20
+ super
21
+ end
22
+
23
+ def validate
24
+ super
25
+ unless [nil, :hash, :tree_hash, :raw].include?(@output_format)
26
+ help! "Unknown format `#{@output_format}`"
27
+ end
28
+ open_project!
29
+ end
30
+
31
+ def run
32
+ require 'yaml'
33
+
34
+ if @output_format
35
+ case @output_format
36
+ when :hash
37
+ puts xcodeproj.to_hash.to_yaml
38
+ when :tree_hash
39
+ puts xcodeproj.to_tree_hash.to_yaml
40
+ when :raw
41
+ puts xcodeproj.to_yaml
42
+ end
43
+ return
44
+ end
45
+
46
+ pretty_print = xcodeproj.pretty_print
47
+ sections = []
48
+ pretty_print.each do |key, value|
49
+ section = key.green
50
+ yaml = value.to_yaml
51
+ yaml.gsub!(/^---$/, '')
52
+ yaml.gsub!(/^-/, "\n-")
53
+ yaml.prepend(section)
54
+ sections << yaml
55
+ end
56
+ puts sections * "\n\n"
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,44 @@
1
+ module Xcodeproj
2
+ class Command
3
+ class Sort < Command
4
+ self.description = <<-eos
5
+ Sorts the given project.
6
+
7
+ If no `PROJECT' is specified then the current work directory is searched for one.
8
+ eos
9
+
10
+ self.summary = 'Sorts the given project.'
11
+
12
+ def self.options
13
+ [
14
+ ['--group-option=[above|below]', 'The position of the groups when sorting. If no option is specified, sorting will interleave groups and files.'],
15
+ ].concat(super)
16
+ end
17
+
18
+ self.arguments = [
19
+ CLAide::Argument.new('PROJECT', false),
20
+ ]
21
+
22
+ def initialize(argv)
23
+ self.xcodeproj_path = argv.shift_argument
24
+ @group_option = argv.option('group-option')
25
+ @group_option &&= @group_option.to_sym
26
+ super
27
+ end
28
+
29
+ def validate!
30
+ super
31
+ unless [nil, :above, :below].include?(@group_option)
32
+ help! "Unknown format `#{@group_option}`"
33
+ end
34
+ open_project!
35
+ end
36
+
37
+ def run
38
+ xcodeproj.sort(:groups_position => @group_option)
39
+ xcodeproj.save
40
+ puts "The `#{File.basename(xcodeproj_path)}` project was sorted"
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,43 @@
1
+ module Xcodeproj
2
+ class Command
3
+ class TargetDiff < Command
4
+ self.summary = 'Shows the difference between two targets'
5
+
6
+ def self.options
7
+ [
8
+ ['--project PATH', 'The Xcode project document to use.'],
9
+ ].concat(super)
10
+ end
11
+
12
+ self.arguments = [
13
+ CLAide::Argument.new('TARGET1', true),
14
+ CLAide::Argument.new('TARGET2', true),
15
+ ]
16
+
17
+ def initialize(argv)
18
+ @target1 = argv.shift_argument
19
+ @target2 = argv.shift_argument
20
+ self.xcodeproj_path = argv.option('--project')
21
+ super
22
+ end
23
+
24
+ def validate!
25
+ super
26
+ open_project!
27
+ end
28
+
29
+ def run
30
+ require 'yaml'
31
+ differ = Helper::TargetDiff.new(xcodeproj, @target1, @target2)
32
+ files = differ.new_source_build_files.map do |build_file|
33
+ {
34
+ 'Name' => build_file.file_ref.name,
35
+ 'Path' => build_file.file_ref.path,
36
+ 'Build settings' => build_file.settings,
37
+ }
38
+ end
39
+ puts files.to_yaml
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,63 @@
1
+ module Xcodeproj
2
+ require 'colored2'
3
+ require 'claide'
4
+
5
+ class Command < CLAide::Command
6
+ require 'xcodeproj/command/config_dump'
7
+ require 'xcodeproj/command/target_diff'
8
+ require 'xcodeproj/command/project_diff'
9
+ require 'xcodeproj/command/show'
10
+ require 'xcodeproj/command/sort'
11
+
12
+ self.abstract_command = true
13
+ self.command = 'xcodeproj'
14
+ self.version = VERSION
15
+ self.description = 'Xcodeproj lets you create and modify Xcode projects from Ruby.'
16
+ self.plugin_prefixes = %w(claide xcodeproj)
17
+
18
+ def initialize(argv)
19
+ super
20
+ unless self.ansi_output?
21
+ Colored2.disable!
22
+ String.send(:define_method, :colorize) { |string, _| string }
23
+ end
24
+ end
25
+
26
+ private
27
+
28
+ def xcodeproj_path
29
+ unless @xcodeproj_path
30
+ projects = Dir.glob('*.xcodeproj')
31
+ if projects.size == 1
32
+ xcodeproj_path = projects.first
33
+ elsif projects.size > 1
34
+ raise Informative, 'There are more than one Xcode project documents ' \
35
+ 'in the current working directory. Please specify ' \
36
+ 'which to use with the `--project` option.'
37
+ else
38
+ raise Informative, 'No Xcode project document found in the current ' \
39
+ 'working directory. Please specify which to use ' \
40
+ 'with the `--project` option.'
41
+ end
42
+ @xcodeproj_path = Pathname.new(xcodeproj_path).expand_path
43
+ end
44
+ @xcodeproj_path
45
+ end
46
+
47
+ def open_project!(*paths)
48
+ if paths.empty?
49
+ [xcodeproj]
50
+ else
51
+ paths.map { |path| Project.open(path) }
52
+ end
53
+ end
54
+
55
+ def xcodeproj_path=(path)
56
+ @xcodeproj_path = path && Pathname.new(path).expand_path
57
+ end
58
+
59
+ def xcodeproj
60
+ @xcodeproj ||= Project.open(xcodeproj_path)
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,73 @@
1
+ require 'shellwords'
2
+
3
+ module Xcodeproj
4
+ class Config
5
+ # Parses other linker flags values.
6
+ #
7
+ module OtherLinkerFlagsParser
8
+ # @return [Hash{Symbol, Array[String]}] Splits the given
9
+ # other linker flags value by type.
10
+ #
11
+ # @param [String, Array] flags
12
+ # The other linker flags value.
13
+ #
14
+ def self.parse(flags)
15
+ result = {
16
+ :frameworks => [],
17
+ :weak_frameworks => [],
18
+ :libraries => [],
19
+ :arg_files => [],
20
+ :simple => [],
21
+ :force_load => [],
22
+ }
23
+
24
+ key = nil
25
+ if flags.is_a? String
26
+ flags = split(flags)
27
+ end
28
+ flags.each do |token|
29
+ case token
30
+ when '-framework'
31
+ key = :frameworks
32
+ when '-weak_framework'
33
+ key = :weak_frameworks
34
+ when '-l'
35
+ key = :libraries
36
+ when '@'
37
+ key = :arg_files
38
+ when '-force_load'
39
+ key = :force_load
40
+ else
41
+ if key
42
+ result[key] << token
43
+ key = nil
44
+ else
45
+ result[:simple] << token
46
+ end
47
+ end
48
+ end
49
+ result
50
+ end
51
+
52
+ # @return [Array<String>] Split the given other linker
53
+ # flags value, taking into account quoting and
54
+ # the fact that the `-l` flag might omit the
55
+ # space.
56
+ #
57
+ # @param [String] flags
58
+ # The other linker flags value.
59
+ #
60
+ def self.split(flags)
61
+ flags.strip.shellsplit.flat_map do |string|
62
+ if string =~ /\A-l.+/
63
+ ['-l', string[2..-1]]
64
+ elsif string =~ /\A@.+/
65
+ ['@', string[1..-1]]
66
+ else
67
+ string
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end