dvander@388: using System; dvander@388: using System.IO; dvander@388: using System.Diagnostics; dvander@388: dvander@388: namespace builder dvander@388: { dvander@388: public class LinuxBuilder : ABuilder dvander@388: { dvander@388: public LinuxBuilder(Config _cfg) dvander@388: { dvander@388: cfg = _cfg; dvander@388: } dvander@388: dvander@852: public override string GetPawnCompilerName() dvander@852: { dvander@852: return "spcomp"; dvander@852: } dvander@852: dvander@403: public override string CompressPackage(Package pkg) dvander@403: { dvander@403: string lpath = null, ltarget = null; dvander@403: dvander@403: pkg.GetCompressBases(ref lpath, ref ltarget); dvander@403: dvander@403: string local_dir = Config.PathFormat("{0}/{1}", dvander@403: cfg.OutputBase, dvander@403: lpath); dvander@403: dvander@403: string name = PackageBuildName(pkg) + ".tar.gz"; dvander@403: dvander@403: ProcessStartInfo info = new ProcessStartInfo(); dvander@403: info.FileName = cfg.Compressor; dvander@403: info.WorkingDirectory = local_dir; dvander@403: info.Arguments = "zcvf \"" + name + "\" \"" + ltarget + "\""; dvander@403: info.UseShellExecute = false; dvander@403: dvander@403: Process p = Process.Start(info); dvander@403: p.WaitForExit(); dvander@403: dvander@403: local_dir = Config.PathFormat("{0}/{1}", local_dir, name); dvander@403: dvander@403: if (!File.Exists(local_dir)) dvander@403: { dvander@403: return null; dvander@403: } dvander@403: dvander@403: return name; dvander@403: } dvander@403: dvander@403: dvander@388: public override bool BuildLibrary(Package pkg, Library lib, ref string _binName, ref string _binPath) dvander@388: { dvander@388: ProcessStartInfo info = new ProcessStartInfo(); dvander@388: dvander@388: string path = Config.PathFormat("{0}/{1}", dvander@388: cfg.SourceBase, dvander@388: lib.LocalPath); dvander@388: dvander@388: /* PlatformExt ignored for us */ dvander@388: string binName = lib.Name; dvander@388: dvander@388: if (!lib.IsExecutable) dvander@388: { dvander@388: if (lib.PlatformExt) dvander@388: { dvander@388: binName += "_i486.so"; dvander@388: } dvander@388: else dvander@388: { dvander@388: binName += ".so"; dvander@388: } dvander@388: } dvander@388: dvander@388: string binpath = Config.PathFormat("{0}/{1}/{2}", dvander@388: path, dvander@388: lib.ReleaseBuild, dvander@388: binName); dvander@388: dvander@388: if (File.Exists(binpath)) dvander@388: { dvander@388: File.Delete(binpath); dvander@388: } dvander@388: dvander@388: /* Clean the project first */ dvander@388: info.WorkingDirectory = path; dvander@388: info.FileName = cfg.BuilderPath; dvander@388: info.Arguments = "clean"; dvander@388: info.UseShellExecute = false; dvander@388: dvander@388: Process p = Process.Start(info); dvander@388: p.WaitForExit(); dvander@388: p.Close(); dvander@388: dvander@388: /* Now build it */ dvander@388: info.WorkingDirectory = path; dvander@388: info.FileName = cfg.BuilderPath; dvander@392: info.Arguments = ""; dvander@388: info.UseShellExecute = false; dvander@468: dvander@468: if (cfg.BuildOptions != null) dvander@468: { dvander@468: info.Arguments += " " + cfg.BuildOptions; dvander@468: } dvander@468: dvander@388: p = Process.Start(info); dvander@388: p.WaitForExit(); dvander@388: p.Close(); dvander@388: dvander@388: if (!File.Exists(binpath)) dvander@388: { dvander@388: return false; dvander@388: } dvander@388: dvander@388: _binName = binName; dvander@388: _binPath = binpath; dvander@388: dvander@388: return true; dvander@388: } dvander@388: } dvander@388: }