sourcemod/tools/builder/Win32Builder.cs
Scott Ehlert 251cced1f8 Spring Cleaning, Part Ichi (1)
Various minor things done to project files
Updated sample extension project file and updated makefile to the new unified version (more changes likely on the way)
Updated regex project file and makefile

--HG--
extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401971
2008-03-30 07:00:22 +00:00

117 lines
2.6 KiB
C#

using System;
using System.IO;
using System.Diagnostics;
namespace builder
{
public class Win32Builder : ABuilder
{
public Win32Builder(Config _cfg)
{
cfg = _cfg;
}
public override string GetPawnCompilerName()
{
return "spcomp.exe";
}
public override bool BuildLibrary(Package pkg, Library lib)
{
ProcessStartInfo info = new ProcessStartInfo();
string path = Config.PathFormat("{0}/{1}/msvc8",
cfg.source_path,
lib.source_path);
/* PlatformExt ignored for us */
string binName = lib.binary_name + (lib.is_executable ? ".exe" : ".dll");
string config_name = "Unknown";
if (lib.release_mode == ReleaseMode.ReleaseMode_Release)
{
config_name = "Release";
}
else if (lib.release_mode == ReleaseMode.ReleaseMode_Debug)
{
config_name = "Debug";
}
if (lib.build_mode == BuildMode.BuildMode_Episode1)
{
config_name = config_name + " - Episode 1";
}
else if (lib.build_mode == BuildMode.BuildMode_Episode2)
{
config_name = config_name + " - Orange Box";
}
else if (lib.build_mode == BuildMode.BuildMode_OldMetamod)
{
config_name = config_name + " - Old Metamod";
}
string binpath = Config.PathFormat("{0}/{1}/{2}",
path,
config_name,
binName);
if (File.Exists(binpath))
{
File.Delete(binpath);
}
string project_file = null;
if (lib.vcproj_name != null)
{
project_file = lib.vcproj_name + ".vcproj";
}
else
{
project_file = lib.binary_name + ".vcproj";
}
info.WorkingDirectory = path;
info.FileName = cfg.builder_path;
info.UseShellExecute = false;
info.RedirectStandardOutput = true;
info.RedirectStandardError = true;
if (cfg.build_options != null)
{
info.Arguments = cfg.build_options + " ";
}
info.Arguments += "/rebuild \"" + config_name + "\" " + project_file;
Process p = Process.Start(info);
Console.WriteLine(p.StandardOutput.ReadToEnd());
p.WaitForExit();
p.Close();
if (!File.Exists(binpath))
{
return false;
}
path = Config.PathFormat("{0}/{1}/{2}/{3}",
cfg.pkg_path,
pkg.GetBaseFolder(),
lib.package_path,
binName);
File.Copy(binpath, path, true);
/* On Windows we optionally log the PDB path */
if (!lib.is_executable && cfg.pdb_log_file != null)
{
FileStream fs = File.Open(cfg.pdb_log_file, FileMode.Append, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine(binpath.Replace(".dll", ".pdb"));
sw.Close();
}
return true;
}
}
}