tools/builder/Win32Builder.cs
author David Anderson <dvander@alliedmods.net>
Sun Nov 25 18:50:13 2007 +0000 (2007-11-25)
changeset 1725 ea875bcbc286
parent 1558 95a3d8bf618d
child 1816 269bbfbfbcac
permissions -rw-r--r--
small clarification to param2 in MenuAction_End
dvander@388
     1
using System;
dvander@388
     2
using System.IO;
dvander@388
     3
using System.Diagnostics;
dvander@388
     4
dvander@388
     5
namespace builder
dvander@388
     6
{
dvander@388
     7
	public class Win32Builder : ABuilder
dvander@388
     8
	{
dvander@388
     9
		public Win32Builder(Config _cfg)
dvander@388
    10
		{
dvander@388
    11
			cfg = _cfg;
dvander@388
    12
		}
dvander@388
    13
dvander@852
    14
		public override string GetPawnCompilerName()
dvander@852
    15
		{
dvander@852
    16
			return "spcomp.exe";
dvander@852
    17
		}
dvander@852
    18
dvander@1558
    19
		public override bool BuildLibrary(Package pkg, Library lib)
dvander@388
    20
		{
dvander@388
    21
			ProcessStartInfo info = new ProcessStartInfo();
dvander@388
    22
dvander@388
    23
			string path = Config.PathFormat("{0}/{1}/msvc8", 
dvander@1548
    24
				cfg.source_path,
dvander@1548
    25
				lib.source_path);
dvander@388
    26
dvander@388
    27
			/* PlatformExt ignored for us */
dvander@1548
    28
			string binName = lib.binary_name + (lib.is_executable ? ".exe" : ".dll");
dvander@1548
    29
dvander@1548
    30
			string config_name = "Unknown";
dvander@1548
    31
dvander@1548
    32
			if (lib.release_mode == ReleaseMode.ReleaseMode_Release)
dvander@1548
    33
			{
dvander@1548
    34
				config_name = "Release";
dvander@1548
    35
			}
dvander@1548
    36
			else if (lib.release_mode == ReleaseMode.ReleaseMode_Debug)
dvander@1548
    37
			{
dvander@1548
    38
				config_name = "Debug";
dvander@1548
    39
			}
dvander@1548
    40
dvander@1548
    41
			if (lib.build_mode == BuildMode.BuildMode_Episode1)
dvander@1548
    42
			{
dvander@1548
    43
				config_name = config_name + " - Episode 1";
dvander@1548
    44
			}
dvander@1548
    45
			else if (lib.build_mode == BuildMode.BuildMode_Episode2)
dvander@1548
    46
			{
dvander@1548
    47
				config_name = config_name + " - Orange Box";
dvander@1548
    48
			}
dvander@1548
    49
			else if (lib.build_mode == BuildMode.BuildMode_OldMetamod)
dvander@1548
    50
			{
dvander@1548
    51
				config_name = config_name + " - Old Metamod";
dvander@1548
    52
			}
dvander@388
    53
dvander@388
    54
			string binpath = Config.PathFormat("{0}/{1}/{2}",
dvander@388
    55
				path,
dvander@1548
    56
				config_name,
dvander@388
    57
				binName);
dvander@388
    58
			
dvander@388
    59
			if (File.Exists(binpath))
dvander@388
    60
			{
dvander@388
    61
				File.Delete(binpath);
dvander@388
    62
			}
dvander@388
    63
dvander@1548
    64
			string project_file = null;
dvander@1548
    65
			if (lib.vcproj_name != null)
dvander@388
    66
			{
dvander@1548
    67
				project_file = lib.vcproj_name + ".vcproj";
dvander@388
    68
			} 
dvander@388
    69
			else 
dvander@388
    70
			{
dvander@1548
    71
				project_file = lib.binary_name + ".vcproj";
dvander@388
    72
			}
dvander@388
    73
dvander@388
    74
			info.WorkingDirectory = path;
dvander@1548
    75
			info.FileName = cfg.builder_path;
dvander@388
    76
			info.UseShellExecute = false;
dvander@686
    77
			info.RedirectStandardOutput = true;
dvander@686
    78
			info.RedirectStandardError = true;
dvander@388
    79
dvander@1548
    80
			if (cfg.build_options != null)
dvander@468
    81
			{
dvander@1548
    82
				info.Arguments = cfg.build_options + " ";
dvander@468
    83
			}
dvander@468
    84
dvander@1548
    85
			info.Arguments += "/rebuild \"" + config_name + "\" " + project_file;
dvander@471
    86
dvander@388
    87
			Process p = Process.Start(info);
dvander@686
    88
			Console.WriteLine(p.StandardOutput.ReadToEnd());
dvander@388
    89
			p.WaitForExit();
dvander@388
    90
			p.Close();
dvander@388
    91
dvander@388
    92
			if (!File.Exists(binpath))
dvander@388
    93
			{
dvander@388
    94
				return false;
dvander@388
    95
			}
dvander@388
    96
dvander@1558
    97
			path = Config.PathFormat("{0}/{1}/{2}/{3}",
dvander@1558
    98
				cfg.pkg_path,
dvander@1558
    99
				pkg.GetBaseFolder(),
dvander@1558
   100
				lib.package_path,
dvander@1558
   101
				binName);
dvander@1558
   102
			File.Copy(binpath, path, true);
dvander@1558
   103
dvander@1558
   104
			/* On Windows we package the .pdb files as well */
dvander@1558
   105
			binpath = binpath.Replace(".dll", ".pdb");
dvander@1558
   106
			path = path.Replace(".dll", ".pdb");
dvander@1558
   107
			File.Copy(binpath, path, true);
dvander@388
   108
dvander@388
   109
			return true;
dvander@388
   110
		}
dvander@388
   111
	}
dvander@388
   112
}