summaryrefslogtreecommitdiff
path: root/.waf-1.7.16-0356ded4079f8d9c0828a065ed2fdab1/waflib/extras/swig.py
diff options
context:
space:
mode:
Diffstat (limited to '.waf-1.7.16-0356ded4079f8d9c0828a065ed2fdab1/waflib/extras/swig.py')
-rw-r--r--.waf-1.7.16-0356ded4079f8d9c0828a065ed2fdab1/waflib/extras/swig.py120
1 files changed, 120 insertions, 0 deletions
diff --git a/.waf-1.7.16-0356ded4079f8d9c0828a065ed2fdab1/waflib/extras/swig.py b/.waf-1.7.16-0356ded4079f8d9c0828a065ed2fdab1/waflib/extras/swig.py
new file mode 100644
index 0000000..4b6f50b
--- /dev/null
+++ b/.waf-1.7.16-0356ded4079f8d9c0828a065ed2fdab1/waflib/extras/swig.py
@@ -0,0 +1,120 @@
+#! /usr/bin/env python
+# encoding: utf-8
+# WARNING! Do not edit! http://waf.googlecode.com/git/docs/wafbook/single.html#_obtaining_the_waf_file
+
+import re
+from waflib import Task,Utils,Logs
+from waflib.TaskGen import extension,feature,after_method
+from waflib.Configure import conf
+from waflib.Tools import c_preproc
+SWIG_EXTS=['.swig','.i']
+re_module=re.compile('%module(?:\s*\(.*\))?\s+(.+)',re.M)
+re_1=re.compile(r'^%module.*?\s+([\w]+)\s*?$',re.M)
+re_2=re.compile('%include "(.*)"',re.M)
+re_3=re.compile('#include "(.*)"',re.M)
+class swig(Task.Task):
+ color='BLUE'
+ run_str='${SWIG} ${SWIGFLAGS} ${SWIGPATH_ST:INCPATHS} ${SWIGDEF_ST:DEFINES} ${SRC}'
+ ext_out=['.h']
+ vars=['SWIG_VERSION','SWIGDEPS']
+ def runnable_status(self):
+ for t in self.run_after:
+ if not t.hasrun:
+ return Task.ASK_LATER
+ if not getattr(self,'init_outputs',None):
+ self.init_outputs=True
+ if not getattr(self,'module',None):
+ txt=self.inputs[0].read()
+ m=re_module.search(txt)
+ if not m:
+ raise ValueError("could not find the swig module name")
+ self.module=m.group(1)
+ swig_c(self)
+ for x in self.env['SWIGFLAGS']:
+ x=x[1:]
+ try:
+ fun=swig_langs[x]
+ except KeyError:
+ pass
+ else:
+ fun(self)
+ return super(swig,self).runnable_status()
+ def scan(self):
+ env=self.env
+ lst_src=[]
+ seen=[]
+ to_see=[self.inputs[0]]
+ while to_see:
+ node=to_see.pop(0)
+ if node in seen:
+ continue
+ seen.append(node)
+ lst_src.append(node)
+ code=node.read()
+ code=c_preproc.re_nl.sub('',code)
+ code=c_preproc.re_cpp.sub(c_preproc.repl,code)
+ names=re_2.findall(code)+re_3.findall(code)
+ for n in names:
+ for d in self.generator.includes_nodes+[node.parent]:
+ u=d.find_resource(n)
+ if u:
+ to_see.append(u)
+ break
+ else:
+ Logs.warn('could not find %r'%n)
+ return(lst_src,[])
+swig_langs={}
+def swigf(fun):
+ swig_langs[fun.__name__.replace('swig_','')]=fun
+swig.swigf=swigf
+def swig_c(self):
+ ext='.swigwrap_%d.c'%self.generator.idx
+ flags=self.env['SWIGFLAGS']
+ if'-c++'in flags:
+ ext+='xx'
+ out_node=self.inputs[0].parent.find_or_declare(self.module+ext)
+ if'-c++'in flags:
+ c_tsk=self.generator.cxx_hook(out_node)
+ else:
+ c_tsk=self.generator.c_hook(out_node)
+ c_tsk.set_run_after(self)
+ ge=self.generator.bld.producer
+ ge.outstanding.insert(0,c_tsk)
+ ge.total+=1
+ try:
+ ltask=self.generator.link_task
+ except AttributeError:
+ pass
+ else:
+ ltask.set_run_after(c_tsk)
+ ltask.inputs.append(c_tsk.outputs[0])
+ self.outputs.append(out_node)
+ if not'-o'in self.env['SWIGFLAGS']:
+ self.env.append_value('SWIGFLAGS',['-o',self.outputs[0].abspath()])
+@swigf
+def swig_python(tsk):
+ tsk.set_outputs(tsk.inputs[0].parent.find_or_declare(tsk.module+'.py'))
+@swigf
+def swig_ocaml(tsk):
+ tsk.set_outputs(tsk.inputs[0].parent.find_or_declare(tsk.module+'.ml'))
+ tsk.set_outputs(tsk.inputs[0].parent.find_or_declare(tsk.module+'.mli'))
+@extension(*SWIG_EXTS)
+def i_file(self,node):
+ tsk=self.create_task('swig')
+ tsk.set_inputs(node)
+ tsk.module=getattr(self,'swig_module',None)
+ flags=self.to_list(getattr(self,'swig_flags',[]))
+ tsk.env.append_value('SWIGFLAGS',flags)
+@conf
+def check_swig_version(self):
+ reg_swig=re.compile(r'SWIG Version\s(.*)',re.M)
+ swig_out=self.cmd_and_log('%s -version'%self.env['SWIG'])
+ swigver=tuple([int(s)for s in reg_swig.findall(swig_out)[0].split('.')])
+ self.env['SWIG_VERSION']=swigver
+ msg='Checking for swig version'
+ self.msg(msg,'.'.join(map(str,swigver)))
+ return swigver
+def configure(conf):
+ swig=conf.find_program('swig',var='SWIG')
+ conf.env.SWIGPATH_ST='-I%s'
+ conf.env.SWIGDEF_ST='-D%s'