diff --git a/docs/reference/gio/gdbus-codegen.xml b/docs/reference/gio/gdbus-codegen.xml
index 27b25ffa2..56a3bc56f 100644
--- a/docs/reference/gio/gdbus-codegen.xml
+++ b/docs/reference/gio/gdbus-codegen.xml
@@ -55,11 +55,15 @@
Description
gdbus-codegen is used to generate code and/or
- documentation for one or more D-Bus interfaces. The tool reads
+ documentation for one or more D-Bus interfaces.
+
+
+ gdbus-codegen reads
D-Bus
- Introspection XML files and generates output files. The
- tool currently supports generating C code (via
+ Introspection XML from files passed as additional
+ arguments on the command line and generates output files.
+ It currently supports generating C code (via
) and Docbook XML (via
).
@@ -152,6 +156,7 @@
FILE
+ This option is deprecated; use positional arguments instead.
The D-Bus introspection XML file.
diff --git a/gio/gdbus-2.0/codegen/codegen_main.py b/gio/gdbus-2.0/codegen/codegen_main.py
index eb387ef0f..24e4bcbbe 100755
--- a/gio/gdbus-2.0/codegen/codegen_main.py
+++ b/gio/gdbus-2.0/codegen/codegen_main.py
@@ -19,8 +19,8 @@
#
# Author: David Zeuthen
+import argparse
import sys
-import optparse
from os import path
from . import config
@@ -28,7 +28,7 @@ from . import dbustypes
from . import parser
from . import codegen
from . import codegen_docbook
-from .utils import print_error
+from .utils import print_error, print_warning
def find_arg(arg_list, arg_name):
for a in arg_list:
@@ -146,58 +146,62 @@ def apply_annotations(iface_list, annotation_list):
apply_annotation(iface_list, iface, None, None, None, None, key, value)
def codegen_main():
- arg_parser = optparse.OptionParser('%prog [options]')
- arg_parser.add_option('', '--xml-files', metavar='FILE', action='append',
- help='D-Bus introspection XML file')
- arg_parser.add_option('', '--interface-prefix', metavar='PREFIX', default='',
+ arg_parser = argparse.ArgumentParser(description='D-Bus code and documentation generator')
+ arg_parser.add_argument('files', metavar='FILE', nargs='*',
+ help='D-Bus introspection XML file')
+ arg_parser.add_argument('--xml-files', metavar='FILE', action='append', default=[],
+ help='D-Bus introspection XML file')
+ arg_parser.add_argument('--interface-prefix', metavar='PREFIX', default='',
help='String to strip from D-Bus interface names for code and docs')
- arg_parser.add_option('', '--c-namespace', metavar='NAMESPACE', default='',
+ arg_parser.add_argument('--c-namespace', metavar='NAMESPACE', default='',
help='The namespace to use for generated C code')
- arg_parser.add_option('', '--c-generate-object-manager', action='store_true',
+ arg_parser.add_argument('--c-generate-object-manager', action='store_true',
help='Generate a GDBusObjectManagerClient subclass when generating C code')
- arg_parser.add_option('', '--generate-c-code', metavar='OUTFILES',
- help='Generate C code in OUTFILES.[ch]')
- arg_parser.add_option('', '--c-generate-autocleanup', type='choice', choices=['none', 'objects', 'all'], default='objects',
- help='Generate autocleanup support')
- arg_parser.add_option('', '--generate-docbook', metavar='OUTFILES',
- help='Generate Docbook in OUTFILES-org.Project.IFace.xml')
- arg_parser.add_option('', '--annotate', nargs=3, action='append', metavar='WHAT KEY VALUE',
- help='Add annotation (may be used several times)')
- arg_parser.add_option('', '--output-directory', metavar='OUTDIR', default='',
- help='Location to output generated files')
- (opts, args) = arg_parser.parse_args();
+ arg_parser.add_argument('--generate-c-code', metavar='OUTFILES',
+ help='Generate C code in OUTFILES.[ch]')
+ arg_parser.add_argument('--c-generate-autocleanup', choices=['none', 'objects', 'all'], default='objects',
+ help='Generate autocleanup support')
+ arg_parser.add_argument('--generate-docbook', metavar='OUTFILES',
+ help='Generate Docbook in OUTFILES-org.Project.IFace.xml')
+ arg_parser.add_argument('--annotate', nargs=3, action='append', metavar='WHAT KEY VALUE',
+ help='Add annotation (may be used several times)')
+ arg_parser.add_argument('--output-directory', metavar='OUTDIR', default='',
+ help='Location to output generated files')
+ args = arg_parser.parse_args();
+
+ if len(args.xml_files) > 0:
+ print_warning('The "--xml-files" option is deprecated; use positional arguments instead')
all_ifaces = []
- for fname in args:
- f = open(fname, 'rb')
- xml_data = f.read()
- f.close()
+ for fname in args.files + args.xml_files:
+ with open(fname, 'rb') as f:
+ xml_data = f.read()
parsed_ifaces = parser.parse_dbus_xml(xml_data)
all_ifaces.extend(parsed_ifaces)
- if opts.annotate != None:
- apply_annotations(all_ifaces, opts.annotate)
+ if args.annotate != None:
+ apply_annotations(all_ifaces, args.annotate)
for i in all_ifaces:
- i.post_process(opts.interface_prefix, opts.c_namespace)
+ i.post_process(args.interface_prefix, args.c_namespace)
- outdir = opts.output_directory
+ outdir = args.output_directory
- docbook = opts.generate_docbook
+ docbook = args.generate_docbook
docbook_gen = codegen_docbook.DocbookCodeGenerator(all_ifaces, docbook, outdir);
if docbook:
ret = docbook_gen.generate()
- c_code = opts.generate_c_code
+ c_code = args.generate_c_code
if c_code:
header_name = c_code + '.h'
h = open(path.join(outdir, header_name), 'w')
c = open(path.join(outdir, c_code + '.c'), 'w')
gen = codegen.CodeGenerator(all_ifaces,
- opts.c_namespace,
- opts.interface_prefix,
- opts.c_generate_object_manager,
- opts.c_generate_autocleanup,
+ args.c_namespace,
+ args.interface_prefix,
+ args.c_generate_object_manager,
+ args.c_generate_autocleanup,
docbook_gen,
h, c,
header_name)