wscript (1202B)
1 #! /usr/bin/env python 2 3 def options(opt): 4 opt.load('compiler_c') 5 6 def configure(conf): 7 conf.load('compiler_c') 8 conf.find_program('ldd') 9 conf.where_is_shlib(lib='m') 10 11 # --- support code below --- 12 13 import re 14 from waflib import Task, TaskGen, Configure 15 16 class ldd_run(Task.Task): 17 color = 'PINK' 18 run_str = '${LDD} ${SRC} > ${TGT}' 19 20 def post_run(self): 21 ret = Task.Task.post_run(self) 22 libname = self.generator.lib 23 re_libpath = re.compile('lib%s.*\s+=>\s+(\S+%s\S+)\s+' % (libname, libname), re.M) 24 m = re_libpath.search(self.outputs[0].read()) 25 if m: 26 self.generator.tmp.append(m.group(1)) 27 else: 28 return ret or 1 29 return ret 30 31 @TaskGen.feature('ldd_check') 32 @TaskGen.after_method('apply_link') 33 def do_ldd_check(self): 34 self.create_task('ldd_run', self.link_task.outputs[0], self.path.find_or_declare('ldd.out')) 35 36 @Configure.conf 37 def where_is_shlib(self, lib): 38 tmp = [] 39 def check_msg(self): 40 return tmp[0] 41 42 self.check( 43 fragment = 'int main() { return 0; }\n', 44 features = 'c cprogram ldd_check', 45 lib = lib, 46 linkflags = '-Wl,--no-as-needed', 47 msg = 'Where is library %r' % lib, 48 define = 'LIBFROM', 49 tmp = tmp, 50 okmsg = check_msg) 51 52 return tmp[0] 53