From 46c50049aa9218391a9c2d84085f53fed46c94de Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Thu, 27 Jun 2013 21:02:50 -0400 Subject: [PATCH] Builder.produces? checks both target and source file names --- lib/rscons/builder.rb | 2 +- lib/rscons/builders/cc.rb | 6 +++--- lib/rscons/builders/program.rb | 5 +++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/rscons/builder.rb b/lib/rscons/builder.rb index 95da69f..c5ea56a 100644 --- a/lib/rscons/builder.rb +++ b/lib/rscons/builder.rb @@ -1,6 +1,6 @@ module Rscons class Builder - def self.produces?(env, suffix) + def self.produces?(env, target, source) false end end diff --git a/lib/rscons/builders/cc.rb b/lib/rscons/builders/cc.rb index 352e712..51423c8 100644 --- a/lib/rscons/builders/cc.rb +++ b/lib/rscons/builders/cc.rb @@ -6,13 +6,13 @@ module Rscons 'CFLAGS' => [], 'CPPFLAGS' => [], 'OBJSUFFIX' => '.o', - 'CEXTS' => ['.c'], + 'CSUFFIX' => ['.c'], 'CCCOM' => ['$CC', '-c', '-o', '$TARGET', '$CPPFLAGS', '$CFLAGS', '$SOURCES'] } end - def self.produces?(env, suffix) - suffix == env['OBJSUFFIX'] + def self.produces?(env, target, source) + target =~ /#{env['OBJSUFFIX']}$/ and env['CSUFFIX'].find {|ext| source =~ /#{ext}$/} end def run(env, target, source) diff --git a/lib/rscons/builders/program.rb b/lib/rscons/builders/program.rb index 6633c36..2e1976a 100644 --- a/lib/rscons/builders/program.rb +++ b/lib/rscons/builders/program.rb @@ -19,10 +19,11 @@ module Rscons if source =~ /#{env['OBJSUFFIX']}$/ or source =~ /#{env['LIBSUFFIX']}$/ source else - builder_class = env.builders.values.find { |klass| klass.produces?(env, env['OBJSUFFIX']) } + o_file = env.stem(source) + env['OBJSUFFIX'] + builder_class = env.builders.values.find { |klass| klass.produces?(env, o_file, source) } if builder_class builder = builder_class.new - builder.run(env, env.stem(source) + env['OBJSUFFIX'], source) + builder.run(env, o_file, source) else raise "No builder found to convert input source #{source.inspect} to an object file." end