Skip to content

Commit

Permalink
Move logic to setup MSBuild to separate script
Browse files Browse the repository at this point in the history
  • Loading branch information
DustinCampbell committed Jul 13, 2017
1 parent f89dcd4 commit 2caf248
Show file tree
Hide file tree
Showing 3 changed files with 105 additions and 92 deletions.
97 changes: 5 additions & 92 deletions build.cake
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#load "scripts/runhelpers.cake"
#load "scripts/archiving.cake"
#load "scripts/artifacts.cake"
#load "scripts/msbuild.cake"

using System.ComponentModel;
using System.Net;
Expand Down Expand Up @@ -77,13 +78,6 @@ public class BuildPlan

var buildPlan = BuildPlan.Load(env);

// Folders and tools
var msbuildBaseFolder = CombinePaths(env.WorkingDirectory, ".msbuild");
var msbuildNet46Folder = msbuildBaseFolder + "-net46";
var msbuildNetCoreAppFolder = msbuildBaseFolder + "-netcoreapp1.1";
var msbuildRuntimeForMonoInstallFolder = CombinePaths(env.Folders.Tools, "Microsoft.Build.Runtime.Mono");
var msbuildLibForMonoInstallFolder = CombinePaths(env.Folders.Tools, "Microsoft.Build.Lib.Mono");

/// <summary>
/// Clean artifacts.
/// </summary>
Expand Down Expand Up @@ -116,88 +110,7 @@ Task("SetupMSBuild")
.IsDependentOn("BuildEnvironment")
.Does(() =>
{
if (!IsRunningOnWindows())
{
if (DirectoryExists(msbuildRuntimeForMonoInstallFolder))
{
DeleteDirectory(msbuildRuntimeForMonoInstallFolder, recursive: true);
}

if (DirectoryExists(msbuildLibForMonoInstallFolder))
{
DeleteDirectory(msbuildLibForMonoInstallFolder, recursive: true);
}

CreateDirectory(msbuildRuntimeForMonoInstallFolder);
CreateDirectory(msbuildLibForMonoInstallFolder);

var msbuildMonoRuntimeZip = CombinePaths(msbuildRuntimeForMonoInstallFolder, buildPlan.MSBuildRuntimeForMono);
var msbuildMonoLibZip = CombinePaths(msbuildLibForMonoInstallFolder, buildPlan.MSBuildLibForMono);

using (var client = new WebClient())
{
client.DownloadFile($"{buildPlan.DownloadURL}/{buildPlan.MSBuildRuntimeForMono}", msbuildMonoRuntimeZip);
client.DownloadFile($"{buildPlan.DownloadURL}/{buildPlan.MSBuildLibForMono}", msbuildMonoLibZip);
}

Unzip(msbuildMonoRuntimeZip, msbuildRuntimeForMonoInstallFolder);
Unzip(msbuildMonoLibZip, msbuildLibForMonoInstallFolder);

DeleteFile(msbuildMonoRuntimeZip);
DeleteFile(msbuildMonoLibZip);
}

if (DirectoryExists(msbuildNet46Folder))
{
DeleteDirectory(msbuildNet46Folder, recursive: true);
}

if (DirectoryExists(msbuildNetCoreAppFolder))
{
DeleteDirectory(msbuildNetCoreAppFolder, recursive: true);
}

CreateDirectory(msbuildNet46Folder);
CreateDirectory(msbuildNetCoreAppFolder);

// Copy MSBuild runtime to appropriate locations
var msbuildInstallFolder = CombinePaths(env.Folders.Tools, "Microsoft.Build.Runtime", "contentFiles", "any");
var msbuildNet46InstallFolder = CombinePaths(msbuildInstallFolder, "net46");
var msbuildNetCoreAppInstallFolder = CombinePaths(msbuildInstallFolder, "netcoreapp1.0");

if (IsRunningOnWindows())
{
CopyDirectory(msbuildNet46InstallFolder, msbuildNet46Folder);
}
else
{
CopyDirectory(msbuildRuntimeForMonoInstallFolder, msbuildNet46Folder);
}

CopyDirectory(msbuildNetCoreAppInstallFolder, msbuildNetCoreAppFolder);

// Finally, copy Microsoft.Net.Compilers
var roslynFolder = CombinePaths(env.Folders.Tools, "Microsoft.Net.Compilers", "tools");
var roslynNet46Folder = CombinePaths(msbuildNet46Folder, "Roslyn");
var roslynNetCoreAppFolder = CombinePaths(msbuildNetCoreAppFolder, "Roslyn");

CreateDirectory(roslynNet46Folder);
CreateDirectory(roslynNetCoreAppFolder);

CopyDirectory(roslynFolder, roslynNet46Folder);
CopyDirectory(roslynFolder, roslynNetCoreAppFolder);

// Delete unnecessary files
foreach (var folder in new[] { roslynNet46Folder, roslynNetCoreAppFolder })
{
DeleteFile(CombinePaths(folder, "Microsoft.CodeAnalysis.VisualBasic.dll"));
DeleteFile(CombinePaths(folder, "Microsoft.VisualBasic.Core.targets"));
DeleteFile(CombinePaths(folder, "VBCSCompiler.exe"));
DeleteFile(CombinePaths(folder, "VBCSCompiler.exe.config"));
DeleteFile(CombinePaths(folder, "vbc.exe"));
DeleteFile(CombinePaths(folder, "vbc.exe.config"));
DeleteFile(CombinePaths(folder, "vbc.rsp"));
}
SetupMSBuild(env);
});

/// <summary>
Expand Down Expand Up @@ -526,7 +439,7 @@ Task("Test")
else
{
// Copy the Mono-built Microsoft.Build.* binaries to the test folder.
CopyDirectory($"{msbuildLibForMonoInstallFolder}", instanceFolder);
CopyDirectory($"{env.Folders.MonoMSBuildLib}", instanceFolder);
Run("mono", $"\"{xunitInstancePath}\" {arguments}", instanceFolder)
.ExceptionOnError($"Test {testProject} failed for net46");
Expand Down Expand Up @@ -626,12 +539,12 @@ Task("OnlyPublish")
.ExceptionOnError($"Failed to publish {project} for {framework}/{rid}");
// Copy MSBuild and SDKs to output
CopyDirectory($"{msbuildBaseFolder}-{framework}", CombinePaths(outputFolder, "msbuild"));
CopyDirectory($"{env.Folders.MSBuildBase}-{framework}", CombinePaths(outputFolder, "msbuild"));
// For OSX/Linux net46 builds, copy the MSBuild libraries built for Mono.
if (!IsRunningOnWindows() && framework == "net46")
{
CopyDirectory($"{msbuildLibForMonoInstallFolder}", outputFolder);
CopyDirectory($"{env.Folders.MonoMSBuildLib}", outputFolder);
}
if (requireArchive)
Expand Down
8 changes: 8 additions & 0 deletions scripts/common.cake
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,17 @@ public class Folders
public string ArtifactsPackage { get; }
public string ArtifactsScripts { get; }

public string MonoMSBuildLib { get; }
public string MonoMSBuildRuntime { get; }
public string MSBuildBase { get; }

public Folders(string workingDirectory)
{
this.DotNetSdk = PathHelper.Combine(workingDirectory, ".dotnet");
this.LegacyDotNetSdk = PathHelper.Combine(workingDirectory, ".dotnet-legacy");
this.Tools = PathHelper.Combine(workingDirectory, "tools");

this.MSBuildBase = PathHelper.Combine(workingDirectory, ".msbuild");
this.MSBuild = PathHelper.Combine(workingDirectory, "msbuild");
this.Source = PathHelper.Combine(workingDirectory, "src");
this.Tests = PathHelper.Combine(workingDirectory, "tests");
Expand All @@ -45,6 +50,9 @@ public class Folders
this.ArtifactsLogs = PathHelper.Combine(this.Artifacts, "logs");
this.ArtifactsPackage = PathHelper.Combine(this.Artifacts, "package");
this.ArtifactsScripts = PathHelper.Combine(this.Artifacts, "scripts");

this.MonoMSBuildLib = PathHelper.Combine(this.Tools, "Microsoft.Build.Lib.Mono");
this.MonoMSBuildRuntime = PathHelper.Combine(this.Tools, "Microsoft.Build.Runtime.Mono");
}
}

Expand Down
92 changes: 92 additions & 0 deletions scripts/msbuild.cake
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
#load "common.cake"

using System.Net;

void SetupMSBuild(BuildEnvironment env)
{
var msbuildNet46Folder = env.Folders.MSBuildBase + "-net46";
var msbuildNetCoreAppFolder = env.Folders.MSBuildBase + "-netcoreapp1.1";

if (!IsRunningOnWindows())
{
if (DirectoryExists(env.Folders.MonoMSBuildRuntime))
{
DeleteDirectory(env.Folders.MonoMSBuildRuntime, recursive: true);
}

if (DirectoryExists(env.Folders.MonoMSBuildLib))
{
DeleteDirectory(env.Folders.MonoMSBuildLib, recursive: true);
}

CreateDirectory(env.Folders.MonoMSBuildRuntime);
CreateDirectory(env.Folders.MonoMSBuildLib);

var msbuildMonoRuntimeZip = CombinePaths(env.Folders.MonoMSBuildRuntime, buildPlan.MSBuildRuntimeForMono);
var msbuildMonoLibZip = CombinePaths(env.Folders.MonoMSBuildLib, buildPlan.MSBuildLibForMono);

using (var client = new WebClient())
{
client.DownloadFile($"{buildPlan.DownloadURL}/{buildPlan.MSBuildRuntimeForMono}", msbuildMonoRuntimeZip);
client.DownloadFile($"{buildPlan.DownloadURL}/{buildPlan.MSBuildLibForMono}", msbuildMonoLibZip);
}

Unzip(msbuildMonoRuntimeZip, env.Folders.MonoMSBuildRuntime);
Unzip(msbuildMonoLibZip, env.Folders.MonoMSBuildLib);

DeleteFile(msbuildMonoRuntimeZip);
DeleteFile(msbuildMonoLibZip);
}

if (DirectoryExists(msbuildNet46Folder))
{
DeleteDirectory(msbuildNet46Folder, recursive: true);
}

if (DirectoryExists(msbuildNetCoreAppFolder))
{
DeleteDirectory(msbuildNetCoreAppFolder, recursive: true);
}

CreateDirectory(msbuildNet46Folder);
CreateDirectory(msbuildNetCoreAppFolder);

// Copy MSBuild runtime to appropriate locations
var msbuildInstallFolder = CombinePaths(env.Folders.Tools, "Microsoft.Build.Runtime", "contentFiles", "any");
var msbuildNet46InstallFolder = CombinePaths(msbuildInstallFolder, "net46");
var msbuildNetCoreAppInstallFolder = CombinePaths(msbuildInstallFolder, "netcoreapp1.0");

if (IsRunningOnWindows())
{
CopyDirectory(msbuildNet46InstallFolder, msbuildNet46Folder);
}
else
{
CopyDirectory(env.Folders.MonoMSBuildRuntime, msbuildNet46Folder);
}

CopyDirectory(msbuildNetCoreAppInstallFolder, msbuildNetCoreAppFolder);

// Finally, copy Microsoft.Net.Compilers
var roslynFolder = CombinePaths(env.Folders.Tools, "Microsoft.Net.Compilers", "tools");
var roslynNet46Folder = CombinePaths(msbuildNet46Folder, "Roslyn");
var roslynNetCoreAppFolder = CombinePaths(msbuildNetCoreAppFolder, "Roslyn");

CreateDirectory(roslynNet46Folder);
CreateDirectory(roslynNetCoreAppFolder);

CopyDirectory(roslynFolder, roslynNet46Folder);
CopyDirectory(roslynFolder, roslynNetCoreAppFolder);

// Delete unnecessary files
foreach (var folder in new[] { roslynNet46Folder, roslynNetCoreAppFolder })
{
DeleteFile(CombinePaths(folder, "Microsoft.CodeAnalysis.VisualBasic.dll"));
DeleteFile(CombinePaths(folder, "Microsoft.VisualBasic.Core.targets"));
DeleteFile(CombinePaths(folder, "VBCSCompiler.exe"));
DeleteFile(CombinePaths(folder, "VBCSCompiler.exe.config"));
DeleteFile(CombinePaths(folder, "vbc.exe"));
DeleteFile(CombinePaths(folder, "vbc.exe.config"));
DeleteFile(CombinePaths(folder, "vbc.rsp"));
}
}

0 comments on commit 2caf248

Please sign in to comment.