From 533599b7ba4a79b49023b3e6028d4669a4fd5555 Mon Sep 17 00:00:00 2001 From: "christophe.duvernois" Date: Sun, 3 May 2015 16:52:01 +0200 Subject: [PATCH 1/2] swig tool can handle -outdir parameter --- waflib/extras/swig.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/waflib/extras/swig.py b/waflib/extras/swig.py index 43aff46d..1c6fde42 100644 --- a/waflib/extras/swig.py +++ b/waflib/extras/swig.py @@ -130,12 +130,18 @@ def swig_c(self): @swigf def swig_python(tsk): - tsk.set_outputs(tsk.inputs[0].parent.find_or_declare(tsk.module + '.py')) + node = tsk.inputs[0].parent + if tsk.outdir: + node = tsk.outdir + tsk.set_outputs(node.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')) + node = tsk.inputs[0].parent + if tsk.outdir: + node = tsk.outdir + tsk.set_outputs(node.find_or_declare(tsk.module+'.ml')) + tsk.set_outputs(node.find_or_declare(tsk.module+'.mli')) @extension(*SWIG_EXTS) def i_file(self, node): @@ -147,9 +153,12 @@ def i_file(self, node): flags = self.to_list(getattr(self, 'swig_flags', [])) tsk.env.append_value('SWIGFLAGS', flags) - # looks like this is causing problems - #if not '-outdir' in flags: - # tsk.env.append_value('SWIGFLAGS', ['-outdir', node.parent.abspath()]) + tsk.outdir = None + if '-outdir' in flags: + outdir = flags[flags.index('-outdir')+1] + outdir = tsk.generator.bld.bldnode.make_node(outdir) + outdir.mkdir() + tsk.outdir = outdir @conf def check_swig_version(self): From 28639e5c98fbed86b1faa7e80c8b283e83697b0f Mon Sep 17 00:00:00 2001 From: "christophe.duvernois" Date: Sun, 3 May 2015 18:47:05 +0200 Subject: [PATCH 2/2] playground test update for swig with -outdir parameter --- playground/swig/wscript | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/playground/swig/wscript b/playground/swig/wscript index b461c4e7..671dfe58 100644 --- a/playground/swig/wscript +++ b/playground/swig/wscript @@ -92,10 +92,10 @@ def build(bld): from waflib.extras import swig - srcdir = bld.path.get_bld().make_node('extend/java/hmm') # destination for generated java file (without the packages!) + srcdir = bld.path.get_bld().make_node('extend/java') # destination for generated java file #""" # BEGIN BLOCK 1 - d = bld.path.make_node('extend/java') + d = bld.path.make_node('extend/java/foo/bar/pouet') javanodes = [d.find_or_declare(x) for x in 'A.java test_swig_waf.java test_swig_wafJNI.java'.split()] dec = bld.tools['swig'].swigf #@dec <- python 2.3 does not support the @decorator notation @@ -106,23 +106,17 @@ def build(bld): #"""# do not remove - - - bld( features = 'cxx cxxshlib', source = 'extend/java/test_swig_waf.i', target = 'extend/java/_test_swig_waf', - swig_flags = '-c++ -java -package foo.bar.pouet', + swig_flags = '-c++ -java -package foo.bar.pouet -outdir extend/java/foo/bar/pouet', includes = 'extend', vnum = '1.2.3', uselib = 'JAVA', use = 'mylib') #""" # BEGIN BLOCK 2 - for x in javanodes: - bld(rule='cp ${SRC} ${TGT}', source=x, - target=srcdir.make_node('foo/bar/pouet/' + x.name), before=['javac'], after=['swig']) """ # END BLOCK 2 def move_java_files(task): @@ -130,22 +124,18 @@ def build(bld): from waflib import Utils node = srcdir.make_node('foo/bar/pouet/') - node.mkdir() - orig = task.inputs[0].parent.get_bld().abspath() - files = Utils.listdir(orig) + files = Utils.listdir(node.abspath()) for x in files: if x.endswith('.java'): # create a node in the directory we want to j = node.make_node(x) # create a node - shutil.copy2(orig + os.sep + x, j.abspath()) # create the physical file for the node j.sig = Utils.h_file(j.abspath()) # update the node signature # depend on the .i file to make sure the .java files are copied after swig is executed bld(name='move_and_read', rule=move_java_files, source='extend/java/test_swig_waf.i', after=['swig'], before=['javac']) #""" - bld(rule='cp ${SRC} ${TGT}', source=bld.path.find_resource('extend/java/Foo.java'), - target=srcdir.make_node('foo/bar/pouet/Foo.java'), before=['javac'], after=['swig']) + bld(rule='cp ${SRC} ${TGT}', source=bld.path.find_resource('extend/java/Foo.java'), target=srcdir.make_node('foo/bar/pouet/Foo.java'), before=['javac'], after=['swig']) tmp = bld.path.get_bld().make_node('maha')