Merge branch 'master' of github.com:google/grpc into vsprojects

Conflicts:
	templates/vsprojects/vs2013/grpc.sln.template
diff --git a/templates/vsprojects/vs2013/grpc.sln.template b/templates/vsprojects/vs2013/grpc.sln.template
index fe85d03..18dfb1a 100644
--- a/templates/vsprojects/vs2013/grpc.sln.template
+++ b/templates/vsprojects/vs2013/grpc.sln.template
@@ -11,31 +11,13 @@
 ## Visual Studio uses GUIDs for project types
 ## http://msdn.microsoft.com/en-us/library/hb23x61k%28v=vs.80%29.aspx
 cpp_proj_type = "{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}"
-
-for lib in libs:
-  lib.is_library = True
-for target in targets:
-  target.is_library = False
-
-projects = []
-projects.extend(libs)
-projects.extend(targets)
-projects = [project for project in projects if project.get('vs_project_guid', None)]
-
-## Exclude C++ projects for now
-projects = [project for project in projects if not project.language == 'c++']
-
-for p in projects:
-  p.deps = p.get('deps',[])
-
-project_dict = dict([(p.name, p) for p in projects])
 %>\
-% for project in projects:
+% for project in vsprojects:
 Project("${cpp_proj_type}") = "${project.name}", "${project.name}.vcxproj", "${project.vs_project_guid}"
-  % if project.deps:
+  % if project.get('deps', None):
 	ProjectSection(ProjectDependencies) = postProject
-    % for dep in project.deps:
-		${project_dict[dep].vs_project_guid} = ${project_dict[dep].vs_project_guid}
+    % for dep in project.get('deps', []):
+		${vsproject_dict[dep].vs_project_guid} = ${vsproject_dict[dep].vs_project_guid}
     % endfor
 	EndProjectSection
   % endif
@@ -51,7 +33,7 @@
 		Release|Win32 = Release|Win32
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-% for project in projects:
+% for project in vsprojects:
 		${project.vs_project_guid}.Debug|Win32.ActiveCfg = Debug|Win32
 		${project.vs_project_guid}.Debug|Win32.Build.0 = Debug|Win32
 		${project.vs_project_guid}.Release|Win32.ActiveCfg = Release|Win32
diff --git a/templates/vsprojects/vs2013/vcxproj_defs.include b/templates/vsprojects/vs2013/vcxproj_defs.include
index ef12c62..e21230a 100644
--- a/templates/vsprojects/vs2013/vcxproj_defs.include
+++ b/templates/vsprojects/vs2013/vcxproj_defs.include
@@ -2,27 +2,7 @@
 <%def name="get_configuration_type(is_library)">${'StaticLibrary' if is_library else 'Application'}</%def>\
 <%def name="get_subsystem(is_library)">${'Windows' if is_library else 'Console'}</%def>\
 <%def name="gen_project(name, libs, targets)">\
-<%
-## TODO(jtattermusch): this code is c&p from the solution template
-for lib in libs:
-  lib.is_library = True
-for target in targets:
-  target.is_library = False
-
-projects = []
-projects.extend(libs)
-projects.extend(targets)
-projects = [project for project in projects if project.get('vs_project_guid', None)]
-
-## Exclude C++ projects for now
-projects = [project for project in projects if not project.get('c++', False)]
-
-for p in projects:
-  p.deps = p.get('deps',[])
-
-project_dict = dict([(p.name, p) for p in projects])
-%>\
-% for project in projects:
+% for project in vsprojects:
   % if project.name == name:
 <?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
@@ -124,7 +104,7 @@
   <ItemGroup>
     % for dep in project.deps:
     <ProjectReference Include="${dep}.vcxproj">
-      <Project>${project_dict[dep].vs_project_guid}</Project>
+      <Project>${vsproject_dict[dep].vs_project_guid}</Project>
     </ProjectReference>
     % endfor
   </ItemGroup>
diff --git a/tools/buildgen/plugins/generate_vsprojects.py b/tools/buildgen/plugins/generate_vsprojects.py
new file mode 100755
index 0000000..021b843
--- /dev/null
+++ b/tools/buildgen/plugins/generate_vsprojects.py
@@ -0,0 +1,38 @@
+"""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 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)
+  projects = [project for project in projects if project.get('vs_project_guid', None)]
+
+  ## Exclude C++ projects for now
+  projects = [project for project in projects if not project.language == 'c++']
+
+  project_dict = dict([(p['name'], p) for p in projects])
+
+  dictionary['vsprojects'] = projects
+  dictionary['vsproject_dict'] = project_dict