From c23bb8c5e0c75048b0ac83787c939ca3e80037ad Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Tue, 29 Oct 2013 16:17:51 -0400 Subject: [PATCH] add support for building D sources (defaulting to gdc) --- lib/rscons/builders/object.rb | 11 ++++++++++- lib/rscons/builders/program.rb | 15 ++++++++++----- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/lib/rscons/builders/object.rb b/lib/rscons/builders/object.rb index f4dcd82..f91d6d6 100644 --- a/lib/rscons/builders/object.rb +++ b/lib/rscons/builders/object.rb @@ -28,6 +28,12 @@ module Rscons 'CXXSUFFIX' => '.cc', 'CXXDEPGEN' => ['-MMD', '-MF', '$_DEPFILE'], 'CXXCOM' =>['$CXX', '-c', '-o', '$_TARGET', '$CXXDEPGEN', '-I$[CPPPATH]', '$CPPFLAGS', '$CXXFLAGS', '$_SOURCES'], + + 'DC' => 'gdc', + 'DFLAGS' => [], + 'DSUFFIX' => '.d', + 'D_IMPORT_PATH' => [], + 'DCCOM' => ['$DC', '-c', '-o', '$_TARGET', '-I$[D_IMPORT_PATH]', '$DFLAGS', '$_SOURCES'], } end @@ -35,7 +41,8 @@ module Rscons target.has_suffix?(env['OBJSUFFIX']) and ( source.has_suffix?(env['ASSUFFIX']) or source.has_suffix?(env['CSUFFIX']) or - source.has_suffix?(env['CXXSUFFIX'])) + source.has_suffix?(env['CXXSUFFIX']) or + source.has_suffix?(env['DSUFFIX'])) end def run(target, sources, cache, env, vars = {}) @@ -50,6 +57,8 @@ module Rscons '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 diff --git a/lib/rscons/builders/program.rb b/lib/rscons/builders/program.rb index e69f066..e352bab 100644 --- a/lib/rscons/builders/program.rb +++ b/lib/rscons/builders/program.rb @@ -18,14 +18,19 @@ module Rscons # build sources to linkable objects objects = env.build_sources(sources, [env['OBJSUFFIX'], env['LIBSUFFIX']].flatten, cache, vars) if objects - use_cxx = sources.map do |s| - s.has_suffix?(env['CXXSUFFIX']) - end.any? - ld_alt = use_cxx ? env['CXX'] : env['CC'] + ld = if env["LD"] + env["LD"] + elsif sources.find {|s| s.has_suffix?(env["DSUFFIX"])} + env["DC"] + elsif sources.find {|s| s.has_suffix?(env["CXXSUFFIX"])} + env["CXX"] + else + env["CC"] + end vars = vars.merge({ '_TARGET' => target, '_SOURCES' => objects, - 'LD' => env['LD'] || ld_alt, + 'LD' => ld, }) command = env.build_command(env['LDCOM'], vars) standard_build("LD #{target}", target, command, objects, env, cache)