rubuild-core 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,23 @@
1
+ # -*- ruby -*-
2
+
3
+ require 'autotest/restart'
4
+
5
+ # Autotest.add_hook :initialize do |at|
6
+ # at.extra_files << "../some/external/dependency.rb"
7
+ #
8
+ # at.libs << ":../some/external"
9
+ #
10
+ # at.add_exception 'vendor'
11
+ #
12
+ # at.add_mapping(/dependency.rb/) do |f, _|
13
+ # at.files_matching(/test_.*rb$/)
14
+ # end
15
+ #
16
+ # %w(TestA TestB).each do |klass|
17
+ # at.extra_class_map[klass] = "test/test_misc.rb"
18
+ # end
19
+ # end
20
+
21
+ # Autotest.add_hook :run_command do |at|
22
+ # system "rake build"
23
+ # end
@@ -0,0 +1,11 @@
1
+ === 0.0.3 / 2011-01-01
2
+
3
+ * Renamed gem from "rubuild" to "rubuild-core".
4
+
5
+ === 0.0.2 / 2010-12-31
6
+
7
+ * Fixed dependency issue.
8
+
9
+ === 0.0.1 / 2010-12-31
10
+
11
+ * Initial release.
@@ -0,0 +1,35 @@
1
+ .autotest
2
+ History.txt
3
+ Manifest.txt
4
+ Rakefile
5
+ README.rdoc
6
+ bin/rubuild
7
+ examples/printargs
8
+ lib/rubuild.rb
9
+ lib/rubuild/build.rb
10
+ lib/rubuild/build/context.rb
11
+ lib/rubuild/build/dep.rb
12
+ lib/rubuild/build/factory.rb
13
+ lib/rubuild/build/simple.rb
14
+ lib/rubuild/build/simple/context.rb
15
+ lib/rubuild/build/simple/dep.rb
16
+ lib/rubuild/build/simple/factory.rb
17
+ lib/rubuild/env.rb
18
+ lib/rubuild/env/location.rb
19
+ lib/rubuild/env/provider.rb
20
+ lib/rubuild/env/requirer.rb
21
+ lib/rubuild/load.rb
22
+ lib/rubuild/load/info.rb
23
+ lib/rubuild/load/loader.rb
24
+ lib/rubuild/load/namespace.rb
25
+ lib/rubuild/options.rb
26
+ lib/rubuild/util.rb
27
+ test/test_dep.rb
28
+ test/test_env.rb
29
+ test/test_env_location.rb
30
+ test/test_env_provider.rb
31
+ test/test_env_requirer.rb
32
+ test/test_load_info.rb
33
+ test/test_load_loader.rb
34
+ test/test_load_namespace.rb
35
+ test/test_options.rb
@@ -0,0 +1,43 @@
1
+ = rubuild-core
2
+
3
+ http://rubuild.rubyforge.org
4
+
5
+ == DESCRIPTION:
6
+
7
+ === Rubuild - Source-selection polymorphic build tool.
8
+ Rubuild is a replacement for "make", written in Ruby.
9
+
10
+ Rubuild is motivated by the desire to support source-selection polymorphism -
11
+ that is, the ability to select different tools and/or source files (which
12
+ implement known interfaces) during the compilation process.
13
+
14
+ ==== Modules and Classes
15
+ [Rubuild::Build] Classes for managing dependency actions.
16
+ [Rubuild::Env] Classes for managing provide/require semantics for build steps.
17
+
18
+ == FEATURES/PROBLEMS:
19
+
20
+
21
+ == SYNOPSIS:
22
+
23
+
24
+ == REQUIREMENTS:
25
+
26
+ * Safer >= 0.3.0
27
+
28
+ == INSTALL:
29
+
30
+ * sudo gem install rubuild-core
31
+
32
+ == DEVELOPERS:
33
+
34
+ After checking out the source, run:
35
+
36
+ $ rake newb
37
+
38
+ This task will install any missing dependencies, run the tests/specs,
39
+ and generate the RDoc.
40
+
41
+ == LICENSE:
42
+
43
+ This software is placed into the public domain.
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+ require 'hoe'
3
+
4
+ Hoe.spec 'rubuild-core' do
5
+ developer('Aidan Cully', 'aidan@panix.com')
6
+
7
+ self.rubyforge_name = 'rubuild'
8
+ self.readme_file = 'README.rdoc'
9
+ self.extra_deps << ['safer', '~>0.3.0']
10
+ end
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'rubuild'
4
+
5
+ env = Rubuild::Env.new(Rubuild::Build::Simple::Factory.new)
6
+ options = Rubuild::Options.new(ARGV)
7
+ l = Rubuild::Env::Location.new('options', env.build_factory)
8
+ l.set_data(options)
9
+ env.provide('options', l)
10
+ loader = Rubuild::Load::Loader.new(Rubuild::Load::NameSpace::Factory.new)
11
+ loader.inc_paths += options.inc_paths
12
+ loader.provision(env, 'load')
13
+ loc = File.open(options.file, 'r') do |f|
14
+ loader.loadString(env, f.read, options.file)
15
+ end
16
+ rctx = env.build_factory.create_context
17
+ loc.found_dep.load(rctx)
18
+ rctx.run
@@ -0,0 +1,5 @@
1
+ self.rubuild_info.with do
2
+ self.require!('options') do |options|
3
+ puts options.args_left.inspect
4
+ end
5
+ end
@@ -0,0 +1,14 @@
1
+ module Rubuild
2
+ VERSION = "0.0.3"
3
+ end
4
+
5
+ require 'rubygems'
6
+ gem 'safer'
7
+ require 'safer/ivar'
8
+ require 'safer/protocol'
9
+
10
+ require 'rubuild/util'
11
+ require 'rubuild/build'
12
+ require 'rubuild/env'
13
+ require 'rubuild/load'
14
+ require 'rubuild/options'
@@ -0,0 +1,4 @@
1
+ require 'rubuild/build/dep'
2
+ require 'rubuild/build/context'
3
+ require 'rubuild/build/factory'
4
+ require 'rubuild/build/simple'
@@ -0,0 +1,78 @@
1
+ module Rubuild
2
+ module Build
3
+ ## Rubuild::Build::Context
4
+ # Rubuild::Build::Context is the base class of all dependancy execution
5
+ # environments in Rubuild. The Rubuild::Build::Context will trap any errors
6
+ # raised by associated dependancies - and only those associated dependancies -
7
+ # during the 'run' step, and as such provides some measure of recoverability
8
+ # for errors occurring in parent dependancies when trying to undertake certain
9
+ # actions: in order to recover from an error executing a command, create a new
10
+ # Rubuild::Build::Context as part of your dependancy action and run it.
11
+ class Context
12
+
13
+ ## Rubuild::Build::Context::Error
14
+ # Superclass of errors that get generated by a Build::Context.
15
+ class Error < StandardError
16
+ # The Rubuild::Build::Context which generated the error.
17
+ Safer::IVar.instance_variable(self, :context)
18
+ # Reader accessor routine for :context instance variable.
19
+ Safer::IVar.export_reader(self, :context)
20
+
21
+ # Create a Rubuild::Build::Context::Error.
22
+ # Used internally.
23
+ # [+context+] the Rubuild::Build::Context which generated the error.
24
+ # [+message+] Human-readable string describing the error.
25
+ def initialize(context, message)
26
+ super(message)
27
+ self.rubuild_build_context_error__context = context
28
+ end # Rubuild::Build::Context::Error#initialize
29
+
30
+ ## Rubuild::Build::Context::Error::Runable
31
+ # Attempt to make dependency runable when not loaded.
32
+ class Runable < Rubuild::Build::Context::Error
33
+ # The dependency that was made runable when not loaded into the build
34
+ # context.
35
+ Safer::IVar.instance_variable(self, :dep)
36
+ Safer::IVar.export_reader(self, :dep)
37
+
38
+ # Create a Rubuild::Build::Context::Error::Runable exception.
39
+ # [+context+] Rubuild::Build::Context which generated the exception.
40
+ # [+dep+] Dependency made runable when not loaded.
41
+ def initialize(context, dep)
42
+ super(
43
+ context,
44
+ "Attempt to make dependancy #{dep.name} runable when not loaded."
45
+ )
46
+ self.rubuild_build_context_error_runable__dep = dep
47
+ end # Rubuild::Build::Context::Error::Runable#initialize
48
+ end # Rubuild::Build::Context::Error::Runable
49
+
50
+ ## Rubuild::Build::Context::Error::Run
51
+ # Some loaded dependencies did not get run.
52
+ class Run < Rubuild::Build::Context::Error
53
+
54
+ # Create a Rubuild::Build::Context::Error::Run.
55
+ # [+context+] Rubuild::Build::Context which generated the error.
56
+ def initialize(context)
57
+ super(context, "Some loaded dependencies did not get run.")
58
+ end # Rubuild::Build::Context::Error::Run#initialize
59
+ end # Rubuild::Build::Context::Error::Run
60
+ end # Rubuild::Build::Context::Error
61
+
62
+ class ProtocolClass
63
+ # Create an exception to capture the event that not all loaded dependencies
64
+ # were built.
65
+ # Used internally.
66
+ # [_return_] Rubuild::Build::Context::Error::Run exception.
67
+ def run_error
68
+ end
69
+
70
+ # Execute the dependencies loaded into this build context, in dependency
71
+ # order.
72
+ def run
73
+ end
74
+ end
75
+ Protocol = Safer::Protocol.create_from_class(ProtocolClass)
76
+ end # Rubuild::Build::Context
77
+ end # Rubuild::Build
78
+ end # Rubuild
@@ -0,0 +1,359 @@
1
+ ##Rubuild
2
+ module Rubuild
3
+ ## Rubuild::Build
4
+ module Build
5
+
6
+ ## Rubuild::Build::Dep
7
+ # Base class of all dependancy objects in Rubuild.
8
+ # The dependancy object deals only with the maintenance of dependancy
9
+ # information, so subclasses are only necessary if variables
10
+ # are inserted into the dependancy tracking algorithms.
11
+ # For example, modifications to the algorithm would be necessary to
12
+ # support threaded operation.
13
+ # Clients will not usually instantiate instances of Rubuild::Build::Dep
14
+ # directly, but instead use the 'create_dep' method of a
15
+ # Rubuild::Build::DepFactory.
16
+ class Dep
17
+
18
+ ## Rubuild::Build::Dep::Error
19
+ # Superclass of errors that get generated during dependancy processing.
20
+ class Error < StandardError
21
+ # :attr_reader: dep
22
+ # The Rubuild::Build::Dep that caused the exception.
23
+ Safer::IVar.instance_variable(self, :dep)
24
+ Safer::IVar.export_reader(self, :dep)
25
+
26
+ # Create a Rubuild::Build::Dep::Error exception.
27
+ # Used internally.
28
+ # [+dep+] The Rubuild::Build::Dep which is the source of the
29
+ # exception.
30
+ # [+message+] Human-readable string describing the exception.
31
+ def initialize(dep, message)
32
+ super(message)
33
+ self.rubuild_build_dep_error__dep = dep
34
+ end # Rubuild::Build::Dep::Error#initialize
35
+
36
+ ## Rubuild::Build::Dep::Error::Action
37
+ # Error that occurs when calling the dependency block.
38
+ class Action < Rubuild::Build::Dep::Error
39
+ # :attr_reader: error
40
+ # The exception that was raised executing a dependency action.
41
+ Safer::IVar.instance_variable(self, :error)
42
+ Safer::IVar.export_reader(self, :error)
43
+
44
+ # :attr_reader: build_context
45
+ # The Rubuild::Build::Context in which the exception occurred.
46
+ Safer::IVar.instance_variable(self, :build_context)
47
+ Safer::IVar.export_reader(self, :build_context)
48
+
49
+ # Create a Rubuild::Build::Dep::Error::Action
50
+ # Used internally.
51
+ # [+dep+] The Rubuild::Build::Dep whose action raised +error+.
52
+ # [+error+] Exception raised while processing a Rubuild::Build::Dep
53
+ # action.
54
+ # [+build_context+] The Rubuild::Build::Context context in which the
55
+ # Rubuild::Build::Dep action was being executed.
56
+ def initialize(dep, error, build_context)
57
+ super(dep, error.message)
58
+ self.rubuild_build_dep_error_action__error = error
59
+ self.rubuild_build_dep_error_action__build_context = build_context
60
+ end # Rubuild::Build::Dep::Error::Action#intialize
61
+
62
+ def report(file)
63
+ if self.error.respond_to?(:report)
64
+ self.error.report(file)
65
+ end
66
+ end
67
+ end # Rubuild::Build::Dep::Error::Action
68
+
69
+ ## Rubuild::Build::Dep::Error::Parameter
70
+ # Parameter error (parameter modified after dependency made runable).
71
+ class Parameter < Rubuild::Build::Dep::Error
72
+ # :attr_reader: parameter
73
+ # The parameter which was set after the dependency was made runable.
74
+ Safer::IVar.instance_variable(self, :parameter)
75
+ Safer::IVar.export_reader(self, :parameter)
76
+
77
+ # Create a Rubuild::Build::Dep::Error::Parameter
78
+ # Used internally.
79
+ # [+dep+] The Rubuild::Build::Dep for which someone tried to modify
80
+ # the parameter.
81
+ # [+nm+] The name of the parameter attempted modification.
82
+ def initialize(dep, nm)
83
+ super(
84
+ dep,
85
+ "Dependency parameter '#{nm}' modified after " +
86
+ "dep '#{dep.name}' built."
87
+ )
88
+ self.rubuild_build_dep_error_parameter__parameter = nm
89
+ end # Rubuild::Build::Dep::Error::Parameter#initialize
90
+
91
+ ## Rubuild::Build::Dep::Error::Parameter::Args
92
+ # Argument set after dependency made runable
93
+ class Args < Rubuild::Build::Dep::Error::Parameter
94
+ # Create a Rubuild::Build::Dep::Error::Parameter::Args
95
+ # Used internally.
96
+ # [+dep+] The Rubuild::Build::Dep for which someone modified the
97
+ # 'args' parameter when the dependency was runable.
98
+ def initialize(dep)
99
+ super(dep, 'args')
100
+ end # Rubuild::Build::Dep::Error::Parameter::Args#initialize
101
+ end # Rubuild::Build::Dep::Error::Parameter::Args
102
+
103
+ ## Rubuild::Build::Dep::Error::Parameter::Command
104
+ # Command set after dependency made runable
105
+ class Command < Rubuild::Build::Dep::Error::Parameter
106
+ # Create a Rubuild::Build::Dep::Error::Parameter::Command
107
+ # Used internally.
108
+ # [+dep+] The Rubuild::Build::Dep for which someone modified the
109
+ # 'command' parameter when the dependency was runable.
110
+ def initialize(dep)
111
+ super(dep, 'command')
112
+ end # Rubuild::Build::Dep::Error::Parameter::Command#initialize
113
+ end # Rubuild::Build::Dep::Error::Parameter::Command
114
+ end # Rubuild::Build::Dep::Error::Parameter
115
+
116
+ ## Rubuild::Build::Dep::Error::Runable
117
+ # Runable error (dependency tree modified after dependency made
118
+ # runable).
119
+ class Runable < Rubuild::Build::Dep::Error
120
+ # :attr_reader: parent
121
+ # parent dependency that attempted insertion into +dep+'s dependency
122
+ # tree, even though +dep+ was runable.
123
+ Safer::IVar.instance_variable(self, :parent)
124
+ Safer::IVar.export_reader(self, :parent)
125
+
126
+ # Create a Rubuild::Build::Dep::Error::Runable
127
+ # Used internally.
128
+ # [+dep+] Runable dependency against which the user attempted
129
+ # dependency hierarchy manipulation.
130
+ # [+parent+] Putative parent dependency the user attempted to place
131
+ # in +dep+'s dependency tree.
132
+ def initialize(dep, parent)
133
+ super(
134
+ dep,
135
+ "Parent dependancy #{parent} added to #{dep} " +
136
+ "after dependancy made runable."
137
+ )
138
+ self.rubuild_build_dep_error_runable__parent = parent
139
+ end # Rubuild::Build::Dep::Error::Runable#initialize
140
+ end # Rubuild::Build::Dep::Error::Runable
141
+
142
+ ## Rubuild::Build::Dep::Error::Load
143
+ # Load error (circular dependency detected).
144
+ class Load < Rubuild::Build::Dep::Error
145
+ # :attr_reader: loading
146
+ # Dependencies loaded when the circle was detected.
147
+ Safer::IVar.instance_variable(self, :loading)
148
+ Safer::IVar.export_reader(self, :loading)
149
+
150
+ # Create a Rubuild::Build::Dep::Error::Load
151
+ # Used internally.
152
+ # [+dep+] The dependency which blocks on its own execution.
153
+ # [+loading+] Dependencies loaded at the time the circle was
154
+ # detected.
155
+ def initialize(dep, loading)
156
+ super(
157
+ dep,
158
+ "Circular dependency detected."
159
+ )
160
+ self.rubuild_build_dep_error_load__loading = loading
161
+ end # Rubuild::Build::Dep::Error::Load#initialize
162
+
163
+ def report(file)
164
+ file.puts("#{self.dep.name} loaded from:\n")
165
+ self.loading.each do |trace|
166
+ file.puts(" #{trace.name}")
167
+ end
168
+ file.puts("call stack:")
169
+ self.backtrace.each do |stack|
170
+ file.puts(" #{stack}")
171
+ end
172
+ end
173
+ end # Rubuild::Build::Dep::Error::Load
174
+
175
+ ## Rubuild::Build::Dep::Error::Build
176
+ # Build error (attempt to build twice).
177
+ class Build < Rubuild::Build::Dep::Error
178
+ # :attr_reader: build_context
179
+ # The build context in which the dep was re-built.
180
+ Safer::IVar.instance_variable(self, :build_context)
181
+ Safer::IVar.export_reader(self, :build_context)
182
+
183
+ def initialize(dep, build_context)
184
+ super(dep, "Attempt to build twice.")
185
+ self.rubuild_build_dep_error_build__build_context = build_context
186
+ end # Rubuild::Build::Dep::Error::Build#initialize
187
+ end # Rubuild::Build::Dep::Error::Build
188
+
189
+ ## Rubuild::Build::Dep::Error::DepInconsistent
190
+ # The parent and the child dependency do not agree about their
191
+ # relationship.
192
+ class DepInconsistent < Rubuild::Build::Dep::Error
193
+ # :attr_reader: parent
194
+ # Parent of the dependency associated with this error.
195
+ Safer::IVar.instance_variable(self, :parent)
196
+ Safer::IVar.export_reader(self, :parent)
197
+ def initialize(dep, parent)
198
+ super(
199
+ dep, "Parent dependency #{parent.name} thought this was child.")
200
+ self.rubuild_build_dep_error_depinconsistent__parent = parent
201
+ end
202
+ end
203
+ end # Rubuild::Build::Dep::Error
204
+
205
+ ## Rubuild::Build::Dep::ProtocolClass
206
+ # Used to derive Rubuild::Build::Dep::Protocol
207
+ class ProtocolClass
208
+ # [+command+] command to execute.
209
+ # if supplied (i.e. non-+nil+), object must respond to
210
+ # +:call+. +command.call+ method will be invoked at time
211
+ # that this dependency should be processed, with first
212
+ # argument being this dependency object (+self+), and
213
+ # subsequent arguments as set by the +args=+ method.
214
+ # [+name+] name string for dependency. for pretty-printing dependency
215
+ # errors.
216
+ def initialize(command, name)
217
+ end
218
+
219
+ # Resets the dependency action to be invoked.
220
+ # [+command+] New command to be invoked.
221
+ # [_return_] +self+.
222
+ def set_command(command)
223
+ end
224
+
225
+ # Inserts dependency between +self+ and all child dependencies of
226
+ # +self+.
227
+ # [+dep+] Dependency against which all child dependencies of +self+
228
+ # should wait.
229
+ def surrogate(dep)
230
+ end
231
+
232
+ # Makes +dep+ a parent dependency of +self+ - in other words, +dep+
233
+ # must be run before +self+ can be run.
234
+ # [+dep+] Dependency that must be executed before +self+ can execute.
235
+ def add_parent(dep)
236
+ end
237
+
238
+ # Record that a child dependency has been added to +self+.
239
+ # Used internally.
240
+ # [+dep+] New child dependency.
241
+ def child_added(dep)
242
+ end
243
+
244
+ # Mark that all parent dependencies have been satisfied for +self+.
245
+ # Inform all build contexts that _might_ execute this dependency that
246
+ # this dependency is now runable.
247
+ # Used internally.
248
+ def make_runable
249
+ end
250
+
251
+ # Check for circular dependencies.
252
+ # Used internally.
253
+ # [+loading+] Rubuild::Build::Dep chain in progress. Used as a
254
+ # backtrace, in case a circular dependency is detected.
255
+ # [+check+] Array of Rubuild::Build::Dep objects to place in 'parent'
256
+ # list, when searching for circular dependencies.
257
+ def circle_check(loading, check)
258
+ end
259
+
260
+ # Record that a build-context is waiting to build this dependency.
261
+ # Search for circular dependencies.
262
+ # Used internally.
263
+ # [+loading+] Rubuild::Build::Dep dependency chain in progress, that
264
+ # lead to +self+ being loaded into a
265
+ # Rubuild::Build::Context.
266
+ # [+buildctx+] Rubuild::Build::Context into which +self+ is being
267
+ # loaded.
268
+ def load_self(loading, buildctx)
269
+ end
270
+
271
+ # Loads +self+ and all parent dependancies into the execution context
272
+ # +buildctx+.
273
+ # [+buildctx+] Rubuild::Build::Context into which +self+ is being
274
+ # loaded.
275
+ def load(buildctx)
276
+ end
277
+
278
+ # Return array of all Rubuild::Build::Context objects that will build
279
+ # this dependency.
280
+ def builders
281
+ end
282
+
283
+ # Return the child-dependencies of +self+ that placed +self+ into the
284
+ # Rubuild::Build::Context +builder+.
285
+ # [+builder+] A Rubuild::Build::Context into which +self+ was loaded.
286
+ # [_return_] The dependency hierarchy in +builder+ that resulted in
287
+ # +self+ being loaded, or nil if +self+ was not loaded into
288
+ # +builder+.
289
+ def loaders(builder)
290
+ end
291
+
292
+ # Inform all children that a parent dependency (or +self+) failed to
293
+ # execute a command due to +err+.
294
+ # Used internally.
295
+ # [+err+] Exception that prevents +self+ from completing.
296
+ # [_return_] Rubuild::Build::Dep::Error::Action for +err+.
297
+ def action_error_real(err)
298
+ end
299
+
300
+ # Error +err+ occurred while executing +self+'s dependency command.
301
+ # Inform all child dependencies of the event.
302
+ # Used internally.
303
+ # [+err+] Exception that prevented +self+'s dependency command from
304
+ # completing.
305
+ # [+runctx+] Rubuild::Build::Context used to execute +self+.
306
+ # [_return_] Rubuild::Build::Dep::Error::Action for +err+.
307
+ def action_error(err, runctx)
308
+ end
309
+
310
+ # Child is being informed by +parent+ that error +err+ occurred
311
+ # processing a dependency action.
312
+ # Used internally.
313
+ # [+parent+] Parent dependency that will not run, thus preventing
314
+ # +self+ from running.
315
+ # [+err+] Error that prevents +parent+ from running.
316
+ def parent_action_error(parent, err)
317
+ end
318
+
319
+ # Used by a Rubuild::Build::Context to execute the dependency command
320
+ # for +self+.
321
+ # Used internally.
322
+ # [+runctx+] Rubuild::Build::Context used to execute +self+'s
323
+ # dependency command.
324
+ def runctx_build(runctx)
325
+ end
326
+
327
+ # Record that a parent dependency has been built.
328
+ # Will result in this dependency being made runable, when all parent
329
+ # dependencies are satisfied.
330
+ # Used internally.
331
+ # [+dep+] Parent dependency that was built.
332
+ def parent_built(dep)
333
+ end
334
+
335
+ # Boolean indicates whether +self+'s dependency action has been run.
336
+ attr_reader :built
337
+
338
+ # Array of additional arguments to :command.call(). The first
339
+ # argument to :command.call() is always +self+.
340
+ attr_accessor :args
341
+
342
+ # Error that prevented dependency execution.
343
+ attr_reader :err
344
+
345
+ # Human-readable name of this dependency.
346
+ attr_reader :name
347
+ end # Rubuild::Build::Dep::ProtocolClass
348
+
349
+ ## Rubuild::Build::Dep
350
+
351
+ # Protocol object.
352
+ PROTOCOL = Safer::Protocol.create_from_class(ProtocolClass)
353
+
354
+
355
+ end # Rubuild::Build::Dep
356
+
357
+ end # Rubuild::Build
358
+
359
+ end # Rubuild