waf

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

midl.py (1699B)


      1 #!/usr/bin/env python
      2 # Issue 1185 ultrix gmail com
      3 
      4 """
      5 Microsoft Interface Definition Language support.  Given ComObject.idl, this tool
      6 will generate ComObject.tlb ComObject_i.h ComObject_i.c ComObject_p.c and dlldata.c
      7 
      8 To declare targets using midl::
      9 
     10 	def configure(conf):
     11 		conf.load('msvc')
     12 		conf.load('midl')
     13 
     14 	def build(bld):
     15 		bld(
     16 			features='c cshlib',
     17 			# Note: ComObject_i.c is generated from ComObject.idl
     18 			source = 'main.c ComObject.idl ComObject_i.c',
     19 			target = 'ComObject.dll')
     20 """
     21 
     22 from waflib import Task, Utils
     23 from waflib.TaskGen import feature, before_method
     24 import os
     25 
     26 def configure(conf):
     27 	conf.find_program(['midl'], var='MIDL')
     28 
     29 	conf.env.MIDLFLAGS = [
     30 		'/nologo',
     31 		'/D',
     32 		'_DEBUG',
     33 		'/W1',
     34 		'/char',
     35 		'signed',
     36 		'/Oicf',
     37 	]
     38 
     39 @feature('c', 'cxx')
     40 @before_method('process_source')
     41 def idl_file(self):
     42 	# Do this before process_source so that the generated header can be resolved
     43 	# when scanning source dependencies.
     44 	idl_nodes = []
     45 	src_nodes = []
     46 	for node in Utils.to_list(self.source):
     47 		if str(node).endswith('.idl'):
     48 			idl_nodes.append(node)
     49 		else:
     50 			src_nodes.append(node)
     51 
     52 	for node in self.to_nodes(idl_nodes):
     53 		t = node.change_ext('.tlb')
     54 		h = node.change_ext('_i.h')
     55 		c = node.change_ext('_i.c')
     56 		p = node.change_ext('_p.c')
     57 		d = node.parent.find_or_declare('dlldata.c')
     58 		self.create_task('midl', node, [t, h, c, p, d])
     59 
     60 	self.source = src_nodes
     61 
     62 class midl(Task.Task):
     63 	"""
     64 	Compile idl files
     65 	"""
     66 	color   = 'YELLOW'
     67 	run_str = '${MIDL} ${MIDLFLAGS} ${CPPPATH_ST:INCLUDES} /tlb ${TGT[0].bldpath()} /header ${TGT[1].bldpath()} /iid ${TGT[2].bldpath()} /proxy ${TGT[3].bldpath()} /dlldata ${TGT[4].bldpath()} ${SRC}'
     68 	before  = ['winrc']
     69