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); }