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.TaskGen import before_method,feature,after_method,Task,extension |
---|
8 | from waflib.Configure import conf |
---|
9 | @feature('rubyext') |
---|
10 | @before_method('apply_incpaths','apply_lib_vars','apply_bundle','apply_link') |
---|
11 | def init_rubyext(self): |
---|
12 | self.install_path='${ARCHDIR_RUBY}' |
---|
13 | self.uselib=self.to_list(getattr(self,'uselib','')) |
---|
14 | if not'RUBY'in self.uselib: |
---|
15 | self.uselib.append('RUBY') |
---|
16 | if not'RUBYEXT'in self.uselib: |
---|
17 | self.uselib.append('RUBYEXT') |
---|
18 | @feature('rubyext') |
---|
19 | @before_method('apply_link','propagate_uselib') |
---|
20 | def apply_ruby_so_name(self): |
---|
21 | self.env['cshlib_PATTERN']=self.env['cxxshlib_PATTERN']=self.env['rubyext_PATTERN'] |
---|
22 | @conf |
---|
23 | def check_ruby_version(self,minver=()): |
---|
24 | if Options.options.rubybinary: |
---|
25 | self.env.RUBY=Options.options.rubybinary |
---|
26 | else: |
---|
27 | self.find_program('ruby',var='RUBY') |
---|
28 | ruby=self.env.RUBY |
---|
29 | try: |
---|
30 | version=self.cmd_and_log(ruby+['-e','puts defined?(VERSION) ? VERSION : RUBY_VERSION']).strip() |
---|
31 | except Exception: |
---|
32 | self.fatal('could not determine ruby version') |
---|
33 | self.env.RUBY_VERSION=version |
---|
34 | try: |
---|
35 | ver=tuple(map(int,version.split("."))) |
---|
36 | except Exception: |
---|
37 | self.fatal('unsupported ruby version %r'%version) |
---|
38 | cver='' |
---|
39 | if minver: |
---|
40 | if ver<minver: |
---|
41 | self.fatal('ruby is too old %r'%ver) |
---|
42 | cver='.'.join([str(x)for x in minver]) |
---|
43 | else: |
---|
44 | cver=ver |
---|
45 | self.msg('Checking for ruby version %s'%str(minver or''),cver) |
---|
46 | @conf |
---|
47 | def check_ruby_ext_devel(self): |
---|
48 | if not self.env.RUBY: |
---|
49 | self.fatal('ruby detection is required first') |
---|
50 | if not self.env.CC_NAME and not self.env.CXX_NAME: |
---|
51 | self.fatal('load a c/c++ compiler first') |
---|
52 | version=tuple(map(int,self.env.RUBY_VERSION.split("."))) |
---|
53 | def read_out(cmd): |
---|
54 | return Utils.to_list(self.cmd_and_log(self.env.RUBY+['-rrbconfig','-e',cmd])) |
---|
55 | def read_config(key): |
---|
56 | return read_out('puts RbConfig::CONFIG[%r]'%key) |
---|
57 | ruby=self.env['RUBY'] |
---|
58 | archdir=read_config('archdir') |
---|
59 | cpppath=archdir |
---|
60 | if version>=(1,9,0): |
---|
61 | ruby_hdrdir=read_config('rubyhdrdir') |
---|
62 | cpppath+=ruby_hdrdir |
---|
63 | cpppath+=[os.path.join(ruby_hdrdir[0],read_config('arch')[0])] |
---|
64 | self.check(header_name='ruby.h',includes=cpppath,errmsg='could not find ruby header file') |
---|
65 | self.env.LIBPATH_RUBYEXT=read_config('libdir') |
---|
66 | self.env.LIBPATH_RUBYEXT+=archdir |
---|
67 | self.env.INCLUDES_RUBYEXT=cpppath |
---|
68 | self.env.CFLAGS_RUBYEXT=read_config('CCDLFLAGS') |
---|
69 | self.env.rubyext_PATTERN='%s.'+read_config('DLEXT')[0] |
---|
70 | flags=read_config('LDSHARED') |
---|
71 | while flags and flags[0][0]!='-': |
---|
72 | flags=flags[1:] |
---|
73 | if len(flags)>1 and flags[1]=="ppc": |
---|
74 | flags=flags[2:] |
---|
75 | self.env.LINKFLAGS_RUBYEXT=flags |
---|
76 | self.env.LINKFLAGS_RUBYEXT+=read_config('LIBS') |
---|
77 | self.env.LINKFLAGS_RUBYEXT+=read_config('LIBRUBYARG_SHARED') |
---|
78 | if Options.options.rubyarchdir: |
---|
79 | self.env.ARCHDIR_RUBY=Options.options.rubyarchdir |
---|
80 | else: |
---|
81 | self.env.ARCHDIR_RUBY=read_config('sitearchdir')[0] |
---|
82 | if Options.options.rubylibdir: |
---|
83 | self.env.LIBDIR_RUBY=Options.options.rubylibdir |
---|
84 | else: |
---|
85 | self.env.LIBDIR_RUBY=read_config('sitelibdir')[0] |
---|
86 | @conf |
---|
87 | def check_ruby_module(self,module_name): |
---|
88 | self.start_msg('Ruby module %s'%module_name) |
---|
89 | try: |
---|
90 | self.cmd_and_log(self.env.RUBY+['-e','require \'%s\';puts 1'%module_name]) |
---|
91 | except Exception: |
---|
92 | self.end_msg(False) |
---|
93 | self.fatal('Could not find the ruby module %r'%module_name) |
---|
94 | self.end_msg(True) |
---|
95 | @extension('.rb') |
---|
96 | def process(self,node): |
---|
97 | tsk=self.create_task('run_ruby',node) |
---|
98 | class run_ruby(Task.Task): |
---|
99 | run_str='${RUBY} ${RBFLAGS} -I ${SRC[0].parent.abspath()} ${SRC}' |
---|
100 | def options(opt): |
---|
101 | opt.add_option('--with-ruby-archdir',type='string',dest='rubyarchdir',help='Specify directory where to install arch specific files') |
---|
102 | opt.add_option('--with-ruby-libdir',type='string',dest='rubylibdir',help='Specify alternate ruby library path') |
---|
103 | opt.add_option('--with-ruby-binary',type='string',dest='rubybinary',help='Specify alternate ruby binary') |
---|