pyoxidizer.bzl
98 lines
| 3.3 KiB
| text/x-python
|
PythonLexer
Gregory Szorc
|
r45129 | ROOT = CWD + "/../.." | ||
Gregory Szorc
|
r45128 | |||
Gregory Szorc
|
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
|
r45339 | return default_python_distribution(flavor = "standalone_dynamic") | ||
Gregory Szorc
|
r45270 | |||
def make_exe(dist): | ||||
Rodrigo Damazio Bovendorp
|
r45339 | """Builds a Rust-wrapped Mercurial binary.""" | ||
Gregory Szorc
|
r45129 | config = PythonInterpreterConfig( | ||
raw_allocator = "system", | ||||
Gregory Szorc
|
r45270 | run_eval = RUN_CODE, | ||
Gregory Szorc
|
r45129 | # 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, | ||||
Gregory Szorc
|
r45128 | ) | ||
exe = dist.to_python_executable( | ||||
Gregory Szorc
|
r45129 | name = "hg", | ||
resources_policy = "prefer-in-memory-fallback-filesystem-relative:lib", | ||||
config = config, | ||||
# Extension may depend on any Python functionality. Include all | ||||
# extensions. | ||||
Gregory Szorc
|
r45128 | extension_module_filter = "all", | ||
) | ||||
Gregory Szorc
|
r45270 | # Add Mercurial to resources. | ||
for resource in dist.pip_install(["--verbose", ROOT]): | ||||
# This is a bit wonky and worth explaining. | ||||
# | ||||
# Various parts of Mercurial don't yet support loading package | ||||
# resources via the ResourceReader interface. Or, not having | ||||
# file-based resources would be too inconvenient for users. | ||||
# | ||||
# So, for package resources, we package them both in the | ||||
# filesystem as well as in memory. If both are defined, | ||||
# PyOxidizer will prefer the in-memory location. So even | ||||
# if the filesystem file isn't packaged in the location | ||||
# specified here, we should never encounter an errors as the | ||||
# resource will always be available in memory. | ||||
if type(resource) == "PythonPackageResource": | ||||
exe.add_filesystem_relative_python_resource(".", resource) | ||||
exe.add_in_memory_python_resource(resource) | ||||
else: | ||||
exe.add_python_resource(resource) | ||||
# On Windows, we install extra packages for convenience. | ||||
if "windows" in BUILD_TARGET_TRIPLE: | ||||
exe.add_python_resources( | ||||
Rodrigo Damazio Bovendorp
|
r45339 | dist.pip_install(["-r", ROOT + "/contrib/packaging/requirements_win32.txt"]), | ||
Gregory Szorc
|
r45270 | ) | ||
Gregory Szorc
|
r45128 | |||
Gregory Szorc
|
r45129 | return exe | ||
Gregory Szorc
|
r45270 | def make_manifest(dist, exe): | ||
Gregory Szorc
|
r45129 | m = FileManifest() | ||
m.add_python_resource(".", exe) | ||||
Gregory Szorc
|
r45128 | |||
Gregory Szorc
|
r45270 | return m | ||
Gregory Szorc
|
r45128 | |||
def make_embedded_resources(exe): | ||||
return exe.to_embedded_resources() | ||||
Gregory Szorc
|
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
|
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
|
r45270 | PYOXIDIZER_VERSION = "0.7.0" | ||