tools/builder/Win32Builder.cs
author Scott Ehlert <ds@alliedmods.net>
Tue May 13 08:22:49 2008 +0000 (2008-05-13)
changeset 2051 568678a2e847
parent 1952 b7aa2b626807
child 2289 44045ead61cd
permissions -rw-r--r--
Trunk build fixes
Fixed up IGameHelpers.h such that it no longer requires HL2SDK headers if a function doesn't need them
ds@1952
     1
using System;
ds@1952
     2
using System.IO;
ds@1952
     3
using System.Diagnostics;
ds@1952
     4
ds@1952
     5
namespace builder
ds@1952
     6
{
ds@1952
     7
	public class Win32Builder : ABuilder
ds@1952
     8
	{
ds@1952
     9
		public Win32Builder(Config _cfg)
ds@1952
    10
		{
ds@1952
    11
			cfg = _cfg;
ds@1952
    12
		}
ds@1952
    13
ds@1952
    14
		public override string GetPawnCompilerName()
ds@1952
    15
		{
ds@1952
    16
			return "spcomp.exe";
ds@1952
    17
		}
ds@1952
    18
ds@1952
    19
		public override bool BuildLibrary(Package pkg, Library lib)
ds@1952
    20
		{
ds@1952
    21
			ProcessStartInfo info = new ProcessStartInfo();
ds@1952
    22
ds@1952
    23
			string path = Config.PathFormat("{0}/{1}/msvc8", 
ds@1952
    24
				cfg.source_path,
ds@1952
    25
				lib.source_path);
ds@1952
    26
ds@1952
    27
			/* PlatformExt ignored for us */
ds@1952
    28
			string binName = lib.binary_name + (lib.is_executable ? ".exe" : ".dll");
ds@1952
    29
ds@1952
    30
			string config_name = "Unknown";
ds@1952
    31
ds@1952
    32
			if (lib.release_mode == ReleaseMode.ReleaseMode_Release)
ds@1952
    33
			{
ds@1952
    34
				config_name = "Release";
ds@1952
    35
			}
ds@1952
    36
			else if (lib.release_mode == ReleaseMode.ReleaseMode_Debug)
ds@1952
    37
			{
ds@1952
    38
				config_name = "Debug";
ds@1952
    39
			}
ds@1952
    40
ds@1952
    41
			if (lib.build_mode == BuildMode.BuildMode_Episode1)
ds@1952
    42
			{
ds@1952
    43
				config_name = config_name + " - Episode 1";
ds@1952
    44
			}
ds@1952
    45
			else if (lib.build_mode == BuildMode.BuildMode_Episode2)
ds@1952
    46
			{
ds@1952
    47
				config_name = config_name + " - Orange Box";
ds@1952
    48
			}
ds@1952
    49
			else if (lib.build_mode == BuildMode.BuildMode_OldMetamod)
ds@1952
    50
			{
ds@1952
    51
				config_name = config_name + " - Old Metamod";
ds@1952
    52
			}
ds@1952
    53
ds@1952
    54
			string binpath = Config.PathFormat("{0}/{1}/{2}",
ds@1952
    55
				path,
ds@1952
    56
				config_name,
ds@1952
    57
				binName);
ds@1952
    58
			
ds@1952
    59
			if (File.Exists(binpath))
ds@1952
    60
			{
ds@1952
    61
				File.Delete(binpath);
ds@1952
    62
			}
ds@1952
    63
ds@1952
    64
			string project_file = null;
ds@1952
    65
			if (lib.vcproj_name != null)
ds@1952
    66
			{
ds@1952
    67
				project_file = lib.vcproj_name + ".vcproj";
ds@1952
    68
			} 
ds@1952
    69
			else 
ds@1952
    70
			{
ds@1952
    71
				project_file = lib.binary_name + ".vcproj";
ds@1952
    72
			}
ds@1952
    73
ds@1952
    74
			info.WorkingDirectory = path;
ds@1952
    75
			info.FileName = cfg.builder_path;
ds@1952
    76
			info.UseShellExecute = false;
ds@1952
    77
			info.RedirectStandardOutput = true;
ds@1952
    78
			info.RedirectStandardError = true;
ds@1952
    79
ds@1952
    80
			if (cfg.build_options != null)
ds@1952
    81
			{
ds@1952
    82
				info.Arguments = cfg.build_options + " ";
ds@1952
    83
			}
ds@1952
    84
ds@1952
    85
			info.Arguments += "/rebuild \"" + config_name + "\" " + project_file;
ds@1952
    86
ds@1952
    87
			Process p = Process.Start(info);
ds@1952
    88
			Console.WriteLine(p.StandardOutput.ReadToEnd());
ds@1952
    89
			p.WaitForExit();
ds@1952
    90
			p.Close();
ds@1952
    91
ds@1952
    92
			if (!File.Exists(binpath))
ds@1952
    93
			{
ds@1952
    94
				return false;
ds@1952
    95
			}
ds@1952
    96
ds@1952
    97
			path = Config.PathFormat("{0}/{1}/{2}/{3}",
ds@1952
    98
				cfg.pkg_path,
ds@1952
    99
				pkg.GetBaseFolder(),
ds@1952
   100
				lib.package_path,
ds@1952
   101
				binName);
ds@1952
   102
			File.Copy(binpath, path, true);
ds@1952
   103
ds@1952
   104
			/* On Windows we optionally log the PDB path */
ds@1952
   105
			if (!lib.is_executable && cfg.pdb_log_file != null)
ds@1952
   106
			{
ds@1952
   107
				FileStream fs = File.Open(cfg.pdb_log_file, FileMode.Append, FileAccess.Write);
ds@1952
   108
				StreamWriter sw = new StreamWriter(fs);
ds@1952
   109
				sw.WriteLine(binpath.Replace(".dll", ".pdb"));
ds@1952
   110
				sw.Close();
ds@1952
   111
			}
ds@1952
   112
ds@1952
   113
			return true;
ds@1952
   114
		}
ds@1952
   115
	}
ds@1952
   116
}