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 abstract class ABuilder dvander@388: { dvander@388: public Config cfg; dvander@388: dvander@388: public ABuilder() dvander@388: { dvander@388: } dvander@388: dvander@1558: public abstract bool BuildLibrary(Package pkg, Library lib); dvander@388: dvander@852: public abstract string GetPawnCompilerName(); dvander@852: dvander@852: public bool CompilePlugin(Package pkg, Plugin pl) dvander@852: { dvander@1548: string local_dir = Config.PathFormat("{0}/{1}/addons/sourcemod/scripting", cfg.pkg_path, pkg.GetBaseFolder()); dvander@852: dvander@852: string filepath = null; dvander@852: if (pl.Folder != null) dvander@852: { dvander@852: filepath = Config.PathFormat("{0}/{1}", pl.Folder, pl.Source); dvander@852: } dvander@852: else dvander@852: { dvander@852: filepath = pl.Source; dvander@852: } dvander@852: dvander@852: ProcessStartInfo info = new ProcessStartInfo(); dvander@852: info.WorkingDirectory = local_dir; dvander@852: info.FileName = Config.PathFormat("{0}/{1}", local_dir, GetPawnCompilerName()); dvander@852: info.Arguments = filepath + ".sp"; dvander@852: info.UseShellExecute = false; dvander@852: info.RedirectStandardOutput = true; dvander@852: info.RedirectStandardError = true; dvander@852: dvander@852: Process p = Process.Start(info); dvander@852: string output = p.StandardOutput.ReadToEnd() + "\n"; dvander@852: output += p.StandardError.ReadToEnd(); dvander@852: p.WaitForExit(); dvander@852: p.Close(); dvander@852: dvander@852: Console.WriteLine(output); dvander@852: dvander@1548: string binary = Config.PathFormat("{0}/{1}/addons/sourcemod/scripting/{2}.smx", cfg.pkg_path, pkg.GetBaseFolder(), pl.Source); dvander@852: if (!File.Exists(binary)) dvander@852: { dvander@852: return false; dvander@852: } dvander@1329: dvander@1329: string new_loc; dvander@1329: if (pl.disabled) dvander@1329: { dvander@1548: new_loc = Config.PathFormat("{0}/{1}/addons/sourcemod/plugins/disabled/{2}.smx", cfg.pkg_path, pkg.GetBaseFolder(), pl.Source); dvander@1329: } dvander@1329: else dvander@1329: { dvander@1548: new_loc = Config.PathFormat("{0}/{1}/addons/sourcemod/plugins/{2}.smx", cfg.pkg_path, pkg.GetBaseFolder(), pl.Source); dvander@1329: } dvander@852: dvander@852: try dvander@852: { dvander@852: if (File.Exists(new_loc)) dvander@852: { dvander@852: File.Delete(new_loc); dvander@852: } dvander@852: File.Move(binary, new_loc); dvander@852: } dvander@852: catch (System.Exception e) dvander@852: { dvander@852: Console.WriteLine(e.Message); dvander@852: return false; dvander@852: } dvander@852: dvander@852: return true; dvander@852: } dvander@852: dvander@403: public bool CopyFile(Package pkg, string source, string dest) dvander@403: { dvander@403: string from = Config.PathFormat("{0}/{1}", dvander@1548: cfg.source_path, dvander@403: source); dvander@403: string to = Config.PathFormat("{0}/{1}/{2}", dvander@1548: cfg.pkg_path, dvander@403: pkg.GetBaseFolder(), dvander@403: dest); dvander@403: dvander@403: File.Copy(from, to, true); dvander@403: dvander@403: return true; dvander@403: } dvander@403: dvander@403: /** dest can be null to mean root base folder */ dvander@388: public void CopyFolder(Package pkg, string source, string dest, string [] omits) dvander@388: { dvander@1548: string from_base = Config.PathFormat("{0}/{1}", cfg.source_path, source); dvander@403: string to_base = null; dvander@403: dvander@403: if (dest == null) dvander@403: { dvander@403: to_base = Config.PathFormat("{0}/{1}", dvander@1548: cfg.pkg_path, dvander@403: pkg.GetBaseFolder()); dvander@403: } dvander@403: else dvander@403: { dvander@403: to_base = Config.PathFormat("{0}/{1}/{2}", dvander@1548: cfg.pkg_path, dvander@403: pkg.GetBaseFolder(), dvander@403: dest); dvander@403: } dvander@388: dvander@388: string [] files = Directory.GetFiles(from_base); dvander@388: string file; dvander@388: dvander@388: for (int i=0; i