Mercurial > hg
view contrib/packaging/hgpackaging/inno.py @ 41915:a2e191a937a9
packaging: extract py2exe functionality to own module
py2exe builds are shared between Inno Setup and WIX. We'll
want the logic for performing py2exe builds to be reusable
across the code for both installers.
This commit extracts the py2exe-specific functionality into
its own module.
There's definitely room to customize things further. This will
be done in future commits, as necessary. (I'm not even sure what
customizations WIX will require yet. Presumably a lot.)
Differential Revision: https://phab.mercurial-scm.org/D6091
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Thu, 07 Mar 2019 15:43:54 -0800 |
parents | 7d1211168863 |
children | 260305e8ddbd |
line wrap: on
line source
# inno.py - Inno Setup functionality. # # Copyright 2019 Gregory Szorc <gregory.szorc@gmail.com> # # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. # no-check-code because Python 3 native. import os import pathlib import shutil import subprocess from .py2exe import ( build_py2exe, ) from .util import ( find_vc_runtime_files, ) def build(source_dir: pathlib.Path, build_dir: pathlib.Path, python_exe: pathlib.Path, iscc_exe: pathlib.Path, version=None): """Build the Inno installer. Build files will be placed in ``build_dir``. py2exe's setup.py doesn't use setuptools. It doesn't have modern logic for finding the Python 2.7 toolchain. So, we require the environment to already be configured with an active toolchain. """ if not iscc_exe.exists(): raise Exception('%s does not exist' % iscc_exe) vc_x64 = r'\x64' in os.environ.get('LIB', '') requirements_txt = (source_dir / 'contrib' / 'packaging' / 'inno' / 'requirements.txt') build_py2exe(source_dir, build_dir, python_exe, 'inno', requirements_txt) # hg.exe depends on VC9 runtime DLLs. Copy those into place. for f in find_vc_runtime_files(vc_x64): if f.name.endswith('.manifest'): basename = 'Microsoft.VC90.CRT.manifest' else: basename = f.name dest_path = source_dir / 'dist' / basename print('copying %s to %s' % (f, dest_path)) shutil.copyfile(f, dest_path) print('creating installer') args = [str(iscc_exe)] if vc_x64: args.append('/dARCH=x64') if version: args.append('/dVERSION=%s' % version) args.append('/Odist') args.append('contrib/packaging/inno/mercurial.iss') subprocess.run(args, cwd=str(source_dir), check=True)