#!/usr/bin/env python3 # Copyright 2019 Gregory Szorc # # 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. """Code to build Mercurial WiX installer.""" import argparse import os import pathlib import sys if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--name', help='Application name', default='Mercurial') parser.add_argument( '--python', help='Path to Python executable to use', required=True ) parser.add_argument( '--sign-sn', help='Subject name (or fragment thereof) of certificate ' 'to use for signing', ) parser.add_argument( '--sign-cert', help='Path to certificate to use for signing' ) parser.add_argument( '--sign-password', help='Password for signing certificate' ) parser.add_argument( '--sign-timestamp-url', help='URL of timestamp server to use for signing', ) parser.add_argument('--version', help='Version string to use') parser.add_argument( '--extra-packages-script', help=( 'Script to execute to include extra packages in ' 'py2exe binary.' ), ) parser.add_argument( '--extra-wxs', help='CSV of path_to_wxs_file=working_dir_for_wxs_file' ) parser.add_argument( '--extra-features', help=( 'CSV of extra feature names to include ' 'in the installer from the extra wxs files' ), ) args = parser.parse_args() here = pathlib.Path(os.path.abspath(os.path.dirname(__file__))) source_dir = here.parent.parent.parent sys.path.insert(0, str(source_dir / 'contrib' / 'packaging')) from hgpackaging.wix import ( build_installer, build_signed_installer, ) fn = build_installer kwargs = { 'source_dir': source_dir, 'python_exe': pathlib.Path(args.python), 'version': args.version, } if not os.path.isabs(args.python): raise Exception('--python arg must be an absolute path') if args.extra_packages_script: kwargs['extra_packages_script'] = args.extra_packages_script if args.extra_wxs: kwargs['extra_wxs'] = dict( thing.split("=") for thing in args.extra_wxs.split(',') ) if args.extra_features: kwargs['extra_features'] = args.extra_features.split(',') if args.sign_sn or args.sign_cert: fn = build_signed_installer kwargs['name'] = args.name kwargs['subject_name'] = args.sign_sn kwargs['cert_path'] = args.sign_cert kwargs['cert_password'] = args.sign_password kwargs['timestamp_url'] = args.sign_timestamp_url fn(**kwargs)