clang-format vs plugin: bake clang-format.exe into the vsix

This makes the clang-format plugin self-contained. Instead of
requiring clang-format.exe to be available on the PATH, this
includes it in the plugin's installer (.vsix file) and runs it
from the install directory.

Differential Revision: http://llvm-reviews.chandlerc.com/D2281

llvm-svn: 196122
GitOrigin-RevId: 86560363fdac6b4baebf68f10b7460d608b73d74
diff --git a/tools/clang-format-vs/ClangFormat/ClangFormat.csproj b/tools/clang-format-vs/ClangFormat/ClangFormat.csproj
index 65ccaba..2f49221 100644
--- a/tools/clang-format-vs/ClangFormat/ClangFormat.csproj
+++ b/tools/clang-format-vs/ClangFormat/ClangFormat.csproj
@@ -178,6 +178,9 @@
     <None Include="Resources\Images_32bit.bmp" />

   </ItemGroup>

   <ItemGroup>

+    <Content Include="clang-format.exe">

+      <IncludeInVSIX>true</IncludeInVSIX>

+    </Content>

     <Content Include="Resources\Package.ico" />

   </ItemGroup>

   <ItemGroup>

diff --git a/tools/clang-format-vs/ClangFormat/ClangFormatPackage.cs b/tools/clang-format-vs/ClangFormat/ClangFormatPackage.cs
index 797d467..492e4f2 100644
--- a/tools/clang-format-vs/ClangFormat/ClangFormatPackage.cs
+++ b/tools/clang-format-vs/ClangFormat/ClangFormatPackage.cs
@@ -22,6 +22,7 @@
 using System.ComponentModel;

 using System.ComponentModel.Design;

 using System.IO;

+using System.Reflection;

 using System.Runtime.InteropServices;

 using System.Xml.Linq;

 

@@ -128,9 +129,12 @@
         /// </summary>

         private string RunClangFormat(string text, int offset, int length, string path)

         {

+            string vsixPath = Path.GetDirectoryName(Uri.UnescapeDataString(

+                new UriBuilder(Assembly.GetExecutingAssembly().CodeBase).Path));

+

             System.Diagnostics.Process process = new System.Diagnostics.Process();

             process.StartInfo.UseShellExecute = false;

-            process.StartInfo.FileName = "clang-format.exe";

+            process.StartInfo.FileName = vsixPath + "\\clang-format.exe";

             // Poor man's escaping - this will not work when quotes are already escaped

             // in the input (but we don't need more).

             string style = GetStyle().Replace("\"", "\\\"");

diff --git a/tools/clang-format-vs/README.txt b/tools/clang-format-vs/README.txt
index 9b75bc3..d74060e 100644
--- a/tools/clang-format-vs/README.txt
+++ b/tools/clang-format-vs/README.txt
@@ -5,3 +5,6 @@
 - Visual Studio 2012 Professional

 - Visual Studio 2010 Professional

 - Visual Studio 2010 SDK.

+

+clang-format.exe must be copied into the ClangFormat/ directory before building.

+It will be bundled into the .vsix file.