Support subsidiary Rsconscript files - close #125
This commit is contained in:
parent
28a245f0ab
commit
d1a35501ef
10
build_tests/subsidiary/Rsconscript
Normal file
10
build_tests/subsidiary/Rsconscript
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
configure do
|
||||||
|
rscons "sub/Rsconscript"
|
||||||
|
rscons "sub/Rsconscript2", "configure"
|
||||||
|
puts "top configure"
|
||||||
|
end
|
||||||
|
|
||||||
|
build do
|
||||||
|
rscons "sub/Rsconscript2", "build"
|
||||||
|
puts "top build"
|
||||||
|
end
|
9
build_tests/subsidiary/Rsconscript_fail
Normal file
9
build_tests/subsidiary/Rsconscript_fail
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
configure do
|
||||||
|
rscons "sub/Rsconscript_fail"
|
||||||
|
puts "top configure"
|
||||||
|
end
|
||||||
|
|
||||||
|
build do
|
||||||
|
rscons "sub/Rsconscript2", "build"
|
||||||
|
puts "top build"
|
||||||
|
end
|
7
build_tests/subsidiary/sub/Rsconscript
Normal file
7
build_tests/subsidiary/sub/Rsconscript
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
configure do
|
||||||
|
puts "sub Rsconscript configure"
|
||||||
|
end
|
||||||
|
|
||||||
|
build do
|
||||||
|
puts "sub Rsconscript build"
|
||||||
|
end
|
7
build_tests/subsidiary/sub/Rsconscript2
Normal file
7
build_tests/subsidiary/sub/Rsconscript2
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
configure do
|
||||||
|
puts "sub Rsconscript2 configure"
|
||||||
|
end
|
||||||
|
|
||||||
|
build do
|
||||||
|
puts "sub Rsconscript2 build"
|
||||||
|
end
|
8
build_tests/subsidiary/sub/Rsconscript_fail
Normal file
8
build_tests/subsidiary/sub/Rsconscript_fail
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
configure do
|
||||||
|
puts "sub Rsconscript configure"
|
||||||
|
check_program "foobarfailure"
|
||||||
|
end
|
||||||
|
|
||||||
|
build do
|
||||||
|
puts "sub Rsconscript build"
|
||||||
|
end
|
@ -193,7 +193,10 @@ module Rscons
|
|||||||
co = ConfigureOp.new(options)
|
co = ConfigureOp.new(options)
|
||||||
begin
|
begin
|
||||||
@script.configure(co)
|
@script.configure(co)
|
||||||
rescue RsconsError
|
rescue RsconsError => e
|
||||||
|
if e.message and e.message != ""
|
||||||
|
$stderr.puts e.message
|
||||||
|
end
|
||||||
Ansi.write($stderr, :red, "Configuration failed", :reset, "\n")
|
Ansi.write($stderr, :red, "Configuration failed", :reset, "\n")
|
||||||
rv = 1
|
rv = 1
|
||||||
end
|
end
|
||||||
|
@ -3,8 +3,33 @@ module Rscons
|
|||||||
# The Script class encapsulates the state of a build script.
|
# The Script class encapsulates the state of a build script.
|
||||||
class Script
|
class Script
|
||||||
|
|
||||||
# DSL available to the Rsconscript.
|
# Global DSL methods.
|
||||||
class Dsl
|
class GlobalDsl
|
||||||
|
|
||||||
|
# Invoke rscons in a subprocess for a subsidiary Rsconscript file.
|
||||||
|
#
|
||||||
|
# @param script_path [String]
|
||||||
|
# Path to subsidiary Rsconscript to execute.
|
||||||
|
# @param args[Array<String>]
|
||||||
|
# Arguments to pass to rscons subprocess.
|
||||||
|
def rscons(script_path, *args)
|
||||||
|
script_path = File.expand_path(script_path)
|
||||||
|
me = File.expand_path($0)
|
||||||
|
command = [me, "-f", script_path, *args]
|
||||||
|
if ENV["specs"] and not ENV["dist_specs"] # specs
|
||||||
|
command = ["ruby", $LOAD_PATH.map {|p| ["-I", p]}, command].flatten # specs
|
||||||
|
end # specs
|
||||||
|
dir = File.dirname(script_path)
|
||||||
|
result = system(*command, chdir: dir)
|
||||||
|
unless result
|
||||||
|
raise RsconsError.new("Failed command: " + command.join(" "))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
# Top-level DSL available to the Rsconscript.
|
||||||
|
class Dsl < GlobalDsl
|
||||||
# Create a Dsl.
|
# Create a Dsl.
|
||||||
def initialize(script)
|
def initialize(script)
|
||||||
@script = script
|
@script = script
|
||||||
@ -59,7 +84,7 @@ module Rscons
|
|||||||
end
|
end
|
||||||
|
|
||||||
# DSL available to the 'configure' block.
|
# DSL available to the 'configure' block.
|
||||||
class ConfigureDsl
|
class ConfigureDsl < GlobalDsl
|
||||||
# Create a ConfigureDsl.
|
# Create a ConfigureDsl.
|
||||||
#
|
#
|
||||||
# @param configure_op [ConfigureOp]
|
# @param configure_op [ConfigureOp]
|
||||||
|
@ -2582,4 +2582,41 @@ EOF
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "with subsidiary scripts" do
|
||||||
|
it "executes the subsidiary script from configure block" do
|
||||||
|
test_dir "subsidiary"
|
||||||
|
|
||||||
|
result = run_rscons(op: %W[configure])
|
||||||
|
expect(result.stderr).to eq ""
|
||||||
|
verify_lines(lines(result.stdout), [
|
||||||
|
%r{sub Rsconscript configure},
|
||||||
|
%r{sub Rsconscript build},
|
||||||
|
%r{sub Rsconscript2 configure},
|
||||||
|
%r{top configure},
|
||||||
|
])
|
||||||
|
end
|
||||||
|
|
||||||
|
it "executes the subsidiary script from build block" do
|
||||||
|
test_dir "subsidiary"
|
||||||
|
|
||||||
|
result = run_rscons(op: %W[configure])
|
||||||
|
expect(result.stderr).to eq ""
|
||||||
|
result = run_rscons(op: %W[build])
|
||||||
|
expect(result.stderr).to eq ""
|
||||||
|
verify_lines(lines(result.stdout), [
|
||||||
|
%r{sub Rsconscript2 build},
|
||||||
|
%r{top build},
|
||||||
|
])
|
||||||
|
end
|
||||||
|
|
||||||
|
it "terminates execution when a subsidiary script fails" do
|
||||||
|
test_dir "subsidiary"
|
||||||
|
|
||||||
|
result = run_rscons(rsconscript: "Rsconscript_fail", op: %W[configure])
|
||||||
|
expect(result.stderr).to_not eq ""
|
||||||
|
expect(result.status).to_not eq 0
|
||||||
|
expect(result.stdout).to_not match /top configure/
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user