diff --git a/lib/rscons.rb b/lib/rscons.rb index 79da761..2047c38 100644 --- a/lib/rscons.rb +++ b/lib/rscons.rb @@ -1,5 +1,14 @@ require "rscons/version" +require "rscons/builder" +require "rscons/environment" + +# default builders +require "rscons/builders/cc" +require "rscons/builders/program" module Rscons - # Your code goes here... + DEFAULT_BUILDERS = [ + CC, + Program + ] end diff --git a/lib/rscons/builder.rb b/lib/rscons/builder.rb new file mode 100644 index 0000000..38c3ba7 --- /dev/null +++ b/lib/rscons/builder.rb @@ -0,0 +1,4 @@ +module Rscons + class Builder + end +end diff --git a/lib/rscons/builders/cc.rb b/lib/rscons/builders/cc.rb new file mode 100644 index 0000000..dd062c0 --- /dev/null +++ b/lib/rscons/builders/cc.rb @@ -0,0 +1,10 @@ +module Rscons + class CC < Builder + VARIABLE_DEFAULTS = { + 'CC' => 'gcc', + 'CFLAGS' => [], + 'CPPFLAGS' => [], + 'OBJSUFFIX' => '.o', + } + end +end diff --git a/lib/rscons/builders/program.rb b/lib/rscons/builders/program.rb new file mode 100644 index 0000000..8b48f4c --- /dev/null +++ b/lib/rscons/builders/program.rb @@ -0,0 +1,11 @@ +module Rscons + class Program < Builder + VARIABLE_DEFAULTS = { + 'LD' => nil, + 'OBJSUFFIX' => '.o', + 'LIBSUFFIX' => '.a', + 'LDFLAGS' => [], + 'LIBS' => [], + } + end +end diff --git a/lib/rscons/environment.rb b/lib/rscons/environment.rb new file mode 100644 index 0000000..63fb745 --- /dev/null +++ b/lib/rscons/environment.rb @@ -0,0 +1,51 @@ +module Rscons + class Environment + # Values: + # :none - do not print anything + # :short - rscons will print a short representation of the step + # being performed + # :command (default) - print the full command being executed + attr_accessor :echo + + def initialize(options = {}) + @echo = :command + @variables = options.reject { |key, val| not key[0] =~ /[A-Z]/ } + @builders = {} + @build_dirs = {} + unless @variables[:omit_default_builders] + DEFAULT_BUILDERS.each do |builder_class| + add_builder(builder_class) + end + end + @echo = options[:echo] if options[:echo] + end + + def add_builder(builder_class) + var_defs = builder_class.const_get('VARIABLE_DEFAULTS') + if var_defs + var_defs.each_pair do |var, val| + unless @variables.has_key?(var) + @variables[var] = val + end + end + end + end + + def [](key) + @variables[key] + end + + def []=(key, val) + @variables[key] = val + end + + def build_dir(src_dir, build_dir) + @build_dirs[src_dir] = build_dir + end + + def method_missing(method, *args) + if @builders.has_key?(method.to_s) + end + end + end +end