public static BuildfileParser CreateForFile (string topsrc, string srcrel, WrenchProvider wp, IWarningLogger log) { string file = Path.Combine (topsrc, srcrel); string resdir = Path.GetDirectoryName (srcrel); if (resdir.Length == 0) resdir = "."; FileStream fs = new FileStream (file, FileMode.Open, FileAccess.Read); BufferedStream bs = new BufferedStream (fs); StreamReader reader = new StreamReader (bs); BuildfileParser p = new BuildfileParser (reader, topsrc, resdir, file, wp, log); p.AddResourceFile (Path.GetFileName (srcrel)); return p; }
public static BuildfileParser CreateForFile(string topsrc, string srcrel, WrenchProvider wp, IWarningLogger log) { string file = Path.Combine(topsrc, srcrel); string resdir = Path.GetDirectoryName(srcrel); if (resdir.Length == 0) { resdir = "."; } FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read); BufferedStream bs = new BufferedStream(fs); StreamReader reader = new StreamReader(bs); BuildfileParser p = new BuildfileParser(reader, topsrc, resdir, file, wp, log); p.AddResourceFile(Path.GetFileName(srcrel)); return(p); }
public bool Define(BuildfileParser bp, IWarningLogger log) { this.tb = bp.wp.DefineTarget(GenTargetName(bp), log); return(tb == null); }
string GenTargetName(BuildfileParser bp) { return(String.Format(".implicit_{0}_line_{1}", bp.nconstructed++, bp.lexer.LineNum)); }
public void Add(string basis) { bases.Add(BuildfileParser.CanonicalizeBasis(basis)); }
public BuildfileLoader(string buildfile, ProviderBuilder pb, IWarningLogger log) { parser = BuildfileParser.CreateForFile(buildfile, pb, log); // Console.WriteLine ("Parsing `{0}\' ... ", buildfile); errors = parser.Parse(); }
public override bool Initialize(WrenchProvider wp, IWarningLogger log, Queue children) { bool is_top = (basis == "/"); string topsrc = ss.PathToSourceRelative(""); string file = ss.PathToSourceRelative(srcrel); BuildfileParser parser = BuildfileParser.CreateForFile(topsrc, srcrel, wp, log); if (parser.Parse() > 0) { // Parse errors return(true); } // FIXME: tell the parser whether a project[] section is OK and have // it signal the error. That way we get line info. if (!is_top && parser.PInfo != null) { log.Error(2006, "Found a project[] directive in a non-toplevel buildfile", file); return(true); } else if (is_top && parser.PInfo == null) { log.Error(2006, "Toplevel buildfile did not have a project[] directive", file); return(true); } if (is_top) { // kinda ugly. parser.PInfo.BuildfileName = Path.GetFileName(srcrel); if (((GraphBuilder)wp.Owner).SetProjectInfo(parser.PInfo, log)) { return(true); } children.Enqueue(new ProjectProviderLoader(parser.PInfo)); } foreach (string sub in parser.Subdirs) { children.Enqueue(new BuildfileProviderLoader(basis + sub, ss)); } foreach (BuildfileParser.InsideInfo ii in parser.Insides) { foreach (string s in ii.Bases) { children.Enqueue(new InsideProviderLoader(basis + s, ii.Context)); } } if (parser.ManualLoads != null) { foreach (string k in parser.ManualLoads.Keys) { string srel = (string)parser.ManualLoads[k]; children.Enqueue(new BuildfileProviderLoader(basis + k, DeclarationLoc, ss, srel)); } } return(false); }
public BuildfileLoader (string buildfile, ProviderBuilder pb, IWarningLogger log) { parser = BuildfileParser.CreateForFile (buildfile, pb, log); // Console.WriteLine ("Parsing `{0}\' ... ", buildfile); errors = parser.Parse (); }
public bool Define (BuildfileParser bp, IWarningLogger log) { this.tb = bp.wp.DefineTarget (GenTargetName (bp), log); return tb == null; }
string GenTargetName (BuildfileParser bp) { return String.Format (".implicit_{0}_line_{1}", bp.nconstructed++, bp.lexer.LineNum); }