From b9f2ea423526735f7fe7371fb1339eae91a618c2 Mon Sep 17 00:00:00 2001 From: Nirbheek Chauhan Date: Tue, 12 Sep 2017 15:46:57 +0530 Subject: [PATCH] gdbus-codegen: Don't assume bindir and datadir share prefix This assumption breaks when, for instance: * Called as /bin/gdbus-codegen * Installed on Windows in a directory that is not `bin/` For such cases, we cannot make any assumptions about the directory structure, and must hard-code the datadir. https://bugzilla.gnome.org/show_bug.cgi?id=786785 --- gio/gdbus-2.0/codegen/Makefile.am | 2 +- gio/gdbus-2.0/codegen/gdbus-codegen.in | 9 +++++++++ gio/gdbus-2.0/codegen/meson.build | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/gio/gdbus-2.0/codegen/Makefile.am b/gio/gdbus-2.0/codegen/Makefile.am index b3fb2c292..b4e500cb0 100644 --- a/gio/gdbus-2.0/codegen/Makefile.am +++ b/gio/gdbus-2.0/codegen/Makefile.am @@ -21,7 +21,7 @@ CLEANFILES += gdbus-codegen EXTRA_DIST += gdbus-codegen.in gdbus-codegen: gdbus-codegen.in Makefile $(codegen_PYTHON) - $(AM_V_GEN) sed -e 's,@datadir\@,$(datadir),' -e 's,@PYTHON\@,$(PYTHON),' $< > $@.tmp && mv $@.tmp $@ + $(AM_V_GEN) sed -e 's,@DATADIR\@,$(datadir),' -e 's,@PYTHON\@,$(PYTHON),' $< > $@.tmp && mv $@.tmp $@ @chmod a+x $@ clean-local: diff --git a/gio/gdbus-2.0/codegen/gdbus-codegen.in b/gio/gdbus-2.0/codegen/gdbus-codegen.in index 805098188..e3f4f00f8 100644 --- a/gio/gdbus-2.0/codegen/gdbus-codegen.in +++ b/gio/gdbus-2.0/codegen/gdbus-codegen.in @@ -37,6 +37,15 @@ else: # parent directory to the python path. path = os.path.join(filedir, '..') +# If the above path detection failed, use the hard-coded datadir. This can +# happen when, for instance, bindir and datadir are not in the same prefix or +# on Windows where we cannot make any guarantees about the directory structure. +# +# In these cases our installation cannot be relocatable, but at least we should +# be able to find the codegen module. +if not os.path.isfile(os.path.join(path, 'codegen', 'codegen_main.py')): + path = os.path.join('@DATADIR@', 'glib-2.0') + sys.path.insert(0, os.path.abspath(path)) from codegen import codegen_main