tools/builder/LinuxBuilder.cs
author David Anderson <dvander@alliedmods.net>
Mon Feb 12 05:13:53 2007 +0000 (2007-02-12)
changeset 467 8192f64d8f57
parent 403 fe1c5a3a4ba2
child 468 e88b65aad7e1
permissions -rw-r--r--
added ability to specify extra options to the build line
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@403
    14
		public override string CompressPackage(Package pkg)
dvander@403
    15
		{
dvander@403
    16
			string lpath = null, ltarget = null;
dvander@403
    17
			
dvander@403
    18
			pkg.GetCompressBases(ref lpath, ref ltarget);
dvander@403
    19
dvander@403
    20
			string local_dir = Config.PathFormat("{0}/{1}", 
dvander@403
    21
				cfg.OutputBase,
dvander@403
    22
				lpath);
dvander@403
    23
dvander@403
    24
			string name = PackageBuildName(pkg) + ".tar.gz";
dvander@403
    25
dvander@403
    26
			ProcessStartInfo info = new ProcessStartInfo();
dvander@403
    27
			info.FileName = cfg.Compressor;
dvander@403
    28
			info.WorkingDirectory = local_dir;
dvander@403
    29
			info.Arguments = "zcvf \"" + name + "\" \"" + ltarget + "\"";
dvander@403
    30
			info.UseShellExecute = false;
dvander@403
    31
dvander@467
    32
			if (cfg.BuildOptions != null)
dvander@467
    33
			{
dvander@467
    34
				info.Arguments += " " + cfg.BuildOptions;
dvander@467
    35
			}
dvander@467
    36
dvander@403
    37
			Process p = Process.Start(info);
dvander@403
    38
			p.WaitForExit();
dvander@403
    39
dvander@403
    40
			local_dir = Config.PathFormat("{0}/{1}", local_dir, name);
dvander@403
    41
dvander@403
    42
			if (!File.Exists(local_dir))
dvander@403
    43
			{
dvander@403
    44
				return null;
dvander@403
    45
			}
dvander@403
    46
dvander@403
    47
			return name;
dvander@403
    48
		}
dvander@403
    49
dvander@403
    50
dvander@388
    51
		public override bool BuildLibrary(Package pkg, Library lib, ref string _binName, ref string _binPath)
dvander@388
    52
		{
dvander@388
    53
			ProcessStartInfo info = new ProcessStartInfo();
dvander@388
    54
dvander@388
    55
			string path = Config.PathFormat("{0}/{1}", 
dvander@388
    56
				cfg.SourceBase,
dvander@388
    57
				lib.LocalPath);
dvander@388
    58
dvander@388
    59
			/* PlatformExt ignored for us */
dvander@388
    60
			string binName = lib.Name;
dvander@388
    61
			
dvander@388
    62
			if (!lib.IsExecutable)
dvander@388
    63
			{
dvander@388
    64
				if (lib.PlatformExt)
dvander@388
    65
				{
dvander@388
    66
					binName += "_i486.so";
dvander@388
    67
				} 
dvander@388
    68
				else 
dvander@388
    69
				{
dvander@388
    70
					binName += ".so";
dvander@388
    71
				}
dvander@388
    72
			}
dvander@388
    73
dvander@388
    74
			string binpath = Config.PathFormat("{0}/{1}/{2}",
dvander@388
    75
				path,
dvander@388
    76
				lib.ReleaseBuild,
dvander@388
    77
				binName);
dvander@388
    78
			
dvander@388
    79
			if (File.Exists(binpath))
dvander@388
    80
			{
dvander@388
    81
				File.Delete(binpath);
dvander@388
    82
			}
dvander@388
    83
dvander@388
    84
			/* Clean the project first */
dvander@388
    85
			info.WorkingDirectory = path;
dvander@388
    86
			info.FileName = cfg.BuilderPath;
dvander@388
    87
			info.Arguments = "clean";
dvander@388
    88
			info.UseShellExecute = false;
dvander@388
    89
dvander@388
    90
			Process p = Process.Start(info);
dvander@388
    91
			p.WaitForExit();
dvander@388
    92
			p.Close();
dvander@388
    93
dvander@388
    94
			/* Now build it */
dvander@388
    95
			info.WorkingDirectory = path;
dvander@388
    96
			info.FileName = cfg.BuilderPath;
dvander@392
    97
			info.Arguments = "";
dvander@388
    98
			info.UseShellExecute = false;
dvander@388
    99
			p = Process.Start(info);
dvander@388
   100
			p.WaitForExit();
dvander@388
   101
			p.Close();
dvander@388
   102
dvander@388
   103
			if (!File.Exists(binpath))
dvander@388
   104
			{
dvander@388
   105
				return false;
dvander@388
   106
			}
dvander@388
   107
			
dvander@388
   108
			_binName = binName;
dvander@388
   109
			_binPath = binpath;
dvander@388
   110
dvander@388
   111
			return true;
dvander@388
   112
		}
dvander@388
   113
	}
dvander@388
   114
}