contrib/packaging/pyoxidizer.bzl
changeset 44290 281b6690e646
child 44334 cd8f248fead4
equal deleted inserted replaced
44289:b1069b369d6e 44290:281b6690e646
       
     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()