contrib/packaging/hgpackaging/pyoxidizer.py
author Anton Shestakov <av6@dwimlabs.net>
Thu, 12 May 2022 13:52:10 +0400
branchstable
changeset 48890 ec3f88480dbf
parent 47867 1e6cb23ce6da
child 49066 8d7eaff92f9c
permissions -rw-r--r--
tests: show that hg log --debug output differs from {file*} template keywords hg log --debug -T xml doesn't differ, but let's test it because we can.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
44748
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     1
# pyoxidizer.py - Packaging support for PyOxidizer
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     2
#
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     3
# Copyright 2020 Gregory Szorc <gregory.szorc@gmail.com>
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     4
#
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     5
# This software may be used and distributed according to the terms of the
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     6
# GNU General Public License version 2 or any later version.
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     7
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     8
# no-check-code because Python 3 native.
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     9
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    10
import os
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    11
import pathlib
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    12
import shutil
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    13
import subprocess
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    14
import sys
47221
73f1a10320d1 packaging: use PyOxidizer for producing WiX MSI installer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47220
diff changeset
    15
import typing
44748
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    16
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    17
from .downloads import download_entry
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    18
from .util import (
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    19
    extract_zip_to_directory,
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    20
    process_install_rules,
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    21
    find_vc_runtime_dll,
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    22
)
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    23
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    24
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    25
STAGING_RULES_WINDOWS = [
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    26
    ('contrib/bash_completion', 'contrib/'),
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    27
    ('contrib/hgk', 'contrib/hgk.tcl'),
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    28
    ('contrib/hgweb.fcgi', 'contrib/'),
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    29
    ('contrib/hgweb.wsgi', 'contrib/'),
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    30
    ('contrib/logo-droplets.svg', 'contrib/'),
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    31
    ('contrib/mercurial.el', 'contrib/'),
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    32
    ('contrib/mq.el', 'contrib/'),
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    33
    ('contrib/tcsh_completion', 'contrib/'),
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    34
    ('contrib/tcsh_completion_build.sh', 'contrib/'),
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    35
    ('contrib/vim/*', 'contrib/vim/'),
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    36
    ('contrib/win32/postinstall.txt', 'ReleaseNotes.txt'),
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    37
    ('contrib/win32/ReadMe.html', 'ReadMe.html'),
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    38
    ('contrib/xml.rnc', 'contrib/'),
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    39
    ('contrib/zsh_completion', 'contrib/'),
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    40
    ('doc/*.html', 'doc/'),
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    41
    ('doc/style.css', 'doc/'),
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    42
    ('COPYING', 'Copying.txt'),
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    43
]
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    44
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    45
STAGING_RULES_APP = [
45685
57b5452a55d5 pyoxidizer: produce working Python 3 Windows installers (issue6366)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 44748
diff changeset
    46
    ('lib/mercurial/helptext/**/*.txt', 'helptext/'),
57b5452a55d5 pyoxidizer: produce working Python 3 Windows installers (issue6366)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 44748
diff changeset
    47
    ('lib/mercurial/defaultrc/*.rc', 'defaultrc/'),
57b5452a55d5 pyoxidizer: produce working Python 3 Windows installers (issue6366)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 44748
diff changeset
    48
    ('lib/mercurial/locale/**/*', 'locale/'),
57b5452a55d5 pyoxidizer: produce working Python 3 Windows installers (issue6366)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 44748
diff changeset
    49
    ('lib/mercurial/templates/**/*', 'templates/'),
44748
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    50
]
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    51
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    52
STAGING_EXCLUDES_WINDOWS = [
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    53
    "doc/hg-ssh.8.html",
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    54
]
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    55
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    56
47218
41be7698a4fd packaging: move documentation HTML building to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 45937
diff changeset
    57
def build_docs_html(source_dir: pathlib.Path):
41be7698a4fd packaging: move documentation HTML building to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 45937
diff changeset
    58
    """Ensures HTML documentation is built.
41be7698a4fd packaging: move documentation HTML building to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 45937
diff changeset
    59
41be7698a4fd packaging: move documentation HTML building to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 45937
diff changeset
    60
    This will fail if docutils isn't available.
41be7698a4fd packaging: move documentation HTML building to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 45937
diff changeset
    61
41be7698a4fd packaging: move documentation HTML building to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 45937
diff changeset
    62
    (The HTML docs aren't built as part of `pip install` so we need to build them
41be7698a4fd packaging: move documentation HTML building to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 45937
diff changeset
    63
    out of band.)
41be7698a4fd packaging: move documentation HTML building to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 45937
diff changeset
    64
    """
41be7698a4fd packaging: move documentation HTML building to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 45937
diff changeset
    65
    subprocess.run(
41be7698a4fd packaging: move documentation HTML building to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 45937
diff changeset
    66
        [sys.executable, str(source_dir / "setup.py"), "build_doc", "--html"],
41be7698a4fd packaging: move documentation HTML building to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 45937
diff changeset
    67
        cwd=str(source_dir),
41be7698a4fd packaging: move documentation HTML building to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 45937
diff changeset
    68
        check=True,
41be7698a4fd packaging: move documentation HTML building to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 45937
diff changeset
    69
    )
41be7698a4fd packaging: move documentation HTML building to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 45937
diff changeset
    70
41be7698a4fd packaging: move documentation HTML building to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 45937
diff changeset
    71
47220
d09b36f69180 packaging: extract invocation of pyoxidizer to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47219
diff changeset
    72
def run_pyoxidizer(
47221
73f1a10320d1 packaging: use PyOxidizer for producing WiX MSI installer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47220
diff changeset
    73
    source_dir: pathlib.Path,
73f1a10320d1 packaging: use PyOxidizer for producing WiX MSI installer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47220
diff changeset
    74
    build_dir: pathlib.Path,
73f1a10320d1 packaging: use PyOxidizer for producing WiX MSI installer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47220
diff changeset
    75
    target_triple: str,
73f1a10320d1 packaging: use PyOxidizer for producing WiX MSI installer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47220
diff changeset
    76
    build_vars: typing.Optional[typing.Dict[str, str]] = None,
73f1a10320d1 packaging: use PyOxidizer for producing WiX MSI installer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47220
diff changeset
    77
    target: typing.Optional[str] = None,
47220
d09b36f69180 packaging: extract invocation of pyoxidizer to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47219
diff changeset
    78
) -> pathlib.Path:
d09b36f69180 packaging: extract invocation of pyoxidizer to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47219
diff changeset
    79
    """Run `pyoxidizer` in an environment with access to build dependencies.
44748
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    80
47220
d09b36f69180 packaging: extract invocation of pyoxidizer to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47219
diff changeset
    81
    Returns the output directory that pyoxidizer would have used for build
d09b36f69180 packaging: extract invocation of pyoxidizer to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47219
diff changeset
    82
    artifacts. Actual build artifacts are likely in a sub-directory with the
d09b36f69180 packaging: extract invocation of pyoxidizer to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47219
diff changeset
    83
    name of the pyoxidizer build target that was built.
44748
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    84
    """
47221
73f1a10320d1 packaging: use PyOxidizer for producing WiX MSI installer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47220
diff changeset
    85
    build_vars = build_vars or {}
73f1a10320d1 packaging: use PyOxidizer for producing WiX MSI installer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47220
diff changeset
    86
44748
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    87
    # We need to make gettext binaries available for compiling i18n files.
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    88
    gettext_pkg, gettext_entry = download_entry('gettext', build_dir)
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    89
    gettext_dep_pkg = download_entry('gettext-dep', build_dir)[0]
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    90
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    91
    gettext_root = build_dir / ('gettext-win-%s' % gettext_entry['version'])
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    92
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    93
    if not gettext_root.exists():
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    94
        extract_zip_to_directory(gettext_pkg, gettext_root)
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    95
        extract_zip_to_directory(gettext_dep_pkg, gettext_root)
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    96
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    97
    env = dict(os.environ)
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    98
    env["PATH"] = "%s%s%s" % (
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    99
        env["PATH"],
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   100
        os.pathsep,
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   101
        str(gettext_root / "bin"),
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   102
    )
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   103
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   104
    args = [
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   105
        "pyoxidizer",
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   106
        "build",
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   107
        "--path",
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   108
        str(source_dir / "rust" / "hgcli"),
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   109
        "--release",
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   110
        "--target-triple",
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   111
        target_triple,
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   112
    ]
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   113
47221
73f1a10320d1 packaging: use PyOxidizer for producing WiX MSI installer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47220
diff changeset
   114
    for k, v in sorted(build_vars.items()):
73f1a10320d1 packaging: use PyOxidizer for producing WiX MSI installer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47220
diff changeset
   115
        args.extend(["--var", k, v])
73f1a10320d1 packaging: use PyOxidizer for producing WiX MSI installer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47220
diff changeset
   116
73f1a10320d1 packaging: use PyOxidizer for producing WiX MSI installer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47220
diff changeset
   117
    if target:
73f1a10320d1 packaging: use PyOxidizer for producing WiX MSI installer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47220
diff changeset
   118
        args.append(target)
73f1a10320d1 packaging: use PyOxidizer for producing WiX MSI installer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47220
diff changeset
   119
44748
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   120
    subprocess.run(args, env=env, check=True)
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   121
47220
d09b36f69180 packaging: extract invocation of pyoxidizer to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47219
diff changeset
   122
    return source_dir / "build" / "pyoxidizer" / target_triple / "release"
d09b36f69180 packaging: extract invocation of pyoxidizer to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47219
diff changeset
   123
d09b36f69180 packaging: extract invocation of pyoxidizer to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47219
diff changeset
   124
d09b36f69180 packaging: extract invocation of pyoxidizer to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47219
diff changeset
   125
def create_pyoxidizer_install_layout(
d09b36f69180 packaging: extract invocation of pyoxidizer to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47219
diff changeset
   126
    source_dir: pathlib.Path,
d09b36f69180 packaging: extract invocation of pyoxidizer to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47219
diff changeset
   127
    build_dir: pathlib.Path,
d09b36f69180 packaging: extract invocation of pyoxidizer to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47219
diff changeset
   128
    out_dir: pathlib.Path,
d09b36f69180 packaging: extract invocation of pyoxidizer to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47219
diff changeset
   129
    target_triple: str,
d09b36f69180 packaging: extract invocation of pyoxidizer to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47219
diff changeset
   130
):
d09b36f69180 packaging: extract invocation of pyoxidizer to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47219
diff changeset
   131
    """Build Mercurial with PyOxidizer and copy additional files into place.
d09b36f69180 packaging: extract invocation of pyoxidizer to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47219
diff changeset
   132
d09b36f69180 packaging: extract invocation of pyoxidizer to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47219
diff changeset
   133
    After successful completion, ``out_dir`` contains files constituting a
d09b36f69180 packaging: extract invocation of pyoxidizer to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47219
diff changeset
   134
    Mercurial install.
d09b36f69180 packaging: extract invocation of pyoxidizer to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47219
diff changeset
   135
    """
d09b36f69180 packaging: extract invocation of pyoxidizer to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47219
diff changeset
   136
d09b36f69180 packaging: extract invocation of pyoxidizer to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47219
diff changeset
   137
    run_pyoxidizer(source_dir, build_dir, target_triple)
d09b36f69180 packaging: extract invocation of pyoxidizer to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47219
diff changeset
   138
44748
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   139
    build_dir = (
47867
1e6cb23ce6da packaging: reference proper output directory
Gregory Szorc <gregory.szorc@gmail.com>
parents: 47221
diff changeset
   140
        source_dir / "build" / "pyoxidizer" / target_triple / "release" / "app"
44748
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   141
    )
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   142
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   143
    if out_dir.exists():
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   144
        print("purging %s" % out_dir)
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   145
        shutil.rmtree(out_dir)
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   146
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   147
    # Now assemble all the files from PyOxidizer into the staging directory.
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   148
    shutil.copytree(build_dir, out_dir)
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   149
45685
57b5452a55d5 pyoxidizer: produce working Python 3 Windows installers (issue6366)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 44748
diff changeset
   150
    # Move some of those files around. We can get rid of this once Mercurial
57b5452a55d5 pyoxidizer: produce working Python 3 Windows installers (issue6366)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 44748
diff changeset
   151
    # is taught to use the importlib APIs for reading resources.
44748
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   152
    process_install_rules(STAGING_RULES_APP, build_dir, out_dir)
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   153
47218
41be7698a4fd packaging: move documentation HTML building to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 45937
diff changeset
   154
    build_docs_html(source_dir)
44748
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   155
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   156
    if "windows" in target_triple:
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   157
        process_install_rules(STAGING_RULES_WINDOWS, source_dir, out_dir)
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   158
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   159
        # Write out a default editor.rc file to configure notepad as the
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   160
        # default editor.
45937
37bcd7f5a543 pyoxidizer: make sure defaultrc directory exists before trying to write to it
Augie Fackler <augie@google.com>
parents: 45685
diff changeset
   161
        os.makedirs(out_dir / "defaultrc", exist_ok=True)
44748
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   162
        with (out_dir / "defaultrc" / "editor.rc").open(
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   163
            "w", encoding="utf-8"
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   164
        ) as fh:
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   165
            fh.write("[ui]\neditor = notepad\n")
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   166
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   167
        for f in STAGING_EXCLUDES_WINDOWS:
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   168
            p = out_dir / f
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   169
            if p.exists():
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   170
                print("removing %s" % p)
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   171
                p.unlink()
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   172
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   173
        # Add vcruntimeXXX.dll next to executable.
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   174
        vc_runtime_dll = find_vc_runtime_dll(x64="x86_64" in target_triple)
94f4f2ec7dee packaging: support building Inno installer with PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   175
        shutil.copy(vc_runtime_dll, out_dir / vc_runtime_dll.name)