diff --git a/lib/rscons.rb b/lib/rscons.rb index bf8a58a..bcf1fe9 100644 --- a/lib/rscons.rb +++ b/lib/rscons.rb @@ -12,20 +12,6 @@ require_relative "rscons/util" require_relative "rscons/varset" require_relative "rscons/version" -# default builders -require_relative "rscons/builders/cfile" -require_relative "rscons/builders/command" -require_relative "rscons/builders/directory" -require_relative "rscons/builders/disassemble" -require_relative "rscons/builders/install" -require_relative "rscons/builders/library" -require_relative "rscons/builders/object" -require_relative "rscons/builders/preprocess" -require_relative "rscons/builders/program" -require_relative "rscons/builders/shared_library" -require_relative "rscons/builders/shared_object" -require_relative "rscons/builders/simple_builder" - # Namespace module for rscons classes module Rscons @@ -177,5 +163,19 @@ module Rscons end +# default builders +require_relative "rscons/builders/cfile" +require_relative "rscons/builders/command" +require_relative "rscons/builders/directory" +require_relative "rscons/builders/disassemble" +require_relative "rscons/builders/install" +require_relative "rscons/builders/library" +require_relative "rscons/builders/object" +require_relative "rscons/builders/preprocess" +require_relative "rscons/builders/program" +require_relative "rscons/builders/shared_library" +require_relative "rscons/builders/shared_object" +require_relative "rscons/builders/simple_builder" + # Unbuffer $stdout $stdout.sync = true diff --git a/lib/rscons/application.rb b/lib/rscons/application.rb index e61c0e1..f1d9ccd 100644 --- a/lib/rscons/application.rb +++ b/lib/rscons/application.rb @@ -15,8 +15,14 @@ module Rscons # Access any variables set on the rscons command-line. attr_reader :vars + # @return [VarSet] + # The default construction variables provided by builders. + attr_reader :default_varset + + # Create Application instance. def initialize @n_threads = determine_n_threads + @default_varset = VarSet.new @vars = VarSet.new end diff --git a/lib/rscons/builder.rb b/lib/rscons/builder.rb index bae8905..06da747 100644 --- a/lib/rscons/builder.rb +++ b/lib/rscons/builder.rb @@ -15,15 +15,6 @@ module Rscons self.class.name.split(":").last end - # Return a set of default construction variables for the builder. - # - # @param env [Environment] The Environment. - # - # @return [Hash] Default construction variables. - def default_variables(env) - {} - end - # Return a set of build features that this builder provides. # # @return [Array] diff --git a/lib/rscons/builders/cfile.rb b/lib/rscons/builders/cfile.rb index e8c061f..470b780 100644 --- a/lib/rscons/builders/cfile.rb +++ b/lib/rscons/builders/cfile.rb @@ -8,23 +8,16 @@ module Rscons # env.CFile("lex.yy.cc", "parser.ll") class CFile < Builder - # Return default construction variables for the builder. - # - # @param env [Environment] The Environment using the builder. - # - # @return [Hash] Default construction variables for the builder. - def default_variables(env) - { - "YACC" => "bison", - "YACC_FLAGS" => ["-d"], - "YACC_CMD" => ["${YACC}", "${YACC_FLAGS}", "-o", "${_TARGET}", "${_SOURCES}"], - "YACCSUFFIX" => [".y", ".yy"], - "LEX" => "flex", - "LEX_FLAGS" => [], - "LEX_CMD" => ["${LEX}", "${LEX_FLAGS}", "-o", "${_TARGET}", "${_SOURCES}"], - "LEXSUFFIX" => [".l", ".ll"], - } - end + Rscons.application.default_varset.append( + "YACC" => "bison", + "YACC_FLAGS" => ["-d"], + "YACC_CMD" => ["${YACC}", "${YACC_FLAGS}", "-o", "${_TARGET}", "${_SOURCES}"], + "YACCSUFFIX" => [".y", ".yy"], + "LEX" => "flex", + "LEX_FLAGS" => [], + "LEX_CMD" => ["${LEX}", "${LEX_FLAGS}", "-o", "${_TARGET}", "${_SOURCES}"], + "LEXSUFFIX" => [".l", ".ll"], + ) # Run the builder to produce a build target. # diff --git a/lib/rscons/builders/disassemble.rb b/lib/rscons/builders/disassemble.rb index ddbecae..a1aa40b 100644 --- a/lib/rscons/builders/disassemble.rb +++ b/lib/rscons/builders/disassemble.rb @@ -3,18 +3,11 @@ module Rscons # The Disassemble builder produces a disassembly listing of a source file. class Disassemble < Builder - # Return default construction variables for the builder. - # - # @param env [Environment] The Environment using the builder. - # - # @return [Hash] Default construction variables for the builder. - def default_variables(env) - { - "OBJDUMP" => "objdump", - "DISASM_CMD" => ["${OBJDUMP}", "${DISASM_FLAGS}", "${_SOURCES}"], - "DISASM_FLAGS" => ["--disassemble", "--source"], - } - end + Rscons.application.default_varset.append( + "OBJDUMP" => "objdump", + "DISASM_CMD" => ["${OBJDUMP}", "${DISASM_FLAGS}", "${_SOURCES}"], + "DISASM_FLAGS" => ["--disassemble", "--source"], + ) # Run the builder to produce a build target. # diff --git a/lib/rscons/builders/library.rb b/lib/rscons/builders/library.rb index a8b2ad9..99880c5 100644 --- a/lib/rscons/builders/library.rb +++ b/lib/rscons/builders/library.rb @@ -3,19 +3,12 @@ module Rscons # A default Rscons builder that produces a static library archive. class Library < Builder - # Return default construction variables for the builder. - # - # @param env [Environment] The Environment using the builder. - # - # @return [Hash] Default construction variables for the builder. - def default_variables(env) - { - 'AR' => 'ar', - 'LIBSUFFIX' => '.a', - 'ARFLAGS' => ['rcs'], - 'ARCMD' => ['${AR}', '${ARFLAGS}', '${_TARGET}', '${_SOURCES}'] - } - end + Rscons.application.default_varset.append( + 'AR' => 'ar', + 'LIBSUFFIX' => '.a', + 'ARFLAGS' => ['rcs'], + 'ARCMD' => ['${AR}', '${ARFLAGS}', '${_TARGET}', '${_SOURCES}'] + ) # Set up a build operation using this builder. # diff --git a/lib/rscons/builders/object.rb b/lib/rscons/builders/object.rb index 24c6e76..663bad1 100644 --- a/lib/rscons/builders/object.rb +++ b/lib/rscons/builders/object.rb @@ -12,53 +12,46 @@ module Rscons "DC" => "DSUFFIX", } - # Return default construction variables for the builder. - # - # @param env [Environment] The Environment using the builder. - # - # @return [Hash] Default construction variables for the builder. - def default_variables(env) - { - 'OBJSUFFIX' => ['.o'], - 'DEPFILESUFFIX' => '.mf', + Rscons.application.default_varset.append( + 'OBJSUFFIX' => ['.o'], + 'DEPFILESUFFIX' => '.mf', - 'CPPDEFPREFIX' => '-D', - 'INCPREFIX' => '-I', + 'CPPDEFPREFIX' => '-D', + 'INCPREFIX' => '-I', - 'AS' => '${CC}', - 'ASFLAGS' => [], - 'ASSUFFIX' => ['.S'], - 'ASPPPATH' => '${CPPPATH}', - 'ASPPFLAGS' => '${CPPFLAGS}', - 'ASDEPGEN' => ['-MMD', '-MF', '${_DEPFILE}'], - 'ASCMD' => ['${AS}', '-c', '-o', '${_TARGET}', '${ASDEPGEN}', '${INCPREFIX}${ASPPPATH}', '${ASPPFLAGS}', '${ASFLAGS}', '${_SOURCES}'], + 'AS' => '${CC}', + 'ASFLAGS' => [], + 'ASSUFFIX' => ['.S'], + 'ASPPPATH' => '${CPPPATH}', + 'ASPPFLAGS' => '${CPPFLAGS}', + 'ASDEPGEN' => ['-MMD', '-MF', '${_DEPFILE}'], + 'ASCMD' => ['${AS}', '-c', '-o', '${_TARGET}', '${ASDEPGEN}', '${INCPREFIX}${ASPPPATH}', '${ASPPFLAGS}', '${ASFLAGS}', '${_SOURCES}'], - 'CPPFLAGS' => ['${CPPDEFPREFIX}${CPPDEFINES}'], - 'CPPDEFINES' => [], - 'CPPPATH' => [], + 'CPPFLAGS' => ['${CPPDEFPREFIX}${CPPDEFINES}'], + 'CPPDEFINES' => [], + 'CPPPATH' => [], - 'CCFLAGS' => [], + 'CCFLAGS' => [], - 'CC' => 'gcc', - 'CFLAGS' => [], - 'CSUFFIX' => ['.c'], - 'CCDEPGEN' => ['-MMD', '-MF', '${_DEPFILE}'], - 'CCCMD' => ['${CC}', '-c', '-o', '${_TARGET}', '${CCDEPGEN}', '${INCPREFIX}${CPPPATH}', '${CPPFLAGS}', '${CFLAGS}', '${CCFLAGS}', '${_SOURCES}'], + 'CC' => 'gcc', + 'CFLAGS' => [], + 'CSUFFIX' => ['.c'], + 'CCDEPGEN' => ['-MMD', '-MF', '${_DEPFILE}'], + 'CCCMD' => ['${CC}', '-c', '-o', '${_TARGET}', '${CCDEPGEN}', '${INCPREFIX}${CPPPATH}', '${CPPFLAGS}', '${CFLAGS}', '${CCFLAGS}', '${_SOURCES}'], - 'CXX' => 'g++', - 'CXXFLAGS' => [], - 'CXXSUFFIX' => ['.cc', '.cpp', '.cxx', '.C'], - 'CXXDEPGEN' => ['-MMD', '-MF', '${_DEPFILE}'], - 'CXXCMD' =>['${CXX}', '-c', '-o', '${_TARGET}', '${CXXDEPGEN}', '${INCPREFIX}${CPPPATH}', '${CPPFLAGS}', '${CXXFLAGS}', '${CCFLAGS}', '${_SOURCES}'], + 'CXX' => 'g++', + 'CXXFLAGS' => [], + 'CXXSUFFIX' => ['.cc', '.cpp', '.cxx', '.C'], + 'CXXDEPGEN' => ['-MMD', '-MF', '${_DEPFILE}'], + 'CXXCMD' =>['${CXX}', '-c', '-o', '${_TARGET}', '${CXXDEPGEN}', '${INCPREFIX}${CPPPATH}', '${CPPFLAGS}', '${CXXFLAGS}', '${CCFLAGS}', '${_SOURCES}'], - 'DC' => 'gdc', - 'DFLAGS' => [], - 'DSUFFIX' => ['.d'], - 'DDEPGEN' => ['-MMD', '-MF', '${_DEPFILE}'], - 'D_IMPORT_PATH' => [], - 'DCCMD' => ['${DC}', '-c', '-o', '${_TARGET}', '${DDEPGEN}', '${INCPREFIX}${D_IMPORT_PATH}', '${DFLAGS}', '${_SOURCES}'], - } - end + 'DC' => 'gdc', + 'DFLAGS' => [], + 'DSUFFIX' => ['.d'], + 'DDEPGEN' => ['-MMD', '-MF', '${_DEPFILE}'], + 'D_IMPORT_PATH' => [], + 'DCCMD' => ['${DC}', '-c', '-o', '${_TARGET}', '${DDEPGEN}', '${INCPREFIX}${D_IMPORT_PATH}', '${DFLAGS}', '${_SOURCES}'], + ) # Return whether this builder object is capable of producing a given target # file name from a given source file name. diff --git a/lib/rscons/builders/preprocess.rb b/lib/rscons/builders/preprocess.rb index baf9e27..a51dc33 100644 --- a/lib/rscons/builders/preprocess.rb +++ b/lib/rscons/builders/preprocess.rb @@ -5,18 +5,11 @@ module Rscons # The Preprocess builder invokes the C preprocessor class Preprocess < Builder - # Return default construction variables for the builder. - # - # @param env [Environment] The Environment using the builder. - # - # @return [Hash] Default construction variables for the builder. - def default_variables(env) - { - "CPP_CMD" => %w[ - ${_PREPROCESS_CC} -E ${_PREPROCESS_DEPGEN} - -o ${_TARGET} ${INCPREFIX}${CPPPATH} ${CPPFLAGS} ${_SOURCES}], - } - end + Rscons.application.default_varset.append( + "CPP_CMD" => %w[ + ${_PREPROCESS_CC} -E ${_PREPROCESS_DEPGEN} + -o ${_TARGET} ${INCPREFIX}${CPPPATH} ${CPPFLAGS} ${_SOURCES}], + ) # Run the builder to produce a build target. # diff --git a/lib/rscons/builders/program.rb b/lib/rscons/builders/program.rb index cefdf92..ea541d9 100644 --- a/lib/rscons/builders/program.rb +++ b/lib/rscons/builders/program.rb @@ -4,25 +4,18 @@ module Rscons # executable program. class Program < Builder - # Return default construction variables for the builder. - # - # @param env [Environment] The Environment using the builder. - # - # @return [Hash] Default construction variables for the builder. - def default_variables(env) - { - 'OBJSUFFIX' => '.o', - 'PROGSUFFIX' => (Object.const_get("RUBY_PLATFORM") =~ /mingw|cygwin/ ? ".exe" : ""), - 'LD' => nil, - 'LIBSUFFIX' => '.a', - 'LDFLAGS' => [], - 'LIBPATH' => [], - 'LIBDIRPREFIX' => '-L', - 'LIBLINKPREFIX' => '-l', - 'LIBS' => [], - 'LDCMD' => ['${LD}', '-o', '${_TARGET}', '${LDFLAGS}', '${_SOURCES}', '${LIBDIRPREFIX}${LIBPATH}', '${LIBLINKPREFIX}${LIBS}'] - } - end + Rscons.application.default_varset.append( + 'OBJSUFFIX' => '.o', + 'PROGSUFFIX' => (Object.const_get("RUBY_PLATFORM") =~ /mingw|cygwin/ ? ".exe" : ""), + 'LD' => nil, + 'LIBSUFFIX' => '.a', + 'LDFLAGS' => [], + 'LIBPATH' => [], + 'LIBDIRPREFIX' => '-L', + 'LIBLINKPREFIX' => '-l', + 'LIBS' => [], + 'LDCMD' => ['${LD}', '-o', '${_TARGET}', '${LDFLAGS}', '${_SOURCES}', '${LIBDIRPREFIX}${LIBPATH}', '${LIBLINKPREFIX}${LIBS}'] + ) # Create a BuildTarget object for this build target. # diff --git a/lib/rscons/builders/shared_library.rb b/lib/rscons/builders/shared_library.rb index 7c05620..a7912a3 100644 --- a/lib/rscons/builders/shared_library.rb +++ b/lib/rscons/builders/shared_library.rb @@ -4,22 +4,15 @@ module Rscons # shared library. class SharedLibrary < Builder - # Return default construction variables for the builder. - # - # @param env [Environment] The Environment using the builder. - # - # @return [Hash] Default construction variables for the builder. - def default_variables(env) - { - 'SHLIBPREFIX' => (RUBY_PLATFORM =~ /mingw/ ? '' : 'lib'), - 'SHLIBSUFFIX' => (RUBY_PLATFORM =~ /mingw/ ? '.dll' : '.so'), - 'SHLDFLAGS' => ['${LDFLAGS}', '-shared'], - 'SHLD' => nil, - 'SHLIBDIRPREFIX' => '-L', - 'SHLIBLINKPREFIX' => '-l', - 'SHLDCMD' => ['${SHLD}', '-o', '${_TARGET}', '${SHLDFLAGS}', '${_SOURCES}', '${SHLIBDIRPREFIX}${LIBPATH}', '${SHLIBLINKPREFIX}${LIBS}'] - } - end + Rscons.application.default_varset.append( + 'SHLIBPREFIX' => (RUBY_PLATFORM =~ /mingw/ ? '' : 'lib'), + 'SHLIBSUFFIX' => (RUBY_PLATFORM =~ /mingw/ ? '.dll' : '.so'), + 'SHLDFLAGS' => ['${LDFLAGS}', '-shared'], + 'SHLD' => nil, + 'SHLIBDIRPREFIX' => '-L', + 'SHLIBLINKPREFIX' => '-l', + 'SHLDCMD' => ['${SHLD}', '-o', '${_TARGET}', '${SHLDFLAGS}', '${_SOURCES}', '${SHLIBDIRPREFIX}${LIBPATH}', '${SHLIBLINKPREFIX}${LIBS}'] + ) # Return a set of build features that this builder provides. # diff --git a/lib/rscons/builders/shared_object.rb b/lib/rscons/builders/shared_object.rb index 97584c5..2c1cdff 100644 --- a/lib/rscons/builders/shared_object.rb +++ b/lib/rscons/builders/shared_object.rb @@ -13,29 +13,22 @@ module Rscons "SHDC" => "DSUFFIX", } - # Return default construction variables for the builder. - # - # @param env [Environment] The Environment using the builder. - # - # @return [Hash] Default construction variables for the builder. - def default_variables(env) - pic_flags = (RUBY_PLATFORM =~ /mingw/ ? [] : ['-fPIC']) - { - 'SHCCFLAGS' => ['${CCFLAGS}'] + pic_flags, + pic_flags = (RUBY_PLATFORM =~ /mingw/ ? [] : ['-fPIC']) + Rscons.application.default_varset.append( + 'SHCCFLAGS' => ['${CCFLAGS}'] + pic_flags, - 'SHCC' => '${CC}', - 'SHCFLAGS' => ['${CFLAGS}'], - 'SHCCCMD' => ['${SHCC}', '-c', '-o', '${_TARGET}', '${CCDEPGEN}', '${INCPREFIX}${CPPPATH}', '${CPPFLAGS}', '${SHCFLAGS}', '${SHCCFLAGS}', '${_SOURCES}'], + 'SHCC' => '${CC}', + 'SHCFLAGS' => ['${CFLAGS}'], + 'SHCCCMD' => ['${SHCC}', '-c', '-o', '${_TARGET}', '${CCDEPGEN}', '${INCPREFIX}${CPPPATH}', '${CPPFLAGS}', '${SHCFLAGS}', '${SHCCFLAGS}', '${_SOURCES}'], - 'SHCXX' => '${CXX}', - 'SHCXXFLAGS' => ['${CXXFLAGS}'], - 'SHCXXCMD' => ['${SHCXX}', '-c', '-o', '${_TARGET}', '${CXXDEPGEN}', '${INCPREFIX}${CPPPATH}', '${CPPFLAGS}', '${SHCXXFLAGS}', '${SHCCFLAGS}', '${_SOURCES}'], + 'SHCXX' => '${CXX}', + 'SHCXXFLAGS' => ['${CXXFLAGS}'], + 'SHCXXCMD' => ['${SHCXX}', '-c', '-o', '${_TARGET}', '${CXXDEPGEN}', '${INCPREFIX}${CPPPATH}', '${CPPFLAGS}', '${SHCXXFLAGS}', '${SHCCFLAGS}', '${_SOURCES}'], - 'SHDC' => 'gdc', - 'SHDFLAGS' => ['${DFLAGS}'] + pic_flags, - 'SHDCCMD' => ['${SHDC}', '-c', '-o', '${_TARGET}', '${INCPREFIX}${D_IMPORT_PATH}', '${SHDFLAGS}', '${_SOURCES}'], - } - end + 'SHDC' => 'gdc', + 'SHDFLAGS' => ['${DFLAGS}'] + pic_flags, + 'SHDCCMD' => ['${SHDC}', '-c', '-o', '${_TARGET}', '${INCPREFIX}${D_IMPORT_PATH}', '${SHDFLAGS}', '${_SOURCES}'], + ) # Return a set of build features that this builder provides. # diff --git a/lib/rscons/environment.rb b/lib/rscons/environment.rb index 7a56689..14e681d 100644 --- a/lib/rscons/environment.rb +++ b/lib/rscons/environment.rb @@ -69,7 +69,7 @@ module Rscons @threaded_commands = Set.new @registered_build_dependencies = {} @side_effects = {} - @varset = VarSet.new + @varset = VarSet.new(Rscons.application.default_varset) @job_set = JobSet.new(@registered_build_dependencies, @side_effects) @user_deps = {} @builders = {} @@ -169,12 +169,6 @@ module Rscons builder = Rscons::Builders::SimpleBuilder.new(builder, &action) end @builders[builder.name] = builder - var_defs = builder.default_variables(self) - if var_defs - var_defs.each_pair do |var, val| - @varset[var] ||= val - end - end end # Add a build hook to the Environment.