diff options
author | sbaig1@bloomberg.net <sbaig1@bloomberg.net> | 2014-09-25 19:00:01 +0000 |
---|---|---|
committer | sbaig1@bloomberg.net <sbaig1@bloomberg.net> | 2014-09-25 19:00:01 +0000 |
commit | 05c509393b3fcf42ee8f10ca7da7842df0434ca7 (patch) | |
tree | f04b75b1374dbe0691e612782ae848a5af3535d8 | |
parent | f79c483443249fec12a981babdbcce24f23d20c3 (diff) | |
download | gyp-05c509393b3fcf42ee8f10ca7da7842df0434ca7.tar.gz |
Add support for MIDL include directories
This adds support for 'midl_include_dirs', which is handled like 'include_dirs'
and 'resource_include_dirs', except this is for the MIDL tool.
One notable difference is that, unlike 'resource_include_dirs', the
'midl_include_dirs' property doesn't default to 'include_dirs'. This is to
prevent any change in behavior for any existing gyp files that don't set
'midl_include_dirs'. Also, MIDL include directories are quite a different
concept to C/C++ include directories.
BUG=
R=scottmg@chromium.org
Review URL: https://codereview.chromium.org/602073003
git-svn-id: http://gyp.googlecode.com/svn/trunk@1986 78cadc50-ecff-11dd-a971-7dbc132099af
-rw-r--r-- | pylib/gyp/generator/msvs.py | 16 | ||||
-rw-r--r-- | pylib/gyp/generator/ninja.py | 10 | ||||
-rw-r--r-- | pylib/gyp/msvs_emulation.py | 9 | ||||
-rw-r--r-- | test/win/gyptest-midl-includedirs.py | 21 | ||||
-rw-r--r-- | test/win/idl-includedirs/hello.cc | 7 | ||||
-rw-r--r-- | test/win/idl-includedirs/idl-includedirs.gyp | 26 | ||||
-rw-r--r-- | test/win/idl-includedirs/subdir/bar.idl | 13 | ||||
-rw-r--r-- | test/win/idl-includedirs/subdir/foo.idl | 14 |
8 files changed, 112 insertions, 4 deletions
diff --git a/pylib/gyp/generator/msvs.py b/pylib/gyp/generator/msvs.py index 517ce3c6..f529d39a 100644 --- a/pylib/gyp/generator/msvs.py +++ b/pylib/gyp/generator/msvs.py @@ -1109,7 +1109,8 @@ def _AddConfigurationToMSVSProject(p, spec, config_type, config_name, config): for this configuration. """ # Get the information for this configuration - include_dirs, resource_include_dirs = _GetIncludeDirs(config) + include_dirs, midl_include_dirs, resource_include_dirs = \ + _GetIncludeDirs(config) libraries = _GetLibraries(spec) library_dirs = _GetLibraryDirs(config) out_file, vc_tool, _ = _GetOutputFilePathAndTool(spec, msbuild=False) @@ -1137,6 +1138,8 @@ def _AddConfigurationToMSVSProject(p, spec, config_type, config_name, config): # Add the information to the appropriate tool _ToolAppend(tools, 'VCCLCompilerTool', 'AdditionalIncludeDirectories', include_dirs) + _ToolAppend(tools, 'VCMIDLTool', + 'AdditionalIncludeDirectories', midl_include_dirs) _ToolAppend(tools, 'VCResourceCompilerTool', 'AdditionalIncludeDirectories', resource_include_dirs) # Add in libraries. @@ -1192,10 +1195,14 @@ def _GetIncludeDirs(config): include_dirs = ( config.get('include_dirs', []) + config.get('msvs_system_include_dirs', [])) + midl_include_dirs = ( + config.get('midl_include_dirs', []) + + config.get('msvs_system_include_dirs', [])) resource_include_dirs = config.get('resource_include_dirs', include_dirs) include_dirs = _FixPaths(include_dirs) + midl_include_dirs = _FixPaths(midl_include_dirs) resource_include_dirs = _FixPaths(resource_include_dirs) - return include_dirs, resource_include_dirs + return include_dirs, midl_include_dirs, resource_include_dirs def _GetLibraryDirs(config): @@ -2929,7 +2936,8 @@ def _FinalizeMSBuildSettings(spec, configuration): converted = True msvs_settings = configuration.get('msvs_settings', {}) msbuild_settings = MSVSSettings.ConvertToMSBuildSettings(msvs_settings) - include_dirs, resource_include_dirs = _GetIncludeDirs(configuration) + include_dirs, midl_include_dirs, resource_include_dirs = \ + _GetIncludeDirs(configuration) libraries = _GetLibraries(spec) library_dirs = _GetLibraryDirs(configuration) out_file, _, msbuild_tool = _GetOutputFilePathAndTool(spec, msbuild=True) @@ -2959,6 +2967,8 @@ def _FinalizeMSBuildSettings(spec, configuration): # if you don't have any resources. _ToolAppend(msbuild_settings, 'ClCompile', 'AdditionalIncludeDirectories', include_dirs) + _ToolAppend(msbuild_settings, 'Midl', + 'AdditionalIncludeDirectories', midl_include_dirs) _ToolAppend(msbuild_settings, 'ResourceCompile', 'AdditionalIncludeDirectories', resource_include_dirs) # Add in libraries, note that even for empty libraries, we want this diff --git a/pylib/gyp/generator/ninja.py b/pylib/gyp/generator/ninja.py index 4484f93a..7b7f8f23 100644 --- a/pylib/gyp/generator/ninja.py +++ b/pylib/gyp/generator/ninja.py @@ -884,6 +884,14 @@ class NinjaWriter: [QuoteShellArgument('-I' + self.GypPathToNinja(i, env), self.flavor) for i in include_dirs]) + if self.flavor == 'win': + midl_include_dirs = config.get('midl_include_dirs', []) + midl_include_dirs = self.msvs_settings.AdjustMidlIncludeDirs( + midl_include_dirs, config_name) + self.WriteVariableList(ninja_file, 'midl_includes', + [QuoteShellArgument('-I' + self.GypPathToNinja(i, env), self.flavor) + for i in midl_include_dirs]) + pch_commands = precompiled_header.GetPchBuildCommands(arch) if self.flavor == 'mac': # Most targets use no precompiled headers, so only write these if needed. @@ -1930,7 +1938,7 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params, description='IDL $in', command=('%s gyp-win-tool midl-wrapper $arch $outdir ' '$tlb $h $dlldata $iid $proxy $in ' - '$idlflags' % sys.executable)) + '$midl_includes $idlflags' % sys.executable)) master_ninja.rule( 'rc', description='RC $in', diff --git a/pylib/gyp/msvs_emulation.py b/pylib/gyp/msvs_emulation.py index 56e5ffbd..f0b814d3 100644 --- a/pylib/gyp/msvs_emulation.py +++ b/pylib/gyp/msvs_emulation.py @@ -318,6 +318,15 @@ class MsvsSettings(object): ('VCCLCompilerTool', 'AdditionalIncludeDirectories'), config, default=[])) return [self.ConvertVSMacros(p, config=config) for p in includes] + def AdjustMidlIncludeDirs(self, midl_include_dirs, config): + """Updates midl_include_dirs to expand VS specific paths, and adds the + system include dirs used for platform SDK and similar.""" + config = self._TargetConfig(config) + includes = midl_include_dirs + self.msvs_system_include_dirs[config] + includes.extend(self._Setting( + ('VCMIDLTool', 'AdditionalIncludeDirectories'), config, default=[])) + return [self.ConvertVSMacros(p, config=config) for p in includes] + def GetComputedDefines(self, config): """Returns the set of defines that are injected to the defines list based on other VS settings.""" diff --git a/test/win/gyptest-midl-includedirs.py b/test/win/gyptest-midl-includedirs.py new file mode 100644 index 00000000..05f63704 --- /dev/null +++ b/test/win/gyptest-midl-includedirs.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python + +# Copyright (c) 2014 Google Inc. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +""" +Verify that 'midl_include_dirs' is handled. +""" + +import TestGyp + +import sys + +if sys.platform == 'win32': + test = TestGyp.TestGyp(formats=['msvs', 'ninja']) + + CHDIR = 'idl-includedirs' + test.run_gyp('idl-includedirs.gyp', chdir=CHDIR) + test.build('idl-includedirs.gyp', test.ALL, chdir=CHDIR) + test.pass_test() diff --git a/test/win/idl-includedirs/hello.cc b/test/win/idl-includedirs/hello.cc new file mode 100644 index 00000000..9dc3c94f --- /dev/null +++ b/test/win/idl-includedirs/hello.cc @@ -0,0 +1,7 @@ +// Copyright (c) 2014 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +int main() { + return 0; +} diff --git a/test/win/idl-includedirs/idl-includedirs.gyp b/test/win/idl-includedirs/idl-includedirs.gyp new file mode 100644 index 00000000..fcec063a --- /dev/null +++ b/test/win/idl-includedirs/idl-includedirs.gyp @@ -0,0 +1,26 @@ +# Copyright (c) 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +{ + 'targets': [ + { + 'target_name': 'test_midl_include_dirs', + 'type': 'executable', + 'sources': [ + 'hello.cc', + 'subdir/foo.idl', + 'subdir/bar.idl', + ], + 'midl_include_dirs': [ + 'subdir', + ], + 'msvs_settings': { + 'VCMIDLTool': { + 'OutputDirectory': '<(INTERMEDIATE_DIR)', + 'DLLDataFileName': '$(InputName)_dlldata.h', + }, + }, + }, + ], +} diff --git a/test/win/idl-includedirs/subdir/bar.idl b/test/win/idl-includedirs/subdir/bar.idl new file mode 100644 index 00000000..d4e6cbb3 --- /dev/null +++ b/test/win/idl-includedirs/subdir/bar.idl @@ -0,0 +1,13 @@ +// Copyright (c) 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import "oaidl.idl"; + +[ + object, + uuid(A03D1421-B1EC-11D0-8C3A-00C04FC31D3F), +] +interface Bar : IUnknown { + HRESULT BarFunction(); +}; diff --git a/test/win/idl-includedirs/subdir/foo.idl b/test/win/idl-includedirs/subdir/foo.idl new file mode 100644 index 00000000..c8c65b9b --- /dev/null +++ b/test/win/idl-includedirs/subdir/foo.idl @@ -0,0 +1,14 @@ +// Copyright (c) 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import "oaidl.idl"; +import "bar.idl"; + +[ + object, + uuid(9C1100DD-51D4-4827-AE9F-3B8FAC4AED72), +] +interface Foo : IUnknown { + HRESULT FooFunction(Bar* bar); +}; |