summaryrefslogtreecommitdiffstats
path: root/packaging/hook-mesonbuild.py
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--packaging/hook-mesonbuild.py56
1 files changed, 56 insertions, 0 deletions
diff --git a/packaging/hook-mesonbuild.py b/packaging/hook-mesonbuild.py
new file mode 100644
index 0000000..b076c50
--- /dev/null
+++ b/packaging/hook-mesonbuild.py
@@ -0,0 +1,56 @@
+#!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')
+datas += collect_data_files('mesonbuild.cmake.data')
+datas += collect_data_files('mesonbuild.dependencies.data')
+
+hiddenimports += get_all_modules_from_dir('mesonbuild/modules')
+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',
+]