| Index: visual_studio/NativeClientVSAddIn/NativeClientVSAddIn/Connect.cs
|
| diff --git a/visual_studio/NativeClientVSAddIn/NativeClientVSAddIn/Connect.cs b/visual_studio/NativeClientVSAddIn/NativeClientVSAddIn/Connect.cs
|
| index 41d59131e24ec59847ff3da5ed3949b4fd4e1c97..8b39386e60de7aff7c58587f511e4b7a482e04f4 100644
|
| --- a/visual_studio/NativeClientVSAddIn/NativeClientVSAddIn/Connect.cs
|
| +++ b/visual_studio/NativeClientVSAddIn/NativeClientVSAddIn/Connect.cs
|
| @@ -1,337 +1,337 @@
|
| -// Copyright (c) 2012 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.
|
| -
|
| -namespace NativeClientVSAddIn
|
| -{
|
| - using System;
|
| -
|
| - using EnvDTE;
|
| - using EnvDTE80;
|
| - using Extensibility;
|
| - using Microsoft.VisualStudio;
|
| - using Microsoft.VisualStudio.VCProjectEngine;
|
| - using System.Collections.Generic;
|
| - using System.Diagnostics;
|
| -
|
| - /// <summary>The object for implementing an Add-in.</summary>
|
| - /// <seealso class='IDTExtensibility2' />
|
| - public class Connect : IDTExtensibility2
|
| - {
|
| - /// <summary>
|
| - /// The main Visual Studio interface.
|
| - /// </summary>
|
| - private DTE2 dte_;
|
| -
|
| - /// <summary>
|
| - /// Receives events related to starting/stopping debugging.
|
| - /// </summary>
|
| - private DebuggerEvents debuggerEvents_;
|
| -
|
| - /// <summary>
|
| - /// Receives all generic events from Visual Studio.
|
| - /// </summary>
|
| - private CommandEvents commandEvents_;
|
| -
|
| - /// <summary>
|
| - /// Holds methods related to debugging.
|
| - /// </summary>
|
| - private PluginDebuggerBase debugger_;
|
| -
|
| - /// <summary>
|
| - /// The web server launched during debugging.
|
| - /// </summary>
|
| - private WebServer webServer_;
|
| -
|
| - /// <summary>
|
| - /// Visual Studio output window pane that captures output from the web server, and displays
|
| - /// other web-server related information.
|
| - /// </summary>
|
| - private OutputWindowPane webServerOutputPane_;
|
| -
|
| - /// <summary>
|
| - /// Implements the OnConnection method of the IDTExtensibility2 interface.
|
| - /// Receives notification that the Add-in is being loaded.
|
| - /// </summary>
|
| - /// <param name="application">Root object of the host application.</param>
|
| - /// <param name="connectMode">
|
| - /// Describes how the Add-in is being loaded (e.g. command line or UI). This is unused since
|
| - /// the add-in functions the same regardless of how it was loaded.
|
| - /// </param>
|
| - /// <param name="addInInst">Object representing this Add-in.</param>
|
| - /// <param name="custom">Unused, but could contain host specific data for the add-in.</param>
|
| - /// <seealso class='IDTExtensibility2' />
|
| - public void OnConnection(
|
| - object application,
|
| - ext_ConnectMode connectMode,
|
| - object addInInst,
|
| - ref Array custom)
|
| - {
|
| - dte_ = (DTE2)application;
|
| -
|
| - debuggerEvents_ = dte_.Events.DebuggerEvents;
|
| - debuggerEvents_.OnEnterDesignMode += DebuggerOnEnterDesignMode;
|
| - debuggerEvents_.OnEnterRunMode += DebuggerOnEnterRunMode;
|
| -
|
| - commandEvents_ = dte_.Events.CommandEvents;
|
| - commandEvents_.AfterExecute += CommandEventsAfterExecute;
|
| -
|
| - try
|
| - {
|
| - webServerOutputPane_ = dte_.ToolWindows.OutputWindow.OutputWindowPanes.Item(
|
| - Strings.WebServerOutputWindowTitle);
|
| - }
|
| - catch (ArgumentException)
|
| - {
|
| - // This exception is expected if the window pane hasn't been created yet.
|
| - webServerOutputPane_ = dte_.ToolWindows.OutputWindow.OutputWindowPanes.Add(
|
| - Strings.WebServerOutputWindowTitle);
|
| - }
|
| - }
|
| -
|
| - /// <summary>
|
| - /// Implements the OnDisconnection method of the IDTExtensibility2
|
| - /// interface. Receives notification that the Add-in is being unloaded.
|
| - /// </summary>
|
| - /// <param name='disconnectMode'>Describes how the Add-in is being unloaded.</param>
|
| - /// <param name='custom'>Array of parameters that are host application specific.</param>
|
| - /// <seealso class='IDTExtensibility2' />
|
| - public void OnDisconnection(ext_DisconnectMode disconnectMode, ref Array custom)
|
| - {
|
| - }
|
| -
|
| - /// <summary>
|
| - /// Implements the OnAddInsUpdate method of the IDTExtensibility2 interface.
|
| - /// Receives notification when the collection of Add-ins has changed.
|
| - /// </summary>
|
| - /// <param name='custom'>Array of parameters that are host application specific.</param>
|
| - /// <seealso class='IDTExtensibility2' />
|
| - public void OnAddInsUpdate(ref Array custom)
|
| - {
|
| - }
|
| -
|
| - /// <summary>
|
| - /// Implements the OnStartupComplete method of the IDTExtensibility2 interface.
|
| - /// Receives notification that the host application has completed loading.
|
| - /// </summary>
|
| - /// <param name='custom'>Array of parameters that are host application specific.</param>
|
| - /// <seealso class='IDTExtensibility2' />
|
| - public void OnStartupComplete(ref Array custom)
|
| - {
|
| - }
|
| -
|
| - /// <summary>
|
| - /// Implements the OnBeginShutdown method of the IDTExtensibility2 interface.
|
| - /// Receives notification that the host application is being unloaded.
|
| - /// </summary>
|
| - /// <param name='custom'>Array of parameters that are host application specific.</param>
|
| - /// <seealso class='IDTExtensibility2' />
|
| - public void OnBeginShutdown(ref Array custom)
|
| - {
|
| - }
|
| -
|
| - /// <summary>
|
| - /// Receives notification after any generic VS command has executed.
|
| - /// Here we capture the SolutionPlatform event which indicates the solution platform has
|
| - /// changed. We use this event to trigger a modification of property settings since this
|
| - /// event happens immediately after the platforms are added. See PerformPropertyModifications()
|
| - /// for what sort of modifications we are doing.
|
| - /// </summary>
|
| - /// <param name="guid">Guid of the command grouping.</param>
|
| - /// <param name="id">ID of the command within its grouping.</param>
|
| - /// <param name="customIn">Command specific input.</param>
|
| - /// <param name="customOut">Command specific parameter.</param>
|
| - private void CommandEventsAfterExecute(string guid, int id, object customIn, object customOut)
|
| - {
|
| - const string VSStd2KCmdIDEnumGuid = "{1496A755-94DE-11D0-8C3F-00C04FC2AAE2}";
|
| - if (guid.Equals(VSStd2KCmdIDEnumGuid, StringComparison.OrdinalIgnoreCase))
|
| - {
|
| - // If loading a NaCl or Pepper platform, perform property modifications.
|
| - if (id == (int)VSConstants.VSStd2KCmdID.SolutionPlatform)
|
| - {
|
| - string platform = customOut as string;
|
| - if (PropertyManager.IsNaClPlatform(platform) || PropertyManager.IsPepperPlatform(platform))
|
| - {
|
| - PerformPropertyModifications();
|
| - }
|
| - }
|
| - }
|
| - }
|
| -
|
| - /// <summary>
|
| - /// Goes through all projects in the solution and updates their properties with necessary
|
| - /// modifications if they are NaCl or Pepper configurations. We add the version information
|
| - /// here so that the version is stored directly in the project file. The call to
|
| - /// PerformPropertyFixes() performs a work around on the property pages to force Visual Studio
|
| - /// to save some specific properties into the project file to get around issue 140162.
|
| - /// </summary>
|
| - private void PerformPropertyModifications()
|
| - {
|
| - string naclAddInVersion = GetAddInVersionFromDescription();
|
| -
|
| - var configs = Utility.GetPlatformVCConfigurations(dte_, Strings.PepperPlatformName);
|
| - configs.AddRange(Utility.GetPlatformVCConfigurations(dte_, Strings.NaCl64PlatformName));
|
| - configs.AddRange(Utility.GetPlatformVCConfigurations(dte_, Strings.NaCl32PlatformName));
|
| -
|
| - var properties = new PropertyManager();
|
| - foreach (VCConfiguration config in configs)
|
| - {
|
| - properties.SetTarget(config);
|
| - if (properties.NaClAddInVersion != naclAddInVersion)
|
| - {
|
| - Debug.WriteLine("Modifying Config: " + config.Name);
|
| -
|
| - // Set the NaCl add-in version so that it is stored in the project file.
|
| - properties.SetProperty("ConfigurationGeneral", "NaClAddInVersion", naclAddInVersion);
|
| -
|
| - // Expand the CHROME_PATH variable to its full path.
|
| - string expandedChrome = properties.GetProperty(
|
| - "WindowsLocalDebugger", "LocalDebuggerCommand");
|
| - properties.SetProperty("WindowsLocalDebugger", "LocalDebuggerCommand", expandedChrome);
|
| -
|
| - // Change the library includes to have the appropriate extension.
|
| - string libs = properties.GetProperty("Link", "AdditionalDependencies");
|
| - if (properties.ProjectPlatform == PropertyManager.ProjectPlatformType.NaCl)
|
| - {
|
| - libs = libs.Replace(".lib", string.Empty);
|
| - }
|
| - else if (properties.ProjectPlatform == PropertyManager.ProjectPlatformType.Pepper)
|
| - {
|
| - string[] libsList = libs.Split(';');
|
| - libs = string.Empty;
|
| - foreach (string lib in libsList)
|
| - {
|
| - string baseLibName = lib.Replace(".lib", string.Empty);
|
| - if (!string.IsNullOrWhiteSpace(lib))
|
| - {
|
| - libs = string.Concat(libs, baseLibName, ".lib;");
|
| - }
|
| - }
|
| - }
|
| -
|
| - properties.SetProperty("Link", "AdditionalDependencies", libs);
|
| -
|
| - // Work around for issue 140162. Forces some properties to save to the project file.
|
| - PerformPropertyFixes(config);
|
| - }
|
| - }
|
| - }
|
| -
|
| - /// <summary>
|
| - /// Takes a project configuration and sets values in the project file to work around some
|
| - /// problems in Visual Studio. This is a work around for issue 140162.
|
| - /// </summary>
|
| - /// <param name="config">A configuration that needs modification.</param>
|
| - private void PerformPropertyFixes(VCConfiguration config)
|
| - {
|
| - IVCRulePropertyStorage debugger = config.Rules.Item("WindowsLocalDebugger");
|
| - string arguments = debugger.GetUnevaluatedPropertyValue("LocalDebuggerCommandArguments");
|
| - debugger.SetPropertyValue("LocalDebuggerCommandArguments", arguments);
|
| -
|
| - // NaCl Platform Specific:
|
| - if (PropertyManager.IsNaClPlatform(config.Platform.Name))
|
| - {
|
| - IVCRulePropertyStorage general = config.Rules.Item("ConfigurationGeneral");
|
| - string[] keys = {"VSNaClSDKRoot"};
|
| - Dictionary<string, string> values = new Dictionary<string, string>();
|
| - foreach (var key in keys)
|
| - {
|
| - values[key] = general.GetUnevaluatedPropertyValue(key);
|
| - general.DeleteProperty(key);
|
| - }
|
| -
|
| - foreach (var key in keys)
|
| - {
|
| - general.SetPropertyValue(key, values[key]);
|
| - }
|
| - }
|
| -
|
| - IVCRulePropertyStorage directories = config.Rules.Item("ConfigurationDirectories");
|
| - string includePath = directories.GetUnevaluatedPropertyValue("IncludePath");
|
| - string libraryPath = directories.GetUnevaluatedPropertyValue("LibraryPath");
|
| - directories.DeleteProperty("IncludePath");
|
| - directories.DeleteProperty("LibraryPath");
|
| - directories.SetPropertyValue("IncludePath", includePath);
|
| - directories.SetPropertyValue("LibraryPath", libraryPath);
|
| -
|
| - // Pepper specific:
|
| - if (config.Platform.Name == Strings.PepperPlatformName)
|
| - {
|
| - string executablePath = directories.GetUnevaluatedPropertyValue("ExecutablePath");
|
| - directories.SetPropertyValue("ExecutablePath", executablePath);
|
| - }
|
| - }
|
| -
|
| - /// <summary>
|
| - /// During the build process we dynamically put the add-in version number into the add-in
|
| - /// description. This function extracts that version number.
|
| - /// </summary>
|
| - /// <returns>The add-in version number.</returns>
|
| - private string GetAddInVersionFromDescription()
|
| - {
|
| - string naclAddinVersion = "missing";
|
| - foreach (AddIn addin in dte_.AddIns)
|
| - {
|
| - if (addin.Name.Equals(Strings.AddInName))
|
| - {
|
| - string identifier = "Version: [";
|
| - int start = addin.Description.IndexOf(identifier) + identifier.Length;
|
| - int end = addin.Description.LastIndexOf(']');
|
| - if (start >= 0 && end >= 0)
|
| - {
|
| - naclAddinVersion = addin.Description.Substring(start, end - start);
|
| - break;
|
| - }
|
| - }
|
| - }
|
| -
|
| - return naclAddinVersion;
|
| - }
|
| -
|
| - /// <summary>
|
| - /// Called when Visual Studio ends a debugging session.
|
| - /// Shuts down the web server and debugger.
|
| - /// </summary>
|
| - /// <param name="reason">The parameter is not used.</param>
|
| - private void DebuggerOnEnterDesignMode(dbgEventReason reason)
|
| - {
|
| - if (debugger_ != null)
|
| - {
|
| - debugger_.Dispose();
|
| - debugger_ = null;
|
| - }
|
| -
|
| - if (webServer_ != null)
|
| - {
|
| - webServer_.Dispose();
|
| - webServer_ = null;
|
| - }
|
| - }
|
| -
|
| - /// <summary>
|
| - /// Called when Visual Studio starts a debugging session.
|
| - /// Here we kick off the debugger and web server if appropriate.
|
| - /// </summary>
|
| - /// <param name="reason">Indicates how we are entering run mode (breakpoint or launch).</param>
|
| - private void DebuggerOnEnterRunMode(dbgEventReason reason)
|
| - {
|
| - // If we are starting debugging (not re-entering from a breakpoint)
|
| - // then load project settings and start the debugger-helper.
|
| - if (reason == dbgEventReason.dbgEventReasonLaunchProgram)
|
| - {
|
| - PropertyManager properties = new PropertyManager();
|
| - properties.SetTargetToActive(dte_);
|
| - if (properties.ProjectPlatform == PropertyManager.ProjectPlatformType.NaCl)
|
| - {
|
| - debugger_ = new PluginDebuggerGDB(dte_, properties);
|
| - webServer_ = new WebServer(webServerOutputPane_, properties);
|
| - }
|
| - else if (properties.ProjectPlatform == PropertyManager.ProjectPlatformType.Pepper)
|
| - {
|
| - debugger_ = new PluginDebuggerVS(dte_, properties);
|
| - webServer_ = new WebServer(webServerOutputPane_, properties);
|
| - }
|
| - }
|
| - }
|
| - }
|
| -}
|
| +// Copyright (c) 2012 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.
|
| +
|
| +namespace NativeClientVSAddIn
|
| +{
|
| + using System;
|
| +
|
| + using EnvDTE;
|
| + using EnvDTE80;
|
| + using Extensibility;
|
| + using Microsoft.VisualStudio;
|
| + using Microsoft.VisualStudio.VCProjectEngine;
|
| + using System.Collections.Generic;
|
| + using System.Diagnostics;
|
| +
|
| + /// <summary>The object for implementing an Add-in.</summary>
|
| + /// <seealso class='IDTExtensibility2' />
|
| + public class Connect : IDTExtensibility2
|
| + {
|
| + /// <summary>
|
| + /// The main Visual Studio interface.
|
| + /// </summary>
|
| + private DTE2 dte_;
|
| +
|
| + /// <summary>
|
| + /// Receives events related to starting/stopping debugging.
|
| + /// </summary>
|
| + private DebuggerEvents debuggerEvents_;
|
| +
|
| + /// <summary>
|
| + /// Receives all generic events from Visual Studio.
|
| + /// </summary>
|
| + private CommandEvents commandEvents_;
|
| +
|
| + /// <summary>
|
| + /// Holds methods related to debugging.
|
| + /// </summary>
|
| + private PluginDebuggerBase debugger_;
|
| +
|
| + /// <summary>
|
| + /// The web server launched during debugging.
|
| + /// </summary>
|
| + private WebServer webServer_;
|
| +
|
| + /// <summary>
|
| + /// Visual Studio output window pane that captures output from the web server, and displays
|
| + /// other web-server related information.
|
| + /// </summary>
|
| + private OutputWindowPane webServerOutputPane_;
|
| +
|
| + /// <summary>
|
| + /// Implements the OnConnection method of the IDTExtensibility2 interface.
|
| + /// Receives notification that the Add-in is being loaded.
|
| + /// </summary>
|
| + /// <param name="application">Root object of the host application.</param>
|
| + /// <param name="connectMode">
|
| + /// Describes how the Add-in is being loaded (e.g. command line or UI). This is unused since
|
| + /// the add-in functions the same regardless of how it was loaded.
|
| + /// </param>
|
| + /// <param name="addInInst">Object representing this Add-in.</param>
|
| + /// <param name="custom">Unused, but could contain host specific data for the add-in.</param>
|
| + /// <seealso class='IDTExtensibility2' />
|
| + public void OnConnection(
|
| + object application,
|
| + ext_ConnectMode connectMode,
|
| + object addInInst,
|
| + ref Array custom)
|
| + {
|
| + dte_ = (DTE2)application;
|
| +
|
| + debuggerEvents_ = dte_.Events.DebuggerEvents;
|
| + debuggerEvents_.OnEnterDesignMode += DebuggerOnEnterDesignMode;
|
| + debuggerEvents_.OnEnterRunMode += DebuggerOnEnterRunMode;
|
| +
|
| + commandEvents_ = dte_.Events.CommandEvents;
|
| + commandEvents_.AfterExecute += CommandEventsAfterExecute;
|
| +
|
| + try
|
| + {
|
| + webServerOutputPane_ = dte_.ToolWindows.OutputWindow.OutputWindowPanes.Item(
|
| + Strings.WebServerOutputWindowTitle);
|
| + }
|
| + catch (ArgumentException)
|
| + {
|
| + // This exception is expected if the window pane hasn't been created yet.
|
| + webServerOutputPane_ = dte_.ToolWindows.OutputWindow.OutputWindowPanes.Add(
|
| + Strings.WebServerOutputWindowTitle);
|
| + }
|
| + }
|
| +
|
| + /// <summary>
|
| + /// Implements the OnDisconnection method of the IDTExtensibility2
|
| + /// interface. Receives notification that the Add-in is being unloaded.
|
| + /// </summary>
|
| + /// <param name='disconnectMode'>Describes how the Add-in is being unloaded.</param>
|
| + /// <param name='custom'>Array of parameters that are host application specific.</param>
|
| + /// <seealso class='IDTExtensibility2' />
|
| + public void OnDisconnection(ext_DisconnectMode disconnectMode, ref Array custom)
|
| + {
|
| + }
|
| +
|
| + /// <summary>
|
| + /// Implements the OnAddInsUpdate method of the IDTExtensibility2 interface.
|
| + /// Receives notification when the collection of Add-ins has changed.
|
| + /// </summary>
|
| + /// <param name='custom'>Array of parameters that are host application specific.</param>
|
| + /// <seealso class='IDTExtensibility2' />
|
| + public void OnAddInsUpdate(ref Array custom)
|
| + {
|
| + }
|
| +
|
| + /// <summary>
|
| + /// Implements the OnStartupComplete method of the IDTExtensibility2 interface.
|
| + /// Receives notification that the host application has completed loading.
|
| + /// </summary>
|
| + /// <param name='custom'>Array of parameters that are host application specific.</param>
|
| + /// <seealso class='IDTExtensibility2' />
|
| + public void OnStartupComplete(ref Array custom)
|
| + {
|
| + }
|
| +
|
| + /// <summary>
|
| + /// Implements the OnBeginShutdown method of the IDTExtensibility2 interface.
|
| + /// Receives notification that the host application is being unloaded.
|
| + /// </summary>
|
| + /// <param name='custom'>Array of parameters that are host application specific.</param>
|
| + /// <seealso class='IDTExtensibility2' />
|
| + public void OnBeginShutdown(ref Array custom)
|
| + {
|
| + }
|
| +
|
| + /// <summary>
|
| + /// Receives notification after any generic VS command has executed.
|
| + /// Here we capture the SolutionPlatform event which indicates the solution platform has
|
| + /// changed. We use this event to trigger a modification of property settings since this
|
| + /// event happens immediately after the platforms are added. See PerformPropertyModifications()
|
| + /// for what sort of modifications we are doing.
|
| + /// </summary>
|
| + /// <param name="guid">Guid of the command grouping.</param>
|
| + /// <param name="id">ID of the command within its grouping.</param>
|
| + /// <param name="customIn">Command specific input.</param>
|
| + /// <param name="customOut">Command specific parameter.</param>
|
| + private void CommandEventsAfterExecute(string guid, int id, object customIn, object customOut)
|
| + {
|
| + const string VSStd2KCmdIDEnumGuid = "{1496A755-94DE-11D0-8C3F-00C04FC2AAE2}";
|
| + if (guid.Equals(VSStd2KCmdIDEnumGuid, StringComparison.OrdinalIgnoreCase))
|
| + {
|
| + // If loading a NaCl or Pepper platform, perform property modifications.
|
| + if (id == (int)VSConstants.VSStd2KCmdID.SolutionPlatform)
|
| + {
|
| + string platform = customOut as string;
|
| + if (PropertyManager.IsNaClPlatform(platform) || PropertyManager.IsPepperPlatform(platform))
|
| + {
|
| + PerformPropertyModifications();
|
| + }
|
| + }
|
| + }
|
| + }
|
| +
|
| + /// <summary>
|
| + /// Goes through all projects in the solution and updates their properties with necessary
|
| + /// modifications if they are NaCl or Pepper configurations. We add the version information
|
| + /// here so that the version is stored directly in the project file. The call to
|
| + /// PerformPropertyFixes() performs a work around on the property pages to force Visual Studio
|
| + /// to save some specific properties into the project file to get around issue 140162.
|
| + /// </summary>
|
| + private void PerformPropertyModifications()
|
| + {
|
| + string naclAddInVersion = GetAddInVersionFromDescription();
|
| +
|
| + var configs = Utility.GetPlatformVCConfigurations(dte_, Strings.PepperPlatformName);
|
| + configs.AddRange(Utility.GetPlatformVCConfigurations(dte_, Strings.NaCl64PlatformName));
|
| + configs.AddRange(Utility.GetPlatformVCConfigurations(dte_, Strings.NaCl32PlatformName));
|
| +
|
| + var properties = new PropertyManager();
|
| + foreach (VCConfiguration config in configs)
|
| + {
|
| + properties.SetTarget(config);
|
| + if (properties.NaClAddInVersion != naclAddInVersion)
|
| + {
|
| + Debug.WriteLine("Modifying Config: " + config.Name);
|
| +
|
| + // Set the NaCl add-in version so that it is stored in the project file.
|
| + properties.SetProperty("ConfigurationGeneral", "NaClAddInVersion", naclAddInVersion);
|
| +
|
| + // Expand the CHROME_PATH variable to its full path.
|
| + string expandedChrome = properties.GetProperty(
|
| + "WindowsLocalDebugger", "LocalDebuggerCommand");
|
| + properties.SetProperty("WindowsLocalDebugger", "LocalDebuggerCommand", expandedChrome);
|
| +
|
| + // Change the library includes to have the appropriate extension.
|
| + string libs = properties.GetProperty("Link", "AdditionalDependencies");
|
| + if (properties.ProjectPlatform == PropertyManager.ProjectPlatformType.NaCl)
|
| + {
|
| + libs = libs.Replace(".lib", string.Empty);
|
| + }
|
| + else if (properties.ProjectPlatform == PropertyManager.ProjectPlatformType.Pepper)
|
| + {
|
| + string[] libsList = libs.Split(';');
|
| + libs = string.Empty;
|
| + foreach (string lib in libsList)
|
| + {
|
| + string baseLibName = lib.Replace(".lib", string.Empty);
|
| + if (!string.IsNullOrWhiteSpace(lib))
|
| + {
|
| + libs = string.Concat(libs, baseLibName, ".lib;");
|
| + }
|
| + }
|
| + }
|
| +
|
| + properties.SetProperty("Link", "AdditionalDependencies", libs);
|
| +
|
| + // Work around for issue 140162. Forces some properties to save to the project file.
|
| + PerformPropertyFixes(config);
|
| + }
|
| + }
|
| + }
|
| +
|
| + /// <summary>
|
| + /// Takes a project configuration and sets values in the project file to work around some
|
| + /// problems in Visual Studio. This is a work around for issue 140162.
|
| + /// </summary>
|
| + /// <param name="config">A configuration that needs modification.</param>
|
| + private void PerformPropertyFixes(VCConfiguration config)
|
| + {
|
| + IVCRulePropertyStorage debugger = config.Rules.Item("WindowsLocalDebugger");
|
| + string arguments = debugger.GetUnevaluatedPropertyValue("LocalDebuggerCommandArguments");
|
| + debugger.SetPropertyValue("LocalDebuggerCommandArguments", arguments);
|
| +
|
| + // NaCl Platform Specific:
|
| + if (PropertyManager.IsNaClPlatform(config.Platform.Name))
|
| + {
|
| + IVCRulePropertyStorage general = config.Rules.Item("ConfigurationGeneral");
|
| + string[] keys = {"VSNaClSDKRoot"};
|
| + Dictionary<string, string> values = new Dictionary<string, string>();
|
| + foreach (var key in keys)
|
| + {
|
| + values[key] = general.GetUnevaluatedPropertyValue(key);
|
| + general.DeleteProperty(key);
|
| + }
|
| +
|
| + foreach (var key in keys)
|
| + {
|
| + general.SetPropertyValue(key, values[key]);
|
| + }
|
| + }
|
| +
|
| + IVCRulePropertyStorage directories = config.Rules.Item("ConfigurationDirectories");
|
| + string includePath = directories.GetUnevaluatedPropertyValue("IncludePath");
|
| + string libraryPath = directories.GetUnevaluatedPropertyValue("LibraryPath");
|
| + directories.DeleteProperty("IncludePath");
|
| + directories.DeleteProperty("LibraryPath");
|
| + directories.SetPropertyValue("IncludePath", includePath);
|
| + directories.SetPropertyValue("LibraryPath", libraryPath);
|
| +
|
| + // Pepper specific:
|
| + if (config.Platform.Name == Strings.PepperPlatformName)
|
| + {
|
| + string executablePath = directories.GetUnevaluatedPropertyValue("ExecutablePath");
|
| + directories.SetPropertyValue("ExecutablePath", executablePath);
|
| + }
|
| + }
|
| +
|
| + /// <summary>
|
| + /// During the build process we dynamically put the add-in version number into the add-in
|
| + /// description. This function extracts that version number.
|
| + /// </summary>
|
| + /// <returns>The add-in version number.</returns>
|
| + private string GetAddInVersionFromDescription()
|
| + {
|
| + string naclAddinVersion = "missing";
|
| + foreach (AddIn addin in dte_.AddIns)
|
| + {
|
| + if (addin.Name.Equals(Strings.AddInName))
|
| + {
|
| + string identifier = "Version: [";
|
| + int start = addin.Description.IndexOf(identifier) + identifier.Length;
|
| + int end = addin.Description.LastIndexOf(']');
|
| + if (start >= 0 && end >= 0)
|
| + {
|
| + naclAddinVersion = addin.Description.Substring(start, end - start);
|
| + break;
|
| + }
|
| + }
|
| + }
|
| +
|
| + return naclAddinVersion;
|
| + }
|
| +
|
| + /// <summary>
|
| + /// Called when Visual Studio ends a debugging session.
|
| + /// Shuts down the web server and debugger.
|
| + /// </summary>
|
| + /// <param name="reason">The parameter is not used.</param>
|
| + private void DebuggerOnEnterDesignMode(dbgEventReason reason)
|
| + {
|
| + if (debugger_ != null)
|
| + {
|
| + debugger_.Dispose();
|
| + debugger_ = null;
|
| + }
|
| +
|
| + if (webServer_ != null)
|
| + {
|
| + webServer_.Dispose();
|
| + webServer_ = null;
|
| + }
|
| + }
|
| +
|
| + /// <summary>
|
| + /// Called when Visual Studio starts a debugging session.
|
| + /// Here we kick off the debugger and web server if appropriate.
|
| + /// </summary>
|
| + /// <param name="reason">Indicates how we are entering run mode (breakpoint or launch).</param>
|
| + private void DebuggerOnEnterRunMode(dbgEventReason reason)
|
| + {
|
| + // If we are starting debugging (not re-entering from a breakpoint)
|
| + // then load project settings and start the debugger-helper.
|
| + if (reason == dbgEventReason.dbgEventReasonLaunchProgram)
|
| + {
|
| + PropertyManager properties = new PropertyManager();
|
| + properties.SetTargetToActive(dte_);
|
| + if (properties.ProjectPlatform == PropertyManager.ProjectPlatformType.NaCl)
|
| + {
|
| + debugger_ = new PluginDebuggerGDB(dte_, properties);
|
| + webServer_ = new WebServer(webServerOutputPane_, properties);
|
| + }
|
| + else if (properties.ProjectPlatform == PropertyManager.ProjectPlatformType.Pepper)
|
| + {
|
| + debugger_ = new PluginDebuggerVS(dte_, properties);
|
| + webServer_ = new WebServer(webServerOutputPane_, properties);
|
| + }
|
| + }
|
| + }
|
| + }
|
| +}
|
|
|