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@1558: public override bool BuildLibrary(Package pkg, Library lib) dvander@388: { dvander@388: ProcessStartInfo info = new ProcessStartInfo(); dvander@388: dvander@388: string path = Config.PathFormat("{0}/{1}", dvander@1548: cfg.source_path, dvander@1548: lib.source_path); dvander@388: dvander@388: /* PlatformExt ignored for us */ dvander@1548: string binName = lib.binary_name; dvander@388: dvander@1548: if (!lib.is_executable) dvander@388: { dvander@1548: if (lib.has_platform_ext) 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@1881: string output_folder = (lib.release_mode == ReleaseMode.ReleaseMode_Release) ? "Release" : "Debug"; dvander@1881: dvander@1881: if (lib.build_mode == BuildMode.BuildMode_Episode2) dvander@1881: { dvander@1881: output_folder += ".orangebox"; dvander@1881: } dvander@1881: else if (lib.build_mode == BuildMode.BuildMode_OldMetamod) dvander@1881: { dvander@1881: output_folder += ".original"; dvander@1881: } dvander@1881: dvander@388: string binpath = Config.PathFormat("{0}/{1}/{2}", dvander@388: path, dvander@1881: output_folder, dvander@388: binName); dvander@388: dvander@388: if (File.Exists(binpath)) dvander@388: { dvander@388: File.Delete(binpath); dvander@388: } dvander@388: dvander@1880: string makefile_args = ""; dvander@1548: dvander@1548: if (lib.build_mode == BuildMode.BuildMode_Episode1) dvander@1548: { dvander@1879: makefile_args = null; dvander@1548: } dvander@1548: else if (lib.build_mode == BuildMode.BuildMode_Episode2) dvander@1548: { dvander@1879: makefile_args = "ENGINE=\"orangebox\""; dvander@1548: } dvander@1548: else if (lib.build_mode == BuildMode.BuildMode_OldMetamod) dvander@1548: { dvander@1879: makefile_args = "ENGINE=\"original\""; dvander@1548: } dvander@1548: dvander@388: /* Clean the project first */ dvander@388: info.WorkingDirectory = path; dvander@1548: info.FileName = cfg.builder_path; dvander@1879: info.Arguments = makefile_args + " 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@1548: info.FileName = cfg.builder_path; dvander@1880: info.Arguments = makefile_args; dvander@388: info.UseShellExecute = false; dvander@468: dvander@1548: if (cfg.build_options != null) dvander@468: { dvander@1548: info.Arguments += " " + cfg.build_options; 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@1558: path = Config.PathFormat("{0}/{1}/{2}/{3}", dvander@1558: cfg.pkg_path, dvander@1558: pkg.GetBaseFolder(), dvander@1558: lib.package_path, dvander@1558: binName); dvander@1558: File.Copy(binpath, path, true); dvander@388: dvander@388: return true; dvander@388: } dvander@388: } dvander@388: }