annotate contrib/packaging/hgpackaging/wix.py @ 42047:715d3220ac4f

wix: add a hook for a prebuild script to inject extra libraries I need this to build packages for Google so we can bundle some extensions in the installed image. My assumption is that this is most interesting for the .msi images so I only wired it up there. I'm not thrilled with the interface this provides, but it was an easy way to retain debug messages on Windows while also having enough structure to know what lines are actually module names for py2exe. Still pending on my end: I need to bundle a couple of config files, and at least one data file. I'm open to advice on how to do those things, and how to do this better. Differential Revision: https://phab.mercurial-scm.org/D6164
author Augie Fackler <augie@google.com>
date Wed, 20 Mar 2019 13:18:37 -0400
parents 131d0b7c3940
children 978b03d5f66e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
41952
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
1 # wix.py - WiX installer functionality
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
2 #
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
3 # Copyright 2019 Gregory Szorc <gregory.szorc@gmail.com>
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
4 #
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
5 # This software may be used and distributed according to the terms of the
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
6 # GNU General Public License version 2 or any later version.
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
7
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
8 # no-check-code because Python 3 native.
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
9
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
10 import os
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
11 import pathlib
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
12 import re
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
13 import subprocess
41957
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
14 import tempfile
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
15 import xml.dom.minidom
41952
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
16
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
17 from .downloads import (
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
18 download_entry,
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
19 )
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
20 from .py2exe import (
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
21 build_py2exe,
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
22 )
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
23 from .util import (
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
24 extract_zip_to_directory,
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
25 sign_with_signtool,
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
26 )
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
27
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
28
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
29 SUPPORT_WXS = [
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
30 ('contrib.wxs', r'contrib'),
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
31 ('dist.wxs', r'dist'),
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
32 ('doc.wxs', r'doc'),
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
33 ('help.wxs', r'mercurial\help'),
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
34 ('i18n.wxs', r'i18n'),
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
35 ('locale.wxs', r'mercurial\locale'),
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
36 ('templates.wxs', r'mercurial\templates'),
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
37 ]
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
38
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
39
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
40 EXTRA_PACKAGES = {
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
41 'distutils',
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
42 'pygments',
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
43 }
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
44
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
45
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
46 def find_version(source_dir: pathlib.Path):
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
47 version_py = source_dir / 'mercurial' / '__version__.py'
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
48
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
49 with version_py.open('r', encoding='utf-8') as fh:
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
50 source = fh.read().strip()
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
51
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
52 m = re.search('version = b"(.*)"', source)
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
53 return m.group(1)
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
54
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
55
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
56 def normalize_version(version):
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
57 """Normalize Mercurial version string so WiX accepts it.
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
58
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
59 Version strings have to be numeric X.Y.Z.
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
60 """
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
61
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
62 if '+' in version:
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
63 version, extra = version.split('+', 1)
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
64 else:
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
65 extra = None
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
66
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
67 # 4.9rc0
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
68 if version[:-1].endswith('rc'):
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
69 version = version[:-3]
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
70
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
71 versions = [int(v) for v in version.split('.')]
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
72 while len(versions) < 3:
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
73 versions.append(0)
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
74
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
75 major, minor, build = versions[:3]
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
76
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
77 if extra:
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
78 # <commit count>-<hash>+<date>
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
79 build = int(extra.split('-')[0])
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
80
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
81 return '.'.join('%d' % x for x in (major, minor, build))
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
82
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
83
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
84 def ensure_vc90_merge_modules(build_dir):
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
85 x86 = (
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
86 download_entry('vc9-crt-x86-msm', build_dir,
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
87 local_name='microsoft.vcxx.crt.x86_msm.msm')[0],
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
88 download_entry('vc9-crt-x86-msm-policy', build_dir,
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
89 local_name='policy.x.xx.microsoft.vcxx.crt.x86_msm.msm')[0]
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
90 )
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
91
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
92 x64 = (
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
93 download_entry('vc9-crt-x64-msm', build_dir,
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
94 local_name='microsoft.vcxx.crt.x64_msm.msm')[0],
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
95 download_entry('vc9-crt-x64-msm-policy', build_dir,
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
96 local_name='policy.x.xx.microsoft.vcxx.crt.x64_msm.msm')[0]
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
97 )
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
98 return {
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
99 'x86': x86,
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
100 'x64': x64,
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
101 }
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
102
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
103
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
104 def run_candle(wix, cwd, wxs, source_dir, defines=None):
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
105 args = [
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
106 str(wix / 'candle.exe'),
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
107 '-nologo',
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
108 str(wxs),
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
109 '-dSourceDir=%s' % source_dir,
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
110 ]
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
111
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
112 if defines:
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
113 args.extend('-d%s=%s' % define for define in sorted(defines.items()))
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
114
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
115 subprocess.run(args, cwd=str(cwd), check=True)
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
116
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
117
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
118 def make_post_build_signing_fn(name, subject_name=None, cert_path=None,
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
119 cert_password=None, timestamp_url=None):
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
120 """Create a callable that will use signtool to sign hg.exe."""
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
121
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
122 def post_build_sign(source_dir, build_dir, dist_dir, version):
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
123 description = '%s %s' % (name, version)
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
124
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
125 sign_with_signtool(dist_dir / 'hg.exe', description,
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
126 subject_name=subject_name, cert_path=cert_path,
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
127 cert_password=cert_password,
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
128 timestamp_url=timestamp_url)
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
129
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
130 return post_build_sign
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
131
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
132
41957
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
133 LIBRARIES_XML = '''
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
134 <?xml version="1.0" encoding="utf-8"?>
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
135 <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
136
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
137 <?include {wix_dir}/guids.wxi ?>
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
138 <?include {wix_dir}/defines.wxi ?>
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
139
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
140 <Fragment>
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
141 <DirectoryRef Id="INSTALLDIR" FileSource="$(var.SourceDir)">
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
142 <Directory Id="libdir" Name="lib" FileSource="$(var.SourceDir)/lib">
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
143 <Component Id="libOutput" Guid="$(var.lib.guid)" Win64='$(var.IsX64)'>
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
144 </Component>
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
145 </Directory>
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
146 </DirectoryRef>
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
147 </Fragment>
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
148 </Wix>
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
149 '''.lstrip()
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
150
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
151
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
152 def make_libraries_xml(wix_dir: pathlib.Path, dist_dir: pathlib.Path):
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
153 """Make XML data for library components WXS."""
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
154 # We can't use ElementTree because it doesn't handle the
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
155 # <?include ?> directives.
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
156 doc = xml.dom.minidom.parseString(
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
157 LIBRARIES_XML.format(wix_dir=str(wix_dir)))
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
158
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
159 component = doc.getElementsByTagName('Component')[0]
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
160
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
161 f = doc.createElement('File')
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
162 f.setAttribute('Name', 'library.zip')
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
163 f.setAttribute('KeyPath', 'yes')
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
164 component.appendChild(f)
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
165
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
166 lib_dir = dist_dir / 'lib'
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
167
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
168 for p in sorted(lib_dir.iterdir()):
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
169 if not p.name.endswith(('.dll', '.pyd')):
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
170 continue
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
171
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
172 f = doc.createElement('File')
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
173 f.setAttribute('Name', p.name)
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
174 component.appendChild(f)
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
175
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
176 return doc.toprettyxml()
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
177
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
178
41952
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
179 def build_installer(source_dir: pathlib.Path, python_exe: pathlib.Path,
42047
715d3220ac4f wix: add a hook for a prebuild script to inject extra libraries
Augie Fackler <augie@google.com>
parents: 41957
diff changeset
180 msi_name='mercurial', version=None, post_build_fn=None,
715d3220ac4f wix: add a hook for a prebuild script to inject extra libraries
Augie Fackler <augie@google.com>
parents: 41957
diff changeset
181 extra_packages_script=None):
41952
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
182 """Build a WiX MSI installer.
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
183
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
184 ``source_dir`` is the path to the Mercurial source tree to use.
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
185 ``arch`` is the target architecture. either ``x86`` or ``x64``.
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
186 ``python_exe`` is the path to the Python executable to use/bundle.
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
187 ``version`` is the Mercurial version string. If not defined,
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
188 ``mercurial/__version__.py`` will be consulted.
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
189 ``post_build_fn`` is a callable that will be called after building
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
190 Mercurial but before invoking WiX. It can be used to e.g. facilitate
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
191 signing. It is passed the paths to the Mercurial source, build, and
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
192 dist directories and the resolved Mercurial version.
42047
715d3220ac4f wix: add a hook for a prebuild script to inject extra libraries
Augie Fackler <augie@google.com>
parents: 41957
diff changeset
193 ``extra_packages_script`` is a command to be run to inject extra packages
715d3220ac4f wix: add a hook for a prebuild script to inject extra libraries
Augie Fackler <augie@google.com>
parents: 41957
diff changeset
194 into the py2exe binary. It should stage packages into the virtualenv and
715d3220ac4f wix: add a hook for a prebuild script to inject extra libraries
Augie Fackler <augie@google.com>
parents: 41957
diff changeset
195 print a null byte followed by a newline-separated list of packages that
715d3220ac4f wix: add a hook for a prebuild script to inject extra libraries
Augie Fackler <augie@google.com>
parents: 41957
diff changeset
196 should be included in the exe.
41952
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
197 """
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
198 arch = 'x64' if r'\x64' in os.environ.get('LIB', '') else 'x86'
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
199
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
200 hg_build_dir = source_dir / 'build'
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
201 dist_dir = source_dir / 'dist'
41956
39f65c506899 wix: introduce variable to hold path to wix packaging directory
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41952
diff changeset
202 wix_dir = source_dir / 'contrib' / 'packaging' / 'wix'
41952
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
203
41956
39f65c506899 wix: introduce variable to hold path to wix packaging directory
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41952
diff changeset
204 requirements_txt = wix_dir / 'requirements.txt'
41952
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
205
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
206 build_py2exe(source_dir, hg_build_dir,
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
207 python_exe, 'wix', requirements_txt,
42047
715d3220ac4f wix: add a hook for a prebuild script to inject extra libraries
Augie Fackler <augie@google.com>
parents: 41957
diff changeset
208 extra_packages=EXTRA_PACKAGES,
715d3220ac4f wix: add a hook for a prebuild script to inject extra libraries
Augie Fackler <augie@google.com>
parents: 41957
diff changeset
209 extra_packages_script=extra_packages_script)
41952
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
210
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
211 version = version or normalize_version(find_version(source_dir))
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
212 print('using version string: %s' % version)
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
213
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
214 if post_build_fn:
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
215 post_build_fn(source_dir, hg_build_dir, dist_dir, version)
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
216
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
217 build_dir = hg_build_dir / ('wix-%s' % arch)
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
218
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
219 build_dir.mkdir(exist_ok=True)
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
220
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
221 wix_pkg, wix_entry = download_entry('wix', hg_build_dir)
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
222 wix_path = hg_build_dir / ('wix-%s' % wix_entry['version'])
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
223
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
224 if not wix_path.exists():
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
225 extract_zip_to_directory(wix_pkg, wix_path)
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
226
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
227 ensure_vc90_merge_modules(hg_build_dir)
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
228
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
229 source_build_rel = pathlib.Path(os.path.relpath(source_dir, build_dir))
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
230
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
231 defines = {'Platform': arch}
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
232
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
233 for wxs, rel_path in SUPPORT_WXS:
41956
39f65c506899 wix: introduce variable to hold path to wix packaging directory
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41952
diff changeset
234 wxs = wix_dir / wxs
41952
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
235 wxs_source_dir = source_dir / rel_path
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
236 run_candle(wix_path, build_dir, wxs, wxs_source_dir, defines=defines)
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
237
41957
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
238 # candle.exe doesn't like when we have an open handle on the file.
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
239 # So use TemporaryDirectory() instead of NamedTemporaryFile().
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
240 with tempfile.TemporaryDirectory() as td:
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
241 td = pathlib.Path(td)
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
242
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
243 tf = td / 'library.wxs'
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
244 with tf.open('w') as fh:
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
245 fh.write(make_libraries_xml(wix_dir, dist_dir))
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
246
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
247 run_candle(wix_path, build_dir, tf, dist_dir, defines=defines)
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
248
41956
39f65c506899 wix: introduce variable to hold path to wix packaging directory
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41952
diff changeset
249 source = wix_dir / 'mercurial.wxs'
41952
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
250 defines['Version'] = version
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
251 defines['Comments'] = 'Installs Mercurial version %s' % version
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
252 defines['VCRedistSrcDir'] = str(hg_build_dir)
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
253
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
254 run_candle(wix_path, build_dir, source, source_build_rel, defines=defines)
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
255
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
256 msi_path = source_dir / 'dist' / (
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
257 '%s-%s-%s.msi' % (msi_name, version, arch))
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
258
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
259 args = [
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
260 str(wix_path / 'light.exe'),
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
261 '-nologo',
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
262 '-ext', 'WixUIExtension',
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
263 '-sw1076',
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
264 '-spdb',
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
265 '-o', str(msi_path),
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
266 ]
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
267
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
268 for source, rel_path in SUPPORT_WXS:
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
269 assert source.endswith('.wxs')
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
270 args.append(str(build_dir / ('%s.wixobj' % source[:-4])))
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
271
41957
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
272 args.extend([
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
273 str(build_dir / 'library.wixobj'),
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
274 str(build_dir / 'mercurial.wixobj'),
131d0b7c3940 wix: autogenerate wxs file for library files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41956
diff changeset
275 ])
41952
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
276
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
277 subprocess.run(args, cwd=str(source_dir), check=True)
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
278
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
279 print('%s created' % msi_path)
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
280
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
281 return {
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
282 'msi_path': msi_path,
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
283 }
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
284
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
285
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
286 def build_signed_installer(source_dir: pathlib.Path, python_exe: pathlib.Path,
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
287 name: str, version=None, subject_name=None,
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
288 cert_path=None, cert_password=None,
42047
715d3220ac4f wix: add a hook for a prebuild script to inject extra libraries
Augie Fackler <augie@google.com>
parents: 41957
diff changeset
289 timestamp_url=None, extra_packages_script=None):
41952
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
290 """Build an installer with signed executables."""
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
291
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
292 post_build_fn = make_post_build_signing_fn(
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
293 name,
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
294 subject_name=subject_name,
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
295 cert_path=cert_path,
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
296 cert_password=cert_password,
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
297 timestamp_url=timestamp_url)
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
298
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
299 info = build_installer(source_dir, python_exe=python_exe,
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
300 msi_name=name.lower(), version=version,
42047
715d3220ac4f wix: add a hook for a prebuild script to inject extra libraries
Augie Fackler <augie@google.com>
parents: 41957
diff changeset
301 post_build_fn=post_build_fn,
715d3220ac4f wix: add a hook for a prebuild script to inject extra libraries
Augie Fackler <augie@google.com>
parents: 41957
diff changeset
302 extra_packages_script=extra_packages_script)
41952
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
303
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
304 description = '%s %s' % (name, version)
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
305
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
306 sign_with_signtool(info['msi_path'], description,
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
307 subject_name=subject_name, cert_path=cert_path,
b83de9150c1c packaging: convert files to LF
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41924
diff changeset
308 cert_password=cert_password, timestamp_url=timestamp_url)