Index: pylib/gyp/msvs_emulation.py |
diff --git a/pylib/gyp/msvs_emulation.py b/pylib/gyp/msvs_emulation.py |
index 2d51f28bf3b4c7d8b2f411d3c646b09be138af05..814098a93d3203eda3a4d1be040777d99344a297 100644 |
--- a/pylib/gyp/msvs_emulation.py |
+++ b/pylib/gyp/msvs_emulation.py |
@@ -130,6 +130,8 @@ class MsvsSettings(object): |
'$(VSInstallDir)': self.vs_version.Path(), |
'$(VCInstallDir)': os.path.join(self.vs_version.Path(), 'VC'), |
'$(OutDir)\\': '', |
+ '$(IntDir)': '$!INTERMEDIATE_DIR', |
+ '$(InputName)': '${root}', |
} |
dxsdk_dir = os.environ.get('DXSDK_DIR') |
if dxsdk_dir: |
@@ -158,9 +160,9 @@ class MsvsSettings(object): |
self.field = field |
self.base_path = [base_path] |
self.append = append |
- def __call__(self, name, map=None, prefix=''): |
+ def __call__(self, name, map=None, prefix='', default=None): |
return self.parent._GetAndMunge(self.field, self.base_path + [name], |
- default=None, prefix=prefix, append=self.append, map=map) |
+ default=default, prefix=prefix, append=self.append, map=map) |
def _Setting(self, path, config, |
default=None, prefix='', append=None, map=None): |
@@ -326,6 +328,38 @@ class MsvsSettings(object): |
return int(rule.get('msvs_cygwin_shell', |
self.spec.get('msvs_cygwin_shell', 1))) != 0 |
+ def HasExplicitIdlRules(self, spec): |
+ """Determine if there's an explicit rule for idl files. When there isn't we |
+ need to generate implicit rules to build MIDL .idl files.""" |
+ for rule in spec.get('rules', []): |
+ if rule['extension'] == 'idl' and int(rule.get('msvs_external_rule', 0)): |
+ return True |
+ return False |
+ |
+ def GetIdlBuildData(self, source, config): |
+ """Determine the implicit outputs for an idl file. Returns output |
+ directory, outputs, and variables and flags that are required.""" |
+ midl_get = self._GetWrapper(self, self.msvs_settings[config], 'VCMIDLTool') |
+ def midl(name, default=None): |
+ return self.ConvertVSMacros(midl_get(name, default=default)) |
+ tlb = midl('TypeLibraryName', default='${root}.tlb') |
+ header = midl('HeaderFileName', default='${root}.h') |
+ dlldata = midl('DLLDataFileName', default='dlldata.c') |
+ iid = midl('InterfaceIdentifierFileName', default='${root}_i.c') |
+ proxy = midl('ProxyFileName', default='${root}_p.c') |
+ # Note that .tlb is not included in the outputs as it is not always |
+ # generated depending on the content of the input idl file. |
+ outdir = midl('OutputDirectory') |
+ output = [header, dlldata, iid, proxy] |
+ variables = [('tlb', tlb), |
+ ('h', header), |
+ ('dlldata', dlldata), |
+ ('iid', iid), |
+ ('proxy', proxy)] |
+ # TODO(scottmg): Non-default configuration maybe? |
+ flags = ['/char', 'signed', '/env', 'win32', '/Oicf'] |
+ return outdir, output, variables, flags |
+ |
vs_version = None |
def GetVSVersion(generator_flags): |
global vs_version |