3 # WARNING! Do not edit! https://waf.io/book/index.html#_obtaining_the_waf_file
10 Support for the boo programming language, for example::
12 bld(features = "boo", # necessary feature
13 source = "src.boo", # list of boo files
14 gen = "world.dll", # target
15 type = "library", # library/exe ("-target:xyz" flag)
16 name = "world" # necessary if the target is referenced by 'use'
20 from waflib import Task
21 from waflib.Configure import conf
22 from waflib.TaskGen import feature, after_method, before_method, extension
25 def boo_hook(self, node):
26 # Nothing here yet ...
27 # TODO filter the non-boo source files in 'apply_booc' and remove this method
31 @before_method('process_source')
33 """Create a booc task """
34 src_nodes = self.to_nodes(self.source)
35 out_node = self.path.find_or_declare(self.gen)
37 self.boo_task = self.create_task('booc', src_nodes, [out_node])
39 # Set variables used by the 'booc' task
40 self.boo_task.env.OUT = '-o:%s' % out_node.abspath()
42 # type is "exe" by default
43 type = getattr(self, "type", "exe")
44 self.boo_task.env.BOO_TARGET_TYPE = "-target:%s" % type
47 @after_method('apply_boo')
50 boo applications honor the **use** keyword::
52 dep_names = self.to_list(getattr(self, 'use', []))
53 for dep_name in dep_names:
54 dep_task_gen = self.bld.get_tgen_by_name(dep_name)
58 dep_task = getattr(dep_task_gen, 'boo_task', None)
61 dep_task = getattr(dep_task_gen, 'cs_task', None)
64 dep_task = getattr(dep_task, 'link_task', None)
68 self.boo_task.set_run_after(dep_task) # order
69 self.boo_task.dep_nodes.extend(dep_task.outputs) # dependency
70 self.boo_task.env.append_value('BOO_FLAGS', '-reference:%s' % dep_task.outputs[0].abspath())
72 class booc(Task.Task):
73 """Compiles .boo files """
75 run_str = '${BOOC} ${BOO_FLAGS} ${BOO_TARGET_TYPE} ${OUT} ${SRC}'
79 self.find_program('booc', 'BOOC')
80 self.env.BOO_FLAGS = ['-nologo']
83 """Check that booc is available """