diff options
-rw-r--r-- | girepository/girparser.c | 6 | ||||
-rw-r--r-- | giscanner/transformer.py | 3 | ||||
-rw-r--r-- | giscanner/utils.py | 30 |
3 files changed, 39 insertions, 0 deletions
diff --git a/girepository/girparser.c b/girepository/girparser.c index 2b7c4ede..531cea07 100644 --- a/girepository/girparser.c +++ b/girepository/girparser.c @@ -329,6 +329,12 @@ locate_gir (GIrParser *parser, } } + path = g_build_filename (g_get_user_data_dir (), GIR_SUFFIX, girname, NULL); + g_debug ("Trying %s from user data dir", path); + if (g_file_test (path, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR)) + return path; + g_free (path); + for (dir = datadirs; *dir; dir++) { path = g_build_filename (*dir, GIR_SUFFIX, girname, NULL); diff --git a/giscanner/transformer.py b/giscanner/transformer.py index 545ce6cc..88d429a6 100644 --- a/giscanner/transformer.py +++ b/giscanner/transformer.py @@ -185,6 +185,9 @@ None.""" from_env = os.getenv('GI_GIR_PATH', '') if from_env: searchdirs.extend(from_env.split(os.pathsep)) + user_data = utils.get_user_data_dir() + if user_data is not None: + searchdirs.append(os.path.join(user_data, 'gir-1.0')) for path in utils.get_system_data_dirs(): searchdirs.append(os.path.join(path, 'gir-1.0')) searchdirs.append(GIR_DIR) diff --git a/giscanner/utils.py b/giscanner/utils.py index 31c7ea48..9840143c 100644 --- a/giscanner/utils.py +++ b/giscanner/utils.py @@ -236,6 +236,36 @@ def get_user_cache_dir(dir=None): return None +def get_user_data_dir(): + ''' + This is a Python reimplemention of `g_get_user_data_dir()` because we don't want to + rely on the python-xdg package and we can't depend on GLib via introspection. + If any changes are made to that function they'll need to be copied here. + ''' + + xdg_data_home = os.environ.get('XDG_DATA_HOME') + if xdg_data_home is not None: + try: + os.makedirs(xdg_data_home, mode=0o700, exist_ok=True) + except EnvironmentError: + # Let's fall back to ~/.local/share below + pass + else: + return xdg_data_home + + homedir = os.path.expanduser('~') + if homedir is not None: + datadir = os.path.join(homedir, '.local', 'share') + try: + os.makedirs(datadir, mode=0o700, exist_ok=True) + except EnvironmentError: + return None + else: + return datadir + + return None + + def get_system_data_dirs(): ''' This is a Python reimplemention of `g_get_system_data_dirs()` because we don't want to |