| #!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', | |
| ] |