From b1cdd3d1dbfd8e6decd0a4397b8cea00b0b1f483 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Tue, 5 Nov 2013 15:25:10 -0500 Subject: [PATCH] Object: simplify handling of known suffixes --- lib/rscons/builders/object.rb | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/lib/rscons/builders/object.rb b/lib/rscons/builders/object.rb index cc4ff3f..ccc01e9 100644 --- a/lib/rscons/builders/object.rb +++ b/lib/rscons/builders/object.rb @@ -2,6 +2,13 @@ module Rscons # A default RScons builder which knows how to produce an object file from # various types of source files. class Object < Builder + KNOWN_SUFFIXES = { + "AS" => "ASSUFFIX", + "CC" => "CSUFFIX", + "CXX" => "CXXSUFFIX", + "DC" => "DSUFFIX", + } + def default_variables(env) { 'OBJSUFFIX' => '.o', @@ -38,11 +45,9 @@ module Rscons end def produces?(target, source, env) - target.has_suffix?(env['OBJSUFFIX']) and ( - source.has_suffix?(env['ASSUFFIX']) or - source.has_suffix?(env['CSUFFIX']) or - source.has_suffix?(env['CXXSUFFIX']) or - source.has_suffix?(env['DSUFFIX'])) + target.has_suffix?(env['OBJSUFFIX']) and KNOWN_SUFFIXES.find do |compiler, suffix_var| + source.has_suffix?(env[suffix_var]) + end end def run(target, sources, cache, env, vars = {}) @@ -51,17 +56,11 @@ module Rscons '_SOURCES' => sources, '_DEPFILE' => target.set_suffix('.mf'), }) - com_prefix = if sources.first.has_suffix?(env['ASSUFFIX']) - 'AS' - elsif sources.first.has_suffix?(env['CSUFFIX']) - 'CC' - elsif sources.first.has_suffix?(env['CXXSUFFIX']) - 'CXX' - elsif sources.first.has_suffix?(env['DSUFFIX']) - 'DC' - else - raise "Error: unknown input file type: #{sources.first.inspect}" - end + com_prefix = KNOWN_SUFFIXES.find do |compiler, suffix_var| + sources.first.has_suffix?(env[suffix_var]) + end.tap do |v| + v.nil? and raise "Error: unknown input file type: #{sources.first.inspect}" + end.first command = env.build_command(env["#{com_prefix}COM"], vars) unless cache.up_to_date?(target, command, sources) cache.mkdir_p(File.dirname(target))