blob: d6b06cd262136ad68efee5c16945bd0d9115df00 [file] [log] [blame]
#!hint/python3
"""
PyInstaller hook to make mesonbuild include everything it needs to.
"""
import os
from glob import glob
from PyInstaller.utils.hooks import collect_data_files
datas = []
hiddenimports = []
def get_all_modules_from_dir(dirname):
'''
Get all modules required for Meson itself from directories.
'''
modname = os.path.basename(dirname)
modules = [os.path.splitext(os.path.split(x)[1])[0] for x in glob(os.path.join(dirname, '*'))]
modules = ['mesonbuild.' + modname + '.' + x for x in modules if not x.startswith('_')]
return modules
datas += collect_data_files('mesonbuild.scripts', include_py_files=True, excludes=['**/__pycache__'])
datas += collect_data_files('mesonbuild.cmake.data')
datas += collect_data_files('mesonbuild.dependencies.data')
# lazy-loaded
hiddenimports += get_all_modules_from_dir('mesonbuild/dependencies')
# imported by meson.build files
hiddenimports += get_all_modules_from_dir('mesonbuild/modules')
# executed when named on CLI
hiddenimports += get_all_modules_from_dir('mesonbuild/scripts')
# Python packagers want to be minimal and only copy the things
# that they can see being used. They are blind to many things.
hiddenimports += [
# we run distutils as a subprocess via INTROSPECT_COMMAND.
'distutils.archive_util',
'distutils.cmd',
'distutils.config',
'distutils.core',
'distutils.debug',
'distutils.dep_util',
'distutils.dir_util',
'distutils.dist',
'distutils.errors',
'distutils.extension',
'distutils.fancy_getopt',
'distutils.file_util',
'distutils.spawn',
'distutils.util',
'distutils.version',
'distutils.command.build_ext',
'distutils.command.build',
'distutils.command.install',
# needed for gtk's find_program() scripts
'filecmp',
]