Add Barrier builder
This commit is contained in:
parent
fc18c9f123
commit
94a86e3433
@ -23,6 +23,7 @@ module Rscons
|
|||||||
# Names of the default builders which will be added to all newly created
|
# Names of the default builders which will be added to all newly created
|
||||||
# {Environment} objects.
|
# {Environment} objects.
|
||||||
DEFAULT_BUILDERS = [
|
DEFAULT_BUILDERS = [
|
||||||
|
:Barrier,
|
||||||
:Command,
|
:Command,
|
||||||
:Copy,
|
:Copy,
|
||||||
:Directory,
|
:Directory,
|
||||||
@ -66,6 +67,13 @@ module Rscons
|
|||||||
target.is_a?(Symbol)
|
target.is_a?(Symbol)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Generate a random phony target name.
|
||||||
|
#
|
||||||
|
# @return [Symbol] Phony target name.
|
||||||
|
def gen_phony_target
|
||||||
|
("t" + sprintf("%08x", rand(1_000_000..4_000_000_000))).to_sym
|
||||||
|
end
|
||||||
|
|
||||||
# Return the system shell and arguments for executing a shell command.
|
# Return the system shell and arguments for executing a shell command.
|
||||||
#
|
#
|
||||||
# @return [Array<String>] The shell and flag.
|
# @return [Array<String>] The shell and flag.
|
||||||
@ -136,6 +144,7 @@ require_relative "rscons/builders/mixins/object_deps"
|
|||||||
require_relative "rscons/builders/mixins/program"
|
require_relative "rscons/builders/mixins/program"
|
||||||
|
|
||||||
# default builders
|
# default builders
|
||||||
|
require_relative "rscons/builders/barrier"
|
||||||
require_relative "rscons/builders/command"
|
require_relative "rscons/builders/command"
|
||||||
require_relative "rscons/builders/copy"
|
require_relative "rscons/builders/copy"
|
||||||
require_relative "rscons/builders/directory"
|
require_relative "rscons/builders/directory"
|
||||||
|
|||||||
@ -37,7 +37,7 @@ module Rscons
|
|||||||
# The number of remaining build steps.
|
# The number of remaining build steps.
|
||||||
def build_steps_remaining
|
def build_steps_remaining
|
||||||
self.reduce(0) do |result, (target, builders)|
|
self.reduce(0) do |result, (target, builders)|
|
||||||
result + builders.size
|
result + builders.count {|b| !b.is_a?(Rscons::Builders::Barrier)}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
15
lib/rscons/builders/barrier.rb
Normal file
15
lib/rscons/builders/barrier.rb
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
module Rscons
|
||||||
|
module Builders
|
||||||
|
# The Barrier builder does not perform any action. It exists as a builder
|
||||||
|
# on which to place dependencies to ensure that each of its sources are
|
||||||
|
# built before any build targets which depend on the barrier build target.
|
||||||
|
class Barrier < Builder
|
||||||
|
|
||||||
|
# Run the builder.
|
||||||
|
def run(options)
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@ -397,7 +397,11 @@ module Rscons
|
|||||||
expand(ud)
|
expand(ud)
|
||||||
end
|
end
|
||||||
@user_deps[target] ||= []
|
@user_deps[target] ||= []
|
||||||
@user_deps[target] = (@user_deps[target] + user_deps).uniq
|
(@user_deps[target] + user_deps).each do |ud|
|
||||||
|
unless Rscons.phony_target?(ud) || @user_deps[target].include?(ud)
|
||||||
|
@user_deps[target] << ud
|
||||||
|
end
|
||||||
|
end
|
||||||
build_after(target, user_deps)
|
build_after(target, user_deps)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -623,7 +627,9 @@ module Rscons
|
|||||||
#
|
#
|
||||||
# @return [void]
|
# @return [void]
|
||||||
def run_builder(builder)
|
def run_builder(builder)
|
||||||
|
unless builder.is_a?(Rscons::Builders::Barrier)
|
||||||
builder.build_step ||= get_next_build_step
|
builder.build_step ||= get_next_build_step
|
||||||
|
end
|
||||||
case result = builder.run({})
|
case result = builder.run({})
|
||||||
when Array
|
when Array
|
||||||
result.each do |waititem|
|
result.each do |waititem|
|
||||||
@ -649,9 +655,11 @@ module Rscons
|
|||||||
Cache.instance.register_build(side_effect, nil, [], self, side_effect: true)
|
Cache.instance.register_build(side_effect, nil, [], self, side_effect: true)
|
||||||
@side_effects.delete(side_effect)
|
@side_effects.delete(side_effect)
|
||||||
end
|
end
|
||||||
|
unless builder.is_a?(Rscons::Builders::Barrier)
|
||||||
@build_hooks[:post].each do |build_hook_block|
|
@build_hooks[:post].each do |build_hook_block|
|
||||||
build_hook_block.call(builder)
|
build_hook_block.call(builder)
|
||||||
end
|
end
|
||||||
|
end
|
||||||
process_remove_wait(builder)
|
process_remove_wait(builder)
|
||||||
else
|
else
|
||||||
raise "Unrecognized #{builder.name} builder return value: #{result.inspect}"
|
raise "Unrecognized #{builder.name} builder return value: #{result.inspect}"
|
||||||
@ -727,9 +735,11 @@ module Rscons
|
|||||||
if @builder_sets.size > 0
|
if @builder_sets.size > 0
|
||||||
if builder = @builder_sets[0].get_next_builder_to_run(targets_still_building)
|
if builder = @builder_sets[0].get_next_builder_to_run(targets_still_building)
|
||||||
builder.vars = @varset.merge(builder.vars)
|
builder.vars = @varset.merge(builder.vars)
|
||||||
|
unless builder.is_a?(Rscons::Builders::Barrier)
|
||||||
@build_hooks[:pre].each do |build_hook_block|
|
@build_hooks[:pre].each do |build_hook_block|
|
||||||
build_hook_block.call(builder)
|
build_hook_block.call(builder)
|
||||||
end
|
end
|
||||||
|
end
|
||||||
return run_builder(builder)
|
return run_builder(builder)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user