From e2b2bf641a2c1058e52db45e81978ae0a07929d3 Mon Sep 17 00:00:00 2001 From: kudzu_cp <6d05c8c8ef5431987001abfdb2eadc9593ac9498> Date: Sat, 16 Jun 2012 14:26:07 +0000 Subject: [PATCH] UserKit Build support --- Setup2/Cosmos.iss | 5 +- .../Cosmos.Build.Builder.csproj | 1 + .../Build/Cosmos.Build.Builder/CosmosTask.cs | 114 +++++++++++++----- .../Cosmos.Build.Builder/MainWindow.xaml.cs | 22 +++- 4 files changed, 110 insertions(+), 32 deletions(-) diff --git a/Setup2/Cosmos.iss b/Setup2/Cosmos.iss index 5ff8bebf2..85398d601 100644 --- a/Setup2/Cosmos.iss +++ b/Setup2/Cosmos.iss @@ -1,4 +1,5 @@ -#define ChangeSetVersion "92560" +; Do NOT change this next line in Dev Kit +#define ChangeSetVersion "7" #ifndef BuildConfiguration #error "No Build configuration defined!" @@ -31,7 +32,7 @@ AppVersion={#ChangeSetVersion} DefaultDirName={userappdata}\Cosmos User Kit DefaultGroupName=Cosmos User Kit OutputDir=.\Setup2\Output -OutputBaseFilename=CosmosUserKit +OutputBaseFilename=CosmosUserKit-{#ChangeSetVersion} #ifdef Compress Compression=lzma2/ultra64 InternalCompressLevel=ultra64 diff --git a/source2/Build/Cosmos.Build.Builder/Cosmos.Build.Builder.csproj b/source2/Build/Cosmos.Build.Builder/Cosmos.Build.Builder.csproj index 7caf9d184..df5005e09 100644 --- a/source2/Build/Cosmos.Build.Builder/Cosmos.Build.Builder.csproj +++ b/source2/Build/Cosmos.Build.Builder/Cosmos.Build.Builder.csproj @@ -58,6 +58,7 @@ false + diff --git a/source2/Build/Cosmos.Build.Builder/CosmosTask.cs b/source2/Build/Cosmos.Build.Builder/CosmosTask.cs index 1cb98f3c7..c566e8264 100644 --- a/source2/Build/Cosmos.Build.Builder/CosmosTask.cs +++ b/source2/Build/Cosmos.Build.Builder/CosmosTask.cs @@ -10,11 +10,14 @@ namespace Cosmos.Build.Builder { protected string mCosmosPath; public bool ResetHive { get; set; } protected string mOutputPath; - protected bool mUserKit; + public bool IsUserKit { get; set; } + protected int mReleaseNo; + protected string mInnoFile; - public CosmosTask(string aCosmosPath, bool aUserKit) { + public CosmosTask(string aCosmosPath, int aReleaseNo) { mCosmosPath = aCosmosPath; - mUserKit = aUserKit; + mReleaseNo = aReleaseNo; + mInnoFile = mCosmosPath + @"\Setup2\Cosmos.iss"; } protected void MsBuild(string aSlnFile, string aBuildCfg) { @@ -27,10 +30,51 @@ namespace Cosmos.Build.Builder { Directory.CreateDirectory(mOutputPath); } - Section("Compiling X# Compiler"); - MsBuild(mCosmosPath + @"\source2\XSharp.sln", "Debug"); + CompileXSharpCompiler(); + CompileXSharpSource(); + CompileCosmos(); + CopyTemplates(); + if (IsUserKit) { + CreateUserKitScript(); + } + CreateSetup(); + if (!IsUserKit) { + RunSetup(); + LaunchVS(); + } + Done(); + } + + void CreateUserKitScript() { + Section("Creating User Kit Script"); + + // Read in Cosmos.iss + using (var xSrc = new StreamReader(mInnoFile)) { + mInnoFile = Path.Combine(Path.GetDirectoryName(mInnoFile), "UserKit.iss"); + // Write out UserKit.iss + using (var xDest = new StreamWriter(mInnoFile)) { + string xLine; + while ((xLine = xSrc.ReadLine()) != null) { + if (xLine.StartsWith("#define ChangeSetVersion ", StringComparison.InvariantCultureIgnoreCase)) { + xDest.WriteLine("#define ChangeSetVersion " + Quoted(mReleaseNo.ToString())); + } else { + xDest.WriteLine(xLine); + } + } + } + } + } + + void CompileXSharpCompiler() { + Section("Compiling X# Compiler"); + + MsBuild(mCosmosPath + @"\source2\XSharp.sln", "Debug"); + } + + void CompileXSharpSource() { 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)); @@ -42,15 +86,18 @@ namespace Cosmos.Build.Builder { // This way we can build it and call it directly. StartConsole(mOutputPath + @"\xsc.exe", Quoted(xFile) + @" Cosmos.Debug.DebugStub"); } + } + void CompileCosmos() { Section("Compiling Cosmos"); + MsBuild(mCosmosPath + @"\source\Cosmos.sln", "Builder"); + } + + void CopyTemplates() { + Section("Copying Templates"); 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"); @@ -59,33 +106,46 @@ namespace Cosmos.Build.Builder { Copy("CosmosProject (VB).zip"); Copy("CosmosKernel (VB).zip"); Copy(mCosmosPath + @"\source2\VSIP\Cosmos.VS.XSharp\Template\XSharpFileItem.zip"); + } + void CreateSetup() { Section("Creating Setup"); + if (!File.Exists(Paths.ProgFiles32 + @"\Inno Setup 5\ISCC.exe")) { throw new Exception("Cannot find Inno setup."); } - string xCfg = mUserKit ? "UserKit" : "DevKit"; - StartConsole(Paths.ProgFiles32 + @"\Inno Setup 5\ISCC.exe", @"/Q " + Quoted(mCosmosPath + @"\Setup2\Cosmos.iss") + " /dBuildConfiguration=" + xCfg); + string xCfg = IsUserKit ? "UserKit" : "DevKit"; + StartConsole(Paths.ProgFiles32 + @"\Inno Setup 5\ISCC.exe", @"/Q " + Quoted(mInnoFile) + " /dBuildConfiguration=" + xCfg); - if (!mUserKit) { - Section("Running Setup"); - Start(mCosmosPath + @"\Setup2\Output\CosmosUserKit.exe", @"/SILENT"); + if (IsUserKit) { + File.Delete(mInnoFile); + } + } - 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); + void LaunchVS() { + 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); + } + + void RunSetup() { + Section("Running Setup"); + + Start(mCosmosPath + @"\Setup2\Output\CosmosUserKit-" + mReleaseNo + ".exe", @"/SILENT"); + } + + void Done() { Section("Build Complete!"); } } diff --git a/source2/Build/Cosmos.Build.Builder/MainWindow.xaml.cs b/source2/Build/Cosmos.Build.Builder/MainWindow.xaml.cs index 2db381ada..f429aa01d 100644 --- a/source2/Build/Cosmos.Build.Builder/MainWindow.xaml.cs +++ b/source2/Build/Cosmos.Build.Builder/MainWindow.xaml.cs @@ -13,6 +13,7 @@ using System.Windows.Navigation; using System.Security.Permissions; using System.Windows.Threading; using System.IO; +using Microsoft.VisualBasic; namespace Cosmos.Build.Builder { public partial class MainWindow : Window { @@ -39,23 +40,36 @@ namespace Cosmos.Build.Builder { StringBuilder mClipboard = new StringBuilder(); DispatcherTimer mCloseTimer; - public void Build() { + public bool Build() { // TODO: Check for Inno, VS SDK SP1, other prereqs string xAppPath = System.AppDomain.CurrentDomain.BaseDirectory; string xCosmosPath = Path.GetFullPath(xAppPath + @"..\..\..\..\..\"); + bool xIsUserKit = mApp.Args.Contains("-USERKIT"); + int xReleaseNo = 7; - var xTask = new CosmosTask(xCosmosPath, mApp.Args.Contains("-USERKIT")); + if (xIsUserKit) { + string x = Interaction.InputBox("Enter Release Number", "Cosmos Builder"); + if (string.IsNullOrEmpty(x)) { + return false; + } + xReleaseNo = int.Parse(x); + } + + var xTask = new CosmosTask(xCosmosPath, xReleaseNo); xTask.Log.LogLine += new Installer.Log.LogLineHandler(Log_LogLine); xTask.Log.LogSection += new Installer.Log.LogSectionHandler(Log_LogSection); xTask.Log.LogError += new Installer.Log.LogErrorHandler(Log_LogError); xTask.ResetHive = mApp.Args.Contains("-RESETHIVE"); + xTask.IsUserKit = xIsUserKit; var xThread = new System.Threading.Thread(delegate() { xTask.Run(); ThreadDone(); }); xThread.Start(); + + return true; } void ThreadDone() { @@ -152,7 +166,9 @@ namespace Cosmos.Build.Builder { } void Window_Loaded(object sender, RoutedEventArgs e) { - Build(); + if (!Build()) { + Close(); + } } void butnCopy_Click(object sender, RoutedEventArgs e) {