waf

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

boo.py (2280B)


      1 #! /usr/bin/env python
      2 # encoding: utf-8
      3 # Yannick LM 2011
      4 
      5 """
      6 Support for the boo programming language, for example::
      7 
      8 	bld(features = "boo",       # necessary feature
      9 		source   = "src.boo",   # list of boo files
     10 		gen      = "world.dll", # target
     11 		type     = "library",   # library/exe ("-target:xyz" flag)
     12 		name     = "world"      # necessary if the target is referenced by 'use'
     13 	)
     14 """
     15 
     16 from waflib import Task
     17 from waflib.Configure import conf
     18 from waflib.TaskGen import feature, after_method, before_method, extension
     19 
     20 @extension('.boo')
     21 def boo_hook(self, node):
     22 	# Nothing here yet ...
     23 	# TODO filter the non-boo source files in 'apply_booc' and remove this method
     24 	pass
     25 
     26 @feature('boo')
     27 @before_method('process_source')
     28 def apply_booc(self):
     29 	"""Create a booc task """
     30 	src_nodes = self.to_nodes(self.source)
     31 	out_node = self.path.find_or_declare(self.gen)
     32 
     33 	self.boo_task = self.create_task('booc', src_nodes, [out_node])
     34 
     35 	# Set variables used by the 'booc' task
     36 	self.boo_task.env.OUT = '-o:%s' % out_node.abspath()
     37 
     38 	# type is "exe" by default
     39 	type = getattr(self, "type", "exe")
     40 	self.boo_task.env.BOO_TARGET_TYPE = "-target:%s" % type
     41 
     42 @feature('boo')
     43 @after_method('apply_boo')
     44 def use_boo(self):
     45 	""""
     46 	boo applications honor the **use** keyword::
     47 	"""
     48 	dep_names = self.to_list(getattr(self, 'use', []))
     49 	for dep_name in dep_names:
     50 		dep_task_gen = self.bld.get_tgen_by_name(dep_name)
     51 		if not dep_task_gen:
     52 			continue
     53 		dep_task_gen.post()
     54 		dep_task = getattr(dep_task_gen, 'boo_task', None)
     55 		if not dep_task:
     56 			# Try a cs task:
     57 			dep_task = getattr(dep_task_gen, 'cs_task', None)
     58 			if not dep_task:
     59 				# Try a link task:
     60 				dep_task = getattr(dep_task, 'link_task', None)
     61 				if not dep_task:
     62 					# Abort ...
     63 					continue
     64 		self.boo_task.set_run_after(dep_task) # order
     65 		self.boo_task.dep_nodes.extend(dep_task.outputs) # dependency
     66 		self.boo_task.env.append_value('BOO_FLAGS', '-reference:%s' % dep_task.outputs[0].abspath())
     67 
     68 class booc(Task.Task):
     69 	"""Compiles .boo files """
     70 	color   = 'YELLOW'
     71 	run_str = '${BOOC} ${BOO_FLAGS} ${BOO_TARGET_TYPE} ${OUT} ${SRC}'
     72 
     73 @conf
     74 def check_booc(self):
     75 	self.find_program('booc', 'BOOC')
     76 	self.env.BOO_FLAGS = ['-nologo']
     77 
     78 def configure(self):
     79 	"""Check that booc is available """
     80 	self.check_booc()
     81