waf

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

dbus.py (2062B)


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