tools/builder/LinuxBuilder.cs
author Scott Ehlert <ds@alliedmods.net>
Fri Nov 14 09:18:30 2008 -0600 (2008-11-14)
changeset 2400 76b7b4575e21
parent 2289 44045ead61cd
child 2479 44e8e76d4e53
permissions -rw-r--r--
Added preliminary support for Left 4 Dead; some things may not yet work.
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 LinuxBuilder : ABuilder
dvander@388
     8
	{
dvander@388
     9
		public LinuxBuilder(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";
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}", 
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;
dvander@388
    29
			
dvander@1548
    30
			if (!lib.is_executable)
dvander@388
    31
			{
dvander@1548
    32
				if (lib.has_platform_ext)
dvander@388
    33
				{
dvander@388
    34
					binName += "_i486.so";
dvander@388
    35
				} 
dvander@388
    36
				else 
dvander@388
    37
				{
dvander@388
    38
					binName += ".so";
dvander@388
    39
				}
dvander@388
    40
			}
dvander@388
    41
dvander@1881
    42
			string output_folder = (lib.release_mode == ReleaseMode.ReleaseMode_Release) ? "Release" : "Debug";
dvander@1881
    43
dvander@1881
    44
			if (lib.build_mode == BuildMode.BuildMode_Episode2)
dvander@1881
    45
			{
dvander@1881
    46
				output_folder += ".orangebox";
dvander@1881
    47
			}
dvander@1881
    48
			else if (lib.build_mode == BuildMode.BuildMode_OldMetamod)
dvander@1881
    49
			{
dvander@1881
    50
				output_folder += ".original";
dvander@1881
    51
			}
ds@2400
    52
			else if (lib.build_mode == BuildMode.BuildMode_Left4Dead)
ds@2400
    53
			{
ds@2400
    54
				output_folder += ".left4dead";
ds@2400
    55
			}
dvander@1881
    56
dvander@388
    57
			string binpath = Config.PathFormat("{0}/{1}/{2}",
dvander@388
    58
				path,
dvander@1881
    59
				output_folder,
dvander@388
    60
				binName);
dvander@388
    61
			
dvander@388
    62
			if (File.Exists(binpath))
dvander@388
    63
			{
dvander@388
    64
				File.Delete(binpath);
dvander@388
    65
			}
dvander@388
    66
dvander@1880
    67
			string makefile_args = "";
dvander@1548
    68
dvander@1548
    69
			if (lib.build_mode == BuildMode.BuildMode_Episode1)
dvander@1548
    70
			{
dvander@1879
    71
				makefile_args = null;
dvander@1548
    72
			}
dvander@1548
    73
			else if (lib.build_mode == BuildMode.BuildMode_Episode2)
dvander@1548
    74
			{
dvander@1879
    75
				makefile_args = "ENGINE=\"orangebox\"";
dvander@1548
    76
			}
dvander@1548
    77
			else if (lib.build_mode == BuildMode.BuildMode_OldMetamod)
dvander@1548
    78
			{
dvander@1879
    79
				makefile_args = "ENGINE=\"original\"";
dvander@1548
    80
			}
ds@2400
    81
			else if (lib.build_mode == BuildMode.BuildMode_Left4Dead)
ds@2400
    82
			{
ds@2400
    83
				makefile_args = "ENGINE=\"left4dead\"";
ds@2400
    84
			}
dvander@1548
    85
dvander@388
    86
			/* Clean the project first */
dvander@388
    87
			info.WorkingDirectory = path;
dvander@1548
    88
			info.FileName = cfg.builder_path;
dvander@1879
    89
			info.Arguments = makefile_args + " clean";
dvander@388
    90
			info.UseShellExecute = false;
dvander@388
    91
dvander@388
    92
			Process p = Process.Start(info);
dvander@388
    93
			p.WaitForExit();
dvander@388
    94
			p.Close();
dvander@388
    95
dvander@388
    96
			/* Now build it */
dvander@388
    97
			info.WorkingDirectory = path;
dvander@1548
    98
			info.FileName = cfg.builder_path;
dvander@1880
    99
			info.Arguments = makefile_args;
dvander@388
   100
			info.UseShellExecute = false;
dvander@468
   101
dvander@1548
   102
			if (cfg.build_options != null)
dvander@468
   103
			{
dvander@1548
   104
				info.Arguments += " " + cfg.build_options;
dvander@468
   105
			}
dvander@468
   106
dvander@388
   107
			p = Process.Start(info);
dvander@388
   108
			p.WaitForExit();
dvander@388
   109
			p.Close();
dvander@388
   110
dvander@388
   111
			if (!File.Exists(binpath))
dvander@388
   112
			{
dvander@388
   113
				return false;
dvander@388
   114
			}
dvander@388
   115
			
dvander@1558
   116
			path = Config.PathFormat("{0}/{1}/{2}/{3}",
dvander@1558
   117
				cfg.pkg_path,
dvander@1558
   118
				pkg.GetBaseFolder(),
dvander@1558
   119
				lib.package_path,
dvander@1558
   120
				binName);
dvander@1558
   121
			File.Copy(binpath, path, true);
dvander@388
   122
dvander@388
   123
			return true;
dvander@388
   124
		}
dvander@388
   125
	}
dvander@388
   126
}