tools/builder/LinuxBuilder.cs
author David Anderson <dvander@alliedmods.net>
Sun Jan 28 04:19:46 2007 +0000 (2007-01-28)
changeset 403 fe1c5a3a4ba2
parent 392 12aa3258d020
child 467 8192f64d8f57
permissions -rw-r--r--
Added compression support
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@403
    32
			Process p = Process.Start(info);
dvander@403
    33
			p.WaitForExit();
dvander@403
    34
dvander@403
    35
			local_dir = Config.PathFormat("{0}/{1}", local_dir, name);
dvander@403
    36
dvander@403
    37
			if (!File.Exists(local_dir))
dvander@403
    38
			{
dvander@403
    39
				return null;
dvander@403
    40
			}
dvander@403
    41
dvander@403
    42
			return name;
dvander@403
    43
		}
dvander@403
    44
dvander@403
    45
dvander@388
    46
		public override bool BuildLibrary(Package pkg, Library lib, ref string _binName, ref string _binPath)
dvander@388
    47
		{
dvander@388
    48
			ProcessStartInfo info = new ProcessStartInfo();
dvander@388
    49
dvander@388
    50
			string path = Config.PathFormat("{0}/{1}", 
dvander@388
    51
				cfg.SourceBase,
dvander@388
    52
				lib.LocalPath);
dvander@388
    53
dvander@388
    54
			/* PlatformExt ignored for us */
dvander@388
    55
			string binName = lib.Name;
dvander@388
    56
			
dvander@388
    57
			if (!lib.IsExecutable)
dvander@388
    58
			{
dvander@388
    59
				if (lib.PlatformExt)
dvander@388
    60
				{
dvander@388
    61
					binName += "_i486.so";
dvander@388
    62
				} 
dvander@388
    63
				else 
dvander@388
    64
				{
dvander@388
    65
					binName += ".so";
dvander@388
    66
				}
dvander@388
    67
			}
dvander@388
    68
dvander@388
    69
			string binpath = Config.PathFormat("{0}/{1}/{2}",
dvander@388
    70
				path,
dvander@388
    71
				lib.ReleaseBuild,
dvander@388
    72
				binName);
dvander@388
    73
			
dvander@388
    74
			if (File.Exists(binpath))
dvander@388
    75
			{
dvander@388
    76
				File.Delete(binpath);
dvander@388
    77
			}
dvander@388
    78
dvander@388
    79
			/* Clean the project first */
dvander@388
    80
			info.WorkingDirectory = path;
dvander@388
    81
			info.FileName = cfg.BuilderPath;
dvander@388
    82
			info.Arguments = "clean";
dvander@388
    83
			info.UseShellExecute = false;
dvander@388
    84
dvander@388
    85
			Process p = Process.Start(info);
dvander@388
    86
			p.WaitForExit();
dvander@388
    87
			p.Close();
dvander@388
    88
dvander@388
    89
			/* Now build it */
dvander@388
    90
			info.WorkingDirectory = path;
dvander@388
    91
			info.FileName = cfg.BuilderPath;
dvander@392
    92
			info.Arguments = "";
dvander@388
    93
			info.UseShellExecute = false;
dvander@388
    94
			p = Process.Start(info);
dvander@388
    95
			p.WaitForExit();
dvander@388
    96
			p.Close();
dvander@388
    97
dvander@388
    98
			if (!File.Exists(binpath))
dvander@388
    99
			{
dvander@388
   100
				return false;
dvander@388
   101
			}
dvander@388
   102
			
dvander@388
   103
			_binName = binName;
dvander@388
   104
			_binPath = binpath;
dvander@388
   105
dvander@388
   106
			return true;
dvander@388
   107
		}
dvander@388
   108
	}
dvander@388
   109
}