tools/builder/LinuxBuilder.cs
author David Anderson <dvander@alliedmods.net>
Sat Jan 27 03:10:31 2007 +0000 (2007-01-27)
changeset 388 4c346c316a49
child 392 12aa3258d020
permissions -rw-r--r--
added build tool
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@388
    14
		public override bool BuildLibrary(Package pkg, Library lib, ref string _binName, ref string _binPath)
dvander@388
    15
		{
dvander@388
    16
			ProcessStartInfo info = new ProcessStartInfo();
dvander@388
    17
dvander@388
    18
			string path = Config.PathFormat("{0}/{1}", 
dvander@388
    19
				cfg.SourceBase,
dvander@388
    20
				lib.LocalPath);
dvander@388
    21
dvander@388
    22
			/* PlatformExt ignored for us */
dvander@388
    23
			string binName = lib.Name;
dvander@388
    24
			
dvander@388
    25
			if (!lib.IsExecutable)
dvander@388
    26
			{
dvander@388
    27
				if (lib.PlatformExt)
dvander@388
    28
				{
dvander@388
    29
					binName += "_i486.so";
dvander@388
    30
				} 
dvander@388
    31
				else 
dvander@388
    32
				{
dvander@388
    33
					binName += ".so";
dvander@388
    34
				}
dvander@388
    35
			}
dvander@388
    36
dvander@388
    37
			string binpath = Config.PathFormat("{0}/{1}/{2}",
dvander@388
    38
				path,
dvander@388
    39
				lib.ReleaseBuild,
dvander@388
    40
				binName);
dvander@388
    41
			
dvander@388
    42
			if (File.Exists(binpath))
dvander@388
    43
			{
dvander@388
    44
				File.Delete(binpath);
dvander@388
    45
			}
dvander@388
    46
dvander@388
    47
			/* Clean the project first */
dvander@388
    48
			info.WorkingDirectory = path;
dvander@388
    49
			info.FileName = cfg.BuilderPath;
dvander@388
    50
			info.Arguments = "clean";
dvander@388
    51
			info.UseShellExecute = false;
dvander@388
    52
dvander@388
    53
			Process p = Process.Start(info);
dvander@388
    54
			p.WaitForExit();
dvander@388
    55
			p.Close();
dvander@388
    56
dvander@388
    57
			/* Now build it */
dvander@388
    58
			info.WorkingDirectory = path;
dvander@388
    59
			info.FileName = cfg.BuilderPath;
dvander@388
    60
			info.Arguments = "Release";
dvander@388
    61
			info.UseShellExecute = false;
dvander@388
    62
			p = Process.Start(info);
dvander@388
    63
			p.WaitForExit();
dvander@388
    64
			p.Close();
dvander@388
    65
dvander@388
    66
			if (!File.Exists(binpath))
dvander@388
    67
			{
dvander@388
    68
				return false;
dvander@388
    69
			}
dvander@388
    70
			
dvander@388
    71
			/* Now verify the binary */
dvander@388
    72
			info.WorkingDirectory = "/bin";			/* :TODO: Fix this */
dvander@388
    73
			info.FileName = "dlsym";
dvander@388
    74
			info.Arguments = binpath;
dvander@388
    75
			info.UseShellExecute = false;
dvander@388
    76
			info.RedirectStandardOutput = true;
dvander@388
    77
			p = Process.Start(info);
dvander@388
    78
			string output = p.StandardOutput.ReadToEnd();
dvander@388
    79
			p.WaitForExit();
dvander@388
    80
			p.Close();
dvander@388
    81
dvander@388
    82
			if (output.IndexOf("Handle:") == -1)
dvander@388
    83
			{
dvander@388
    84
				return false;
dvander@388
    85
			}
dvander@388
    86
dvander@388
    87
			_binName = binName;
dvander@388
    88
			_binPath = binpath;
dvander@388
    89
dvander@388
    90
			return true;
dvander@388
    91
		}
dvander@388
    92
	}
dvander@388
    93
}