diff --git a/build_tests/custom_builder/build.rb b/build_tests/custom_builder/build.rb new file mode 100644 index 0000000..20c9bfd --- /dev/null +++ b/build_tests/custom_builder/build.rb @@ -0,0 +1,16 @@ +class MySource < Rscons::Builder + def run(target, sources, cache) + File.open(target, 'w') do |fh| + fh.puts < +#include "inc.h" + +int main(int argc, char *argv[]) +{ + printf("The value is %d\n", THE_VALUE); +} diff --git a/lib/rscons/environment.rb b/lib/rscons/environment.rb index ce36e64..cea697c 100644 --- a/lib/rscons/environment.rb +++ b/lib/rscons/environment.rb @@ -88,7 +88,10 @@ module Rscons end @targets.each do |target, info| next if targets_processed.include?(target) - break unless process_target.call(target) + unless process_target.call(target) + $stderr.puts "Error: failed to build #{target}" + break + end end cache.write end diff --git a/spec/build_tests_spec.rb b/spec/build_tests_spec.rb index c1776a6..204e5ae 100644 --- a/spec/build_tests_spec.rb +++ b/spec/build_tests_spec.rb @@ -119,4 +119,11 @@ describe Rscons do File.exists?('build/one/one.o').should be_true File.exists?('build/two/two.o').should be_true end + + it 'allows Ruby classes as custom builders to be used to construct files' do + lines = test_dir('custom_builder') + lines.should == ['CC program.o', 'LD program'] + File.exists?('inc.h').should be_true + `./program`.should == "The value is 5678\n" + end end