Mercurial > public > mercurial-scm > hg-stable
annotate contrib/packaging/hgpackaging/py2exe.py @ 44137:e4344e463c0c stable 5.3rc1
packaging: rename hgrc.d to defaultrc for Windows config files next to the exe
The code and the help still says that it will read hgrc.d next to the
executable. But this directory needs to exist to read the resource based config
files. Otherwise even `hg version` errors out:
$ /c/Program\ Files/Mercurial/hg.exe version
Traceback (most recent call last):
File "hg", line 43, in <module>
File "mercurial\dispatch.pyc", line 110, in run
File "mercurial\dispatch.pyc", line 226, in dispatch
File "mercurial\ui.pyc", line 308, in load
File "mercurial\rcutil.pyc", line 99, in rccomponents
File "mercurial\rcutil.pyc", line 69, in default_rc_resources
File "mercurial\utils\resourceutil.pyc", line 84, in contents
WindowsError: [Error 3] The system cannot find the path specified: 'c:\\Program Files\\mercurial\\defaultrc\\*.*'
Differential Revision: https://phab.mercurial-scm.org/D7981
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Fri, 24 Jan 2020 01:37:18 -0500 |
parents | c7fc2d92067e |
children | 4aedef6d51ad |
rev | line source |
---|---|
41920
a2e191a937a9
packaging: extract py2exe functionality to own module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41919
diff
changeset
|
1 # py2exe.py - Functionality for performing py2exe builds. |
41858
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
2 # |
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
3 # Copyright 2019 Gregory Szorc <gregory.szorc@gmail.com> |
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
4 # |
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
6 # GNU General Public License version 2 or any later version. |
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
7 |
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
8 # no-check-code because Python 3 native. |
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
9 |
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
10 import os |
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
11 import pathlib |
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
12 import subprocess |
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
13 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
14 from .downloads import download_entry |
41916
dc7827a9ba64
packaging: move Inno Setup core logic into a module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41915
diff
changeset
|
15 from .util import ( |
dc7827a9ba64
packaging: move Inno Setup core logic into a module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41915
diff
changeset
|
16 extract_tar_to_directory, |
dc7827a9ba64
packaging: move Inno Setup core logic into a module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41915
diff
changeset
|
17 extract_zip_to_directory, |
43564
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
18 process_install_rules, |
41919
7d1211168863
packaging: extract python exe info to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41918
diff
changeset
|
19 python_exe_info, |
41916
dc7827a9ba64
packaging: move Inno Setup core logic into a module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41915
diff
changeset
|
20 ) |
dc7827a9ba64
packaging: move Inno Setup core logic into a module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41915
diff
changeset
|
21 |
41858
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
22 |
43564
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
23 STAGING_RULES = [ |
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
24 ('contrib/bash_completion', 'Contrib/'), |
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
25 ('contrib/hgk', 'Contrib/hgk.tcl'), |
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
26 ('contrib/hgweb.fcgi', 'Contrib/'), |
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
27 ('contrib/hgweb.wsgi', 'Contrib/'), |
43568
787530384c4f
packaging: add logo-droplets.svg
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43567
diff
changeset
|
28 ('contrib/logo-droplets.svg', 'Contrib/'), |
43564
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
29 ('contrib/mercurial.el', 'Contrib/'), |
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
30 ('contrib/mq.el', 'Contrib/'), |
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
31 ('contrib/tcsh_completion', 'Contrib/'), |
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
32 ('contrib/tcsh_completion_build.sh', 'Contrib/'), |
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
33 ('contrib/vim/*', 'Contrib/Vim/'), |
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
34 ('contrib/win32/postinstall.txt', 'ReleaseNotes.txt'), |
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
35 ('contrib/win32/ReadMe.html', 'ReadMe.html'), |
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
36 ('contrib/xml.rnc', 'Contrib/'), |
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
37 ('contrib/zsh_completion', 'Contrib/'), |
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
38 ('dist/hg.exe', './'), |
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
39 ('dist/lib/*.dll', 'lib/'), |
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
40 ('dist/lib/*.pyd', 'lib/'), |
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
41 ('dist/lib/library.zip', 'lib/'), |
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
42 ('dist/Microsoft.VC*.CRT.manifest', './'), |
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
43 ('dist/msvc*.dll', './'), |
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
44 ('dist/python*.dll', './'), |
43567
2aaf245639bf
packaging: install documentation to doc/ directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43564
diff
changeset
|
45 ('doc/*.html', 'doc/'), |
2aaf245639bf
packaging: install documentation to doc/ directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43564
diff
changeset
|
46 ('doc/style.css', 'doc/'), |
43768
640bae94f2f3
cleanup: update references to /help/ that should now be /helptext/
Augie Fackler <augie@google.com>
parents:
43667
diff
changeset
|
47 ('mercurial/helptext/**/*.txt', 'helptext/'), |
44137
e4344e463c0c
packaging: rename hgrc.d to defaultrc for Windows config files next to the exe
Matt Harbison <matt_harbison@yahoo.com>
parents:
43769
diff
changeset
|
48 ('mercurial/defaultrc/*.rc', 'defaultrc/'), |
43564
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
49 ('mercurial/locale/**/*', 'locale/'), |
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
50 ('mercurial/templates/**/*', 'Templates/'), |
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
51 ('COPYING', 'Copying.txt'), |
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
52 ] |
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
53 |
43651
a2f28a8746bf
packaging: remove hg-ssh.8.html from Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43650
diff
changeset
|
54 # List of paths to exclude from the staging area. |
a2f28a8746bf
packaging: remove hg-ssh.8.html from Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43650
diff
changeset
|
55 STAGING_EXCLUDES = [ |
a2f28a8746bf
packaging: remove hg-ssh.8.html from Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43650
diff
changeset
|
56 'doc/hg-ssh.8.html', |
a2f28a8746bf
packaging: remove hg-ssh.8.html from Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43650
diff
changeset
|
57 ] |
a2f28a8746bf
packaging: remove hg-ssh.8.html from Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43650
diff
changeset
|
58 |
43564
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
59 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
60 def build_py2exe( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
61 source_dir: pathlib.Path, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
62 build_dir: pathlib.Path, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
63 python_exe: pathlib.Path, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
64 build_name: str, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
65 venv_requirements_txt: pathlib.Path, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
66 extra_packages=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
67 extra_excludes=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
68 extra_dll_excludes=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
69 extra_packages_script=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
70 ): |
41920
a2e191a937a9
packaging: extract py2exe functionality to own module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41919
diff
changeset
|
71 """Build Mercurial with py2exe. |
41858
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
72 |
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
73 Build files will be placed in ``build_dir``. |
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
74 |
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
75 py2exe's setup.py doesn't use setuptools. It doesn't have modern logic |
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
76 for finding the Python 2.7 toolchain. So, we require the environment |
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
77 to already be configured with an active toolchain. |
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
78 """ |
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
79 if 'VCINSTALLDIR' not in os.environ: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
80 raise Exception( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
81 'not running from a Visual C++ build environment; ' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
82 'execute the "Visual C++ <version> Command Prompt" ' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
83 'application shortcut or a vcsvarsall.bat file' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
84 ) |
41858
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
85 |
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
86 # Identity x86/x64 and validate the environment matches the Python |
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
87 # architecture. |
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
88 vc_x64 = r'\x64' in os.environ['LIB'] |
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
89 |
41919
7d1211168863
packaging: extract python exe info to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41918
diff
changeset
|
90 py_info = python_exe_info(python_exe) |
41858
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
91 |
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
92 if vc_x64: |
41919
7d1211168863
packaging: extract python exe info to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41918
diff
changeset
|
93 if py_info['arch'] != '64bit': |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
94 raise Exception( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
95 'architecture mismatch: Visual C++ environment ' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
96 'is configured for 64-bit but Python is 32-bit' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
97 ) |
41858
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
98 else: |
41919
7d1211168863
packaging: extract python exe info to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41918
diff
changeset
|
99 if py_info['arch'] != '32bit': |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
100 raise Exception( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
101 'architecture mismatch: Visual C++ environment ' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
102 'is configured for 32-bit but Python is 64-bit' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
103 ) |
41858
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
104 |
41919
7d1211168863
packaging: extract python exe info to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41918
diff
changeset
|
105 if py_info['py3']: |
41858
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
106 raise Exception('Only Python 2 is currently supported') |
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
107 |
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
108 build_dir.mkdir(exist_ok=True) |
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
109 |
41914
1e8fb6522fee
packaging: move DOWNLOADS dict to hgpackaging.downloads
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41913
diff
changeset
|
110 gettext_pkg, gettext_entry = download_entry('gettext', build_dir) |
1e8fb6522fee
packaging: move DOWNLOADS dict to hgpackaging.downloads
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41913
diff
changeset
|
111 gettext_dep_pkg = download_entry('gettext-dep', build_dir)[0] |
1e8fb6522fee
packaging: move DOWNLOADS dict to hgpackaging.downloads
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41913
diff
changeset
|
112 virtualenv_pkg, virtualenv_entry = download_entry('virtualenv', build_dir) |
1e8fb6522fee
packaging: move DOWNLOADS dict to hgpackaging.downloads
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41913
diff
changeset
|
113 py2exe_pkg, py2exe_entry = download_entry('py2exe', build_dir) |
41858
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
114 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
115 venv_path = build_dir / ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
116 'venv-%s-%s' % (build_name, 'x64' if vc_x64 else 'x86') |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
117 ) |
41858
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
118 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
119 gettext_root = build_dir / ('gettext-win-%s' % gettext_entry['version']) |
41858
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
120 |
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
121 if not gettext_root.exists(): |
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
122 extract_zip_to_directory(gettext_pkg, gettext_root) |
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
123 extract_zip_to_directory(gettext_dep_pkg, gettext_root) |
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
124 |
41917
d4bf73ea06de
packaging: extract virtualenv and py2exe to build directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41916
diff
changeset
|
125 # This assumes Python 2. We don't need virtualenv on Python 3. |
d4bf73ea06de
packaging: extract virtualenv and py2exe to build directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41916
diff
changeset
|
126 virtualenv_src_path = build_dir / ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
127 'virtualenv-%s' % virtualenv_entry['version'] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
128 ) |
41917
d4bf73ea06de
packaging: extract virtualenv and py2exe to build directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41916
diff
changeset
|
129 virtualenv_py = virtualenv_src_path / 'virtualenv.py' |
d4bf73ea06de
packaging: extract virtualenv and py2exe to build directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41916
diff
changeset
|
130 |
d4bf73ea06de
packaging: extract virtualenv and py2exe to build directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41916
diff
changeset
|
131 if not virtualenv_src_path.exists(): |
d4bf73ea06de
packaging: extract virtualenv and py2exe to build directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41916
diff
changeset
|
132 extract_tar_to_directory(virtualenv_pkg, build_dir) |
d4bf73ea06de
packaging: extract virtualenv and py2exe to build directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41916
diff
changeset
|
133 |
d4bf73ea06de
packaging: extract virtualenv and py2exe to build directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41916
diff
changeset
|
134 py2exe_source_path = build_dir / ('py2exe-%s' % py2exe_entry['version']) |
d4bf73ea06de
packaging: extract virtualenv and py2exe to build directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41916
diff
changeset
|
135 |
d4bf73ea06de
packaging: extract virtualenv and py2exe to build directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41916
diff
changeset
|
136 if not py2exe_source_path.exists(): |
d4bf73ea06de
packaging: extract virtualenv and py2exe to build directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41916
diff
changeset
|
137 extract_zip_to_directory(py2exe_pkg, build_dir) |
d4bf73ea06de
packaging: extract virtualenv and py2exe to build directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41916
diff
changeset
|
138 |
41918
5e923355c595
packaging: don't use temporary directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41917
diff
changeset
|
139 if not venv_path.exists(): |
5e923355c595
packaging: don't use temporary directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41917
diff
changeset
|
140 print('creating virtualenv with dependencies') |
5e923355c595
packaging: don't use temporary directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41917
diff
changeset
|
141 subprocess.run( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
142 [str(python_exe), str(virtualenv_py), str(venv_path)], check=True |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
143 ) |
41918
5e923355c595
packaging: don't use temporary directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41917
diff
changeset
|
144 |
5e923355c595
packaging: don't use temporary directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41917
diff
changeset
|
145 venv_python = venv_path / 'Scripts' / 'python.exe' |
5e923355c595
packaging: don't use temporary directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41917
diff
changeset
|
146 venv_pip = venv_path / 'Scripts' / 'pip.exe' |
41858
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
147 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
148 subprocess.run( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
149 [str(venv_pip), 'install', '-r', str(venv_requirements_txt)], check=True |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
150 ) |
41858
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
151 |
41918
5e923355c595
packaging: don't use temporary directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41917
diff
changeset
|
152 # Force distutils to use VC++ settings from environment, which was |
5e923355c595
packaging: don't use temporary directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41917
diff
changeset
|
153 # validated above. |
5e923355c595
packaging: don't use temporary directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41917
diff
changeset
|
154 env = dict(os.environ) |
5e923355c595
packaging: don't use temporary directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41917
diff
changeset
|
155 env['DISTUTILS_USE_SDK'] = '1' |
5e923355c595
packaging: don't use temporary directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41917
diff
changeset
|
156 env['MSSdk'] = '1' |
41858
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
157 |
42047
715d3220ac4f
wix: add a hook for a prebuild script to inject extra libraries
Augie Fackler <augie@google.com>
parents:
41958
diff
changeset
|
158 if extra_packages_script: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
159 more_packages = set( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
160 subprocess.check_output(extra_packages_script, cwd=build_dir) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
161 .split(b'\0')[-1] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
162 .strip() |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
163 .decode('utf-8') |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
164 .splitlines() |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
165 ) |
42047
715d3220ac4f
wix: add a hook for a prebuild script to inject extra libraries
Augie Fackler <augie@google.com>
parents:
41958
diff
changeset
|
166 if more_packages: |
715d3220ac4f
wix: add a hook for a prebuild script to inject extra libraries
Augie Fackler <augie@google.com>
parents:
41958
diff
changeset
|
167 if not extra_packages: |
715d3220ac4f
wix: add a hook for a prebuild script to inject extra libraries
Augie Fackler <augie@google.com>
parents:
41958
diff
changeset
|
168 extra_packages = more_packages |
715d3220ac4f
wix: add a hook for a prebuild script to inject extra libraries
Augie Fackler <augie@google.com>
parents:
41958
diff
changeset
|
169 else: |
715d3220ac4f
wix: add a hook for a prebuild script to inject extra libraries
Augie Fackler <augie@google.com>
parents:
41958
diff
changeset
|
170 extra_packages |= more_packages |
715d3220ac4f
wix: add a hook for a prebuild script to inject extra libraries
Augie Fackler <augie@google.com>
parents:
41958
diff
changeset
|
171 |
41921
260305e8ddbd
setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41920
diff
changeset
|
172 if extra_packages: |
260305e8ddbd
setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41920
diff
changeset
|
173 env['HG_PY2EXE_EXTRA_PACKAGES'] = ' '.join(sorted(extra_packages)) |
42054
399ed3e86a49
py2exe: add workaround to allow bundling of hgext3rd.* extensions
Augie Fackler <augie@google.com>
parents:
42047
diff
changeset
|
174 hgext3rd_extras = sorted( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
175 e for e in extra_packages if e.startswith('hgext3rd.') |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
176 ) |
42054
399ed3e86a49
py2exe: add workaround to allow bundling of hgext3rd.* extensions
Augie Fackler <augie@google.com>
parents:
42047
diff
changeset
|
177 if hgext3rd_extras: |
399ed3e86a49
py2exe: add workaround to allow bundling of hgext3rd.* extensions
Augie Fackler <augie@google.com>
parents:
42047
diff
changeset
|
178 env['HG_PY2EXE_EXTRA_INSTALL_PACKAGES'] = ' '.join(hgext3rd_extras) |
41921
260305e8ddbd
setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41920
diff
changeset
|
179 if extra_excludes: |
260305e8ddbd
setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41920
diff
changeset
|
180 env['HG_PY2EXE_EXTRA_EXCLUDES'] = ' '.join(sorted(extra_excludes)) |
260305e8ddbd
setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41920
diff
changeset
|
181 if extra_dll_excludes: |
260305e8ddbd
setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41920
diff
changeset
|
182 env['HG_PY2EXE_EXTRA_DLL_EXCLUDES'] = ' '.join( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
183 sorted(extra_dll_excludes) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
184 ) |
41921
260305e8ddbd
setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41920
diff
changeset
|
185 |
41918
5e923355c595
packaging: don't use temporary directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41917
diff
changeset
|
186 py2exe_py_path = venv_path / 'Lib' / 'site-packages' / 'py2exe' |
5e923355c595
packaging: don't use temporary directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41917
diff
changeset
|
187 if not py2exe_py_path.exists(): |
5e923355c595
packaging: don't use temporary directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41917
diff
changeset
|
188 print('building py2exe') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
189 subprocess.run( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
190 [str(venv_python), 'setup.py', 'install'], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
191 cwd=py2exe_source_path, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
192 env=env, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
193 check=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
194 ) |
41858
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
195 |
41918
5e923355c595
packaging: don't use temporary directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41917
diff
changeset
|
196 # Register location of msgfmt and other binaries. |
5e923355c595
packaging: don't use temporary directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41917
diff
changeset
|
197 env['PATH'] = '%s%s%s' % ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
198 env['PATH'], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
199 os.pathsep, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
200 str(gettext_root / 'bin'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
201 ) |
41858
d7dc4ac1ff84
inno: script to automate building Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
202 |
41918
5e923355c595
packaging: don't use temporary directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41917
diff
changeset
|
203 print('building Mercurial') |
5e923355c595
packaging: don't use temporary directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41917
diff
changeset
|
204 subprocess.run( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
205 [str(venv_python), 'setup.py', 'py2exe', 'build_doc', '--html'], |
41918
5e923355c595
packaging: don't use temporary directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41917
diff
changeset
|
206 cwd=str(source_dir), |
5e923355c595
packaging: don't use temporary directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41917
diff
changeset
|
207 env=env, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
208 check=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42054
diff
changeset
|
209 ) |
43564
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
210 |
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
211 |
43667
94eac340d212
packaging: stage files and dynamically generate WiX installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43653
diff
changeset
|
212 def stage_install( |
94eac340d212
packaging: stage files and dynamically generate WiX installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43653
diff
changeset
|
213 source_dir: pathlib.Path, staging_dir: pathlib.Path, lower_case=False |
94eac340d212
packaging: stage files and dynamically generate WiX installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43653
diff
changeset
|
214 ): |
43564
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
215 """Copy all files to be installed to a directory. |
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
216 |
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
217 This allows packaging to simply walk a directory tree to find source |
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
218 files. |
d053d3f10b6a
packaging: stage installed files for Inno
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
219 """ |
43667
94eac340d212
packaging: stage files and dynamically generate WiX installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43653
diff
changeset
|
220 if lower_case: |
94eac340d212
packaging: stage files and dynamically generate WiX installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43653
diff
changeset
|
221 rules = [] |
94eac340d212
packaging: stage files and dynamically generate WiX installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43653
diff
changeset
|
222 for source, dest in STAGING_RULES: |
94eac340d212
packaging: stage files and dynamically generate WiX installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43653
diff
changeset
|
223 # Only lower directory names. |
94eac340d212
packaging: stage files and dynamically generate WiX installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43653
diff
changeset
|
224 if '/' in dest: |
94eac340d212
packaging: stage files and dynamically generate WiX installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43653
diff
changeset
|
225 parent, leaf = dest.rsplit('/', 1) |
94eac340d212
packaging: stage files and dynamically generate WiX installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43653
diff
changeset
|
226 dest = '%s/%s' % (parent.lower(), leaf) |
94eac340d212
packaging: stage files and dynamically generate WiX installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43653
diff
changeset
|
227 rules.append((source, dest)) |
94eac340d212
packaging: stage files and dynamically generate WiX installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43653
diff
changeset
|
228 else: |
94eac340d212
packaging: stage files and dynamically generate WiX installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43653
diff
changeset
|
229 rules = STAGING_RULES |
94eac340d212
packaging: stage files and dynamically generate WiX installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43653
diff
changeset
|
230 |
94eac340d212
packaging: stage files and dynamically generate WiX installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43653
diff
changeset
|
231 process_install_rules(rules, source_dir, staging_dir) |
43651
a2f28a8746bf
packaging: remove hg-ssh.8.html from Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43650
diff
changeset
|
232 |
43653
8aa6aa9b7843
packaging: write out editor.rc in Python
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43652
diff
changeset
|
233 # Write out a default editor.rc file to configure notepad as the |
8aa6aa9b7843
packaging: write out editor.rc in Python
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43652
diff
changeset
|
234 # default editor. |
44137
e4344e463c0c
packaging: rename hgrc.d to defaultrc for Windows config files next to the exe
Matt Harbison <matt_harbison@yahoo.com>
parents:
43769
diff
changeset
|
235 with (staging_dir / 'defaultrc' / 'editor.rc').open( |
43653
8aa6aa9b7843
packaging: write out editor.rc in Python
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43652
diff
changeset
|
236 'w', encoding='utf-8' |
8aa6aa9b7843
packaging: write out editor.rc in Python
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43652
diff
changeset
|
237 ) as fh: |
8aa6aa9b7843
packaging: write out editor.rc in Python
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43652
diff
changeset
|
238 fh.write('[ui]\neditor = notepad\n') |
8aa6aa9b7843
packaging: write out editor.rc in Python
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43652
diff
changeset
|
239 |
43651
a2f28a8746bf
packaging: remove hg-ssh.8.html from Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43650
diff
changeset
|
240 # Purge any files we don't want to be there. |
a2f28a8746bf
packaging: remove hg-ssh.8.html from Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43650
diff
changeset
|
241 for f in STAGING_EXCLUDES: |
a2f28a8746bf
packaging: remove hg-ssh.8.html from Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43650
diff
changeset
|
242 p = staging_dir / f |
a2f28a8746bf
packaging: remove hg-ssh.8.html from Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43650
diff
changeset
|
243 if p.exists(): |
a2f28a8746bf
packaging: remove hg-ssh.8.html from Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43650
diff
changeset
|
244 print('removing %s' % p) |
a2f28a8746bf
packaging: remove hg-ssh.8.html from Inno installer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43650
diff
changeset
|
245 p.unlink() |