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@403: public abstract string CompressPackage(Package pkg); dvander@403: dvander@388: public abstract bool BuildLibrary(Package pkg, Library lib, ref string _binName, ref string _binPath); dvander@388: dvander@403: public string GetRevsionOfPath(string path) dvander@403: { dvander@403: ProcessStartInfo info = new ProcessStartInfo(); dvander@403: dvander@403: info.WorkingDirectory = path; dvander@403: info.FileName = cfg.SVNVersion; ds@424: info.Arguments = "--committed \"" + path + "\""; dvander@403: info.UseShellExecute = false; dvander@403: info.RedirectStandardOutput = true; dvander@403: dvander@403: Process p = Process.Start(info); dvander@403: string output = p.StandardOutput.ReadToEnd(); dvander@403: p.WaitForExit(); dvander@403: p.Close(); dvander@403: dvander@403: string [] revs = output.Split(":".ToCharArray(), 2); dvander@403: if (revs.Length < 1) dvander@403: { dvander@403: return null; dvander@403: } dvander@403: dvander@403: string rev = null; dvander@403: if (revs.Length == 1) dvander@403: { dvander@403: rev = revs[0]; dvander@403: } dvander@403: else dvander@403: { dvander@403: rev = revs[1]; dvander@403: } dvander@403: dvander@403: rev = rev.Trim(); dvander@403: rev = rev.Replace("M", ""); dvander@403: rev = rev.Replace("S", ""); dvander@403: dvander@403: return rev; dvander@403: } dvander@403: dvander@388: public void UpdateRevisionInfo(Package pkg, Library lib) dvander@388: { dvander@388: string path = Config.PathFormat("{0}/{1}", cfg.SourceBase, lib.LocalPath); dvander@388: string file = Config.PathFormat("{0}/svn_version.h", path); dvander@388: dvander@388: if (File.Exists(file)) dvander@388: { dvander@388: UpdateRevisionInfo(path, file); dvander@388: } dvander@388: } dvander@388: dvander@403: public void UpdateRevisionInfo(string path, string file) dvander@403: { dvander@403: string vers = cfg.ProductVersion.Replace(".", ","); dvander@403: string rev = GetRevsionOfPath(path); dvander@403: dvander@403: File.Delete(file); dvander@403: StreamWriter sw = File.CreateText(file); dvander@403: dvander@403: sw.WriteLine("/** This file is autogenerated by build scripts */"); dvander@403: sw.WriteLine(""); dvander@403: sw.WriteLine("#ifndef _INCLUDE_SVN_VERSION_H_"); dvander@403: sw.WriteLine("#define _INCLUDE_SVN_VERSION_H_"); dvander@403: sw.WriteLine(""); dvander@403: sw.WriteLine("#define SVN_REVISION {0}", rev); dvander@403: sw.WriteLine("#define SVN_REVISION_STRING \"{0}\"", rev); dvander@403: sw.WriteLine("#define SVN_FILE_VERSION {0},{1}", vers, rev); dvander@403: sw.WriteLine(""); dvander@403: sw.WriteLine("#endif //_INCLUDE_SVN_VERSION_H_"); dvander@403: sw.WriteLine(""); dvander@403: dvander@403: sw.Close(); dvander@403: } dvander@403: dvander@403: public bool CopyFile(Package pkg, string source, string dest) dvander@403: { dvander@403: string from = Config.PathFormat("{0}/{1}", dvander@403: cfg.SourceBase, dvander@403: source); dvander@403: string to = Config.PathFormat("{0}/{1}/{2}", dvander@403: cfg.OutputBase, 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@388: string from_base = Config.PathFormat("{0}/{1}", cfg.SourceBase, 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@403: cfg.OutputBase, dvander@403: pkg.GetBaseFolder()); dvander@403: } dvander@403: else dvander@403: { dvander@403: to_base = Config.PathFormat("{0}/{1}/{2}", dvander@403: cfg.OutputBase, 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