|
1 # Instructions: |
|
2 # |
|
3 # 1. cargo install --version 0.5.0 pyoxidizer |
|
4 # 2. cd /path/to/hg |
|
5 # 3. pyoxidizer build --path contrib/packaging [--release] |
|
6 # 4. Run build/pyoxidizer/<arch>/<debug|release>/app/hg |
|
7 # |
|
8 # If you need to build again, you need to remove the build/lib.* and |
|
9 # build/temp.* directories, otherwise PyOxidizer fails to pick up C |
|
10 # extensions. This is a bug in PyOxidizer. |
|
11 |
|
12 ROOT = CWD + "/../.." |
|
13 |
|
14 set_build_path(ROOT + "/build/pyoxidizer") |
|
15 |
|
16 def make_exe(): |
|
17 dist = default_python_distribution() |
|
18 |
|
19 code = "import hgdemandimport; hgdemandimport.enable(); from mercurial import dispatch; dispatch.run()" |
|
20 |
|
21 config = PythonInterpreterConfig( |
|
22 raw_allocator = "system", |
|
23 run_eval = code, |
|
24 # We need this to make resourceutil happy, since it looks for sys.frozen. |
|
25 sys_frozen = True, |
|
26 ) |
|
27 |
|
28 exe = dist.to_python_executable( |
|
29 name = "hg", |
|
30 config = config, |
|
31 ) |
|
32 |
|
33 # Use setup.py install to build Mercurial and collect Python resources to |
|
34 # embed in the executable. |
|
35 resources = dist.setup_py_install(ROOT) |
|
36 exe.add_python_resources(resources) |
|
37 |
|
38 return exe |
|
39 |
|
40 def make_install(exe): |
|
41 m = FileManifest() |
|
42 |
|
43 # `hg` goes in root directory. |
|
44 m.add_python_resource(".", exe) |
|
45 |
|
46 templates = glob( |
|
47 include=[ROOT + "/mercurial/templates/**/*"], |
|
48 strip_prefix = ROOT + "/mercurial/", |
|
49 ) |
|
50 m.add_manifest(templates) |
|
51 |
|
52 return m |
|
53 |
|
54 register_target("exe", make_exe) |
|
55 register_target("app", make_install, depends = ["exe"], default = True) |
|
56 |
|
57 resolve_targets() |