| 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-- |
| 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 |
} |