Class: Rake::SWIGExtensionTask

Inherits:
ExtensionTask show all
Defined in:
lib/rake/swigextensiontask.rb

Instance Attribute Summary collapse

Attributes inherited from ExtensionTask

#dir, #env, #lib_name, #link_libs, #name, #objs

Instance Method Summary collapse

Methods inherited from ExtensionTask

env, env=, #initialize

Constructor Details

This class inherits a constructor from Rake::ExtensionTask

Instance Attribute Details

#depsObject

A Hash of interface filenames and their dependencies, i.e. files which are not built or linked, but cause the corresponding interface to be rebuild if any of them change.



36
37
38
# File 'lib/rake/swigextensiontask.rb', line 36

def deps
  @deps
end

#ifacesObject

An Array of interface filenames (Symbol or String) to build and link into the extension.



31
32
33
# File 'lib/rake/swigextensiontask.rb', line 31

def ifaces
  @ifaces
end

Instance Method Details

#define_rulesObject

Add rule for generating C++ wrapper code (_wrap.cc) from SWIG interface definition (.i).



68
69
70
71
72
73
74
75
76
77
# File 'lib/rake/swigextensiontask.rb', line 68

def define_rules
  verify_swig_version
  super
  Rake::Task.create_rule(
    /#{env[:swig_cppext]}$/ => [proc {|t| t.sub /#{env[:swig_cppext]}$/, '.'+env[:swigext] }]
  )  do |r|
    sh_cmd :swig, :swig_flags, {'-I' => :swig_includedirs}, {'-I' => :includedirs},
            '-o', r.name, r.sources
  end
end

#define_tasksObject



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/rake/swigextensiontask.rb', line 51

def define_tasks
  for iface in @ifaces
    deps = @deps[iface]
    iface = filepath(iface, :swigext)
    src = iface.sub(/\.#{env[:swigext]}$/, env[:swig_cppext])

    deps = [deps]  unless deps.kind_of? Enumerable
    if deps and deps.any?
      file src => deps.collect { |dep| filepath(dep, :swigext) } << iface
    end
    CLEAN.include src
    @objs << src.sub(/\.[^.]+$/, '.'+env[:objext])
  end
  super
end

#set_defaultsObject

Defaults:

  • lib_name: name.so

  • ifaces: name.i

  • deps: <none>

  • dir: .

  • link_libs: <none>



44
45
46
47
48
49
# File 'lib/rake/swigextensiontask.rb', line 44

def set_defaults
  super
  @ifaces ||= [name.to_sym]
  @deps ||= Hash.new []
  @objs = []
end