lib/generator/generatortask.rb in ffi-swig-generator-0.2.1 vs lib/generator/generatortask.rb in ffi-swig-generator-0.3.0

- old
+ new

@@ -1,44 +1,56 @@ require 'rake/tasklib' module FFI module Generator class Task < Rake::TaskLib - def initialize(options = {}) + attr_accessor :input_fn, :output_dir + def initialize(options = {}, &blk) @options = { :input_fn => '*.i', :output_dir => 'generated/' }.merge(options) + @input_fn = @options[:input_fn] + @output_dir = @options[:output_dir] + yield self if block_given? namespace 'ffi' do define_generate_task define_clean_task end end private def define_file_task(fn, xml_fn, output_fn) desc "Generate #{output_fn} from #{fn}" file output_fn => fn do - mkdir_p @options[:output_dir], :verbose => false - puts "Generating #{xml_fn} from #{fn} using SWIG..." + mkdir_p @output_dir, :verbose => false + Logger.info("#{fn} -> #{xml_fn}") `swig -xml #{xml_fn} #{fn}` - puts "Generating #{output_fn} from #{xml_fn}..." + Logger.info("#{xml_fn} -> #{output_fn}") + parser = Parser.new + config_basename = File.basename(fn, File.extname(fn)) + config_dir = File.dirname(fn) + config_fn = File.join(config_dir, "#{config_basename}.rb") + if File.exists?(config_fn) + Logger.info("Using configuration in #{config_fn}...") + parser.load_config(config_fn) + end File.open(output_fn, 'w') do |file| - file << Parser.generate(Nokogiri::XML(File.open(xml_fn))) + file << parser.generate(Nokogiri::XML(File.open(xml_fn))) end end end def define_file_tasks - Dir.glob(@options[:input_fn]).inject([]) do |output_fns, fn| - output_fn = File.join(@options[:output_dir], "#{File.basename(fn, '.i')}_wrap.rb") - xml_fn = File.join(@options[:output_dir], "#{File.basename(fn, '.i')}_wrap.xml") + Dir.glob(@input_fn).inject([]) do |output_fns, fn| + output_fn = File.join(@output_dir, "#{File.basename(fn, '.i')}_wrap.rb") + xml_fn = File.join(@output_dir, "#{File.basename(fn, '.i')}_wrap.xml") define_file_task(fn, xml_fn, output_fn) output_fns << output_fn end end def define_generate_task (task :generate => define_file_tasks).add_description('Generate all files') end def define_clean_task desc 'Remove all generated files' task :clean do - rm_rf @options[:output_dir] unless @options[:output_dir] == '.' + rm_rf @output_dir unless @output_dir == '.' end end end end end