zerg_xcode 0.2.1 → 0.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.
- data/CHANGELOG +2 -0
- data/Manifest +3 -0
- data/lib/zerg_xcode/objects/pbx_build_file.rb +10 -0
- data/lib/zerg_xcode/objects/pbx_build_phase.rb +12 -0
- data/lib/zerg_xcode/objects/pbx_container_item_proxy.rb +13 -0
- data/lib/zerg_xcode/objects/pbx_project.rb +5 -0
- data/lib/zerg_xcode/objects/pbx_target_dependency.rb +13 -0
- data/lib/zerg_xcode/objects/xc_configuration_list.rb +4 -0
- data/lib/zerg_xcode/objects/xcode_object.rb +28 -1
- data/lib/zerg_xcode/plugins/addlibrary.rb +121 -0
- data/lib/zerg_xcode/plugins/import.rb +0 -48
- data/lib/zerg_xcode/plugins/retarget.rb +1 -5
- data/lib/zerg_xcode.rb +1 -0
- data/test/objects/pbx_build_file_test.rb +14 -5
- data/test/objects/pbx_build_phase_test.rb +20 -0
- data/test/objects/pbx_container_item_proxy_test.rb +17 -4
- data/test/objects/pbx_project_test.rb +5 -0
- data/test/objects/pbx_target_dependency_test.rb +20 -4
- data/test/objects/xc_configuration_list_test.rb +4 -2
- data/test/objects/xcode_object_test.rb +17 -0
- data/test/plugins/addlibrary_test.rb +98 -0
- data/zerg_xcode.gemspec +4 -4
- metadata +8 -1
data/CHANGELOG
CHANGED
data/Manifest
CHANGED
@@ -6,6 +6,7 @@ lib/zerg_xcode/file_format/lexer.rb
|
|
6
6
|
lib/zerg_xcode/file_format/parser.rb
|
7
7
|
lib/zerg_xcode/file_format/paths.rb
|
8
8
|
lib/zerg_xcode/objects/pbx_build_file.rb
|
9
|
+
lib/zerg_xcode/objects/pbx_build_phase.rb
|
9
10
|
lib/zerg_xcode/objects/pbx_container_item_proxy.rb
|
10
11
|
lib/zerg_xcode/objects/pbx_group.rb
|
11
12
|
lib/zerg_xcode/objects/pbx_native_target.rb
|
@@ -13,6 +14,7 @@ lib/zerg_xcode/objects/pbx_project.rb
|
|
13
14
|
lib/zerg_xcode/objects/pbx_target_dependency.rb
|
14
15
|
lib/zerg_xcode/objects/xc_configuration_list.rb
|
15
16
|
lib/zerg_xcode/objects/xcode_object.rb
|
17
|
+
lib/zerg_xcode/plugins/addlibrary.rb
|
16
18
|
lib/zerg_xcode/plugins/core/core.rb
|
17
19
|
lib/zerg_xcode/plugins/help.rb
|
18
20
|
lib/zerg_xcode/plugins/import.rb
|
@@ -33,6 +35,7 @@ test/file_format/lexer_test.rb
|
|
33
35
|
test/file_format/parser_test.rb
|
34
36
|
test/file_format/path_test.rb
|
35
37
|
test/objects/pbx_build_file_test.rb
|
38
|
+
test/objects/pbx_build_phase_test.rb
|
36
39
|
test/objects/pbx_container_item_proxy_test.rb
|
37
40
|
test/objects/pbx_group_test.rb
|
38
41
|
test/objects/pbx_native_target_test.rb
|
@@ -24,4 +24,14 @@ class ZergXcode::Objects::PBXBuildFile < ZergXcode::XcodeObject
|
|
24
24
|
return 'PBXResourcesBuildPhase'
|
25
25
|
end
|
26
26
|
end
|
27
|
+
|
28
|
+
# Creates a build file for the given file reference.
|
29
|
+
def self.for(file_ref)
|
30
|
+
self.new 'fileRef' => file_ref
|
31
|
+
end
|
32
|
+
|
33
|
+
# :nodoc: override xref_name to borrow the referenced object's name
|
34
|
+
def xref_name
|
35
|
+
self['fileRef'].xref_name
|
36
|
+
end
|
27
37
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# Superclass for all the Xcode build phases.
|
2
|
+
#
|
3
|
+
# Subclasses include PBXHeadersBuildPhase, PBXSourcesBuildPhase,
|
4
|
+
# PBXFrameworksBuildPhase, and PBXResourcesBuildPhase.
|
5
|
+
class ZergXcode::Objects::PBXBuildPhase < ZergXcode::XcodeObject
|
6
|
+
# Creates a new build phase with the given isa type.
|
7
|
+
def self.new_phase(isa_type)
|
8
|
+
self.new 'isa' => isa_type.to_s, 'dependencies' => [], 'files' => [],
|
9
|
+
'buildActionMask' => '2147483647',
|
10
|
+
'runOnlyForDeploymentPostprocessing' => '0'
|
11
|
+
end
|
12
|
+
end
|
@@ -7,4 +7,17 @@ class ZergXcode::Objects::PBXContainerItemProxy < ZergXcode::XcodeObject
|
|
7
7
|
def target
|
8
8
|
self['remoteGlobalIDString']
|
9
9
|
end
|
10
|
+
|
11
|
+
# Creates a proxy for an object in the same graph, using the given container.
|
12
|
+
#
|
13
|
+
# Usually, the container is the project.
|
14
|
+
def self.for(object, container)
|
15
|
+
self.new 'proxyType' => '1', 'containerPortal' => container,
|
16
|
+
'remoteInfo' => object.xref_name, 'remoteGlobalIDString' => object
|
17
|
+
end
|
18
|
+
|
19
|
+
# :nodoc: override xref_name because Xcode gives us a name in remoteInfo
|
20
|
+
def xref_name
|
21
|
+
self['remoteInfo']
|
22
|
+
end
|
10
23
|
end
|
@@ -27,6 +27,11 @@ class ZergXcode::Objects::PBXProject < ZergXcode::XcodeObject
|
|
27
27
|
FileVisitor.visit self['mainGroup'], project_root, files
|
28
28
|
files
|
29
29
|
end
|
30
|
+
|
31
|
+
# :nodoc: override xref_name because PBXProject is a singleton
|
32
|
+
def xref_name
|
33
|
+
isa.to_s
|
34
|
+
end
|
30
35
|
|
31
36
|
# Container for the visitor that lists all files in a project.
|
32
37
|
module FileVisitor
|
@@ -1,7 +1,20 @@
|
|
1
1
|
# Expresses a target's dependency on another target.
|
2
2
|
class ZergXcode::Objects::PBXTargetDependency < ZergXcode::XcodeObject
|
3
|
+
PBXContainerItemProxy = ZergXcode::Objects::PBXContainerItemProxy
|
4
|
+
|
3
5
|
# The target that this target depends on.
|
4
6
|
def target
|
5
7
|
self['target']
|
6
8
|
end
|
9
|
+
|
10
|
+
# Creates a new dependency on the given target
|
11
|
+
def self.for(target, project)
|
12
|
+
self.new 'target' => target,
|
13
|
+
'targetProxy' => PBXContainerItemProxy.for(target, project)
|
14
|
+
end
|
15
|
+
|
16
|
+
# :nodoc: override xref_name to use the name of the target in the dependency
|
17
|
+
def xref_name
|
18
|
+
target.xref_name
|
19
|
+
end
|
7
20
|
end
|
@@ -116,6 +116,33 @@ class ZergXcode::XcodeObject
|
|
116
116
|
end
|
117
117
|
value
|
118
118
|
end
|
119
|
+
|
120
|
+
# Graph navigating and cross-referencing.
|
121
|
+
|
122
|
+
# Key used for cross-referencing objects in different graphs. If two objects
|
123
|
+
# in different graphs have the same key, it is very likely that they represent
|
124
|
+
# the same entity.
|
125
|
+
def xref_key
|
126
|
+
# If the object doesn't have a merge name, use its (unique) object_id.
|
127
|
+
[isa, xref_name || object_id]
|
128
|
+
end
|
129
|
+
|
130
|
+
# Name used in referencing an object.
|
131
|
+
#
|
132
|
+
# An object's name should be unique among objects in the same context. For
|
133
|
+
# instance, objects in the same array (e.g. 'children' in a PBXGroup) should
|
134
|
+
# have distinct names.
|
135
|
+
def xref_name
|
136
|
+
# Do not use this to override xref_name for specific objects. Only use
|
137
|
+
# it for object families.
|
138
|
+
case isa.to_s
|
139
|
+
when /BuildPhase$/
|
140
|
+
isa.to_s
|
141
|
+
else
|
142
|
+
self['name'] || self['explicitPath'] || self['path']
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
119
146
|
|
120
147
|
# Deep copy
|
121
148
|
def self.from(object_or_hash)
|
@@ -153,6 +180,6 @@ class ZergXcode::XcodeObject
|
|
153
180
|
|
154
181
|
def copy_metadata(source)
|
155
182
|
self.archive_id, self.version = source.archive_id, source.version
|
156
|
-
end
|
183
|
+
end
|
157
184
|
end
|
158
185
|
|
@@ -0,0 +1,121 @@
|
|
1
|
+
class ZergXcode::Plugins::Addlibrary
|
2
|
+
include ZergXcode::Objects
|
3
|
+
|
4
|
+
def help
|
5
|
+
{:short => 'adds a library to a target',
|
6
|
+
:long => <<"END" }
|
7
|
+
Usage: addlibrary library_target target [path]
|
8
|
+
|
9
|
+
Adds a library as a dependency to a target, in the project at the given path.
|
10
|
+
If no path is given, looks for a project in the current directory.
|
11
|
+
|
12
|
+
library_target should be a static library. If library_target contains ObjectiveC
|
13
|
+
files, the "-ObjC" option is added to the target linker options.
|
14
|
+
END
|
15
|
+
end
|
16
|
+
|
17
|
+
def run(args)
|
18
|
+
lib_target_name = args.shift
|
19
|
+
target_name = args.shift
|
20
|
+
project = ZergXcode.load(args.shift || '.')
|
21
|
+
|
22
|
+
ad = "'zerg-xcode lstargets' can list project targets."
|
23
|
+
unless lib_target = find_target(lib_target_name, project)
|
24
|
+
print "#{lib_target_name} not found. #{ad}"
|
25
|
+
return
|
26
|
+
end
|
27
|
+
unless target = find_target(target_name, project)
|
28
|
+
print "#{lib_target_name} not found. #{ad}"
|
29
|
+
return
|
30
|
+
end
|
31
|
+
|
32
|
+
add_library! lib_target, target, project
|
33
|
+
project.save!
|
34
|
+
end
|
35
|
+
|
36
|
+
def find_target(name, project)
|
37
|
+
project['targets'].find { |target| target['name'] == name }
|
38
|
+
end
|
39
|
+
|
40
|
+
# Adds a library to a project.
|
41
|
+
def add_library!(library_target, target, project)
|
42
|
+
add_target_dependency! library_target, target, project
|
43
|
+
add_target_to_build_phases! library_target, target
|
44
|
+
|
45
|
+
add_linker_option! '-ObjC', target if has_objc_files? target
|
46
|
+
end
|
47
|
+
|
48
|
+
# Adds a target as a dependency of another target.
|
49
|
+
def add_target_dependency!(dependency, dependent, project)
|
50
|
+
return if has_target_dependency? dependency, dependent
|
51
|
+
dependent['dependencies'] << PBXTargetDependency.for(dependency, project)
|
52
|
+
end
|
53
|
+
|
54
|
+
# True if the given target is dependent on the other given target.
|
55
|
+
def has_target_dependency?(dependency, target)
|
56
|
+
target['dependencies'].any? do |dep|
|
57
|
+
dep.kind_of?(PBXTargetDependency) && dep.target == dependency
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# Adds a target to the build phases of another target.
|
62
|
+
def add_target_to_build_phases!(dependency, dependent)
|
63
|
+
return if has_target_in_build_phases? dependency, dependent
|
64
|
+
|
65
|
+
# find or create the frameworks build phase
|
66
|
+
frameworks_phase = dependent['buildPhases'].find do |phase|
|
67
|
+
phase['isa'] == 'PBXFrameworksBuildPhase'
|
68
|
+
end
|
69
|
+
unless frameworks_phase
|
70
|
+
frameworks_phase = PBXBuildPhase.new_phase 'PBXFrameworksBuildPhase'
|
71
|
+
target['buildPhases'] << frameworks_phase
|
72
|
+
end
|
73
|
+
|
74
|
+
dep_file = dependency['productReference']
|
75
|
+
frameworks_phase['files'] << PBXBuildFile.for(dep_file)
|
76
|
+
end
|
77
|
+
|
78
|
+
def has_target_in_build_phases?(dependency, dependent)
|
79
|
+
frameworks_phase = dependent['buildPhases'].find do |phase|
|
80
|
+
phase['isa'] == 'PBXFrameworksBuildPhase'
|
81
|
+
end
|
82
|
+
return false unless frameworks_phase
|
83
|
+
|
84
|
+
frameworks_phase['files'].any? do |file|
|
85
|
+
file['fileRef'] == dependency['productReference']
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
# True if the target builds any objective C files.
|
90
|
+
def has_objc_files?(target)
|
91
|
+
target.all_files.any? do |file|
|
92
|
+
file[:build_object].file_type == 'sourcecode.c.objc'
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
# Adds a linker option to the given project.
|
97
|
+
def add_linker_option!(option, target)
|
98
|
+
key = 'OTHER_LDFLAGS'
|
99
|
+
target['buildConfigurationList']['buildConfigurations'].each do |config|
|
100
|
+
config['buildSettings'] ||= {}
|
101
|
+
settings = config['buildSettings']
|
102
|
+
if settings[key]
|
103
|
+
settings[key] = [settings[key]] if settings[key].kind_of? String
|
104
|
+
settings[key] << option unless settings[key].include? option
|
105
|
+
else
|
106
|
+
settings[key] = option
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
# True if a target has the given linker option.
|
112
|
+
def has_linker_option?(option, target)
|
113
|
+
key = 'OTHER_LDFLAGS'
|
114
|
+
target['buildConfigurationList']['buildConfigurations'].all? do |config|
|
115
|
+
next false unless settings = config['buildSettings']
|
116
|
+
setting = settings[key]
|
117
|
+
setting && (setting == option ||
|
118
|
+
(setting.kind_of?(Enumerable) && setting.include?(option)))
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
@@ -274,51 +274,3 @@ END
|
|
274
274
|
end
|
275
275
|
private :cross_reference_enumerables
|
276
276
|
end
|
277
|
-
|
278
|
-
class ZergXcode::XcodeObject
|
279
|
-
def xref_key
|
280
|
-
# If the object doesn't have a merge name, use its (unique) object_id.
|
281
|
-
[isa, xref_name || object_id]
|
282
|
-
end
|
283
|
-
|
284
|
-
def xref_name
|
285
|
-
# Do not use this to override xref_name for specific objects. Only use
|
286
|
-
# it for object families.
|
287
|
-
case isa.to_s
|
288
|
-
when /BuildPhase$/
|
289
|
-
isa.to_s
|
290
|
-
else
|
291
|
-
self['name'] || self['explicitPath'] || self['path']
|
292
|
-
end
|
293
|
-
end
|
294
|
-
end
|
295
|
-
|
296
|
-
class ZergXcode::Objects::PBXBuildFile
|
297
|
-
def xref_name
|
298
|
-
self['fileRef'].xref_name
|
299
|
-
end
|
300
|
-
end
|
301
|
-
|
302
|
-
class ZergXcode::Objects::PBXProject
|
303
|
-
def xref_name
|
304
|
-
isa.to_s
|
305
|
-
end
|
306
|
-
end
|
307
|
-
|
308
|
-
class ZergXcode::Objects::XCConfigurationList
|
309
|
-
def xref_name
|
310
|
-
isa.to_s
|
311
|
-
end
|
312
|
-
end
|
313
|
-
|
314
|
-
class ZergXcode::Objects::PBXContainerItemProxy
|
315
|
-
def xref_name
|
316
|
-
self['remoteInfo']
|
317
|
-
end
|
318
|
-
end
|
319
|
-
|
320
|
-
class ZergXcode::Objects::PBXTargetDependency
|
321
|
-
def xref_name
|
322
|
-
target.xref_name
|
323
|
-
end
|
324
|
-
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
class ZergXcode::Plugins::Retarget
|
2
2
|
include ZergXcode::Objects
|
3
|
-
XcodeObject = ZergXcode::XcodeObject
|
4
3
|
|
5
4
|
def help
|
6
5
|
{:short => 'reassign files to a target or set of targets',
|
@@ -77,10 +76,7 @@ END
|
|
77
76
|
phase_type = file_phases[file]
|
78
77
|
phase = target['buildPhases'].find { |p| p['isa'] == phase_type }
|
79
78
|
unless phase
|
80
|
-
phase =
|
81
|
-
'files' => [],
|
82
|
-
'buildActionMask' => '2147483647',
|
83
|
-
'runOnlyForDeploymentPostprocessing' => '0'
|
79
|
+
phase = PBXBuildPhase.new_phase phase_type
|
84
80
|
target['buildPhases'] << phase
|
85
81
|
end
|
86
82
|
phase['files'] << build_files[file]
|
data/lib/zerg_xcode.rb
CHANGED
@@ -10,6 +10,7 @@ require 'zerg_xcode/file_format/paths.rb'
|
|
10
10
|
|
11
11
|
require 'zerg_xcode/objects/xcode_object.rb'
|
12
12
|
require 'zerg_xcode/objects/pbx_build_file.rb'
|
13
|
+
require 'zerg_xcode/objects/pbx_build_phase.rb'
|
13
14
|
require 'zerg_xcode/objects/pbx_container_item_proxy.rb'
|
14
15
|
require 'zerg_xcode/objects/pbx_group.rb'
|
15
16
|
require 'zerg_xcode/objects/pbx_native_target.rb'
|
@@ -7,14 +7,14 @@ class PBXBuildFileTest < Test::Unit::TestCase
|
|
7
7
|
|
8
8
|
def setup
|
9
9
|
@target = ZergXcode.load('testdata/project.pbxproj')['targets'].first
|
10
|
+
@sources_phase = @target['buildPhases'][1]
|
11
|
+
@build_file = @sources_phase['files'].first
|
10
12
|
end
|
11
13
|
|
12
14
|
def test_attributes
|
13
|
-
|
14
|
-
|
15
|
-
assert_equal
|
16
|
-
assert_equal 'main.m', build_file.filename
|
17
|
-
assert_equal 'sourcecode.c.objc', build_file.file_type
|
15
|
+
assert_equal PBXBuildFile, @build_file.class
|
16
|
+
assert_equal 'main.m', @build_file.filename
|
17
|
+
assert_equal 'sourcecode.c.objc', @build_file.file_type
|
18
18
|
|
19
19
|
big_project = ZergXcode.load('testdata/ZergSupport')
|
20
20
|
big_project['targets'].map { |t| t.all_files }.flatten.each do |file|
|
@@ -35,4 +35,13 @@ class PBXBuildFileTest < Test::Unit::TestCase
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
end
|
38
|
+
|
39
|
+
def test_xref_name
|
40
|
+
assert_equal 'main.m', @build_file.xref_name
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_for
|
44
|
+
new_build_file = PBXBuildFile.for @build_file['fileRef']
|
45
|
+
assert_equal @build_file._attr_hash, new_build_file._attr_hash
|
46
|
+
end
|
38
47
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
|
3
|
+
require 'zerg_xcode'
|
4
|
+
|
5
|
+
class PBXBuildPhaseTest < Test::Unit::TestCase
|
6
|
+
PBXBuildPhase = ZergXcode::Objects::PBXBuildPhase
|
7
|
+
|
8
|
+
def setup
|
9
|
+
@target = ZergXcode.load('testdata/project.pbxproj')['targets'].first
|
10
|
+
@sources_phase = @target['buildPhases'][1]
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_new_phase
|
14
|
+
gold_attrs = @sources_phase._attr_hash.reject { |k, v|
|
15
|
+
['files', 'dependencies'].include? k
|
16
|
+
}.merge 'files' => [], 'dependencies' => []
|
17
|
+
new_phase = PBXBuildPhase.new_phase('PBXSourcesBuildPhase')
|
18
|
+
assert_equal gold_attrs, new_phase._attr_hash
|
19
|
+
end
|
20
|
+
end
|
@@ -5,10 +5,23 @@ require 'zerg_xcode'
|
|
5
5
|
class PBXContainerItemProxyTest < Test::Unit::TestCase
|
6
6
|
PBXContainerItemProxy = ZergXcode::Objects::PBXContainerItemProxy
|
7
7
|
|
8
|
+
def setup
|
9
|
+
@project = ZergXcode.load 'testdata/ZergSupport.xcodeproj/project.pbxproj'
|
10
|
+
@proxy = @project['targets'][2]['dependencies'].first['targetProxy']
|
11
|
+
@target = @project['targets'][1]
|
12
|
+
end
|
13
|
+
|
8
14
|
def test_target
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
15
|
+
assert_equal PBXContainerItemProxy, @proxy.class
|
16
|
+
assert_equal @target, @proxy.target
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_xref_name
|
20
|
+
assert_equal 'ZergTestSupport', @proxy.xref_name
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_for
|
24
|
+
new_proxy = PBXContainerItemProxy.for @target, @project
|
25
|
+
assert_equal @proxy._attr_hash, new_proxy._attr_hash
|
13
26
|
end
|
14
27
|
end
|
@@ -5,10 +5,26 @@ require 'zerg_xcode'
|
|
5
5
|
class PBXTargetDependencyTest < Test::Unit::TestCase
|
6
6
|
PBXTargetDependency = ZergXcode::Objects::PBXTargetDependency
|
7
7
|
|
8
|
+
def setup
|
9
|
+
@project = ZergXcode.load 'testdata/ZergSupport.xcodeproj/project.pbxproj'
|
10
|
+
@dependency = @project['targets'][2]['dependencies'].first
|
11
|
+
@target = @project['targets'][1]
|
12
|
+
end
|
13
|
+
|
8
14
|
def test_target
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
15
|
+
assert_equal PBXTargetDependency, @dependency.class
|
16
|
+
assert_equal @target, @dependency.target
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_xref_name
|
20
|
+
assert_equal 'ZergTestSupport', @dependency.xref_name
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_for
|
24
|
+
new_dependency = PBXTargetDependency.for @target, @project
|
25
|
+
assert_equal @dependency._attr_hash.reject { |k, v| k == 'targetProxy' },
|
26
|
+
new_dependency._attr_hash.reject { |k, v| k == 'targetProxy' }
|
27
|
+
assert_equal @dependency['targetProxy']._attr_hash,
|
28
|
+
new_dependency['targetProxy']._attr_hash
|
13
29
|
end
|
14
30
|
end
|
@@ -5,8 +5,10 @@ require 'zerg_xcode'
|
|
5
5
|
class XCConfigurationListTest < Test::Unit::TestCase
|
6
6
|
XCConfigurationList = ZergXcode::Objects::XCConfigurationList
|
7
7
|
|
8
|
-
def
|
8
|
+
def test_xref_name
|
9
9
|
proj = ZergXcode.load 'testdata/project.pbxproj'
|
10
|
-
|
10
|
+
list = proj['buildConfigurationList']
|
11
|
+
assert_equal XCConfigurationList, list.class
|
12
|
+
assert_equal 'XCConfigurationList', list.xref_name
|
11
13
|
end
|
12
14
|
end
|
@@ -113,6 +113,23 @@ class ObjectTest < Test::Unit::TestCase
|
|
113
113
|
assert_equal @sub1[:string], 'ss'
|
114
114
|
end
|
115
115
|
|
116
|
+
def test_xref_name_and_key
|
117
|
+
@obj1 = XcodeObject.from 'isa' => 'Alien', 'name' => 'Name',
|
118
|
+
'path' => 'Path'
|
119
|
+
@obj2 = XcodeObject.from 'isa' => 'Alien', 'name' => 'Name',
|
120
|
+
'path' => 'Path', 'explicitPath' => 'XPath'
|
121
|
+
@obj3 = XcodeObject.from 'isa' => 'Alien', 'path' => 'Path'
|
122
|
+
@obj4 = XcodeObject.from 'isa' => 'Alien',
|
123
|
+
'path' => 'Path', 'explicitPath' => 'XPath'
|
124
|
+
|
125
|
+
assert_equal 'Name', @obj1.xref_name
|
126
|
+
assert_equal 'Name', @obj2.xref_name
|
127
|
+
assert_equal 'Path', @obj3.xref_name
|
128
|
+
assert_equal 'XPath', @obj4.xref_name
|
129
|
+
|
130
|
+
assert_equal [:Alien, 'Name'], @obj1.xref_key
|
131
|
+
end
|
132
|
+
|
116
133
|
def test_deep_copy
|
117
134
|
root = XcodeObject.from @root
|
118
135
|
assert_equal root[:sub2][:sub1], root[:sub1], 'Deep copy tracks objects'
|
@@ -0,0 +1,98 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'test/plugins/test_helper.rb'
|
3
|
+
|
4
|
+
require 'zerg_xcode'
|
5
|
+
|
6
|
+
require 'rubygems'
|
7
|
+
|
8
|
+
module Plugins; end
|
9
|
+
|
10
|
+
class Plugins::AddlibraryTest < Test::Unit::TestCase
|
11
|
+
include Plugins::TestHelper
|
12
|
+
|
13
|
+
def setup
|
14
|
+
super
|
15
|
+
@plugin = ZergXcode.plugin 'addlibrary'
|
16
|
+
@project = ZergXcode.load 'testdata/ZergSupport'
|
17
|
+
|
18
|
+
@lib, @test_lib, @test_app = *@project['targets']
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_find_target
|
22
|
+
assert_equal @test_lib, @plugin.find_target('ZergTestSupport', @project)
|
23
|
+
assert_nil @plugin.find_target('Zergness', @project)
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_has_target_dependency
|
27
|
+
[[true, @test_lib, @lib], [false, @lib, @test_lib],
|
28
|
+
[true, @test_app, @test_lib], [false, @test_lib, @test_app],
|
29
|
+
[false, @test_app, @lib]
|
30
|
+
].each do |scenario|
|
31
|
+
assert_equal scenario[0],
|
32
|
+
@plugin.has_target_dependency?(scenario[2], scenario[1]),
|
33
|
+
"Failed #{scenario[1]['name']} depends on " +
|
34
|
+
scenario[2]['name']
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_add_target_dependency
|
39
|
+
@plugin.add_target_dependency! @test_lib, @lib, @project
|
40
|
+
assert @plugin.has_target_dependency?(@test_lib, @lib),
|
41
|
+
"Add failed"
|
42
|
+
@plugin.add_target_dependency! @test_app, @lib, @project
|
43
|
+
assert @plugin.has_target_dependency?(@test_app, @lib),
|
44
|
+
"Add failed"
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_has_target_in_build_phases
|
48
|
+
[[true, @test_lib, @lib], [false, @lib, @test_lib],
|
49
|
+
[true, @test_app, @test_lib], [false, @test_lib, @test_app],
|
50
|
+
[false, @test_app, @lib]
|
51
|
+
].each do |scenario|
|
52
|
+
assert_equal scenario[0],
|
53
|
+
@plugin.has_target_in_build_phases?(scenario[2],
|
54
|
+
scenario[1]),
|
55
|
+
"Failed #{scenario[1]['name']} has " +
|
56
|
+
scenario[2]['name'] + " in build phases"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_add_target_to_build_phases
|
61
|
+
@plugin.add_target_to_build_phases! @test_lib, @lib
|
62
|
+
assert @plugin.has_target_in_build_phases?(@test_lib, @lib),
|
63
|
+
"Add failed"
|
64
|
+
@plugin.add_target_to_build_phases! @test_app, @lib
|
65
|
+
assert @plugin.has_target_in_build_phases?(@test_app, @lib),
|
66
|
+
"Add failed"
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_has_objc_files
|
70
|
+
assert_equal true, @plugin.has_objc_files?(@lib),
|
71
|
+
"ZergSupport has ObjC files"
|
72
|
+
|
73
|
+
ZergXcode.plugin('retarget').retarget! @project, /\.m$/, []
|
74
|
+
assert_equal false, @plugin.has_objc_files?(@lib),
|
75
|
+
"ZergSupport doesn't have ObjC files after retargeting"
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_has_linker_option
|
79
|
+
assert_equal false, @plugin.has_linker_option?('-ObjC', @lib)
|
80
|
+
assert_equal true, @plugin.has_linker_option?('-ObjC', @test_app)
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_add_linker_option
|
84
|
+
@plugin.add_linker_option! '-ObjC', @lib
|
85
|
+
assert_equal true, @plugin.has_linker_option?('-ObjC', @lib)
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_add_library
|
89
|
+
@plugin.add_library! @test_app, @lib, @project
|
90
|
+
|
91
|
+
assert @plugin.has_target_dependency?(@test_app, @lib),
|
92
|
+
"Not on dependency list"
|
93
|
+
assert @plugin.has_target_in_build_phases?(@test_app, @lib),
|
94
|
+
"Not in build phases"
|
95
|
+
assert_equal true, @plugin.has_linker_option?('-ObjC', @lib),
|
96
|
+
"Linker option unset"
|
97
|
+
end
|
98
|
+
end
|
data/zerg_xcode.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{zerg_xcode}
|
5
|
-
s.version = "0.
|
5
|
+
s.version = "0.3"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Victor Costan"]
|
@@ -11,8 +11,8 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.description = %q{Automated modifications for Xcode project files}
|
12
12
|
s.email = %q{victor@zergling.net}
|
13
13
|
s.executables = ["zerg-xcode"]
|
14
|
-
s.extra_rdoc_files = ["bin/zerg-xcode", "CHANGELOG", "lib/zerg_xcode/file_format/archiver.rb", "lib/zerg_xcode/file_format/encoder.rb", "lib/zerg_xcode/file_format/lexer.rb", "lib/zerg_xcode/file_format/parser.rb", "lib/zerg_xcode/file_format/paths.rb", "lib/zerg_xcode/objects/pbx_build_file.rb", "lib/zerg_xcode/objects/pbx_container_item_proxy.rb", "lib/zerg_xcode/objects/pbx_group.rb", "lib/zerg_xcode/objects/pbx_native_target.rb", "lib/zerg_xcode/objects/pbx_project.rb", "lib/zerg_xcode/objects/pbx_target_dependency.rb", "lib/zerg_xcode/objects/xc_configuration_list.rb", "lib/zerg_xcode/objects/xcode_object.rb", "lib/zerg_xcode/plugins/core/core.rb", "lib/zerg_xcode/plugins/help.rb", "lib/zerg_xcode/plugins/import.rb", "lib/zerg_xcode/plugins/irb.rb", "lib/zerg_xcode/plugins/ls.rb", "lib/zerg_xcode/plugins/lstargets.rb", "lib/zerg_xcode/plugins/retarget.rb", "lib/zerg_xcode/shortcuts.rb", "lib/zerg_xcode.rb", "LICENSE", "README.textile"]
|
15
|
-
s.files = ["bin/zerg-xcode", "CHANGELOG", "lib/zerg_xcode/file_format/archiver.rb", "lib/zerg_xcode/file_format/encoder.rb", "lib/zerg_xcode/file_format/lexer.rb", "lib/zerg_xcode/file_format/parser.rb", "lib/zerg_xcode/file_format/paths.rb", "lib/zerg_xcode/objects/pbx_build_file.rb", "lib/zerg_xcode/objects/pbx_container_item_proxy.rb", "lib/zerg_xcode/objects/pbx_group.rb", "lib/zerg_xcode/objects/pbx_native_target.rb", "lib/zerg_xcode/objects/pbx_project.rb", "lib/zerg_xcode/objects/pbx_target_dependency.rb", "lib/zerg_xcode/objects/xc_configuration_list.rb", "lib/zerg_xcode/objects/xcode_object.rb", "lib/zerg_xcode/plugins/core/core.rb", "lib/zerg_xcode/plugins/help.rb", "lib/zerg_xcode/plugins/import.rb", "lib/zerg_xcode/plugins/irb.rb", "lib/zerg_xcode/plugins/ls.rb", "lib/zerg_xcode/plugins/lstargets.rb", "lib/zerg_xcode/plugins/retarget.rb", "lib/zerg_xcode/shortcuts.rb", "lib/zerg_xcode.rb", "LICENSE", "Manifest", "Rakefile", "README.textile", "RUBYFORGE", "test/file_format/archiver_test.rb", "test/file_format/encoder_test.rb", "test/file_format/lexer_test.rb", "test/file_format/parser_test.rb", "test/file_format/path_test.rb", "test/objects/pbx_build_file_test.rb", "test/objects/pbx_container_item_proxy_test.rb", "test/objects/pbx_group_test.rb", "test/objects/pbx_native_target_test.rb", "test/objects/pbx_project_test.rb", "test/objects/pbx_target_dependency_test.rb", "test/objects/xc_configuration_list_test.rb", "test/objects/xcode_object_test.rb", "test/plugins/core/core_test.rb", "test/plugins/import_test.rb", "test/plugins/irb_test.rb", "test/plugins/ls_test.rb", "test/plugins/lstargets_test.rb", "test/plugins/retarget_test.rb", "test/plugins/test_helper.rb", "test/shortcuts_test.rb", "testdata/FlatTestApp/FlatTestApp.xcodeproj/project.pbxproj", "testdata/project.pbxproj", "testdata/project.pbxproj.compat", "testdata/TestApp/TestApp.xcodeproj/project.pbxproj", "testdata/ZergSupport.xcodeproj/project.pbxproj", "zerg_xcode.gemspec"]
|
14
|
+
s.extra_rdoc_files = ["bin/zerg-xcode", "CHANGELOG", "lib/zerg_xcode/file_format/archiver.rb", "lib/zerg_xcode/file_format/encoder.rb", "lib/zerg_xcode/file_format/lexer.rb", "lib/zerg_xcode/file_format/parser.rb", "lib/zerg_xcode/file_format/paths.rb", "lib/zerg_xcode/objects/pbx_build_file.rb", "lib/zerg_xcode/objects/pbx_build_phase.rb", "lib/zerg_xcode/objects/pbx_container_item_proxy.rb", "lib/zerg_xcode/objects/pbx_group.rb", "lib/zerg_xcode/objects/pbx_native_target.rb", "lib/zerg_xcode/objects/pbx_project.rb", "lib/zerg_xcode/objects/pbx_target_dependency.rb", "lib/zerg_xcode/objects/xc_configuration_list.rb", "lib/zerg_xcode/objects/xcode_object.rb", "lib/zerg_xcode/plugins/addlibrary.rb", "lib/zerg_xcode/plugins/core/core.rb", "lib/zerg_xcode/plugins/help.rb", "lib/zerg_xcode/plugins/import.rb", "lib/zerg_xcode/plugins/irb.rb", "lib/zerg_xcode/plugins/ls.rb", "lib/zerg_xcode/plugins/lstargets.rb", "lib/zerg_xcode/plugins/retarget.rb", "lib/zerg_xcode/shortcuts.rb", "lib/zerg_xcode.rb", "LICENSE", "README.textile"]
|
15
|
+
s.files = ["bin/zerg-xcode", "CHANGELOG", "lib/zerg_xcode/file_format/archiver.rb", "lib/zerg_xcode/file_format/encoder.rb", "lib/zerg_xcode/file_format/lexer.rb", "lib/zerg_xcode/file_format/parser.rb", "lib/zerg_xcode/file_format/paths.rb", "lib/zerg_xcode/objects/pbx_build_file.rb", "lib/zerg_xcode/objects/pbx_build_phase.rb", "lib/zerg_xcode/objects/pbx_container_item_proxy.rb", "lib/zerg_xcode/objects/pbx_group.rb", "lib/zerg_xcode/objects/pbx_native_target.rb", "lib/zerg_xcode/objects/pbx_project.rb", "lib/zerg_xcode/objects/pbx_target_dependency.rb", "lib/zerg_xcode/objects/xc_configuration_list.rb", "lib/zerg_xcode/objects/xcode_object.rb", "lib/zerg_xcode/plugins/addlibrary.rb", "lib/zerg_xcode/plugins/core/core.rb", "lib/zerg_xcode/plugins/help.rb", "lib/zerg_xcode/plugins/import.rb", "lib/zerg_xcode/plugins/irb.rb", "lib/zerg_xcode/plugins/ls.rb", "lib/zerg_xcode/plugins/lstargets.rb", "lib/zerg_xcode/plugins/retarget.rb", "lib/zerg_xcode/shortcuts.rb", "lib/zerg_xcode.rb", "LICENSE", "Manifest", "Rakefile", "README.textile", "RUBYFORGE", "test/file_format/archiver_test.rb", "test/file_format/encoder_test.rb", "test/file_format/lexer_test.rb", "test/file_format/parser_test.rb", "test/file_format/path_test.rb", "test/objects/pbx_build_file_test.rb", "test/objects/pbx_build_phase_test.rb", "test/objects/pbx_container_item_proxy_test.rb", "test/objects/pbx_group_test.rb", "test/objects/pbx_native_target_test.rb", "test/objects/pbx_project_test.rb", "test/objects/pbx_target_dependency_test.rb", "test/objects/xc_configuration_list_test.rb", "test/objects/xcode_object_test.rb", "test/plugins/core/core_test.rb", "test/plugins/import_test.rb", "test/plugins/irb_test.rb", "test/plugins/ls_test.rb", "test/plugins/lstargets_test.rb", "test/plugins/retarget_test.rb", "test/plugins/test_helper.rb", "test/shortcuts_test.rb", "testdata/FlatTestApp/FlatTestApp.xcodeproj/project.pbxproj", "testdata/project.pbxproj", "testdata/project.pbxproj.compat", "testdata/TestApp/TestApp.xcodeproj/project.pbxproj", "testdata/ZergSupport.xcodeproj/project.pbxproj", "zerg_xcode.gemspec", "test/plugins/addlibrary_test.rb"]
|
16
16
|
s.has_rdoc = true
|
17
17
|
s.homepage = %q{http://www.zergling.net/}
|
18
18
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Zerg_xcode", "--main", "README.textile"]
|
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.rubyforge_project = %q{zerglings}
|
21
21
|
s.rubygems_version = %q{1.3.1}
|
22
22
|
s.summary = %q{Automated modifications for Xcode project files}
|
23
|
-
s.test_files = ["test/file_format/archiver_test.rb", "test/file_format/encoder_test.rb", "test/file_format/lexer_test.rb", "test/file_format/parser_test.rb", "test/file_format/path_test.rb", "test/objects/pbx_build_file_test.rb", "test/objects/pbx_container_item_proxy_test.rb", "test/objects/pbx_group_test.rb", "test/objects/pbx_native_target_test.rb", "test/objects/pbx_project_test.rb", "test/objects/pbx_target_dependency_test.rb", "test/objects/xc_configuration_list_test.rb", "test/objects/xcode_object_test.rb", "test/plugins/core/core_test.rb", "test/plugins/import_test.rb", "test/plugins/irb_test.rb", "test/plugins/ls_test.rb", "test/plugins/lstargets_test.rb", "test/plugins/retarget_test.rb", "test/plugins/test_helper.rb", "test/shortcuts_test.rb"]
|
23
|
+
s.test_files = ["test/file_format/archiver_test.rb", "test/file_format/encoder_test.rb", "test/file_format/lexer_test.rb", "test/file_format/parser_test.rb", "test/file_format/path_test.rb", "test/objects/pbx_build_file_test.rb", "test/objects/pbx_build_phase_test.rb", "test/objects/pbx_container_item_proxy_test.rb", "test/objects/pbx_group_test.rb", "test/objects/pbx_native_target_test.rb", "test/objects/pbx_project_test.rb", "test/objects/pbx_target_dependency_test.rb", "test/objects/xc_configuration_list_test.rb", "test/objects/xcode_object_test.rb", "test/plugins/addlibrary_test.rb", "test/plugins/core/core_test.rb", "test/plugins/import_test.rb", "test/plugins/irb_test.rb", "test/plugins/ls_test.rb", "test/plugins/lstargets_test.rb", "test/plugins/retarget_test.rb", "test/plugins/test_helper.rb", "test/shortcuts_test.rb"]
|
24
24
|
|
25
25
|
if s.respond_to? :specification_version then
|
26
26
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zerg_xcode
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: "0.3"
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Victor Costan
|
@@ -28,6 +28,7 @@ extra_rdoc_files:
|
|
28
28
|
- lib/zerg_xcode/file_format/parser.rb
|
29
29
|
- lib/zerg_xcode/file_format/paths.rb
|
30
30
|
- lib/zerg_xcode/objects/pbx_build_file.rb
|
31
|
+
- lib/zerg_xcode/objects/pbx_build_phase.rb
|
31
32
|
- lib/zerg_xcode/objects/pbx_container_item_proxy.rb
|
32
33
|
- lib/zerg_xcode/objects/pbx_group.rb
|
33
34
|
- lib/zerg_xcode/objects/pbx_native_target.rb
|
@@ -35,6 +36,7 @@ extra_rdoc_files:
|
|
35
36
|
- lib/zerg_xcode/objects/pbx_target_dependency.rb
|
36
37
|
- lib/zerg_xcode/objects/xc_configuration_list.rb
|
37
38
|
- lib/zerg_xcode/objects/xcode_object.rb
|
39
|
+
- lib/zerg_xcode/plugins/addlibrary.rb
|
38
40
|
- lib/zerg_xcode/plugins/core/core.rb
|
39
41
|
- lib/zerg_xcode/plugins/help.rb
|
40
42
|
- lib/zerg_xcode/plugins/import.rb
|
@@ -55,6 +57,7 @@ files:
|
|
55
57
|
- lib/zerg_xcode/file_format/parser.rb
|
56
58
|
- lib/zerg_xcode/file_format/paths.rb
|
57
59
|
- lib/zerg_xcode/objects/pbx_build_file.rb
|
60
|
+
- lib/zerg_xcode/objects/pbx_build_phase.rb
|
58
61
|
- lib/zerg_xcode/objects/pbx_container_item_proxy.rb
|
59
62
|
- lib/zerg_xcode/objects/pbx_group.rb
|
60
63
|
- lib/zerg_xcode/objects/pbx_native_target.rb
|
@@ -62,6 +65,7 @@ files:
|
|
62
65
|
- lib/zerg_xcode/objects/pbx_target_dependency.rb
|
63
66
|
- lib/zerg_xcode/objects/xc_configuration_list.rb
|
64
67
|
- lib/zerg_xcode/objects/xcode_object.rb
|
68
|
+
- lib/zerg_xcode/plugins/addlibrary.rb
|
65
69
|
- lib/zerg_xcode/plugins/core/core.rb
|
66
70
|
- lib/zerg_xcode/plugins/help.rb
|
67
71
|
- lib/zerg_xcode/plugins/import.rb
|
@@ -82,6 +86,7 @@ files:
|
|
82
86
|
- test/file_format/parser_test.rb
|
83
87
|
- test/file_format/path_test.rb
|
84
88
|
- test/objects/pbx_build_file_test.rb
|
89
|
+
- test/objects/pbx_build_phase_test.rb
|
85
90
|
- test/objects/pbx_container_item_proxy_test.rb
|
86
91
|
- test/objects/pbx_group_test.rb
|
87
92
|
- test/objects/pbx_native_target_test.rb
|
@@ -141,6 +146,7 @@ test_files:
|
|
141
146
|
- test/file_format/parser_test.rb
|
142
147
|
- test/file_format/path_test.rb
|
143
148
|
- test/objects/pbx_build_file_test.rb
|
149
|
+
- test/objects/pbx_build_phase_test.rb
|
144
150
|
- test/objects/pbx_container_item_proxy_test.rb
|
145
151
|
- test/objects/pbx_group_test.rb
|
146
152
|
- test/objects/pbx_native_target_test.rb
|
@@ -148,6 +154,7 @@ test_files:
|
|
148
154
|
- test/objects/pbx_target_dependency_test.rb
|
149
155
|
- test/objects/xc_configuration_list_test.rb
|
150
156
|
- test/objects/xcode_object_test.rb
|
157
|
+
- test/plugins/addlibrary_test.rb
|
151
158
|
- test/plugins/core/core_test.rb
|
152
159
|
- test/plugins/import_test.rb
|
153
160
|
- test/plugins/irb_test.rb
|