contrib/packaging/pyoxidizer.bzl
author Yuya Nishihara <yuya@tcha.org>
Sun, 15 Mar 2020 15:12:44 +0900
changeset 44589 fc1fa3a07af6
parent 44384 6689cebacb32
permissions -rw-r--r--
templater: introduce wrapper for smartset (API) I want to add a template function which takes a revset as an argument: {somefunc(..., revset(...))} ^^^^^^^^^^^ evaluates to a revslist This wrapper will provide a method to get an underlying smartset. It should also be good for performance since count(revset(...)) will no longer have to fully consume the smartset for example, but that isn't the point of this change.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
44216
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     1
# Instructions:
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     2
#
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     3
# 1. cargo install --version 0.5.0 pyoxidizer
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     4
# 2. cd /path/to/hg
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     5
# 3. pyoxidizer build --path contrib/packaging [--release]
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     6
# 4. Run build/pyoxidizer/<arch>/<debug|release>/app/hg
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     7
#
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     8
# If you need to build again, you need to remove the build/lib.* and
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     9
# build/temp.* directories, otherwise PyOxidizer fails to pick up C
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    10
# extensions. This is a bug in PyOxidizer.
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    11
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    12
ROOT = CWD + "/../.."
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    13
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    14
set_build_path(ROOT + "/build/pyoxidizer")
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    15
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    16
def make_exe():
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    17
    dist = default_python_distribution()
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    18
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    19
    code = "import hgdemandimport; hgdemandimport.enable(); from mercurial import dispatch; dispatch.run()"
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    20
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    21
    config = PythonInterpreterConfig(
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    22
        raw_allocator = "system",
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    23
        run_eval = code,
44384
6689cebacb32 pyoxidizer: allow extensions to be loaded from the file system
Martin von Zweigbergk <martinvonz@google.com>
parents: 44288
diff changeset
    24
        # We want to let the user load extensions from the file system
6689cebacb32 pyoxidizer: allow extensions to be loaded from the file system
Martin von Zweigbergk <martinvonz@google.com>
parents: 44288
diff changeset
    25
        filesystem_importer = True,
44216
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    26
        # We need this to make resourceutil happy, since it looks for sys.frozen.
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    27
        sys_frozen = True,
44288
cd8f248fead4 pyoxidizer: use `legacy_windows_stdio` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 44216
diff changeset
    28
        legacy_windows_stdio = True,
44216
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    29
    )
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    30
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    31
    exe = dist.to_python_executable(
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    32
        name = "hg",
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    33
        config = config,
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    34
    )
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    35
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    36
    # Use setup.py install to build Mercurial and collect Python resources to
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    37
    # embed in the executable.
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    38
    resources = dist.setup_py_install(ROOT)
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    39
    exe.add_python_resources(resources)
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    40
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    41
    return exe
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    42
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    43
def make_install(exe):
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    44
    m = FileManifest()
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    45
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    46
    # `hg` goes in root directory.
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    47
    m.add_python_resource(".", exe)
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    48
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    49
    templates = glob(
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    50
        include=[ROOT + "/mercurial/templates/**/*"],
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    51
        strip_prefix = ROOT + "/mercurial/",
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    52
    )
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    53
    m.add_manifest(templates)
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    54
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    55
    return m
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    56
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    57
register_target("exe", make_exe)
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    58
register_target("app", make_install, depends = ["exe"], default = True)
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    59
281b6690e646 packaging: add support for PyOxidizer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    60
resolve_targets()