Cosmos/source2/Build/Cosmos.Build.Builder/CosmosTask.cs
2012-06-15 01:54:58 +00:00

85 lines
3.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Cosmos.Build.Installer;
using System.IO;
namespace Cosmos.Build.Builder {
public class CosmosTask : Task {
protected string mCosmosPath;
public bool ResetHive { get; set; }
protected string mOutputPath;
public CosmosTask(string aCosmosPath) {
mCosmosPath = aCosmosPath;
}
protected void MsBuild(string aSlnFile, string aBuildCfg) {
StartConsole(Paths.Windows + @"\Microsoft.NET\Framework\v4.0.30319\msbuild.exe", Quoted(aSlnFile) + @" /maxcpucount /verbosity:normal /nologo /p:Configuration=" + aBuildCfg + " /p:Platform=x86 /p:OutputPath=" + Quoted(mOutputPath));
}
protected override void DoRun() {
mOutputPath = mCosmosPath + @"\Build\VSIP";
if (!Directory.Exists(mOutputPath)) {
Directory.CreateDirectory(mOutputPath);
}
Section("Compiling X# Compiler");
MsBuild(mCosmosPath + @"\source2\XSharp.sln", "Debug");
Section("Compiling X# Sources");
var xFiles = Directory.GetFiles(mCosmosPath + @"\source2\Compiler\Cosmos.Compiler.DebugStub\", "*.xs");
foreach (var xFile in xFiles) {
Echo("Compiling " + Path.GetFileName(xFile));
string xDest = Path.ChangeExtension(xFile, ".cs");
if (File.Exists(xDest)) {
ResetReadOnly(xDest);
}
// We dont ref the X# asm directly because then we could not compile it without dynamic loading.
// This way we can build it and call it directly.
StartConsole(mOutputPath + @"\xsc.exe", Quoted(xFile) + @" Cosmos.Debug.DebugStub");
}
Section("Compiling Cosmos");
MsBuild(mCosmosPath + @"\source\Cosmos.sln", "Builder");
CD(mOutputPath);
Section("Copying Templates");
// Copy templates
// .iss does some of this as well.. why some here? And why is VB disabled in .iss?
SrcPath = mCosmosPath + @"\source2\VSIP\Cosmos.VS.Package\obj\x86\Debug";
Copy("CosmosProject (C#).zip");
Copy("CosmosKernel (C#).zip");
Copy("CosmosProject (F#).zip");
Copy("Cosmos.zip");
Copy("CosmosProject (VB).zip");
Copy("CosmosKernel (VB).zip");
Copy(mCosmosPath + @"\source2\VSIP\Cosmos.VS.XSharp\Template\XSharpFileItem.zip");
Section("Creating Setup");
if (!File.Exists(Paths.ProgFiles32 + @"\Inno Setup 5\ISCC.exe")) {
throw new Exception("Cannot find Inno setup.");
}
StartConsole(Paths.ProgFiles32 + @"\Inno Setup 5\ISCC.exe", @"/Q " + Quoted(mCosmosPath + @"\Setup2\Cosmos.iss") + " /dBuildConfiguration=Devkit");
Section("Running Setup");
Start(mCosmosPath + @"\Setup2\Output\CosmosUserKit.exe", @"/SILENT");
Section("Launching Visual Studio");
string xVisualStudio = Paths.ProgFiles32 + @"\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe";
if (!File.Exists(xVisualStudio)) {
throw new Exception("Cannot find Visual Studio.");
}
if (ResetHive) {
Echo("Resetting hive");
Start(xVisualStudio, @"/setup /rootsuffix Exp /ranu");
}
Echo("Launching Visual Studio");
Start(xVisualStudio, mCosmosPath + @"\source\Cosmos.sln", false);
}
}
}