You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
			
		
		
		
		
			
		
			
				
	
	
		
			55 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
| #! /usr/bin/env waf
 | |
| 
 | |
| top = '.'
 | |
| out = 'tmp_out'
 | |
| 
 | |
| import os, random, time
 | |
| from waflib import ConfigSet, Context, Build, Configure, Utils
 | |
| 
 | |
| Configure.autoconfig='clobber'
 | |
| 
 | |
| def options(opt):
 | |
| 	opt.add_option('--based', action='store', default='foo', help='base directory', dest='based')
 | |
| 	opt.add_option('--dumpf', action='store', default='foo', help='dump config to this file', dest='dumpf')
 | |
| 	opt.add_option('--force-autoconfig', action='store', default=False, dest='force_autoconfig')
 | |
| 
 | |
| def configure(ctx):
 | |
| 	# force autoconfig to depend on an always-changing file - once
 | |
| 	if ctx.options.force_autoconfig:
 | |
| 		fname = ctx.options.dumpf + '_autoconfig'
 | |
| 		s = "%f%d" % (time.time(), random.randint(0, 10**9))
 | |
| 		Utils.writef(fname, s)
 | |
| 		ctx.files.append(fname)
 | |
| 		Configure.autoconfig = False
 | |
| 
 | |
| def build(ctx):
 | |
| 	pass
 | |
| 
 | |
| def write_conf(ctx):
 | |
| 	if not ctx.options.dumpf:
 | |
| 		raise ValueError('Missing --dumpf option')
 | |
| 	if not ctx.options.based:
 | |
| 		raise ValueError('Missing --based option')
 | |
| 
 | |
| 	def g(x):
 | |
| 		# path from conf.options.based
 | |
| 		based = ctx.root.find_node(ctx.options.based)
 | |
| 		node = ctx.root.find_node(x)
 | |
| 		return node.path_from(based)
 | |
| 
 | |
| 	env = ConfigSet.ConfigSet()
 | |
| 	env.cwd_dir = g(os.getcwd())
 | |
| 	env.top_dir = g(Context.top_dir)
 | |
| 	env.out_dir = g(Context.out_dir)
 | |
| 	env.run_dir = g(Context.run_dir)
 | |
| 	env.launch_dir = g(Context.launch_dir)
 | |
| 
 | |
| 	env.store(ctx.options.dumpf)
 | |
| 
 | |
| for y in (Build.BuildContext, Configure.ConfigurationContext):
 | |
| 	class tmp(y):
 | |
| 		def execute(self, *k, **kw):
 | |
| 			super(self.__class__, self).execute(*k, **kw)
 | |
| 			write_conf(self)
 | |
| 
 |