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));
 }
Beispiel #6
0
 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);
        }
Beispiel #8
0
	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;
	    }
Beispiel #10
0
	    string GenTargetName (BuildfileParser bp)
	    {
		return String.Format (".implicit_{0}_line_{1}", bp.nconstructed++,
				      bp.lexer.LineNum);
	    }