From b805e5379fc4f4e35484d91247ad284ffad8dc63 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Tue, 5 Nov 2013 16:11:08 -0500 Subject: [PATCH] execute all build tests in the top-level rake context instead of spawning subprocesses --- build_tests/build_dir/build.rb | 5 - build_tests/build_dir/tweaker_build.rb | 12 -- build_tests/build_tests_spec.rb | 184 ++++++++++++++++++------- build_tests/clone_env/build.rb | 11 -- build_tests/custom_builder/build.rb | 16 --- build_tests/header/build.rb | 3 - build_tests/library/build.rb | 4 - build_tests/simple/build.rb | 4 - build_tests/simple_cc/build.rb | 4 - build_tests/two_sources/build.rb | 4 - 10 files changed, 135 insertions(+), 112 deletions(-) delete mode 100644 build_tests/build_dir/build.rb delete mode 100644 build_tests/build_dir/tweaker_build.rb delete mode 100644 build_tests/clone_env/build.rb delete mode 100644 build_tests/custom_builder/build.rb delete mode 100644 build_tests/header/build.rb delete mode 100644 build_tests/library/build.rb delete mode 100644 build_tests/simple/build.rb delete mode 100644 build_tests/simple_cc/build.rb delete mode 100644 build_tests/two_sources/build.rb diff --git a/build_tests/build_dir/build.rb b/build_tests/build_dir/build.rb deleted file mode 100644 index efc08a9..0000000 --- a/build_tests/build_dir/build.rb +++ /dev/null @@ -1,5 +0,0 @@ -Rscons::Environment.new do |env| - env.append('CPPPATH' => Dir['src/**/*/']) - env.build_dir(%r{^src/([^/]+)/}, 'build_\\1/') - env.Program('build_dir', Dir['src/**/*.c']) -end diff --git a/build_tests/build_dir/tweaker_build.rb b/build_tests/build_dir/tweaker_build.rb deleted file mode 100644 index 1650a8d..0000000 --- a/build_tests/build_dir/tweaker_build.rb +++ /dev/null @@ -1,12 +0,0 @@ -Rscons::Environment.new do |env| - env.append('CPPPATH' => Dir['src/**/*/']) - env.build_dir(%r{^src/([^/]+)/}, 'build_\\1/') - env.add_tweaker do |build_op| - if build_op[:target] =~ %r{build_one/.*\.o} - build_op[:vars]["CFLAGS"] << "-O1" - elsif build_op[:target] =~ %r{build_two/.*\.o} - build_op[:vars]["CFLAGS"] << "-O2" - end - end - env.Program('tweaker', Dir['src/**/*.c']) -end diff --git a/build_tests/build_tests_spec.rb b/build_tests/build_tests_spec.rb index 22ebb7e..1340de9 100644 --- a/build_tests/build_tests_spec.rb +++ b/build_tests/build_tests_spec.rb @@ -1,45 +1,31 @@ require 'fileutils' describe Rscons do + BUILD_TEST_RUN_DIR = "build_test_run" + before(:all) do - FileUtils.rm_rf('build_tests_run') + FileUtils.rm_rf(BUILD_TEST_RUN_DIR) @owd = Dir.pwd end + before(:each) do + @output = "" + $stdout.stub(:write) do |content| + @output += content + end + $stderr.stub(:write) do |content| + @output += content + end + end + after(:each) do Dir.chdir(@owd) - FileUtils.rm_rf('build_tests_run') + FileUtils.rm_rf(BUILD_TEST_RUN_DIR) end - def build_testdir(build_script = "build.rb") - if File.exists?(build_script) - build_rb = File.read(build_script) - File.open(build_script, "w") do |fh| - fh.puts(< Dir['src/**/*/']) + env.build_dir(%r{^src/([^/]+)/}, 'build_\\1/') + env.Program('build_dir', Dir['src/**/*.c']) + end `./build_dir`.should == "Hello from two()\n" File.exists?('build_one/one.o').should be_true File.exists?('build_two/two.o').should be_true end it 'cleans built files' do - lines = test_dir('build_dir') + test_dir('build_dir') + Rscons::Environment.new do |env| + env.append('CPPPATH' => Dir['src/**/*/']) + env.build_dir(%r{^src/([^/]+)/}, 'build_\\1/') + env.Program('build_dir', Dir['src/**/*.c']) + end `./build_dir`.should == "Hello from two()\n" File.exists?('build_one/one.o').should be_true File.exists?('build_two/two.o').should be_true @@ -148,7 +176,12 @@ EOF end it 'does not clean created directories if other non-rscons-generated files reside there' do - lines = test_dir('build_dir') + test_dir('build_dir') + Rscons::Environment.new do |env| + env.append('CPPPATH' => Dir['src/**/*/']) + env.build_dir(%r{^src/([^/]+)/}, 'build_\\1/') + env.Program('build_dir', Dir['src/**/*.c']) + end `./build_dir`.should == "Hello from two()\n" File.exists?('build_one/one.o').should be_true File.exists?('build_two/two.o').should be_true @@ -162,14 +195,44 @@ EOF end it 'allows Ruby classes as custom builders to be used to construct files' do - lines = test_dir('custom_builder') + test_dir('custom_builder') + class MySource < Rscons::Builder + def run(target, sources, cache, env, vars = {}) + File.open(target, 'w') do |fh| + fh.puts < '-DSTRING="Release Version"') do |env| + env.build_dir('src', 'release') + env.Program('program-release', Dir['src/*.c']) + end + lines.should == [ %q{gcc -c -o debug/program.o -MMD -MF debug/program.mf '-DSTRING="Debug Version"' -O2 src/program.c}, %q{gcc -o program-debug debug/program.o}, @@ -180,12 +243,19 @@ EOF it 'builds a C++ program with one source file' do test_dir('simple_cc') + Rscons::Environment.new do |env| + env.Program('simple', Dir['*.cc']) + end File.exists?('simple.o').should be_true `./simple`.should == "This is a simple C++ program\n" end it 'allows overriding construction variables for individual builder calls' do - lines = test_dir('two_sources') + test_dir('two_sources') + Rscons::Environment.new(echo: :command) do |env| + env.Object("one.o", "one.c", 'CPPFLAGS' => ['-DONE']) + env.Program('two_sources', ['one.o', 'two.c']) + end lines.should == [ 'gcc -c -o one.o -MMD -MF one.mf -DONE one.c', 'gcc -c -o two.o -MMD -MF two.mf two.c', @@ -196,7 +266,11 @@ EOF end it 'builds a static library archive' do - lines = test_dir('library') + test_dir('library') + Rscons::Environment.new(echo: :command) do |env| + env.Program('library', ['lib.a', 'three.c']) + env.Library("lib.a", ['one.c', 'two.c'], 'CPPFLAGS' => ['-Dmake_lib']) + end lines.should == [ 'gcc -c -o one.o -MMD -MF one.mf -Dmake_lib one.c', 'gcc -c -o two.o -MMD -MF two.mf -Dmake_lib two.c', @@ -209,7 +283,19 @@ EOF end it 'supports tweakers to override construction variables' do - lines = test_dir("build_dir", "tweaker_build.rb") + test_dir("build_dir") + Rscons::Environment.new do |env| + env.append('CPPPATH' => Dir['src/**/*/']) + env.build_dir(%r{^src/([^/]+)/}, 'build_\\1/') + env.add_tweaker do |build_op| + if build_op[:target] =~ %r{build_one/.*\.o} + build_op[:vars]["CFLAGS"] << "-O1" + elsif build_op[:target] =~ %r{build_two/.*\.o} + build_op[:vars]["CFLAGS"] << "-O2" + end + end + env.Program('tweaker', Dir['src/**/*.c']) + end `./tweaker`.should == "Hello from two()\n" lines.should =~ [ 'gcc -c -o build_one/one.o -MMD -MF build_one/one.mf -Isrc/one/ -Isrc/two/ -O1 src/one/one.c', diff --git a/build_tests/clone_env/build.rb b/build_tests/clone_env/build.rb deleted file mode 100644 index 19f05f3..0000000 --- a/build_tests/clone_env/build.rb +++ /dev/null @@ -1,11 +0,0 @@ -debug = Rscons::Environment.new do |env| - env.build_dir('src', 'debug') - env['CFLAGS'] = '-O2' - env['CPPFLAGS'] = '-DSTRING="Debug Version"' - env.Program('program-debug', Dir['src/*.c']) -end - -release = debug.clone('CPPFLAGS' => '-DSTRING="Release Version"') do |env| - env.build_dir('src', 'release') - env.Program('program-release', Dir['src/*.c']) -end diff --git a/build_tests/custom_builder/build.rb b/build_tests/custom_builder/build.rb deleted file mode 100644 index 2734914..0000000 --- a/build_tests/custom_builder/build.rb +++ /dev/null @@ -1,16 +0,0 @@ -class MySource < Rscons::Builder - def run(target, sources, cache, env, vars = {}) - File.open(target, 'w') do |fh| - fh.puts < ['-Dmake_lib']) -end diff --git a/build_tests/simple/build.rb b/build_tests/simple/build.rb deleted file mode 100644 index e109562..0000000 --- a/build_tests/simple/build.rb +++ /dev/null @@ -1,4 +0,0 @@ -Rscons::Environment.new do |env| - # CHANGE FLAGS - env.Program('simple', Dir['*.c']) -end diff --git a/build_tests/simple_cc/build.rb b/build_tests/simple_cc/build.rb deleted file mode 100644 index 1ee79f8..0000000 --- a/build_tests/simple_cc/build.rb +++ /dev/null @@ -1,4 +0,0 @@ -Rscons::Environment.new do |env| - # CHANGE FLAGS - env.Program('simple', Dir['*.cc']) -end diff --git a/build_tests/two_sources/build.rb b/build_tests/two_sources/build.rb deleted file mode 100644 index a498ded..0000000 --- a/build_tests/two_sources/build.rb +++ /dev/null @@ -1,4 +0,0 @@ -Rscons::Environment.new(echo: :command) do |env| - env.Object("one.o", "one.c", 'CPPFLAGS' => ['-DONE']) - env.Program('two_sources', ['one.o', 'two.c']) -end