aboutsummaryrefslogtreecommitdiff
path: root/packaging/createmsi.py
diff options
context:
space:
mode:
authorEli Schwartz <eschwartz@archlinux.org>2022-03-27 00:56:26 -0400
committerJussi Pakkanen <jpakkane@gmail.com>2022-03-30 02:06:52 +0300
commit258cd5d5836a6660f1122cec274f0a947c1d0459 (patch)
tree72f1ecb04c9c3540aa03ba23ef512a2a1c00ea32 /packaging/createmsi.py
parentff8a9c9efb9937e7d7776bba8b85930ed44192fa (diff)
downloadmeson-258cd5d5836a6660f1122cec274f0a947c1d0459.zip
meson-258cd5d5836a6660f1122cec274f0a947c1d0459.tar.gz
meson-258cd5d5836a6660f1122cec274f0a947c1d0459.tar.bz2
packaging: rework how pyinstaller gets its instructions
Make use of pyinstaller hooks by creating a hook that updates how the `mesonbuild` import functions. This is more or less the same as passing a bajillion arguments to pyinstaller's CLI, but allows the logic to be self-contained (and reusable). It becomes more obvious what parts of the process pertain to pyinstaller, and which parts pertain to MSI/pkg creation.
Diffstat (limited to 'packaging/createmsi.py')
-rwxr-xr-xpackaging/createmsi.py47
1 files changed, 1 insertions, 46 deletions
diff --git a/packaging/createmsi.py b/packaging/createmsi.py
index 653caa5..fe49b7b 100755
--- a/packaging/createmsi.py
+++ b/packaging/createmsi.py
@@ -39,49 +39,6 @@ def gen_guid():
'''
return str(uuid.uuid4()).upper()
-def get_all_modules_from_dir(dirname):
- '''
- Get all modules required for Meson build MSI package
- 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
-
-def get_more_modules():
- '''
- Getter for missing Modules.
- Python packagers want to be minimal and only copy the things
- that they can see that being used. They are blind to many things.
- '''
- return ['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',
- 'filecmp',
- ]
-
-def get_modules():
- modules = get_all_modules_from_dir('mesonbuild/modules')
- modules += get_all_modules_from_dir('mesonbuild/scripts')
- modules += get_more_modules()
- return modules
-
class Node:
'''
Node to hold path and directory values
@@ -166,7 +123,6 @@ class PackageGenerator:
if os.path.exists(sdir):
shutil.rmtree(sdir)
main_stage, ninja_stage = self.staging_dirs
- modules = get_modules()
pyinstaller = shutil.which('pyinstaller')
if not pyinstaller:
@@ -178,10 +134,9 @@ class PackageGenerator:
shutil.rmtree(pyinstaller_tmpdir)
pyinst_cmd = [pyinstaller,
'--clean',
+ '--additional-hooks-dir=packaging',
'--distpath',
pyinstaller_tmpdir]
- for m in modules:
- pyinst_cmd += ['--hidden-import', m]
pyinst_cmd += ['meson.py']
subprocess.check_call(pyinst_cmd)
shutil.move(pyinstaller_tmpdir + '/meson', main_stage)