wscript (5382B)
1 #! /usr/bin/env python 2 3 top = '.' 4 out = 'build' 5 6 import os, shutil, sys 7 from waflib import ConfigSet, Context, Logs 8 9 def options(opt): 10 pass 11 12 def configure(conf): 13 pass 14 15 16 def run_command(ctx, *k, **kw): 17 with open('/dev/null', 'w') as f: 18 kw['stdout'] = f 19 ret = ctx.exec_command(*k, **kw) 20 if ret: 21 ctx.fatal('Command failed ret:%r - %r %r' % (ret, k, kw)) 22 return ret 23 24 def cleanup(ctx): 25 for y in ('side_cwd', 'up_cwd'): 26 lst = ctx.path.find_node(y).ant_glob(['**/.lock-waf*']) 27 for k in lst: 28 k.delete() 29 30 for k in ctx.path.ant_glob('**/tmp_out', dir=True): 31 shutil.rmtree(k.abspath()) 32 33 def build(bld): 34 failures = [] 35 up_cwd = bld.path.find_node('up_cwd').abspath() 36 side_cwd = bld.path.find_node('side_cwd').abspath() 37 proj_cwd = bld.path.find_node('up_cwd/project').abspath() 38 proj_sub_cwd = bld.path.find_node('up_cwd/project/sub').abspath() 39 proj_out_cwd = bld.path.make_node('up_cwd/project/tmp_out').abspath() 40 wscript = bld.path.find_node('up_cwd/project/wscript').abspath() 41 42 d_node = bld.path.make_node('path_to_record') 43 dumpf_default = d_node.abspath() 44 45 def make_cmd(cmd, based=proj_cwd, dumpf=dumpf_default): 46 return list(cmd) + ['--based=%s' % based, '--dumpf=%s' % dumpf] 47 48 def test_cmd(cmd, cwd, test_name, cwd_dir='.', top_dir='.', out_dir='tmp_out', run_dir='.', launch_dir='.'): 49 cmd = make_cmd(cmd) 50 try: 51 run_command(bld, cmd, cwd=cwd) 52 v = ConfigSet.ConfigSet(dumpf_default) 53 finally: 54 for k in bld.path.ant_glob('**/path_to_record'): 55 k.delete() 56 57 err = [] 58 def check_err(got, expected, var_name): 59 if got != expected: 60 Logs.pprint('RED', '- %s: %s -> got:%r expected:%r' % (test_name, var_name, got, expected)) 61 err.append(var_name) 62 63 check_err(v.cwd_dir, cwd_dir, 'cwd') 64 check_err(v.top_dir, top_dir, 'top') 65 check_err(v.run_dir, run_dir, 'run') 66 check_err(v.out_dir, out_dir, 'out') 67 check_err(v.launch_dir, launch_dir, 'launch') 68 if err: 69 failures.append(test_name) 70 else: 71 Logs.pprint('GREEN', '- %s: ok' % test_name) 72 73 exe = os.path.abspath(os.path.join(Context.launch_dir, sys.argv[0])) 74 75 cleanup(bld) 76 77 test_cmd([exe, 'configure'], proj_cwd, 'regular configure') 78 test_cmd([exe], proj_cwd, ' regular build from top') 79 test_cmd([exe], proj_out_cwd, ' regular build from out', launch_dir='tmp_out') 80 test_cmd([exe], proj_sub_cwd, ' regular build from subfolder', launch_dir='sub') 81 cleanup(bld) 82 83 test_cmd([exe, 'configure', '--top=%s' % proj_cwd, '--out=%s' % proj_out_cwd], proj_cwd, 'configure with top/out from proj cwd') 84 test_cmd([exe], proj_cwd, ' next build from top') 85 test_cmd([exe], proj_out_cwd, ' next build from out', launch_dir='tmp_out') 86 test_cmd([exe], proj_sub_cwd, ' next build from subfolder', launch_dir='sub') 87 test_cmd([exe, '--top=%s' % proj_cwd, '--out=foobar'], proj_cwd, 88 ' next build from top, verify out_dir==lock_file.out_dir') 89 test_cmd([exe, '--top=%s' % proj_cwd, '--out=foobar'], proj_sub_cwd, 90 ' next build from subfolder, verify out_dir==lock_file.out_dir', launch_dir='sub') 91 cleanup(bld) 92 93 test_cmd([exe, 'configure', '--top=%s' % proj_cwd, '--out=%s' % proj_out_cwd], up_cwd, 'configure with top/out from up cwd', 94 launch_dir='..') 95 test_cmd([exe], proj_cwd, ' next build from top') 96 test_cmd([exe], proj_out_cwd, ' next build from out', launch_dir='tmp_out') 97 test_cmd([exe], proj_sub_cwd, ' next build from subfolder', launch_dir='sub') 98 cleanup(bld) 99 100 test_cmd([wscript, 'configure'], proj_cwd, 'wscript configure') 101 test_cmd([wscript], proj_cwd, ' next build from top') 102 test_cmd([wscript], proj_out_cwd, ' next build from out', launch_dir='tmp_out') 103 test_cmd([wscript], proj_sub_cwd, ' next build from subfolder', launch_dir='sub') 104 cleanup(bld) 105 106 test_cmd([wscript, 'configure', '--top=%s' % proj_cwd, '--out=%s' % proj_out_cwd], proj_cwd, 'wscript configure with top/out from proj cwd') 107 test_cmd([wscript], proj_cwd, ' next build from top') 108 test_cmd([wscript], proj_out_cwd, ' next build from out', launch_dir='tmp_out') 109 test_cmd([wscript], proj_sub_cwd, ' next build from subfolder', launch_dir='sub') 110 cleanup(bld) 111 112 test_cmd([wscript, 'configure', '--top=%s' % proj_cwd, '--out=%s' % proj_out_cwd], up_cwd, 'wscript configure with top/out from up cwd', 113 launch_dir='..') 114 test_cmd([wscript], proj_cwd, ' next build from top') 115 test_cmd([wscript], proj_out_cwd, ' next build from out', launch_dir='tmp_out') 116 test_cmd([wscript], proj_sub_cwd, ' next build from subfolder', launch_dir='sub') 117 cleanup(bld) 118 119 test_cmd([exe, '--top=%s' % proj_cwd], proj_cwd, 'autoconfig') 120 cleanup(bld) 121 122 test_cmd([wscript, 'configure', '--top=project', '--out=project/tmp_out'], up_cwd, 'wscript configure with relative top/out from up cwd', 123 launch_dir='..') 124 test_cmd([wscript], proj_cwd, ' next build from top') 125 test_cmd([wscript], proj_out_cwd, ' next build from out', launch_dir='tmp_out') 126 test_cmd([wscript], proj_sub_cwd, ' next build from subfolder', launch_dir='sub') 127 cleanup(bld) 128 129 test_cmd([exe, '--force-autoconfig', '--top=project'], up_cwd, 'autoconfig from up 1', launch_dir='..') 130 os.remove(dumpf_default + '_autoconfig') 131 test_cmd([exe, '--force-autoconfig', '--top=project'], up_cwd, 'autoconfig from up 2', launch_dir='..') 132 os.remove(dumpf_default + '_autoconfig') 133 test_cmd([exe, '--force-autoconfig', '--out=badout'], proj_cwd, 'autoconfig with clobber') 134 cleanup(bld) 135 136 if failures: 137 bld.fatal('there were errors') 138