glapi: Avoid argparse type argument for API XML input files.
authorJose Fonseca <jfonseca@vmware.com>
Tue, 26 May 2015 10:01:57 +0000 (11:01 +0100)
committerJose Fonseca <jfonseca@vmware.com>
Tue, 26 May 2015 14:26:03 +0000 (15:26 +0100)
argparse type is a nice type saver for simple data types, but it doesn't
look a good fit for the input XML file:

- Certain implementations of argparse (particularly python 2.7.3's)
  invoke the type constructor for the default argument even when an
  option is passed in the command line.  Causing `No such file or
  directory: 'gl_API.xml'` when the current dir is not
  src/mapi/glapi/gen.

- The parser takes multiple arguments.  This is currently worked around
  using lambdas, but that unnecessarily complex and hard to read.
  Furthermore it's odd to have a side-effect as heavy as parsing XML
  happening deep inside the argument parsing.

https://bugs.freedesktop.org/show_bug.cgi?id=90600

Reviewed-by: Brian Paul <brianp@vmware.com>
src/mapi/glapi/gen/gl_procs.py
src/mapi/glapi/gen/gl_table.py
src/mapi/glapi/gen/remap_helper.py

index cf6d2de8a4b3839c29b219dcd4c8f2f1a1e4c148..685e2fac345a00fd60be9d1140ba08aa0b1f1e3c 100644 (file)
@@ -165,14 +165,12 @@ typedef struct {
 
 def _parser():
     """Parse arguments and return a namepsace."""
-    api_type = lambda x: gl_XML.parse_GL_API(x, glX_XML.glx_item_factory())
 
     parser = argparse.ArgumentParser()
     parser.add_argument('-f', '--filename',
-                        type=api_type,
                         default='gl_API.xml',
                         metavar="input_file_name",
-                        dest='api',
+                        dest='file_name',
                         help="Path to an XML description of OpenGL API.")
     parser.add_argument('-c', '--es-version',
                         dest='es',
@@ -184,7 +182,8 @@ def _parser():
 def main():
     """Main function."""
     args = _parser()
-    PrintGlProcs(args.es).Print(args.api)
+    api = gl_XML.parse_GL_API(args.file_name, glX_XML.glx_item_factory())
+    PrintGlProcs(args.es).Print(api)
 
 
 if __name__ == '__main__':
index 30903fd8f609beb660d0dd1d0ac94b9f19bc68d7..3f02902308763d5729071d666ea7e8098453d4a5 100644 (file)
@@ -206,10 +206,9 @@ def _parser():
     """Parse arguments and return a namespace."""
     parser = argparse.ArgumentParser()
     parser.add_argument('-f', '--filename',
-                        type=gl_XML.parse_GL_API,
                         default='gl_API.xml',
                         metavar="input_file_name",
-                        dest='api',
+                        dest='file_name',
                         help="Path to an XML description of OpenGL API.")
     parser.add_argument('-m', '--mode',
                         choices=['table', 'remap_table'],
@@ -229,15 +228,17 @@ def main():
     """Main function."""
     args = _parser()
 
+    api = gl_XML.parse_GL_API(args.file_name)
+
     if args.mode == "table":
         printer = PrintGlTable(args.es)
     elif args.mode == "remap_table":
         printer = PrintRemapTable(args.es)
 
     if args.es is not None:
-        args.api.filter_functions_by_api(args.es)
+        api.filter_functions_by_api(args.es)
 
-    printer.Print(args.api)
+    printer.Print(api)
 
 
 if __name__ == '__main__':
index 9e3c3908d8ce2cc8692eda43a9939779e02efd59..94ae1936d211a174837f30c5e45a34711ee1bfc7 100644 (file)
@@ -170,10 +170,9 @@ def _parser():
     """Parse input options and return a namsepace."""
     parser = argparse.ArgumentParser()
     parser.add_argument('-f', '--filename',
-                        type=gl_XML.parse_GL_API,
                         default="gl_API.xml",
                         metavar="input_file_name",
-                        dest='api',
+                        dest='file_name',
                         help="An xml description file.")
     parser.add_argument('-c', '--es-version',
                         choices=[None, 'es1', 'es2'],
@@ -188,11 +187,12 @@ def main():
     """Main function."""
     args = _parser()
 
+    api = gl_XML.parse_GL_API(args.file_name)
     if args.es is not None:
-        args.api.filter_functions_by_api(args.es)
+        api.filter_functions_by_api(args.es)
 
     printer = PrintGlRemap()
-    printer.Print(args.api)
+    printer.Print(api)
 
 
 if __name__ == '__main__':