diff options
Diffstat (limited to 'giscanner')
-rw-r--r-- | giscanner/transformer.py | 3 | ||||
-rw-r--r-- | giscanner/utils.py | 30 |
2 files changed, 33 insertions, 0 deletions
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 |