diff --git a/lib/rscons.rb b/lib/rscons.rb index e9cbbf6..7b8afd7 100644 --- a/lib/rscons.rb +++ b/lib/rscons.rb @@ -33,6 +33,7 @@ module Rscons :Lex, :Library, :Object, + :Precompile, :Preprocess, :Program, :SharedLibrary, @@ -152,6 +153,7 @@ require_relative "rscons/builders/disassemble" require_relative "rscons/builders/lex" require_relative "rscons/builders/library" require_relative "rscons/builders/object" +require_relative "rscons/builders/precompile" require_relative "rscons/builders/preprocess" require_relative "rscons/builders/program" require_relative "rscons/builders/shared_library" diff --git a/lib/rscons/builders/precompile.rb b/lib/rscons/builders/precompile.rb new file mode 100644 index 0000000..d11fe51 --- /dev/null +++ b/lib/rscons/builders/precompile.rb @@ -0,0 +1,29 @@ +module Rscons + module Builders + # The Precompile builder generates .di interface files from .d source files + # for D. + class Precompile < Builder + + # Run the builder to produce a build target. + def run(options) + if @command + finalize_command + else + if @sources.find {|s| s.end_with?(*@env.expand_varref("${DSUFFIX}", @vars))} + pcc = @env.expand_varref("${DC}") + if pcc =~ /ldc/ + dpc_cmd = "${DPC_CMD:ldc}" + else + dpc_cmd = "${DPC_CMD:gdc}" + end + @vars["_TARGET"] = @target + @vars["_SOURCES"] = @sources + command = @env.build_command(dpc_cmd, @vars) + standard_command("Precompile #{Util.short_format_paths(@sources)}", command) + end + end + end + + end + end +end diff --git a/lib/rscons/default_construction_variables.rb b/lib/rscons/default_construction_variables.rb index aa8aa7a..e148df4 100644 --- a/lib/rscons/default_construction_variables.rb +++ b/lib/rscons/default_construction_variables.rb @@ -43,6 +43,8 @@ module Rscons "DFLAGS" => [], "DISASM_CMD" => %w[${OBJDUMP} ${DISASM_FLAGS} ${_SOURCES}], "DISASM_FLAGS" => %w[--disassemble --source], + "DPC_CMD:ldc" => %w[${DC} -H -Hf ${_TARGET} -o- ${INCPREFIX}${D_IMPORT_PATH} ${DFLAGS} ${_SOURCES}], + "DPC_CMD:gdc" => %w[${DC} -H -Hf ${_TARGET} -fsyntax-only ${INCPREFIX}${D_IMPORT_PATH} ${DFLAGS} ${_SOURCES}], "DSUFFIX" => %w[.d], "D_IMPORT_PATH" => [], "INCPREFIX" => "-I",