sourcemod/tools/builder/LinuxBuilder.cs
David Anderson 97d1660b34 added real support for alternate building methods and orangebox packaging
refactored a lot of variable names, yuck
removed tons of legacy compressing/SVN code that's since handled by Perl

--HG--
extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401554
2007-10-14 18:55:49 +00:00

104 lines
2.1 KiB
C#

using System;
using System.IO;
using System.Diagnostics;
namespace builder
{
public class LinuxBuilder : ABuilder
{
public LinuxBuilder(Config _cfg)
{
cfg = _cfg;
}
public override string GetPawnCompilerName()
{
return "spcomp";
}
public override bool BuildLibrary(Package pkg, Library lib, ref string _binName, ref string _binPath)
{
ProcessStartInfo info = new ProcessStartInfo();
string path = Config.PathFormat("{0}/{1}",
cfg.source_path,
lib.source_path);
/* PlatformExt ignored for us */
string binName = lib.binary_name;
if (!lib.is_executable)
{
if (lib.has_platform_ext)
{
binName += "_i486.so";
}
else
{
binName += ".so";
}
}
string binpath = Config.PathFormat("{0}/{1}/{2}",
path,
(lib.release_mode == ReleaseMode.ReleaseMode_Release) ? "Release" : "Debug",
binName);
if (File.Exists(binpath))
{
File.Delete(binpath);
}
string makefile_name = "Makefile";
if (lib.build_mode == BuildMode.BuildMode_Episode1)
{
makefile_name = "Makefile.ep1";
}
else if (lib.build_mode == BuildMode.BuildMode_Episode2)
{
makefile_name = "Makefile.ep2";
}
else if (lib.build_mode == BuildMode.BuildMode_OldMetamod)
{
makefile_name = "Makefile.orig";
}
/* Clean the project first */
info.WorkingDirectory = path;
info.FileName = cfg.builder_path;
info.Arguments = "-f " + makefile_name + " clean";
info.UseShellExecute = false;
Process p = Process.Start(info);
p.WaitForExit();
p.Close();
/* Now build it */
info.WorkingDirectory = path;
info.FileName = cfg.builder_path;
info.Arguments = "-f " + makefile_name;
info.UseShellExecute = false;
if (cfg.build_options != null)
{
info.Arguments += " " + cfg.build_options;
}
p = Process.Start(info);
p.WaitForExit();
p.Close();
if (!File.Exists(binpath))
{
return false;
}
_binName = binName;
_binPath = binpath;
return true;
}
}
}