1 | #! /usr/bin/env python |
---|
2 | # encoding: utf-8 |
---|
3 | # WARNING! Do not edit! http://waf.googlecode.com/git/docs/wafbook/single.html#_obtaining_the_waf_file |
---|
4 | |
---|
5 | import os |
---|
6 | from waflib import Task,Options,Utils |
---|
7 | from waflib.Configure import conf |
---|
8 | from waflib.TaskGen import extension,feature,before_method |
---|
9 | @before_method('apply_incpaths','apply_link','propagate_uselib_vars') |
---|
10 | @feature('perlext') |
---|
11 | def init_perlext(self): |
---|
12 | self.uselib=self.to_list(getattr(self,'uselib',[])) |
---|
13 | if not'PERLEXT'in self.uselib:self.uselib.append('PERLEXT') |
---|
14 | self.env['cshlib_PATTERN']=self.env['cxxshlib_PATTERN']=self.env['perlext_PATTERN'] |
---|
15 | @extension('.xs') |
---|
16 | def xsubpp_file(self,node): |
---|
17 | outnode=node.change_ext('.c') |
---|
18 | self.create_task('xsubpp',node,outnode) |
---|
19 | self.source.append(outnode) |
---|
20 | class xsubpp(Task.Task): |
---|
21 | run_str='${PERL} ${XSUBPP} -noprototypes -typemap ${EXTUTILS_TYPEMAP} ${SRC} > ${TGT}' |
---|
22 | color='BLUE' |
---|
23 | ext_out=['.h'] |
---|
24 | @conf |
---|
25 | def check_perl_version(self,minver=None): |
---|
26 | res=True |
---|
27 | if minver: |
---|
28 | cver='.'.join(map(str,minver)) |
---|
29 | else: |
---|
30 | cver='' |
---|
31 | self.start_msg('Checking for minimum perl version %s'%cver) |
---|
32 | perl=getattr(Options.options,'perlbinary',None) |
---|
33 | if not perl: |
---|
34 | perl=self.find_program('perl',var='PERL') |
---|
35 | if not perl: |
---|
36 | self.end_msg("Perl not found",color="YELLOW") |
---|
37 | return False |
---|
38 | self.env['PERL']=perl |
---|
39 | version=self.cmd_and_log([perl,"-e",'printf \"%vd\", $^V']) |
---|
40 | if not version: |
---|
41 | res=False |
---|
42 | version="Unknown" |
---|
43 | elif not minver is None: |
---|
44 | ver=tuple(map(int,version.split("."))) |
---|
45 | if ver<minver: |
---|
46 | res=False |
---|
47 | self.end_msg(version,color=res and"GREEN"or"YELLOW") |
---|
48 | return res |
---|
49 | @conf |
---|
50 | def check_perl_module(self,module): |
---|
51 | cmd=[self.env['PERL'],'-e','use %s'%module] |
---|
52 | self.start_msg('perl module %s'%module) |
---|
53 | try: |
---|
54 | r=self.cmd_and_log(cmd) |
---|
55 | except Exception: |
---|
56 | self.end_msg(False) |
---|
57 | return None |
---|
58 | self.end_msg(r or True) |
---|
59 | return r |
---|
60 | @conf |
---|
61 | def check_perl_ext_devel(self): |
---|
62 | env=self.env |
---|
63 | perl=env.PERL |
---|
64 | if not perl: |
---|
65 | self.fatal('find perl first') |
---|
66 | def read_out(cmd): |
---|
67 | return Utils.to_list(self.cmd_and_log(perl+cmd)) |
---|
68 | env['LINKFLAGS_PERLEXT']=read_out(" -MConfig -e'print $Config{lddlflags}'") |
---|
69 | env['INCLUDES_PERLEXT']=read_out(" -MConfig -e'print \"$Config{archlib}/CORE\"'") |
---|
70 | env['CFLAGS_PERLEXT']=read_out(" -MConfig -e'print \"$Config{ccflags} $Config{cccdlflags}\"'") |
---|
71 | env['XSUBPP']=read_out(" -MConfig -e'print \"$Config{privlib}/ExtUtils/xsubpp$Config{exe_ext}\"'") |
---|
72 | env['EXTUTILS_TYPEMAP']=read_out(" -MConfig -e'print \"$Config{privlib}/ExtUtils/typemap\"'") |
---|
73 | if not getattr(Options.options,'perlarchdir',None): |
---|
74 | env['ARCHDIR_PERL']=self.cmd_and_log(perl+" -MConfig -e'print $Config{sitearch}'") |
---|
75 | else: |
---|
76 | env['ARCHDIR_PERL']=getattr(Options.options,'perlarchdir') |
---|
77 | env['perlext_PATTERN']='%s.'+self.cmd_and_log(perl+" -MConfig -e'print $Config{dlext}'") |
---|
78 | def options(opt): |
---|
79 | opt.add_option('--with-perl-binary',type='string',dest='perlbinary',help='Specify alternate perl binary',default=None) |
---|
80 | opt.add_option('--with-perl-archdir',type='string',dest='perlarchdir',help='Specify directory where to install arch specific files',default=None) |
---|