| Index: third_party/grpc/tools/buildgen/plugins/generate_vsprojects.py
|
| diff --git a/third_party/grpc/tools/buildgen/plugins/generate_vsprojects.py b/third_party/grpc/tools/buildgen/plugins/generate_vsprojects.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..841a61f660dbf69bea24ad4ba7f2d2fc5a7c202a
|
| --- /dev/null
|
| +++ b/third_party/grpc/tools/buildgen/plugins/generate_vsprojects.py
|
| @@ -0,0 +1,95 @@
|
| +# Copyright 2015, Google Inc.
|
| +# All rights reserved.
|
| +#
|
| +# Redistribution and use in source and binary forms, with or without
|
| +# modification, are permitted provided that the following conditions are
|
| +# met:
|
| +#
|
| +# * Redistributions of source code must retain the above copyright
|
| +# notice, this list of conditions and the following disclaimer.
|
| +# * Redistributions in binary form must reproduce the above
|
| +# copyright notice, this list of conditions and the following disclaimer
|
| +# in the documentation and/or other materials provided with the
|
| +# distribution.
|
| +# * Neither the name of Google Inc. nor the names of its
|
| +# contributors may be used to endorse or promote products derived from
|
| +# this software without specific prior written permission.
|
| +#
|
| +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
| +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
| +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
| +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
| +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
| +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
| +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
| +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
| +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| +
|
| +"""Buildgen vsprojects plugin.
|
| +
|
| +This parses the list of libraries, and generates globals "vsprojects"
|
| +and "vsproject_dict", to be used by the visual studio generators.
|
| +
|
| +"""
|
| +
|
| +
|
| +import hashlib
|
| +import re
|
| +
|
| +
|
| +def mako_plugin(dictionary):
|
| + """The exported plugin code for generate_vsprojeccts
|
| +
|
| + We want to help the work of the visual studio generators.
|
| +
|
| + """
|
| +
|
| + libs = dictionary.get('libs', [])
|
| + targets = dictionary.get('targets', [])
|
| +
|
| + for lib in libs:
|
| + lib['is_library'] = True
|
| + for target in targets:
|
| + target['is_library'] = False
|
| +
|
| + projects = []
|
| + projects.extend(libs)
|
| + projects.extend(targets)
|
| + for target in projects:
|
| + if 'build' in target and target['build'] == 'test':
|
| + default_test_dir = 'test'
|
| + else:
|
| + default_test_dir = '.'
|
| + if 'vs_config_type' not in target:
|
| + if 'build' in target and target['build'] == 'test':
|
| + target['vs_config_type'] = 'Application'
|
| + else:
|
| + target['vs_config_type'] = 'StaticLibrary'
|
| + if 'vs_packages' not in target:
|
| + target['vs_packages'] = []
|
| + if 'vs_props' not in target:
|
| + target['vs_props'] = []
|
| + target['vs_proj_dir'] = target.get('vs_proj_dir', default_test_dir)
|
| + if target.get('vs_project_guid', None) is None and 'windows' in target.get('platforms', ['windows']):
|
| + name = target['name']
|
| + guid = re.sub('(........)(....)(....)(....)(.*)',
|
| + r'{\1-\2-\3-\4-\5}',
|
| + hashlib.md5(name).hexdigest())
|
| + target['vs_project_guid'] = guid.upper()
|
| + # Exclude projects without a visual project guid, such as the tests.
|
| + projects = [project for project in projects
|
| + if project.get('vs_project_guid', None)]
|
| +
|
| + projects = [project for project in projects
|
| + if project['language'] != 'c++' or project['build'] == 'all' or project['build'] == 'protoc' or (project['language'] == 'c++' and (project['build'] == 'test' or project['build'] == 'private'))]
|
| +
|
| + project_dict = dict([(p['name'], p) for p in projects])
|
| +
|
| + packages = dictionary.get('vspackages', [])
|
| + packages_dict = dict([(p['name'], p) for p in packages])
|
| +
|
| + dictionary['vsprojects'] = projects
|
| + dictionary['vsproject_dict'] = project_dict
|
| + dictionary['vspackages_dict'] = packages_dict
|
|
|