Example #1
0
		public static int Main (string[] args)
		{
			if (args.Length != 2) {
				Console.WriteLine ("Usage: glgen <filename> <outputfile>");
				return 0;
			}

			Parser p = new Parser (args[0]);
			p.Parse ();
			Writer writer = new Writer(args[1], p.Namespace);
			
			foreach (IGeneratable gen in SymbolTable.Generatables) {
				gen.Generate (writer.sw);
			}

			writer.CloseWriter();

			Statistics.Report();
			return 0;
		}
        public static int Main(string[] args)
        {
            if (args.Length < 2) {
                Console.WriteLine ("Usage: codegen --generate <filename1...>");
                return 0;
            }

            bool generate = false;
            string dir = "";
            string assembly_name = "";
            string glue_filename = "";
            string glue_includes = "";
            string gluelib_name = "";

            SymbolTable table = SymbolTable.Table;
            ArrayList gens = new ArrayList ();
            foreach (string arg in args) {
                if (arg.StartsWith ("--customdir=")) {
                    Console.WriteLine ("Using .custom files is not supported anymore, use partial classes instead.");
                    return 0;
                }
                string filename = arg;
                if (arg == "--generate") {
                    generate = true;
                    continue;
                } else if (arg == "--include") {
                    generate = false;
                    continue;
                } else if (arg.StartsWith ("-I:")) {
                    generate = false;
                    filename = filename.Substring (3);
                } else if (arg.StartsWith ("--outdir=")) {
                    generate = false;
                    dir = arg.Substring (9);
                    continue;
                } else if (arg.StartsWith ("--assembly-name=")) {
                    generate = false;
                    assembly_name = arg.Substring (16);
                    continue;
                } else if (arg.StartsWith ("--glue-filename=")) {
                    generate = false;
                    glue_filename = arg.Substring (16);
                    continue;
                } else if (arg.StartsWith ("--glue-includes=")) {
                    generate = false;
                    glue_includes = arg.Substring (16);
                    continue;
                } else if (arg.StartsWith ("--gluelib-name=")) {
                    generate = false;
                    gluelib_name = arg.Substring (15);
                    continue;
                }

                Parser p = new Parser ();
                IGeneratable[] curr_gens = p.Parse (filename);
                table.AddTypes (curr_gens);
                if (generate)
                    gens.AddRange (curr_gens);
            }

            // Now that everything is loaded, validate all the to-be-
            // generated generatables and then remove the invalid ones.
            ArrayList invalids = new ArrayList ();
            foreach (IGeneratable gen in gens) {
                if (!gen.Validate ())
                    invalids.Add (gen);
            }
            foreach (IGeneratable gen in invalids)
                gens.Remove (gen);

            GenerationInfo gen_info = null;
            if (dir != "" || assembly_name != "" || glue_filename != "" || glue_includes != "" || gluelib_name != "")
                gen_info = new GenerationInfo (dir, assembly_name, glue_filename, glue_includes, gluelib_name);

            foreach (IGeneratable gen in gens) {
                if (gen_info == null)
                    gen.Generate ();
                else
                    gen.Generate (gen_info);
            }

            ObjectGen.GenerateMappers ();

            if (gen_info != null)
                gen_info.CloseGlueWriter ();

            Statistics.Report();
            return 0;
        }
Example #3
0
        public static int Main(string[] args)
        {
            bool show_help = false;
            string dir = "";
            string assembly_name = "";
            string glue_filename = "";
            string glue_includes = "";
            string gluelib_name = "";
            string schema_name = "";

            SymbolTable table = SymbolTable.Table;
            var gens = new List<IGeneratable> ();

            var filenames = new List<string> ();
            var includes = new List<string> ();

            var options = new OptionSet () {
                { "generate=", "Generate the C# code for this GAPI XML file.",
                    (string v) => { filenames.Add (v); } },
                { "I|include=", "GAPI XML file that contain symbols used in the main GAPI XML file.",
                    (string v) => { includes.Add (v); } },
                { "outdir=", "Directory where the C# files will be generated.",
                    (string v) => { dir = v; } },
                { "assembly-name=", "Name of the assembly for which the code is generated.",
                    (string v) => { assembly_name = v; } },
                { "glue-filename=", "Filename for the generated C glue code.",
                    (string v) => { glue_filename = v; } },
                { "glue-includes=", "Content of #include directive to add in the generated C glue code.",
                    (string v) => { glue_includes = v; } },
                { "gluelib-name=", "Name of the C library into which the C glue code will be compiled. " +
                    "Used to generated correct DllImport attributes.",
                    (string v) => { gluelib_name = v; } },
                { "schema=", "Validate all GAPI XML files against this XSD schema.",
                    (string v) => { schema_name  = v; } },
                { "h|help",  "Show this message and exit",
                    v => show_help = v != null },
            };

            List<string> extra;
            try {
                extra = options.Parse (args);
            }
            catch (OptionException e) {
                Console.Write ("gapi-codegen: ");
                Console.WriteLine (e.Message);
                Console.WriteLine ("Try `gapi-codegen --help' for more information.");
                return 0;
            }

            if (show_help) {
                ShowHelp (options);
                return 1;
            }

            if (filenames.Count == 0) {
                Console.WriteLine ("You need to specify a file to process using the --generate option.");
                Console.WriteLine ("Try `gapi-codegen --help' for more information.");
                return 0;
            }

            if (extra.Exists (v => { return v.StartsWith ("--customdir"); })) {
                Console.WriteLine ("Using .custom files is not supported anymore, use partial classes instead.");
                return 0;
            }

            if (!String.IsNullOrEmpty (schema_name) && !File.Exists (schema_name)) {
                Console.WriteLine ("WARNING: Could not find schema file at '{0}', no validation will be done.", schema_name);
                schema_name = null;
            }

            Parser p = new Parser ();
            foreach (string include in includes) {
                IGeneratable[] curr_gens = p.Parse (include, schema_name);
                table.AddTypes (curr_gens);
            }

            foreach (string filename in filenames) {
                IGeneratable[] curr_gens = p.Parse (filename, schema_name);
                table.AddTypes (curr_gens);
                gens.AddRange (curr_gens);
            }

            // Now that everything is loaded, validate all the to-be-
            // generated generatables and then remove the invalid ones.
            var invalids = new List<IGeneratable> ();
            foreach (IGeneratable gen in gens) {
                if (!gen.Validate ())
                    invalids.Add (gen);
            }
            foreach (IGeneratable gen in invalids)
                gens.Remove (gen);

            GenerationInfo gen_info = null;
            if (dir != "" || assembly_name != "" || glue_filename != "" || glue_includes != "" || gluelib_name != "")
                gen_info = new GenerationInfo (dir, assembly_name, glue_filename, glue_includes, gluelib_name);

            foreach (IGeneratable gen in gens) {
                if (gen_info == null)
                    gen.Generate ();
                else
                    gen.Generate (gen_info);
            }

            ObjectGen.GenerateMappers ();

            if (gen_info != null)
                gen_info.CloseGlueWriter ();

            Statistics.Report();
            return 0;
        }
Example #4
0
        public static int Main(string[] args)
        {
            if (args.Length < 2)
            {
                Console.WriteLine("Usage: codegen --generate <filename1...>");
                return(0);
            }

            bool   generate      = false;
            string dir           = "";
            string custom_dir    = "";
            string assembly_name = "";
            string glue_filename = "";
            string glue_includes = "";
            string gluelib_name  = "";

            var table = SymbolTable.Table;
            var gens  = new ArrayList();

            foreach (string arg in args)
            {
                string filename = arg;
                if (arg == "--generate")
                {
                    generate = true;
                    continue;
                }
                else if (arg == "--include")
                {
                    generate = false;
                    continue;
                }
                else if (arg.StartsWith("-I:"))
                {
                    generate = false;
                    filename = filename.Substring(3);
                }
                else if (arg.StartsWith("--outdir="))
                {
                    generate = false;
                    dir      = arg.Substring(9);
                    continue;
                }
                else if (arg.StartsWith("--customdir="))
                {
                    generate   = false;
                    custom_dir = arg.Substring(12);
                    continue;
                }
                else if (arg.StartsWith("--assembly-name="))
                {
                    generate      = false;
                    assembly_name = arg.Substring(16);
                    continue;
                }
                else if (arg.StartsWith("--glue-filename="))
                {
                    generate      = false;
                    glue_filename = arg.Substring(16);
                    continue;
                }
                else if (arg.StartsWith("--glue-includes="))
                {
                    generate      = false;
                    glue_includes = arg.Substring(16);
                    continue;
                }
                else if (arg.StartsWith("--gluelib-name="))
                {
                    generate     = false;
                    gluelib_name = arg.Substring(15);
                    continue;
                }

                var            p         = new Parser();
                IGeneratable[] curr_gens = p.Parse(filename);
                table.AddTypes(curr_gens);
                if (generate)
                {
                    gens.AddRange(curr_gens);
                }
            }

            // Now that everything is loaded, validate all the to-be-
            // generated generatables and then remove the invalid ones.
            var invalids = new ArrayList();

            foreach (IGeneratable gen in gens)
            {
                if (!gen.Validate())
                {
                    invalids.Add(gen);
                }
            }
            foreach (IGeneratable gen in invalids)
            {
                gens.Remove(gen);
            }

            GenerationInfo gen_info = null;

            if (dir != "" || assembly_name != "" || glue_filename != "" || glue_includes != "" || gluelib_name != "")
            {
                gen_info = new GenerationInfo(dir, custom_dir, assembly_name, glue_filename, glue_includes, gluelib_name);
            }

            foreach (IGeneratable gen in gens)
            {
                if (gen_info == null)
                {
                    gen.Generate();
                }
                else
                {
                    gen.Generate(gen_info);
                }
            }

            ObjectGen.GenerateMappers();

            if (gen_info != null)
            {
                gen_info.CloseGlueWriter();
            }

            Statistics.Report();
            return(0);
        }
Example #5
0
        public static int Main(string[] args)
        {
            bool   show_help     = false;
            string dir           = "";
            string assembly_name = "";
            string gapidir       = "";
            string glue_filename = "";
            string glue_includes = "";
            string gluelib_name  = "";
            string schema_name   = "";

            SymbolTable table = SymbolTable.Table;
            var         gens  = new List <IGeneratable> ();

            var filenames = new List <string> ();
            var includes  = new List <string> ();

            var options = new OptionSet()
            {
                { "generate=", "Generate the C# code for this GAPI XML file.",
                  (string v) => { filenames.Add(v); } },
                { "I|include=", "GAPI XML file that contain symbols used in the main GAPI XML file.",
                  (string v) => { includes.Add(v); } },
                { "outdir=", "Directory where the C# files will be generated.",
                  (string v) => { dir = v; } },
                { "assembly-name=", "Name of the assembly for which the code is generated.",
                  (string v) => { assembly_name = v; } },
                { "gapidir=", "GAPI xml data  folder.",
                  (string v) => { gapidir = v; } },
                { "glue-filename=", "Filename for the generated C glue code.",
                  (string v) => { glue_filename = v; } },
                { "glue-includes=", "Content of #include directive to add in the generated C glue code.",
                  (string v) => { glue_includes = v; } },
                { "gluelib-name=", "Name of the C library into which the C glue code will be compiled. " +
                  "Used to generated correct DllImport attributes.",
                  (string v) => { gluelib_name = v; } },
                { "schema=", "Validate all GAPI XML files against this XSD schema.",
                  (string v) => { schema_name = v; } },
                { "h|help", "Show this message and exit",
                  v => show_help = v != null },
            };

            List <string> extra;

            try {
                extra = options.Parse(args);
            }
            catch (OptionException e) {
                Console.Write("gapi-codegen: ");
                Console.WriteLine(e.Message);
                Console.WriteLine("Try `gapi-codegen --help' for more information.");
                return(64);
            }

            if (show_help)
            {
                ShowHelp(options);
                return(0);
            }

            if (filenames.Count == 0)
            {
                Console.WriteLine("You need to specify a file to process using the --generate option.");
                Console.WriteLine("Try `gapi-codegen --help' for more information.");
                return(64);
            }

            if (extra.Exists(v => { return(v.StartsWith("--customdir")); }))
            {
                Console.WriteLine("Using .custom files is not supported anymore, use partial classes instead.");
                return(64);
            }

            if (!String.IsNullOrEmpty(schema_name) && !File.Exists(schema_name))
            {
                Console.WriteLine("WARNING: Could not find schema file at '{0}', no validation will be done.", schema_name);
                schema_name = null;
            }

            Parser p = new Parser();

            foreach (string include in includes)
            {
                IGeneratable[] curr_gens = p.Parse(include, schema_name, gapidir);
                table.AddTypes(curr_gens);
            }

            foreach (string filename in filenames)
            {
                IGeneratable[] curr_gens = p.Parse(filename, schema_name, gapidir);
                table.AddTypes(curr_gens);
                gens.AddRange(curr_gens);
            }

            // Now that everything is loaded, validate all the to-be-
            // generated generatables and then remove the invalid ones.
            var invalids = new List <IGeneratable> ();

            foreach (IGeneratable gen in gens)
            {
                if (!gen.Validate())
                {
                    invalids.Add(gen);
                }
            }
            foreach (IGeneratable gen in invalids)
            {
                gens.Remove(gen);
            }

            GenerationInfo gen_info = null;

            if (dir != "" || assembly_name != "" || glue_filename != "" || glue_includes != "" || gluelib_name != "")
            {
                gen_info = new GenerationInfo(dir, assembly_name, glue_filename, glue_includes, gluelib_name);
            }

            foreach (IGeneratable gen in gens)
            {
                if (gen_info == null)
                {
                    gen.Generate();
                }
                else
                {
                    gen.Generate(gen_info);
                }
            }

            ObjectGen.GenerateMappers();

            if (gen_info != null)
            {
                gen_info.CloseGlueWriter();
            }

            Statistics.Report();
            return(0);
        }