class EasySwig::SwigTask
Public Class Methods
new(config)
click to toggle source
# File lib/tasks/swig_task.rb, line 4 def initialize(config) @config = config @target = @config.target_file @header_dir = @config.headers_dir @out_dir = @config.output_dir @lang = @config.lang @inc_dirs = @config.includes_dir if Dir.exists? @out_dir FileUtils.rm_r @out_dir end FileUtils.mkdir_p(@out_dir) @log=EasySwig::Logger.swig_log @out_dir @log.info { "Created SWIG output directory in #{@out_dir}" } end
Public Instance Methods
dispose()
click to toggle source
# File lib/tasks/swig_task.rb, line 64 def dispose @log.close end
run_swig()
click to toggle source
# File lib/tasks/swig_task.rb, line 21 def run_swig swig_opts=%Q{-c++ -#{@lang} -v -Wall -debug-classes} # saved_dir = Dir.pwd output_dir = @out_dir.clone ifiles = [] current_dir = nil if File.directory? @target ifiles = Dir.entries(@target).select { |entry| File.extname(entry)=='.i' } output_dir << "/#{File.basename(@target)}" current_dir = @target else ifiles << File.basename(@target) current_dir = ::File.dirname(@target) end ifiles.each { |f| @log.info "\nExecuting SWIG command for file: " + f target_name = File.basename(f, '.i') odir = output_dir + "/#{target_name}" FileUtils.mkdir_p(odir) Dir.chdir current_dir incs = "" Dir.foreach(@header_dir) { |e| subdir = File.absolute_path(e, @header_dir) if File.directory?(subdir) incs << "-I#{subdir} " end } @inc_dirs.each { |idir| incs << "-I#{idir} " } command=%Q{swig #{swig_opts} -namespace #{target_name} -outdir #{odir} #{incs} #{f} > swig_output 2>&1} @log.info command output=IO.popen(command) @log.debug { 'SWIG output:' } @log.debug { output.readlines.join } output.close FileUtils.mv("#{File.basename(f, '.i')}_wrap.cxx", output_dir) } Dir.chdir saved_dir end