From a1f5f022d1c8e51c018485fa8528cdec89bf93c3 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Sun, 10 Feb 2019 22:07:08 -0500 Subject: [PATCH] test build hooks overwriting entire vars hash as a non-backwards-compatiblity test --- .../backward_compatible_build_hooks.rb | 25 ------------------- .../typical/build_hooks_override_vars.rb | 17 +++++++++++++ spec/build_tests_spec.rb | 24 +++++++++--------- 3 files changed, 29 insertions(+), 37 deletions(-) delete mode 100644 build_tests/typical/backward_compatible_build_hooks.rb create mode 100644 build_tests/typical/build_hooks_override_vars.rb diff --git a/build_tests/typical/backward_compatible_build_hooks.rb b/build_tests/typical/backward_compatible_build_hooks.rb deleted file mode 100644 index fb6607f..0000000 --- a/build_tests/typical/backward_compatible_build_hooks.rb +++ /dev/null @@ -1,25 +0,0 @@ -class MyObject < Rscons::Builder - def run(options) - target, sources, cache, env, vars = options.values_at(:target, :sources, :cache, :env, :vars) - env.run_builder(env.builders["Object"].new(target: target, sources: sources, cache: cache, env: env, vars: vars), target, sources, cache, vars) - end -end - -build do - Environment.new(echo: :command) do |env| - env.add_builder(MyObject) - env.append('CPPPATH' => Rscons.glob('src/**')) - env.add_build_hook do |build_op| - if build_op[:builder].name == "MyObject" && build_op[:sources].first =~ %r{one\.c} - build_op[:vars]["CFLAGS"] << "-O1" - build_op[:sources] = ['src/two/two.c'] - elsif build_op[:builder].name == "MyObject" && build_op[:target] =~ %r{two\.o} - new_vars = build_op[:vars].clone - new_vars["CFLAGS"] << "-O2" - build_op[:vars] = new_vars - end - end - env.MyObject('one.o', 'src/one/one.c') - env.MyObject('two.o', 'src/two/two.c') - end -end diff --git a/build_tests/typical/build_hooks_override_vars.rb b/build_tests/typical/build_hooks_override_vars.rb new file mode 100644 index 0000000..98e3f2d --- /dev/null +++ b/build_tests/typical/build_hooks_override_vars.rb @@ -0,0 +1,17 @@ +build do + Environment.new(echo: :command) do |env| + env.append('CPPPATH' => Rscons.glob('src/**')) + env.add_build_hook do |build_op| + if build_op[:builder].name == "Object" && build_op[:sources].first =~ %r{one\.c} + build_op[:vars]["CFLAGS"] << "-O1" + build_op[:sources] = ['src/two/two.c'] + elsif build_op[:builder].name == "Object" && build_op[:target] =~ %r{two\.o} + new_vars = build_op[:vars].clone + new_vars["CFLAGS"] << "-O2" + build_op[:vars] = new_vars + end + end + env.Object('one.o', 'src/one/one.c') + env.Object('two.o', 'src/two/two.c') + end +end diff --git a/spec/build_tests_spec.rb b/spec/build_tests_spec.rb index 6e81607..6d6c8bf 100644 --- a/spec/build_tests_spec.rb +++ b/spec/build_tests_spec.rb @@ -402,6 +402,18 @@ EOF expect(`./build_hook.exe`).to eq "Hello from two()\n" end + it 'supports build hooks to override the entire vars hash' do + test_dir("typical") + result = run_rscons(rsconscript: "build_hooks_override_vars.rb") + expect(result.stderr).to eq "" + expect(lines(result.stdout)).to include *[ + 'gcc -c -o one.o -MMD -MF one.mf -Isrc -Isrc/one -Isrc/two -O1 src/two/two.c', + 'gcc -c -o two.o -MMD -MF two.mf -Isrc -Isrc/one -Isrc/two -O2 src/two/two.c' + ] + expect(File.exists?('one.o')).to be_truthy + expect(File.exists?('two.o')).to be_truthy + end + it 'rebuilds when user-specified dependencies change' do test_dir('simple') @@ -851,18 +863,6 @@ EOF expect(result.stderr).to match /Failed to build/ expect(result.stdout).to match /Failed command was: gcc/ end - - it 'supports build hooks to override construction variables' do - test_dir("typical") - result = run_rscons(rsconscript: "backward_compatible_build_hooks.rb") - expect(result.stderr).to eq "" - expect(lines(result.stdout)).to include *[ - 'gcc -c -o one.o -MMD -MF one.mf -Isrc -Isrc/one -Isrc/two -O1 src/two/two.c', - 'gcc -c -o two.o -MMD -MF two.mf -Isrc -Isrc/one -Isrc/two -O2 src/two/two.c' - ] - expect(File.exists?('one.o')).to be_truthy - expect(File.exists?('two.o')).to be_truthy - end end context "CFile builder" do