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()