waf

FORK: waf with some random patches
git clone https://git.neptards.moe/neptards/waf.git
Log | Files | Refs | README

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