pyoxidizer.bzl
108 lines
| 3.5 KiB
| text/x-python
|
PythonLexer
Gregory Szorc
|
r45129 | ROOT = CWD + "/../.." | ||
Gregory Szorc
|
r45128 | |||
Gregory Szorc
|
r46277 | IS_WINDOWS = "windows" in BUILD_TARGET_TRIPLE | ||
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 | |||
Gregory Szorc
|
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
|
r45270 | def make_exe(dist): | ||
Rodrigo Damazio Bovendorp
|
r45339 | """Builds a Rust-wrapped Mercurial binary.""" | ||
Gregory Szorc
|
r46277 | packaging_policy = dist.make_python_packaging_policy() | ||
# Extension may depend on any Python functionality. Include all | ||||
# extensions. | ||||
packaging_policy.extension_module_filter = "all" | ||||
packaging_policy.resources_policy = "prefer-in-memory-fallback-filesystem-relative:lib" | ||||
packaging_policy.register_resource_callback(resource_callback) | ||||
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", | ||
Gregory Szorc
|
r46277 | packaging_policy = packaging_policy, | ||
Gregory Szorc
|
r45129 | config = config, | ||
Gregory Szorc
|
r45128 | ) | ||
Gregory Szorc
|
r45270 | # Add Mercurial to resources. | ||
Gregory Szorc
|
r46277 | exe.add_python_resources(exe.pip_install(["--verbose", ROOT])) | ||
Gregory Szorc
|
r45270 | |||
# On Windows, we install extra packages for convenience. | ||||
Gregory Szorc
|
r46277 | if IS_WINDOWS: | ||
Gregory Szorc
|
r45270 | exe.add_python_resources( | ||
Gregory Szorc
|
r46277 | exe.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
|
r46277 | PYOXIDIZER_VERSION = "0.8.0-pre" | ||
PYOXIDIZER_COMMIT = "4697fb25918dfad6dc73288daeea501063963a08" | ||||