#-----------------------------------------------------------------------------
# Copyright (c) 2005-2021, PyInstaller Development Team.
#
# Distributed under the terms of the GNU General Public License (version 2
# or later) with exception for distributing the bootloader.
#
# The full license is in the file COPYING.txt, distributed with this software.
#
# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
#-----------------------------------------------------------------------------
"""
Import hook for Gio https://developer.gnome.org/gio/stable from the GLib library https://wiki.gnome.org/Projects/GLib
introspected through PyGobject https://wiki.gnome.org/PyGObject via the GObject Introspection middleware layer
https://wiki.gnome.org/Projects/GObjectIntrospection

Tested with GLib 2.44.1, PyGObject 3.16.2, GObject Introspection 1.44.0 on Mac OS 10.10.5 and
GLib 2.42.2, PyGObject 3.14.0, and GObject Introspection 1.42 on Windows 7.
"""

import glob
import os

import PyInstaller.log as logging
from PyInstaller.compat import base_prefix, is_darwin, is_linux, is_win
from PyInstaller.utils.hooks.gi import get_gi_libdir, get_gi_typelibs

logger = logging.getLogger(__name__)

binaries, datas, hiddenimports = get_gi_typelibs('Gio', '2.0')

libdir = get_gi_libdir('Gio', '2.0')
path = None

if is_win:
    pattern = os.path.join(libdir, 'gio', 'modules', '*.dll')
elif is_darwin or is_linux:
    gio_libdir = os.path.join(libdir, 'gio', 'modules')
    if not os.path.exists(gio_libdir):
        # homebrew installs the files elsewhere..
        gio_libdir = os.path.join(os.path.commonprefix([base_prefix, gio_libdir]), 'lib', 'gio', 'modules')

    pattern = os.path.join(gio_libdir, '*.so')

if pattern:
    for f in glob.glob(pattern):
        binaries.append((f, 'gio_modules'))
else:
    # To add a new platform add a new elif above with the proper is_<platform> and proper pattern for finding the Gio
    # modules on your platform.
    logger.warning('Bundling Gio modules is currently not supported on your platform.')

# Bundle the mime cache -- might not be needed on Windows
# -> this is used for content type detection (also used by GdkPixbuf)
# -> gio/xdgmime/xdgmime.c looks for mime/mime.cache in the users home directory, followed by XDG_DATA_DIRS if specified
#    in the environment, otherwise it searches /usr/local/share/ and /usr/share/
if not is_win:
    _mime_searchdirs = ['/usr/local/share', '/usr/share']
    if 'XDG_DATA_DIRS' in os.environ:
        _mime_searchdirs.insert(0, os.environ['XDG_DATA_DIRS'])

    for sd in _mime_searchdirs:
        spath = os.path.join(sd, 'mime', 'mime.cache')
        if os.path.exists(spath):
            datas.append((spath, 'share/mime'))
            break
