##// END OF EJS Templates
pyoxidizer: pin Python to 3.8...
Gregory Szorc -
r47972:95950dc8 default
parent child Browse files
Show More
@@ -1,108 +1,108 b''
1 ROOT = CWD + "/../.."
1 ROOT = CWD + "/../.."
2
2
3 IS_WINDOWS = "windows" in BUILD_TARGET_TRIPLE
3 IS_WINDOWS = "windows" in BUILD_TARGET_TRIPLE
4
4
5 # Code to run in Python interpreter.
5 # Code to run in Python interpreter.
6 RUN_CODE = "import hgdemandimport; hgdemandimport.enable(); from mercurial import dispatch; dispatch.run()"
6 RUN_CODE = "import hgdemandimport; hgdemandimport.enable(); from mercurial import dispatch; dispatch.run()"
7
7
8 set_build_path(ROOT + "/build/pyoxidizer")
8 set_build_path(ROOT + "/build/pyoxidizer")
9
9
10 def make_distribution():
10 def make_distribution():
11 return default_python_distribution()
11 return default_python_distribution(python_version = "3.8")
12
12
13 def make_distribution_windows():
13 def make_distribution_windows():
14 return default_python_distribution(flavor = "standalone_dynamic")
14 return default_python_distribution(flavor = "standalone_dynamic")
15
15
16 def resource_callback(policy, resource):
16 def resource_callback(policy, resource):
17 if not IS_WINDOWS:
17 if not IS_WINDOWS:
18 resource.add_location = "in-memory"
18 resource.add_location = "in-memory"
19 return
19 return
20
20
21 # We use a custom resource routing policy to influence where things are loaded
21 # We use a custom resource routing policy to influence where things are loaded
22 # from.
22 # from.
23 #
23 #
24 # For Python modules and resources, we load from memory if they are in
24 # For Python modules and resources, we load from memory if they are in
25 # the standard library and from the filesystem if not. This is because
25 # the standard library and from the filesystem if not. This is because
26 # parts of Mercurial and some 3rd party packages aren't yet compatible
26 # parts of Mercurial and some 3rd party packages aren't yet compatible
27 # with memory loading.
27 # with memory loading.
28 #
28 #
29 # For Python extension modules, we load from the filesystem because
29 # For Python extension modules, we load from the filesystem because
30 # this yields greatest compatibility.
30 # this yields greatest compatibility.
31 if type(resource) in ("PythonModuleSource", "PythonPackageResource", "PythonPackageDistributionResource"):
31 if type(resource) in ("PythonModuleSource", "PythonPackageResource", "PythonPackageDistributionResource"):
32 if resource.is_stdlib:
32 if resource.is_stdlib:
33 resource.add_location = "in-memory"
33 resource.add_location = "in-memory"
34 else:
34 else:
35 resource.add_location = "filesystem-relative:lib"
35 resource.add_location = "filesystem-relative:lib"
36
36
37 elif type(resource) == "PythonExtensionModule":
37 elif type(resource) == "PythonExtensionModule":
38 resource.add_location = "filesystem-relative:lib"
38 resource.add_location = "filesystem-relative:lib"
39
39
40 def make_exe(dist):
40 def make_exe(dist):
41 """Builds a Rust-wrapped Mercurial binary."""
41 """Builds a Rust-wrapped Mercurial binary."""
42 packaging_policy = dist.make_python_packaging_policy()
42 packaging_policy = dist.make_python_packaging_policy()
43
43
44 # Extension may depend on any Python functionality. Include all
44 # Extension may depend on any Python functionality. Include all
45 # extensions.
45 # extensions.
46 packaging_policy.extension_module_filter = "all"
46 packaging_policy.extension_module_filter = "all"
47 packaging_policy.resources_location = "in-memory"
47 packaging_policy.resources_location = "in-memory"
48 if IS_WINDOWS:
48 if IS_WINDOWS:
49 packaging_policy.resources_location_fallback = "filesystem-relative:lib"
49 packaging_policy.resources_location_fallback = "filesystem-relative:lib"
50 packaging_policy.register_resource_callback(resource_callback)
50 packaging_policy.register_resource_callback(resource_callback)
51
51
52 config = dist.make_python_interpreter_config()
52 config = dist.make_python_interpreter_config()
53 config.raw_allocator = "system"
53 config.raw_allocator = "system"
54 config.run_command = RUN_CODE
54 config.run_command = RUN_CODE
55
55
56 # We want to let the user load extensions from the file system
56 # We want to let the user load extensions from the file system
57 config.filesystem_importer = True
57 config.filesystem_importer = True
58
58
59 # We need this to make resourceutil happy, since it looks for sys.frozen.
59 # We need this to make resourceutil happy, since it looks for sys.frozen.
60 config.sys_frozen = True
60 config.sys_frozen = True
61 config.legacy_windows_stdio = True
61 config.legacy_windows_stdio = True
62
62
63 exe = dist.to_python_executable(
63 exe = dist.to_python_executable(
64 name = "hg",
64 name = "hg",
65 packaging_policy = packaging_policy,
65 packaging_policy = packaging_policy,
66 config = config,
66 config = config,
67 )
67 )
68
68
69 # Add Mercurial to resources.
69 # Add Mercurial to resources.
70 exe.add_python_resources(exe.pip_install(["--verbose", ROOT]))
70 exe.add_python_resources(exe.pip_install(["--verbose", ROOT]))
71
71
72 # On Windows, we install extra packages for convenience.
72 # On Windows, we install extra packages for convenience.
73 if IS_WINDOWS:
73 if IS_WINDOWS:
74 exe.add_python_resources(
74 exe.add_python_resources(
75 exe.pip_install(["-r", ROOT + "/contrib/packaging/requirements-windows-py3.txt"]),
75 exe.pip_install(["-r", ROOT + "/contrib/packaging/requirements-windows-py3.txt"]),
76 )
76 )
77
77
78 return exe
78 return exe
79
79
80 def make_manifest(dist, exe):
80 def make_manifest(dist, exe):
81 m = FileManifest()
81 m = FileManifest()
82 m.add_python_resource(".", exe)
82 m.add_python_resource(".", exe)
83
83
84 return m
84 return m
85
85
86 def make_embedded_resources(exe):
86 def make_embedded_resources(exe):
87 return exe.to_embedded_resources()
87 return exe.to_embedded_resources()
88
88
89 register_target("distribution_posix", make_distribution)
89 register_target("distribution_posix", make_distribution)
90 register_target("distribution_windows", make_distribution_windows)
90 register_target("distribution_windows", make_distribution_windows)
91
91
92 register_target("exe_posix", make_exe, depends = ["distribution_posix"])
92 register_target("exe_posix", make_exe, depends = ["distribution_posix"])
93 register_target("exe_windows", make_exe, depends = ["distribution_windows"])
93 register_target("exe_windows", make_exe, depends = ["distribution_windows"])
94
94
95 register_target(
95 register_target(
96 "app_posix",
96 "app_posix",
97 make_manifest,
97 make_manifest,
98 depends = ["distribution_posix", "exe_posix"],
98 depends = ["distribution_posix", "exe_posix"],
99 default = "windows" not in BUILD_TARGET_TRIPLE,
99 default = "windows" not in BUILD_TARGET_TRIPLE,
100 )
100 )
101 register_target(
101 register_target(
102 "app_windows",
102 "app_windows",
103 make_manifest,
103 make_manifest,
104 depends = ["distribution_windows", "exe_windows"],
104 depends = ["distribution_windows", "exe_windows"],
105 default = "windows" in BUILD_TARGET_TRIPLE,
105 default = "windows" in BUILD_TARGET_TRIPLE,
106 )
106 )
107
107
108 resolve_targets()
108 resolve_targets()
General Comments 0
You need to be logged in to leave comments. Login now