1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-01-09 17:38:00 +00:00

Build an MSI installer for the new Win64 binaries.

The MSI format has a fixed field for target architecture, so there's
no way to build a single MSI that can decide at install time whether
to install 32-bit or 64-bit (or both). The best you can do along those
lines, apparently, is to have two MSI files plus a bootstrap .EXE that
decides which of them to run, and as far as I'm concerned that would
just reintroduce all the same risks and annoyances that made us want
to migrate away from .EXE installers anyway.
This commit is contained in:
Simon Tatham 2017-01-21 14:55:52 +00:00
parent e6059f18d4
commit faae648475
3 changed files with 77 additions and 32 deletions

View File

@ -174,14 +174,15 @@ delegate windows
# exit codes on whim.)
in putty/doc with htmlhelp do/win hhc putty.hhp & type putty.chm >nul
# Build the WiX MSI installer.
in putty/windows with wix do/win candle -dBuilddir=build32\ -dWinver="$(Winver)" -dPuttytextver="$(Puttytextver)" installer.wxs && light -ext WixUIExtension -ext WixUtilExtension -sval installer.wixobj
# Build a WiX MSI installer, for each of build32 and build64.
in putty/windows with wix do/win candle -arch x86 -dWin64=no -dBuilddir=build32\ -dWinver="$(Winver)" -dPuttytextver="$(Puttytextver)" installer.wxs && light -ext WixUIExtension -ext WixUtilExtension -sval installer.wixobj -o installer32.msi
in putty/windows with wix do/win candle -arch x64 -dWin64=yes -dBuilddir=build64\ -dWinver="$(Winver)" -dPuttytextver="$(Puttytextver)" installer.wxs && light -ext WixUIExtension -ext WixUtilExtension -sval installer.wixobj -o installer64.msi
# Build the old Inno Setup installer.
in putty/windows with innosetup do/win iscc putty.iss
# Sign the installers.
ifneq "$(winsigncode)" "" in putty/windows do $(winsigncode) -i http://www.chiark.greenend.org.uk/~sgtatham/putty/ -n "PuTTY Installer" installer.msi Output/installer.exe
ifneq "$(winsigncode)" "" in putty/windows do $(winsigncode) -i http://www.chiark.greenend.org.uk/~sgtatham/putty/ -n "PuTTY Installer" installer32.msi installer64.msi Output/installer.exe
# Finished Windows builds.
return putty/windows/buildold/*.exe
@ -191,7 +192,8 @@ delegate windows
return putty/windows/build64/*.exe
return putty/windows/build64/*.map
return putty/doc/putty.chm
return putty/windows/installer.msi
return putty/windows/installer32.msi
return putty/windows/installer64.msi
return putty/windows/Output/installer.exe
enddelegate
in putty/doc do make mostlyclean
@ -208,7 +210,8 @@ deliver putty/windows/build32/*.exe putty/w32/$@
deliver putty/windows/build32/putty.zip putty/w32/$@
deliver putty/windows/build64/*.exe putty/w64/$@
deliver putty/windows/build64/putty.zip putty/w64/$@
deliver putty/windows/installer.msi putty/w32/$(Ifilename).msi
deliver putty/windows/installer32.msi putty/w32/$(Ifilename).msi
deliver putty/windows/installer64.msi putty/w64/$(Ifilename).msi
deliver putty/windows/Output/installer.exe putty/w32/$(Ifilename).exe
deliver putty/doc/puttydoc.zip putty/$@
deliver putty/doc/putty.chm putty/$@
@ -245,5 +248,5 @@ in-dest putty do echo "AddType application/octet-stream .chm" >> .htaccess
in-dest putty do echo "AddType application/octet-stream .hlp" >> .htaccess
in-dest putty do echo "AddType application/octet-stream .cnt" >> .htaccess
in-dest putty do set -- putty*.tar.gz; for k in '' .gpg; do echo RedirectMatch temp '(.*/)'putty.tar.gz$$k\$$ '$$1'"$$1$$k" >> .htaccess; done
# And one in the w32 directory, providing links for the installers.
in-dest putty/w32 do for ext in msi exe; do set -- putty*installer.$$ext; for k in '' .gpg; do echo RedirectMatch temp '(.*/)'putty-installer.$$ext$$k\$$ '$$1'"$$1$$k" >> .htaccess; done; done
# And one in each binary directory, providing links for the installers.
in-dest putty do for subdir in w32 w64; do (cd $$subdir && for ext in msi exe; do set -- putty*installer.$$ext; if test -f $$1; then for k in '' .gpg; do echo RedirectMatch temp '(.*/)'putty-installer.$$ext$$k\$$ '$$1'"$$1$$k" >> .htaccess; done; fi; done); done

View File

@ -27,7 +27,7 @@ sign() {
cd "$1"
echo "===== Signing with key '$keyname'"
for i in putty*src.zip putty*.tar.gz w32/*.exe w32/*.zip w32/*.msi w64/*.exe w64/*.zip w32old/*.exe w32old/*.zip; do
for i in putty*src.zip putty*.tar.gz w32/*.exe w32/*.zip w32/*.msi w64/*.exe w64/*.zip w64/*.msi w32old/*.exe w32old/*.zip; do
sign --detach-sign "$i" "$i.gpg"
done
for i in md5sums sha1sums sha256sums sha512sums; do

View File

@ -2,6 +2,48 @@
<!-- WiX source code for the PuTTY installer. -->
<?if $(var.Win64) = yes ?>
<?define ProgramName = "PuTTY (64-bit)" ?>
<?define RegKeyPathLocation = "Software\SimonTatham\PuTTY64" ?>
<?define InstallerVersion = "200" ?>
<?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?>
<?define UpgradeCode_GUID = "C9EAA861-2B72-4FAF-9FEE-EEB1AD5FD15E" ?>
<?define PuTTY_Component_GUID = "C673C970-25AE-4659-9621-A1FE0598E9DC" ?>
<?define Pageant_Component_GUID = "BA37328A-9A9C-4912-B84D-9C4A21B4E79A" ?>
<?define PSFTP_Component_GUID = "8BC2740F-CD4A-4076-8C33-2847ECA17B4E" ?>
<?define PuTTYgen_Component_GUID = "4E3F554E-C9C9-419B-9816-94135D1F6EFF" ?>
<?define Plink_Component_GUID = "72C38830-1C06-40D5-B2C5-BE21F4C9D529" ?>
<?define PSCP_Component_GUID = "58FCAA52-CEF9-4665-B95E-7695FCF8F0A9" ?>
<?define HelpFile_Component_GUID = "B880CECB-2CDA-4DB1-8EB3-1627D29394FB" ?>
<?define Website_Component_GUID = "08A334E8-D376-438A-98C7-4E65BE09A335" ?>
<?define LICENCE_Component_GUID = "D15E5FA9-C912-4F7A-A663-9FE3CFD5FB01" ?>
<?define README_Component_GUID = "B8F2F9DE-0311-436E-86A4-BEFED84968C0" ?>
<?define PPK_Assoc_Component_GUID = "70B4360C-7A2E-4C9E-9135-289C5467CB04" ?>
<?define Path_Component_GUID = "A0CFC986-489D-452B-8A8F-F9DBEF6916F4" ?>
<?define ProgramMenuDir_GUID = "3B2B7A2B-25F1-4EC4-987F-75BFD038632E" ?>
<?define Desktop_Shortcut_Component_GUID = "0A715416-EA6E-4A1C-8670-838307083EE5" ?>
<?else ?>
<?define ProgramName = "PuTTY" ?>
<?define RegKeyPathLocation = "Software\SimonTatham\PuTTY" ?>
<?define InstallerVersion = "100" ?>
<?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?>
<?define UpgradeCode_GUID = "DCE70C63-8808-4646-B16B-A677BD298385" ?>
<?define PuTTY_Component_GUID = "07ACF511-6DF6-4883-AABA-33BC14901324" ?>
<?define Pageant_Component_GUID = "649F963E-21C4-4755-8CE4-D80598DCEE6D" ?>
<?define PSFTP_Component_GUID = "3D7B9536-EC0E-4A6A-A3DF-8D285474391A" ?>
<?define PuTTYgen_Component_GUID = "4774F6B3-8A07-42A5-9F4D-E7FE6AA78B84" ?>
<?define Plink_Component_GUID = "7D96F9BB-4154-49D6-86AE-0D8F1379ACBC" ?>
<?define PSCP_Component_GUID = "71519D4A-3ED5-4A46-A7E4-B6E4600A8684" ?>
<?define HelpFile_Component_GUID = "72806A73-9D4D-49BF-8CAA-E90B0D83AEED" ?>
<?define Website_Component_GUID = "7DAD6536-C1A7-430C-BC8A-90176CCB78D0" ?>
<?define LICENCE_Component_GUID = "6AB710C0-F7A1-4B7A-AC2E-6993D6E98332" ?>
<?define README_Component_GUID = "0AB63F2A-0FD9-4961-B8F7-AB85C22D9986" ?>
<?define PPK_Assoc_Component_GUID = "13BBF036-F4C0-4F5B-9167-7BA35C673AAB" ?>
<?define Path_Component_GUID = "D1F68AAA-D20D-4047-828F-D0AC443FAF64" ?>
<?define ProgramMenuDir_GUID = "C12C3BB3-EC24-4883-8349-4AC8017C9E6A" ?>
<?define Desktop_Shortcut_Component_GUID = "D039E3D1-CE42-488D-96CC-90E1DE3796F8" ?>
<?endif ?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<!--
@ -19,10 +61,10 @@
Buildscr.
-->
<Product
Name="PuTTY"
Name="$(var.ProgramName)"
Manufacturer="Simon Tatham"
Id="*"
UpgradeCode="dce70c63-8808-4646-b16b-a677bd298385"
UpgradeCode="$(var.UpgradeCode_GUID)"
Language="1033" Codepage="1252" Version="$(var.Winver)">
<!--
@ -39,7 +81,7 @@
<Package Id="*" Keywords="Installer"
Description="$(var.Puttytextver) installer"
Manufacturer="Simon Tatham"
InstallerVersion="100" Languages="1033"
InstallerVersion="$(var.InstallerVersion)" Languages="1033"
Compressed="yes" SummaryCodepage="1252"
InstallScope="perMachine" />
@ -78,7 +120,7 @@
well...
-->
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder" Name="PFiles">
<Directory Id="$(var.PlatformProgramFilesFolder)" Name="PFiles">
<Directory Id="INSTALLDIR" Name="PuTTY">
<!--
@ -90,7 +132,7 @@
the sake of being _somewhere_ and don't rate a shortcut.
-->
<Component Id="PuTTY_Component"
Guid="07ACF511-6DF6-4883-AABA-33BC14901324">
Guid="$(var.PuTTY_Component_GUID)">
<File Id="PuTTY_File"
Source="$(var.Builddir)putty.exe" KeyPath="yes">
<Shortcut Id="startmenuPuTTY" Directory="ProgramMenuDir"
@ -99,7 +141,7 @@
</File>
</Component>
<Component Id="Pageant_Component"
Guid="649F963E-21C4-4755-8CE4-D80598DCEE6D">
Guid="$(var.Pageant_Component_GUID)">
<File Id="Pageant_File"
Source="$(var.Builddir)pageant.exe" KeyPath="yes">
<Shortcut Id="startmenuPageant" Directory="ProgramMenuDir"
@ -108,7 +150,7 @@
</File>
</Component>
<Component Id="PSFTP_Component"
Guid="3D7B9536-EC0E-4A6A-A3DF-8D285474391A">
Guid="$(var.PSFTP_Component_GUID)">
<File Id="PSFTP_File"
Source="$(var.Builddir)psftp.exe" KeyPath="yes">
<Shortcut Id="startmenuPSFTP" Directory="ProgramMenuDir"
@ -117,7 +159,7 @@
</File>
</Component>
<Component Id="PuTTYgen_Component"
Guid="4774F6B3-8A07-42A5-9F4D-E7FE6AA78B84">
Guid="$(var.PuTTYgen_Component_GUID)">
<File Id="PuTTYgen_File"
Source="$(var.Builddir)puttygen.exe" KeyPath="yes">
<Shortcut Id="startmenuPuTTYgen" Directory="ProgramMenuDir"
@ -126,18 +168,18 @@
</File>
</Component>
<Component Id="Plink_Component"
Guid="7D96F9BB-4154-49D6-86AE-0D8F1379ACBC">
Guid="$(var.Plink_Component_GUID)">
<File Id="Plink_File"
Source="$(var.Builddir)plink.exe" KeyPath="yes" />
</Component>
<Component Id="PSCP_Component"
Guid="71519D4A-3ED5-4A46-A7E4-B6E4600A8684">
Guid="$(var.PSCP_Component_GUID)">
<File Id="PSCP_File"
Source="$(var.Builddir)pscp.exe" KeyPath="yes" />
</Component>
<Component Id="HelpFile_Component"
Guid="72806A73-9D4D-49BF-8CAA-E90B0D83AEED">
Guid="$(var.HelpFile_Component_GUID)">
<File Id="HelpFile_File"
Source="..\doc\putty.chm" KeyPath="yes">
<Shortcut Id="startmenuManual" Directory="ProgramMenuDir"
@ -146,7 +188,7 @@
</File>
</Component>
<Component Id="Website_Component"
Guid="7DAD6536-C1A7-430C-BC8A-90176CCB78D0">
Guid="$(var.Website_Component_GUID)">
<File Id="Website_File"
Source="website.url" KeyPath="yes">
<Shortcut Id="startmenuWebsite" Directory="ProgramMenuDir"
@ -155,12 +197,12 @@
</File>
</Component>
<Component Id="LICENCE_Component"
Guid="6AB710C0-F7A1-4B7A-AC2E-6993D6E98332">
Guid="$(var.LICENCE_Component_GUID)">
<File Id="LICENCE_File"
Source="..\LICENCE" KeyPath="yes" />
</Component>
<Component Id="README_Component"
Guid="0AB63F2A-0FD9-4961-B8F7-AB85C22D9986">
Guid="$(var.README_Component_GUID)">
<File Id="README_File"
Source="README-msi.txt" Name="README.txt" KeyPath="yes" />
</Component>
@ -181,7 +223,7 @@
invent a spurious extra thing to be the key path.
-->
<Component Id="PPK_Assoc_Component"
Guid="13BBF036-F4C0-4F5B-9167-7BA35C673AAB">
Guid="$(var.PPK_Assoc_Component_GUID)">
<ProgId Id="PPK_Assoc_ProgId"
Description="PuTTY Private Key File">
<Extension Id="ppk"
@ -193,7 +235,7 @@
</Extension>
</ProgId>
<RegistryValue Root="HKLM"
Key="Software\SimonTatham\PuTTY\PPKAssociation"
Key="$(var.RegKeyPathLocation)\PPKAssociation"
Type="string" Value="" KeyPath="yes" />
</Component>
@ -206,7 +248,7 @@
act as a key path.
-->
<Component Id="Path_Component"
Guid="D1F68AAA-D20D-4047-828F-D0AC443FAF64">
Guid="$(var.Path_Component_GUID)">
<Environment Id="Path_Environment"
Name="PATH"
Value="[INSTALLDIR]"
@ -215,7 +257,7 @@
Action="set"
System="yes"/>
<RegistryValue Root="HKLM"
Key="Software\SimonTatham\PuTTY\PathEntry"
Key="$(var.RegKeyPathLocation)\PathEntry"
Type="string" Value="" KeyPath="yes" />
</Component>
</Directory>
@ -228,12 +270,12 @@
are placed by code above here.
-->
<Directory Id="ProgramMenuFolder" Name="Programs">
<Directory Id="ProgramMenuDir" Name="PuTTY">
<Directory Id="ProgramMenuDir" Name="$(var.ProgramName)">
<Component Id="ProgramMenuDir"
Guid="C12C3BB3-EC24-4883-8349-4AC8017C9E6A">
Guid="$(var.ProgramMenuDir_GUID)">
<RemoveFolder Id="ProgramMenuDir" On="uninstall" />
<RegistryValue Root="HKLM"
Key="Software\SimonTatham\PuTTY\StartMenu"
Key="$(var.RegKeyPathLocation)\StartMenu"
Type="string" Value="" KeyPath="yes" />
</Component>
</Directory>
@ -245,12 +287,12 @@
-->
<Directory Id="DesktopFolder" Name="Desktop">
<Component Id="Desktop_Shortcut_Component"
Guid="D039E3D1-CE42-488D-96CC-90E1DE3796F8">
Guid="$(var.Desktop_Shortcut_Component_GUID)">
<Shortcut Id="DesktopPuTTY"
WorkingDirectory="INSTALLDIR" Target="[INSTALLDIR]putty.exe"
Name="PuTTY" Advertise="no" />
Name="$(var.ProgramName)" Advertise="no" />
<RegistryValue Root="HKLM"
Key="Software\SimonTatham\PuTTY\DesktopEntry"
Key="$(var.RegKeyPathLocation)\DesktopEntry"
Type="string" Value="" KeyPath="yes" />
</Component>
</Directory>