waf

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

sas.py (1946B)


      1 #!/usr/bin/env python
      2 # encoding: utf-8
      3 # Mark Coggeshall, 2010
      4 
      5 "SAS support"
      6 
      7 import os
      8 from waflib import Task, Errors, Logs
      9 from waflib.TaskGen import feature, before_method
     10 
     11 sas_fun, _ = Task.compile_fun('sas -sysin ${SRCFILE} -log ${LOGFILE} -print ${LSTFILE}', shell=False)
     12 
     13 class sas(Task.Task):
     14 	vars = ['SAS', 'SASFLAGS']
     15 	def run(task):
     16 		command = 'SAS'
     17 		fun = sas_fun
     18 
     19 		node = task.inputs[0]
     20 		logfilenode = node.change_ext('.log')
     21 		lstfilenode = node.change_ext('.lst')
     22 
     23 		# set the cwd
     24 		task.cwd = task.inputs[0].parent.get_src().abspath()
     25 		Logs.debug('runner: %r on %r', command, node)
     26 
     27 		SASINPUTS = node.parent.get_bld().abspath() + os.pathsep + node.parent.get_src().abspath() + os.pathsep
     28 		task.env.env = {'SASINPUTS': SASINPUTS}
     29 
     30 		task.env.SRCFILE = node.abspath()
     31 		task.env.LOGFILE = logfilenode.abspath()
     32 		task.env.LSTFILE = lstfilenode.abspath()
     33 		ret = fun(task)
     34 		if ret:
     35 			Logs.error('Running %s on %r returned a non-zero exit', command, node)
     36 			Logs.error('SRCFILE = %r', node)
     37 			Logs.error('LOGFILE = %r', logfilenode)
     38 			Logs.error('LSTFILE = %r', lstfilenode)
     39 		return ret
     40 
     41 @feature('sas')
     42 @before_method('process_source')
     43 def apply_sas(self):
     44 	if not getattr(self, 'type', None) in ('sas',):
     45 		self.type = 'sas'
     46 
     47 	self.env['logdir'] = getattr(self, 'logdir', 'log')
     48 	self.env['lstdir'] = getattr(self, 'lstdir', 'lst')
     49 
     50 	deps_lst = []
     51 
     52 	if getattr(self, 'deps', None):
     53 		deps = self.to_list(self.deps)
     54 		for filename in deps:
     55 			n = self.path.find_resource(filename)
     56 			if not n:
     57 				n = self.bld.root.find_resource(filename)
     58 			if not n:
     59 				raise Errors.WafError('cannot find input file %s for processing' % filename)
     60 			if not n in deps_lst:
     61 				deps_lst.append(n)
     62 
     63 	for node in self.to_nodes(self.source):
     64 		if self.type == 'sas':
     65 			task = self.create_task('sas', src=node)
     66 		task.dep_nodes = deps_lst
     67 	self.source = []
     68 
     69 def configure(self):
     70 	self.find_program('sas', var='SAS', mandatory=False)
     71