diff --git a/Build/Tools/mkisofs.exe b/Build/Tools/mkisofs.exe deleted file mode 100644 index 957d8a7414..0000000000 Binary files a/Build/Tools/mkisofs.exe and /dev/null differ diff --git a/Build/Tools/mkisofs/mkisofs.exe b/Build/Tools/mkisofs/mkisofs.exe new file mode 100644 index 0000000000..4b131f36b2 Binary files /dev/null and b/Build/Tools/mkisofs/mkisofs.exe differ diff --git a/Build/Tools/mkisofs/readme.txt b/Build/Tools/mkisofs/readme.txt new file mode 100644 index 0000000000..41bfd5987d --- /dev/null +++ b/Build/Tools/mkisofs/readme.txt @@ -0,0 +1,6 @@ + +mkisofs +- GPLv2 +- http://code.google.com/p/mkisofs-md5/ +- Version: 2.01 + diff --git a/Setup/Cosmos.iss b/Setup/Cosmos.iss index 7d43ab36ca..f22d25e1db 100644 --- a/Setup/Cosmos.iss +++ b/Setup/Cosmos.iss @@ -156,6 +156,7 @@ Source: ".\Resources\Dependencies\cecil\Mono.Cecil.Pdb.pdb"; DestDir: "{app}\Bui Source: ".\Build\Tools\*.exe"; DestDir: "{app}\Build\Tools"; Flags: ignoreversion uninsremovereadonly Source: ".\Build\Tools\NAsm\*.exe"; DestDir: "{app}\Build\Tools\NAsm"; Flags: ignoreversion uninsremovereadonly Source: ".\Build\Tools\Cygwin\*"; DestDir: "{app}\Build\Tools\cygwin"; Flags: ignoreversion uninsremovereadonly overwritereadonly +Source: ".\Build\Tools\mkisofs\*"; DestDir: "{app}\Build\Tools\mkisofs"; Flags: ignoreversion uninsremovereadonly overwritereadonly ; Source: ".\Build\VSIP\Cosmos.Deploy.USB.exe"; DestDir: "{app}\Build\Tools"; Flags: ignoreversion uninsremovereadonly Source: ".\Build\VSIP\Cosmos.Build.Common.dll"; DestDir: "{app}\Build\Tools"; Flags: ignoreversion uninsremovereadonly diff --git a/source/Cosmos.Build.Common/Cosmos.Build.Common.csproj b/source/Cosmos.Build.Common/Cosmos.Build.Common.csproj index c9e01cdd36..5c6683bf4a 100644 --- a/source/Cosmos.Build.Common/Cosmos.Build.Common.csproj +++ b/source/Cosmos.Build.Common/Cosmos.Build.Common.csproj @@ -81,6 +81,7 @@ + diff --git a/source/Cosmos.Build.Common/IsoMaker.cs b/source/Cosmos.Build.Common/IsoMaker.cs index 665dcbf268..5fd27daab8 100644 --- a/source/Cosmos.Build.Common/IsoMaker.cs +++ b/source/Cosmos.Build.Common/IsoMaker.cs @@ -1,30 +1,54 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using System.IO; -using System.Diagnostics; - -namespace Cosmos.Build.Common { - public class IsoMaker { - - static public void Generate(string aBuildPath, string xInputPathname, string aIsoPathname) { - string xPath = Path.Combine(aBuildPath, @"ISO"); - if (File.Exists(aIsoPathname)) { - File.Delete(aIsoPathname); - } - - string xIsoLinux = Path.Combine(xPath, "isolinux.bin"); - File.SetAttributes(xIsoLinux, FileAttributes.Normal); - - var xPSI = new ProcessStartInfo( - Path.Combine(CosmosPaths.Tools, "mkisofs.exe"), - String.Format("-R -b \"{0}\" -no-emul-boot -boot-load-size 4 -boot-info-table -o \"{1}\" \"{2}\"", - xIsoLinux, aIsoPathname, xPath) - ); - xPSI.UseShellExecute = false; - xPSI.CreateNoWindow = true; - Process.Start(xPSI); +using System.Text; + +namespace Cosmos.Build.Common +{ + public class IsoMaker + { + static public void Generate(string imageFile, string isoFilename) + { + var destinationDirectory = Path.GetDirectoryName(imageFile); + + string isoDirectory = Path.Combine(destinationDirectory, "iso"); + + if (Directory.Exists(isoDirectory)) + { + Directory.Delete(isoDirectory, true); + } + + Directory.CreateDirectory(isoDirectory); + + var buildISO = Path.Combine(CosmosPaths.Build, "ISO"); + + File.Copy(Path.Combine(buildISO, "isolinux.bin"), Path.Combine(isoDirectory, "isolinux.bin")); + File.Copy(Path.Combine(buildISO, "mboot.c32"), Path.Combine(isoDirectory, "mboot.c32")); + File.Copy(Path.Combine(buildISO, "syslinux.cfg"), Path.Combine(isoDirectory, "syslinux.cfg")); + File.Copy(imageFile, Path.Combine(isoDirectory, "Cosmos.bin")); + + string arg = + "-relaxed-filenames" + + " -J -R" + + " -o " + Quote(isoFilename) + + " -b isolinux.bin" + + " -no-emul-boot" + + " -boot-load-size 4" + + " -boot-info-table " + + Quote(isoDirectory); + + var output = ProcessExtension.LaunchApplication( + Path.Combine(Path.Combine(CosmosPaths.Tools, "mkisofs"), "mkisofs.exe"), + arg, + true + ); + + File.WriteAllText(Path.ChangeExtension(isoFilename, ".log"), output); + } + + protected static string Quote(string location) + { + return '"' + location + '"'; + } + } - } -} +} \ No newline at end of file diff --git a/source/Cosmos.Build.Common/ProcessExtension.cs b/source/Cosmos.Build.Common/ProcessExtension.cs new file mode 100644 index 0000000000..1bb7a50170 --- /dev/null +++ b/source/Cosmos.Build.Common/ProcessExtension.cs @@ -0,0 +1,32 @@ +using System.Diagnostics; + +namespace Cosmos.Build.Common +{ + public static class ProcessExtension + { + public static string LaunchApplication(string app, string args, bool waitForExit) + { + var start = new ProcessStartInfo(); + start.FileName = app; + start.Arguments = args; + start.UseShellExecute = false; + start.CreateNoWindow = true; + start.RedirectStandardOutput = true; + start.RedirectStandardError = true; + + var process = Process.Start(start); + + if (waitForExit) + { + var output = process.StandardOutput.ReadToEnd(); + + process.WaitForExit(); + + var error = process.StandardError.ReadToEnd(); + return output + error; + } + + return string.Empty; + } + } +} \ No newline at end of file diff --git a/source/Cosmos.Build.MSBuild/MakeISO.cs b/source/Cosmos.Build.MSBuild/MakeISO.cs index 25f1e2fcbf..426e361fc8 100644 --- a/source/Cosmos.Build.MSBuild/MakeISO.cs +++ b/source/Cosmos.Build.MSBuild/MakeISO.cs @@ -31,7 +31,7 @@ public string CosmosBuildDir { #endregion public override bool Execute() { - IsoMaker.Generate(CosmosBuildDir, InputFile, OutputFile); + IsoMaker.Generate(InputFile, OutputFile); return true; } } diff --git a/source/Cosmos.VS.Package/VsProjectConfig.cs b/source/Cosmos.VS.Package/VsProjectConfig.cs index 54f12a0296..fced1cea95 100644 --- a/source/Cosmos.VS.Package/VsProjectConfig.cs +++ b/source/Cosmos.VS.Package/VsProjectConfig.cs @@ -40,7 +40,7 @@ public override int DebugLaunch(uint aLaunch) { string xBinFile = Path.ChangeExtension(xOutputAsm, ".bin"); if (xDeployment == DeploymentType.ISO) { - IsoMaker.Generate(CosmosPaths.Build, xBinFile, xIsoFile); + IsoMaker.Generate(xBinFile, xIsoFile); } else if (xDeployment == DeploymentType.USB) { Process.Start(Path.Combine(CosmosPaths.Tools, "Cosmos.Deploy.USB.exe"), "\"" + xBinFile + "\"");