##// END OF EJS Templates
global: use python3 in shebangs...
global: use python3 in shebangs Python 3 is the future. We want Python scripts to be using Python 3 by default. This change updates all `#!/usr/bin/env python` shebangs to use `python3`. Does this mean all scripts use or require Python 3: no. In the test environment, the `PATH` environment variable in tests is updated to guarantee that the Python executable used to run run-tests.py is used. Since test scripts all now use `#!/usr/bin/env python3`, we had to update this code to install a `python3` symlink instead of `python`. It is possible there are some random scripts now executed with the incorrect Python interpreter in some contexts. However, I would argue that this was a pre-existing bug: we should almost always be executing new Python processes using the `sys.executable` from the originating Python script, as `python` or `python3` won't guarantee we'll use the same interpreter. Differential Revision: https://phab.mercurial-scm.org/D9273

File last commit:

r46344:d270b9b7 stable
r46434:c102b704 default
Show More
pyoxidizer.bzl
108 lines | 3.6 KiB | text/x-python | PythonLexer
Gregory Szorc
hgcli: customize for Mercurial...
r45129 ROOT = CWD + "/../.."
Gregory Szorc
hgcli: add stub PyOxidizer project...
r45128
Gregory Szorc
pyoxidizer: produce working Python 3 Windows installers (issue6366)...
r46277 IS_WINDOWS = "windows" in BUILD_TARGET_TRIPLE
Gregory Szorc
packaging: support building Inno installer with PyOxidizer...
r45270 # Code to run in Python interpreter.
RUN_CODE = "import hgdemandimport; hgdemandimport.enable(); from mercurial import dispatch; dispatch.run()"
set_build_path(ROOT + "/build/pyoxidizer")
def make_distribution():
return default_python_distribution()
def make_distribution_windows():
Rodrigo Damazio Bovendorp
pyoxidizer: formatting bazel definitions...
r45339 return default_python_distribution(flavor = "standalone_dynamic")
Gregory Szorc
packaging: support building Inno installer with PyOxidizer...
r45270
Gregory Szorc
pyoxidizer: produce working Python 3 Windows installers (issue6366)...
r46277 def resource_callback(policy, resource):
# We use a custom resource routing policy to influence where things are loaded
# from.
#
# For Python modules and resources, we load from memory if they are in
# the standard library and from the filesystem if not. This is because
# parts of Mercurial and some 3rd party packages aren't yet compatible
# with memory loading.
#
# For Python extension modules, we load from the filesystem because
# this yields greatest compatibility.
if type(resource) in ("PythonModuleSource", "PythonPackageResource", "PythonPackageDistributionResource"):
if resource.is_stdlib:
resource.add_location = "in-memory"
else:
resource.add_location = "filesystem-relative:lib"
elif type(resource) == "PythonExtensionModule":
resource.add_location = "filesystem-relative:lib"
Gregory Szorc
packaging: support building Inno installer with PyOxidizer...
r45270 def make_exe(dist):
Rodrigo Damazio Bovendorp
pyoxidizer: formatting bazel definitions...
r45339 """Builds a Rust-wrapped Mercurial binary."""
Gregory Szorc
pyoxidizer: produce working Python 3 Windows installers (issue6366)...
r46277 packaging_policy = dist.make_python_packaging_policy()
# Extension may depend on any Python functionality. Include all
# extensions.
packaging_policy.extension_module_filter = "all"
Gregory Szorc
pyoxidizer: update to PyOxidizer 0.9...
r46341 packaging_policy.resources_location = "in-memory"
packaging_policy.resources_location_fallback = "filesystem-relative:lib"
Gregory Szorc
pyoxidizer: produce working Python 3 Windows installers (issue6366)...
r46277 packaging_policy.register_resource_callback(resource_callback)
Gregory Szorc
pyoxidizer: update to PyOxidizer 0.9...
r46341 config = dist.make_python_interpreter_config()
config.raw_allocator = "system"
config.run_mode = "eval:%s" % RUN_CODE
# We want to let the user load extensions from the file system
config.filesystem_importer = True
# We need this to make resourceutil happy, since it looks for sys.frozen.
config.sys_frozen = True
config.legacy_windows_stdio = True
Gregory Szorc
hgcli: add stub PyOxidizer project...
r45128
exe = dist.to_python_executable(
Gregory Szorc
hgcli: customize for Mercurial...
r45129 name = "hg",
Gregory Szorc
pyoxidizer: produce working Python 3 Windows installers (issue6366)...
r46277 packaging_policy = packaging_policy,
Gregory Szorc
hgcli: customize for Mercurial...
r45129 config = config,
Gregory Szorc
hgcli: add stub PyOxidizer project...
r45128 )
Gregory Szorc
packaging: support building Inno installer with PyOxidizer...
r45270 # Add Mercurial to resources.
Gregory Szorc
pyoxidizer: produce working Python 3 Windows installers (issue6366)...
r46277 exe.add_python_resources(exe.pip_install(["--verbose", ROOT]))
Gregory Szorc
packaging: support building Inno installer with PyOxidizer...
r45270
# On Windows, we install extra packages for convenience.
Gregory Szorc
pyoxidizer: produce working Python 3 Windows installers (issue6366)...
r46277 if IS_WINDOWS:
Gregory Szorc
packaging: support building Inno installer with PyOxidizer...
r45270 exe.add_python_resources(
Gregory Szorc
contrib: split Windows requirements into multiple files...
r46344 exe.pip_install(["-r", ROOT + "/contrib/packaging/requirements-windows-py2.txt"]),
Gregory Szorc
packaging: support building Inno installer with PyOxidizer...
r45270 )
Gregory Szorc
hgcli: add stub PyOxidizer project...
r45128
Gregory Szorc
hgcli: customize for Mercurial...
r45129 return exe
Gregory Szorc
packaging: support building Inno installer with PyOxidizer...
r45270 def make_manifest(dist, exe):
Gregory Szorc
hgcli: customize for Mercurial...
r45129 m = FileManifest()
m.add_python_resource(".", exe)
Gregory Szorc
hgcli: add stub PyOxidizer project...
r45128
Gregory Szorc
packaging: support building Inno installer with PyOxidizer...
r45270 return m
Gregory Szorc
hgcli: add stub PyOxidizer project...
r45128
def make_embedded_resources(exe):
return exe.to_embedded_resources()
Gregory Szorc
packaging: support building Inno installer with PyOxidizer...
r45270 register_target("distribution_posix", make_distribution)
register_target("distribution_windows", make_distribution_windows)
register_target("exe_posix", make_exe, depends = ["distribution_posix"])
register_target("exe_windows", make_exe, depends = ["distribution_windows"])
register_target(
"app_posix",
make_manifest,
depends = ["distribution_posix", "exe_posix"],
default = "windows" not in BUILD_TARGET_TRIPLE,
)
register_target(
"app_windows",
make_manifest,
depends = ["distribution_windows", "exe_windows"],
default = "windows" in BUILD_TARGET_TRIPLE,
)
Gregory Szorc
hgcli: add stub PyOxidizer project...
r45128 resolve_targets()
# END OF COMMON USER-ADJUSTED SETTINGS.
#
# Everything below this is typically managed by PyOxidizer and doesn't need
# to be updated by people.
Gregory Szorc
pyoxidizer: update to PyOxidizer 0.9...
r46341 PYOXIDIZER_VERSION = "0.9.0"
PYOXIDIZER_COMMIT = "1fbc264cc004226cd76ee452e0a386ffca6ccfb1"