third_party:waf: update to upstream 2.0.4 release
[bbaumbach/samba.git] / third_party / waf / waflib / Tools / dbus.py
1 #! /usr/bin/env python
2 # encoding: utf-8
3 # WARNING! Do not edit! https://waf.io/book/index.html#_obtaining_the_waf_file
4
5 #!/usr/bin/env python
6 # encoding: utf-8
7 # Ali Sabil, 2007
8
9 """
10 Compiles dbus files with **dbus-binding-tool**
11
12 Typical usage::
13
14         def options(opt):
15                 opt.load('compiler_c dbus')
16         def configure(conf):
17                 conf.load('compiler_c dbus')
18         def build(bld):
19                 tg = bld.program(
20                         includes = '.',
21                         source = bld.path.ant_glob('*.c'),
22                         target = 'gnome-hello')
23                 tg.add_dbus_file('test.xml', 'test_prefix', 'glib-server')
24 """
25
26 from waflib import Task, Errors
27 from waflib.TaskGen import taskgen_method, before_method
28
29 @taskgen_method
30 def add_dbus_file(self, filename, prefix, mode):
31         """
32         Adds a dbus file to the list of dbus files to process. Store them in the attribute *dbus_lst*.
33
34         :param filename: xml file to compile
35         :type filename: string
36         :param prefix: dbus binding tool prefix (--prefix=prefix)
37         :type prefix: string
38         :param mode: dbus binding tool mode (--mode=mode)
39         :type mode: string
40         """
41         if not hasattr(self, 'dbus_lst'):
42                 self.dbus_lst = []
43         if not 'process_dbus' in self.meths:
44                 self.meths.append('process_dbus')
45         self.dbus_lst.append([filename, prefix, mode])
46
47 @before_method('apply_core')
48 def process_dbus(self):
49         """
50         Processes the dbus files stored in the attribute *dbus_lst* to create :py:class:`waflib.Tools.dbus.dbus_binding_tool` instances.
51         """
52         for filename, prefix, mode in getattr(self, 'dbus_lst', []):
53                 node = self.path.find_resource(filename)
54                 if not node:
55                         raise Errors.WafError('file not found ' + filename)
56                 tsk = self.create_task('dbus_binding_tool', node, node.change_ext('.h'))
57                 tsk.env.DBUS_BINDING_TOOL_PREFIX = prefix
58                 tsk.env.DBUS_BINDING_TOOL_MODE   = mode
59
60 class dbus_binding_tool(Task.Task):
61         """
62         Compiles a dbus file
63         """
64         color   = 'BLUE'
65         ext_out = ['.h']
66         run_str = '${DBUS_BINDING_TOOL} --prefix=${DBUS_BINDING_TOOL_PREFIX} --mode=${DBUS_BINDING_TOOL_MODE} --output=${TGT} ${SRC}'
67         shell   = True # temporary workaround for #795
68
69 def configure(conf):
70         """
71         Detects the program dbus-binding-tool and sets ``conf.env.DBUS_BINDING_TOOL``
72         """
73         conf.find_program('dbus-binding-tool', var='DBUS_BINDING_TOOL')
74