18 |
18 |
19 HERE = pathlib.Path(os.path.abspath(os.path.dirname(__file__))) |
19 HERE = pathlib.Path(os.path.abspath(os.path.dirname(__file__))) |
20 SOURCE_DIR = HERE.parent.parent.parent |
20 SOURCE_DIR = HERE.parent.parent.parent |
21 |
21 |
22 |
22 |
23 def build_inno(pyoxidizer_target=None, python=None, iscc=None, version=None): |
23 def build_inno(pyoxidizer_target, iscc=None, version=None): |
24 if not pyoxidizer_target and not python: |
|
25 raise Exception("--python required unless building with PyOxidizer") |
|
26 |
|
27 if python and not os.path.isabs(python): |
|
28 raise Exception("--python arg must be an absolute path") |
|
29 |
|
30 if iscc: |
24 if iscc: |
31 iscc = pathlib.Path(iscc) |
25 iscc = pathlib.Path(iscc) |
32 else: |
26 else: |
33 iscc = ( |
27 iscc = ( |
34 pathlib.Path(os.environ["ProgramFiles(x86)"]) |
28 pathlib.Path(os.environ["ProgramFiles(x86)"]) |
36 / "ISCC.exe" |
30 / "ISCC.exe" |
37 ) |
31 ) |
38 |
32 |
39 build_dir = SOURCE_DIR / "build" |
33 build_dir = SOURCE_DIR / "build" |
40 |
34 |
41 if pyoxidizer_target: |
35 inno.build_with_pyoxidizer( |
42 inno.build_with_pyoxidizer( |
36 SOURCE_DIR, build_dir, pyoxidizer_target, iscc, version=version |
43 SOURCE_DIR, build_dir, pyoxidizer_target, iscc, version=version |
37 ) |
44 ) |
|
45 else: |
|
46 inno.build_with_py2exe( |
|
47 SOURCE_DIR, |
|
48 build_dir, |
|
49 pathlib.Path(python), |
|
50 iscc, |
|
51 version=version, |
|
52 ) |
|
53 |
38 |
54 |
39 |
55 def build_wix( |
40 def build_wix( |
|
41 pyoxidizer_target, |
56 name=None, |
42 name=None, |
57 pyoxidizer_target=None, |
|
58 python=None, |
|
59 version=None, |
43 version=None, |
60 sign_sn=None, |
44 sign_sn=None, |
61 sign_cert=None, |
45 sign_cert=None, |
62 sign_password=None, |
46 sign_password=None, |
63 sign_timestamp_url=None, |
47 sign_timestamp_url=None, |
64 extra_packages_script=None, |
|
65 extra_wxs=None, |
48 extra_wxs=None, |
66 extra_features=None, |
49 extra_features=None, |
67 extra_pyoxidizer_vars=None, |
50 extra_pyoxidizer_vars=None, |
68 ): |
51 ): |
69 if not pyoxidizer_target and not python: |
|
70 raise Exception("--python required unless building with PyOxidizer") |
|
71 |
|
72 if python and not os.path.isabs(python): |
|
73 raise Exception("--python arg must be an absolute path") |
|
74 |
|
75 kwargs = { |
52 kwargs = { |
76 "source_dir": SOURCE_DIR, |
53 "source_dir": SOURCE_DIR, |
77 "version": version, |
54 "version": version, |
|
55 "target_triple": pyoxidizer_target, |
|
56 "extra_pyoxidizer_vars": extra_pyoxidizer_vars, |
78 } |
57 } |
79 |
58 |
80 if pyoxidizer_target: |
|
81 fn = wix.build_installer_pyoxidizer |
|
82 kwargs["target_triple"] = pyoxidizer_target |
|
83 kwargs["extra_pyoxidizer_vars"] = extra_pyoxidizer_vars |
|
84 else: |
|
85 fn = wix.build_installer_py2exe |
|
86 kwargs["python_exe"] = pathlib.Path(python) |
|
87 |
|
88 if extra_packages_script: |
|
89 if pyoxidizer_target: |
|
90 raise Exception( |
|
91 "pyoxidizer does not support --extra-packages-script" |
|
92 ) |
|
93 kwargs["extra_packages_script"] = extra_packages_script |
|
94 if extra_wxs: |
59 if extra_wxs: |
95 kwargs["extra_wxs"] = dict( |
60 kwargs["extra_wxs"] = dict( |
96 thing.split("=") for thing in extra_wxs.split(",") |
61 thing.split("=") for thing in extra_wxs.split(",") |
97 ) |
62 ) |
98 if extra_features: |
63 if extra_features: |
105 "cert_path": sign_cert, |
70 "cert_path": sign_cert, |
106 "cert_password": sign_password, |
71 "cert_password": sign_password, |
107 "timestamp_url": sign_timestamp_url, |
72 "timestamp_url": sign_timestamp_url, |
108 } |
73 } |
109 |
74 |
110 fn(**kwargs) |
75 wix.build_installer_pyoxidizer(**kwargs) |
111 |
76 |
112 |
77 |
113 def get_parser(): |
78 def get_parser(): |
114 parser = argparse.ArgumentParser() |
79 parser = argparse.ArgumentParser() |
115 |
80 |
117 |
82 |
118 sp = subparsers.add_parser("inno", help="Build Inno Setup installer") |
83 sp = subparsers.add_parser("inno", help="Build Inno Setup installer") |
119 sp.add_argument( |
84 sp.add_argument( |
120 "--pyoxidizer-target", |
85 "--pyoxidizer-target", |
121 choices={"i686-pc-windows-msvc", "x86_64-pc-windows-msvc"}, |
86 choices={"i686-pc-windows-msvc", "x86_64-pc-windows-msvc"}, |
|
87 required=True, |
122 help="Build with PyOxidizer targeting this host triple", |
88 help="Build with PyOxidizer targeting this host triple", |
123 ) |
89 ) |
124 sp.add_argument("--python", help="path to python.exe to use") |
|
125 sp.add_argument("--iscc", help="path to iscc.exe to use") |
90 sp.add_argument("--iscc", help="path to iscc.exe to use") |
126 sp.add_argument( |
91 sp.add_argument( |
127 "--version", |
92 "--version", |
128 help="Mercurial version string to use " |
93 help="Mercurial version string to use " |
129 "(detected from __version__.py if not defined", |
94 "(detected from __version__.py if not defined", |
135 ) |
100 ) |
136 sp.add_argument("--name", help="Application name", default="Mercurial") |
101 sp.add_argument("--name", help="Application name", default="Mercurial") |
137 sp.add_argument( |
102 sp.add_argument( |
138 "--pyoxidizer-target", |
103 "--pyoxidizer-target", |
139 choices={"i686-pc-windows-msvc", "x86_64-pc-windows-msvc"}, |
104 choices={"i686-pc-windows-msvc", "x86_64-pc-windows-msvc"}, |
|
105 required=True, |
140 help="Build with PyOxidizer targeting this host triple", |
106 help="Build with PyOxidizer targeting this host triple", |
141 ) |
107 ) |
142 sp.add_argument("--python", help="Path to Python executable to use") |
|
143 sp.add_argument( |
108 sp.add_argument( |
144 "--sign-sn", |
109 "--sign-sn", |
145 help="Subject name (or fragment thereof) of certificate " |
110 help="Subject name (or fragment thereof) of certificate " |
146 "to use for signing", |
111 "to use for signing", |
147 ) |
112 ) |
152 sp.add_argument( |
117 sp.add_argument( |
153 "--sign-timestamp-url", |
118 "--sign-timestamp-url", |
154 help="URL of timestamp server to use for signing", |
119 help="URL of timestamp server to use for signing", |
155 ) |
120 ) |
156 sp.add_argument("--version", help="Version string to use") |
121 sp.add_argument("--version", help="Version string to use") |
157 sp.add_argument( |
|
158 "--extra-packages-script", |
|
159 help=( |
|
160 "Script to execute to include extra packages in " "py2exe binary." |
|
161 ), |
|
162 ) |
|
163 sp.add_argument( |
122 sp.add_argument( |
164 "--extra-wxs", help="CSV of path_to_wxs_file=working_dir_for_wxs_file" |
123 "--extra-wxs", help="CSV of path_to_wxs_file=working_dir_for_wxs_file" |
165 ) |
124 ) |
166 sp.add_argument( |
125 sp.add_argument( |
167 "--extra-features", |
126 "--extra-features", |