hook-mesonbuild.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #!hint/python3
  2. """
  3. PyInstaller hook to make mesonbuild include everything it needs to.
  4. """
  5. import os
  6. from glob import glob
  7. from PyInstaller.utils.hooks import collect_data_files
  8. datas = []
  9. hiddenimports = []
  10. def get_all_modules_from_dir(dirname):
  11. '''
  12. Get all modules required for Meson itself from directories.
  13. '''
  14. modname = os.path.basename(dirname)
  15. modules = [os.path.splitext(os.path.split(x)[1])[0] for x in glob(os.path.join(dirname, '*'))]
  16. modules = ['mesonbuild.' + modname + '.' + x for x in modules if not x.startswith('_')]
  17. return modules
  18. datas += collect_data_files('mesonbuild.scripts')
  19. datas += collect_data_files('mesonbuild.cmake.data')
  20. datas += collect_data_files('mesonbuild.dependencies.data')
  21. hiddenimports += get_all_modules_from_dir('mesonbuild/modules')
  22. hiddenimports += get_all_modules_from_dir('mesonbuild/scripts')
  23. # Python packagers want to be minimal and only copy the things
  24. # that they can see being used. They are blind to many things.
  25. hiddenimports += [
  26. # we run distutils as a subprocess via INTROSPECT_COMMAND.
  27. 'distutils.archive_util',
  28. 'distutils.cmd',
  29. 'distutils.config',
  30. 'distutils.core',
  31. 'distutils.debug',
  32. 'distutils.dep_util',
  33. 'distutils.dir_util',
  34. 'distutils.dist',
  35. 'distutils.errors',
  36. 'distutils.extension',
  37. 'distutils.fancy_getopt',
  38. 'distutils.file_util',
  39. 'distutils.spawn',
  40. 'distutils.util',
  41. 'distutils.version',
  42. 'distutils.command.build_ext',
  43. 'distutils.command.build',
  44. 'distutils.command.install',
  45. # needed for gtk's find_program() scripts
  46. 'filecmp',
  47. ]