midl.py (SCons-4.3.0) | : | midl.py (SCons-4.4.0) | ||
---|---|---|---|---|
"""SCons.Tool.midl | # MIT License | |||
Tool-specific initialization for midl (Microsoft IDL compiler). | ||||
There normally shouldn't be any need to import this module directly. | ||||
It will usually be imported through the generic SCons.Tool.Tool() | ||||
selection method. | ||||
""" | ||||
# | # | |||
# __COPYRIGHT__ | # Copyright The SCons Foundation | |||
# | # | |||
# Permission is hereby granted, free of charge, to any person obtaining | # Permission is hereby granted, free of charge, to any person obtaining | |||
# a copy of this software and associated documentation files (the | # a copy of this software and associated documentation files (the | |||
# "Software"), to deal in the Software without restriction, including | # "Software"), to deal in the Software without restriction, including | |||
# without limitation the rights to use, copy, modify, merge, publish, | # without limitation the rights to use, copy, modify, merge, publish, | |||
# distribute, sublicense, and/or sell copies of the Software, and to | # distribute, sublicense, and/or sell copies of the Software, and to | |||
# permit persons to whom the Software is furnished to do so, subject to | # permit persons to whom the Software is furnished to do so, subject to | |||
# the following conditions: | # the following conditions: | |||
# | # | |||
# The above copyright notice and this permission notice shall be included | # The above copyright notice and this permission notice shall be included | |||
# in all copies or substantial portions of the Software. | # in all copies or substantial portions of the Software. | |||
# | # | |||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY | |||
# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE | # KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE | |||
# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | # WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | |||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE | # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE | |||
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION | # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION | |||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | |||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |||
# | ||||
__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" | """SCons.Tool.midl | |||
Tool-specific initialization for midl (Microsoft IDL compiler). | ||||
There normally shouldn't be any need to import this module directly. | ||||
It will usually be imported through the generic SCons.Tool.Tool() | ||||
selection method. | ||||
""" | ||||
import SCons.Action | import SCons.Action | |||
import SCons.Builder | import SCons.Builder | |||
import SCons.Defaults | import SCons.Defaults | |||
import SCons.Scanner.IDL | import SCons.Scanner.IDL | |||
import SCons.Util | import SCons.Util | |||
from .MSCommon import msvc_exists | from .MSCommon import msvc_setup_env_tool | |||
tool_name = 'midl' | ||||
def midl_emitter(target, source, env): | def midl_emitter(target, source, env): | |||
"""Produces a list of outputs from the MIDL compiler""" | """Produces a list of outputs from the MIDL compiler""" | |||
base, _ = SCons.Util.splitext(str(target[0])) | base, _ = SCons.Util.splitext(str(target[0])) | |||
tlb = target[0] | tlb = target[0] | |||
incl = base + '.h' | incl = base + '.h' | |||
interface = base + '_i.c' | interface = base + '_i.c' | |||
targets = [tlb, incl, interface] | targets = [tlb, incl, interface] | |||
midlcom = env['MIDLCOM'] | midlcom = env['MIDLCOM'] | |||
if midlcom.find('/proxy') != -1: | if midlcom.find('/proxy') != -1: | |||
proxy = base + '_p.c' | proxy = base + '_p.c' | |||
targets.append(proxy) | targets.append(proxy) | |||
if midlcom.find('/dlldata') != -1: | if midlcom.find('/dlldata') != -1: | |||
dlldata = base + '_data.c' | dlldata = base + '_data.c' | |||
targets.append(dlldata) | targets.append(dlldata) | |||
return (targets, source) | return targets, source | |||
idl_scanner = SCons.Scanner.IDL.IDLScan() | idl_scanner = SCons.Scanner.IDL.IDLScan() | |||
midl_action = SCons.Action.Action('$MIDLCOM', '$MIDLCOMSTR') | midl_action = SCons.Action.Action('$MIDLCOM', '$MIDLCOMSTR') | |||
midl_builder = SCons.Builder.Builder(action = midl_action, | midl_builder = SCons.Builder.Builder(action=midl_action, | |||
src_suffix = '.idl', | src_suffix='.idl', | |||
suffix='.tlb', | suffix='.tlb', | |||
emitter = midl_emitter, | emitter=midl_emitter, | |||
source_scanner = idl_scanner) | source_scanner=idl_scanner) | |||
def generate(env): | def generate(env): | |||
"""Add Builders and construction variables for midl to an Environment.""" | """Add Builders and construction variables for midl to an Environment.""" | |||
env['MIDL'] = 'MIDL.EXE' | env['MIDL'] = 'MIDL.EXE' | |||
env['MIDLFLAGS'] = SCons.Util.CLVar('/nologo') | env['MIDLFLAGS'] = SCons.Util.CLVar('/nologo') | |||
env['MIDLCOM'] = '$MIDL $MIDLFLAGS /tlb ${TARGETS[0]} /h ${TARGETS[1]} | env['MIDLCOM'] = '$MIDL $MIDLFLAGS /tlb ${TARGETS[0]} /h ${TARGETS[1]} /iid | |||
/iid ${TARGETS[2]} /proxy ${TARGETS[3]} /dlldata ${TARGETS[4]} $SOURCE 2> NUL' | ${TARGETS[2]} /proxy ${TARGETS[3]} /dlldata ${TARGETS[4]} $SOURCE 2> NUL' | |||
env['BUILDERS']['TypeLibrary'] = midl_builder | env['BUILDERS']['TypeLibrary'] = midl_builder | |||
def exists(env): | def exists(env): | |||
return msvc_exists(env) | return msvc_setup_env_tool(env, tool=tool_name) | |||
# Local Variables: | # Local Variables: | |||
# tab-width:4 | # tab-width:4 | |||
# indent-tabs-mode:nil | # indent-tabs-mode:nil | |||
# End: | # End: | |||
# vim: set expandtab tabstop=4 shiftwidth=4: | # vim: set expandtab tabstop=4 shiftwidth=4: | |||
End of changes. 10 change blocks. | ||||
24 lines changed or deleted | 24 lines changed or added |