inno.py
78 lines
| 2.0 KiB
| text/x-python
|
PythonLexer
Gregory Szorc
|
r42077 | # 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 | ||||
Gregory Szorc
|
r42081 | from .py2exe import ( | ||
build_py2exe, | ||||
Gregory Szorc
|
r42077 | ) | ||
from .util import ( | ||||
find_vc_runtime_files, | ||||
) | ||||
Gregory Szorc
|
r42082 | EXTRA_PACKAGES = { | ||
'dulwich', | ||||
'keyring', | ||||
'pygments', | ||||
'win32ctypes', | ||||
} | ||||
Gregory Szorc
|
r42077 | 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) | ||||
Gregory Szorc
|
r42081 | vc_x64 = r'\x64' in os.environ.get('LIB', '') | ||
Gregory Szorc
|
r42077 | |||
Gregory Szorc
|
r42079 | requirements_txt = (source_dir / 'contrib' / 'packaging' / | ||
'inno' / 'requirements.txt') | ||||
Gregory Szorc
|
r42077 | |||
Gregory Szorc
|
r42081 | build_py2exe(source_dir, build_dir, python_exe, 'inno', | ||
Gregory Szorc
|
r42082 | requirements_txt, extra_packages=EXTRA_PACKAGES) | ||
Gregory Szorc
|
r42077 | |||
Gregory Szorc
|
r42079 | # 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 | ||||
Gregory Szorc
|
r42077 | |||
Gregory Szorc
|
r42079 | dest_path = source_dir / 'dist' / basename | ||
Gregory Szorc
|
r42077 | |||
Gregory Szorc
|
r42079 | print('copying %s to %s' % (f, dest_path)) | ||
shutil.copyfile(f, dest_path) | ||||
Gregory Szorc
|
r42077 | |||
Gregory Szorc
|
r42079 | print('creating installer') | ||
args = [str(iscc_exe)] | ||||
Gregory Szorc
|
r42077 | |||
Gregory Szorc
|
r42079 | if vc_x64: | ||
args.append('/dARCH=x64') | ||||
Gregory Szorc
|
r42077 | |||
Gregory Szorc
|
r42079 | if version: | ||
args.append('/dVERSION=%s' % version) | ||||
Gregory Szorc
|
r42077 | |||
Gregory Szorc
|
r42079 | args.append('/Odist') | ||
args.append('contrib/packaging/inno/mercurial.iss') | ||||
Gregory Szorc
|
r42077 | |||
Gregory Szorc
|
r42079 | subprocess.run(args, cwd=str(source_dir), check=True) | ||