21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
# 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
|