diff --git a/docs/reference/gio/gdbus-codegen.xml b/docs/reference/gio/gdbus-codegen.xml index 7c8fe3134..27b25ffa2 100644 --- a/docs/reference/gio/gdbus-codegen.xml +++ b/docs/reference/gio/gdbus-codegen.xml @@ -33,6 +33,7 @@ YourProject none|objects|all + OUTDIR OUTFILES FILE @@ -187,7 +188,12 @@ Generate C code for all D-Bus interfaces and put it in OUTFILES.c and - OUTFILES.h. + OUTFILES.h including any sub-directories. If you want the files to + be output in a different location use as OUTFILES.h + including sub-directories will be referenced from OUTFILES.c. + + + The full paths would then be $(OUTDIR)/$(dirname $OUTFILES)/$(basename $OUTFILES).{c,h}. @@ -230,6 +236,15 @@ + + OUTDIR + + + Directory to output generated source to. Equivalent to changing directory before generation. + + + + ELEMENT KEY VALUE diff --git a/gio/gdbus-2.0/codegen/codegen.py b/gio/gdbus-2.0/codegen/codegen.py index 6a3d9e5d6..3485c1a0e 100644 --- a/gio/gdbus-2.0/codegen/codegen.py +++ b/gio/gdbus-2.0/codegen/codegen.py @@ -28,13 +28,15 @@ from . import dbustypes # ---------------------------------------------------------------------------------------------------- class CodeGenerator: - def __init__(self, ifaces, namespace, interface_prefix, generate_objmanager, generate_autocleanup, docbook_gen, h, c): + def __init__(self, ifaces, namespace, interface_prefix, generate_objmanager, + generate_autocleanup, docbook_gen, h, c, header_name): self.docbook_gen = docbook_gen self.generate_objmanager = generate_objmanager self.generate_autocleanup = generate_autocleanup self.ifaces = ifaces self.h = h self.c = c + self.header_name = header_name self.namespace = namespace if len(namespace) > 0: if utils.is_ugly_case(namespace): @@ -48,7 +50,7 @@ class CodeGenerator: self.ns_upper = '' self.ns_lower = '' self.interface_prefix = interface_prefix - self.header_guard = self.h.name.upper().replace('.', '_').replace('-', '_').replace('/', '_') + self.header_guard = header_name.upper().replace('.', '_').replace('-', '_').replace('/', '_') # ---------------------------------------------------------------------------------------------------- @@ -67,7 +69,7 @@ class CodeGenerator: '#include "%s"\n' '\n' '#include \n' - %(self.h.name)) + %(self.header_name)) self.c.write('#ifdef G_OS_UNIX\n' '# include \n' diff --git a/gio/gdbus-2.0/codegen/codegen_main.py b/gio/gdbus-2.0/codegen/codegen_main.py index cc28c81ad..57254008d 100755 --- a/gio/gdbus-2.0/codegen/codegen_main.py +++ b/gio/gdbus-2.0/codegen/codegen_main.py @@ -21,6 +21,7 @@ import sys import optparse +from os import path from . import config from . import utils @@ -162,6 +163,8 @@ def codegen_main(): 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(); all_ifaces = [] @@ -185,15 +188,18 @@ def codegen_main(): c_code = opts.generate_c_code if c_code: - h = open(c_code + '.h', 'w') - c = open(c_code + '.c', 'w') + outdir = opts.output_directory + 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, docbook_gen, - h, c); + h, c, + header_name) ret = gen.generate() h.close() c.close()