Mercurial > public > mercurial-scm > hg-stable
view contrib/packaging/pyoxidizer.bzl @ 44415:6689cebacb32
pyoxidizer: allow extensions to be loaded from the file system
It seems that setting this config is all that's needed to be able to
load extensions from the file system (which we clearly want). Thanks
for making this work, Gregory Szorc!.
Differential Revision: https://phab.mercurial-scm.org/D8122
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Thu, 13 Feb 2020 15:33:36 -0800 |
parents | cd8f248fead4 |
children |
line wrap: on
line source
# Instructions: # # 1. cargo install --version 0.5.0 pyoxidizer # 2. cd /path/to/hg # 3. pyoxidizer build --path contrib/packaging [--release] # 4. Run build/pyoxidizer/<arch>/<debug|release>/app/hg # # If you need to build again, you need to remove the build/lib.* and # build/temp.* directories, otherwise PyOxidizer fails to pick up C # extensions. This is a bug in PyOxidizer. ROOT = CWD + "/../.." set_build_path(ROOT + "/build/pyoxidizer") def make_exe(): dist = default_python_distribution() code = "import hgdemandimport; hgdemandimport.enable(); from mercurial import dispatch; dispatch.run()" config = PythonInterpreterConfig( raw_allocator = "system", run_eval = code, # We want to let the user load extensions from the file system filesystem_importer = True, # We need this to make resourceutil happy, since it looks for sys.frozen. sys_frozen = True, legacy_windows_stdio = True, ) exe = dist.to_python_executable( name = "hg", config = config, ) # Use setup.py install to build Mercurial and collect Python resources to # embed in the executable. resources = dist.setup_py_install(ROOT) exe.add_python_resources(resources) return exe def make_install(exe): m = FileManifest() # `hg` goes in root directory. m.add_python_resource(".", exe) templates = glob( include=[ROOT + "/mercurial/templates/**/*"], strip_prefix = ROOT + "/mercurial/", ) m.add_manifest(templates) return m register_target("exe", make_exe) register_target("app", make_install, depends = ["exe"], default = True) resolve_targets()