glapi: Avoid argparse type argument for API XML input files.

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>
This commit is contained in:
Jose Fonseca 2015-05-26 11:01:57 +01:00
parent 224a77cc60
commit b787f48ed2
3 changed files with 12 additions and 12 deletions

View 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__':

View 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__':

View 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__':