docs: fix a typo in history file
[bbaumbach/samba-autobuild/.git] / third_party / waf / waflib / extras / midl.py
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