mirror of
https://gitlab.com/ita1024/waf.git
synced 2024-11-23 02:16:01 +01:00
Issue 1185
This commit is contained in:
parent
a3a8eea2cb
commit
a93a2c552f
84
waflib/extras/midl.py
Normal file
84
waflib/extras/midl.py
Normal file
@ -0,0 +1,84 @@
|
||||
#!/usr/bin/env python
|
||||
# Issue 1185 ultrix gmail com
|
||||
|
||||
"""
|
||||
Microsoft Interface Definition Language support. Given ComObject.idl, this tool
|
||||
will generate ComObject.tlb ComObject_i.h ComObject_i.c ComObject_p.c and dlldata.c
|
||||
|
||||
To declare targets using midl::
|
||||
|
||||
def configure(conf):
|
||||
conf.load('msvc')
|
||||
conf.load('midl')
|
||||
|
||||
def build(bld):
|
||||
bld(
|
||||
features='c cshlib',
|
||||
# Note: ComObject_i.c is generated from ComObject.idl
|
||||
source = 'main.c ComObject.idl ComObject_i.c',
|
||||
target = 'ComObject.dll')
|
||||
"""
|
||||
|
||||
from waflib import Task, Utils
|
||||
from waflib.TaskGen import feature, before_method
|
||||
import os
|
||||
|
||||
def configure(conf):
|
||||
conf.find_program(['midl'], var='MIDL')
|
||||
|
||||
conf.env.MIDLFLAGS = [
|
||||
'/nologo',
|
||||
'/D',
|
||||
'_DEBUG',
|
||||
'/W1',
|
||||
'/char',
|
||||
'signed',
|
||||
'/Oicf',
|
||||
]
|
||||
|
||||
@feature('c', 'cxx')
|
||||
@before_method('process_source')
|
||||
def idl_file(self):
|
||||
# Do this before process_source so that the generated header can be resolved
|
||||
# when scanning source dependencies.
|
||||
idl_nodes = []
|
||||
src_nodes = []
|
||||
for node in Utils.to_list(self.source):
|
||||
if str(node).endswith('.idl'):
|
||||
idl_nodes.append(node)
|
||||
else:
|
||||
src_nodes.append(node)
|
||||
|
||||
for node in self.to_nodes(idl_nodes):
|
||||
t = node.change_ext('.tlb')
|
||||
h = node.change_ext('_i.h')
|
||||
c = node.change_ext('_i.c')
|
||||
p = node.change_ext('_p.c')
|
||||
d = node.parent.find_or_declare('dlldata.c')
|
||||
tsk = self.create_task('midl', node, [t, h, c, p, d])
|
||||
|
||||
self.source = src_nodes
|
||||
|
||||
class midl(Task.Task):
|
||||
"""
|
||||
Compile idl files
|
||||
"""
|
||||
color = 'YELLOW'
|
||||
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}'
|
||||
|
||||
def exec_command(self, *k, **kw):
|
||||
if self.env['PATH']:
|
||||
env = self.env.env or dict(os.environ)
|
||||
env.update(PATH = ';'.join(self.env['PATH']))
|
||||
kw['env'] = env
|
||||
|
||||
bld = self.generator.bld
|
||||
|
||||
try:
|
||||
if not kw.get('cwd', None):
|
||||
kw['cwd'] = bld.cwd
|
||||
except AttributeError:
|
||||
bld.cwd = kw['cwd'] = bld.variant_dir
|
||||
|
||||
return bld.exec_command(k[0], **kw)
|
||||
|
Loading…
Reference in New Issue
Block a user