]> asedeno.scripts.mit.edu Git - PuTTY.git/commitdiff
Build an MSI installer for the new Win64 binaries.
authorSimon Tatham <anakin@pobox.com>
Sat, 21 Jan 2017 14:55:52 +0000 (14:55 +0000)
committerSimon Tatham <anakin@pobox.com>
Sat, 21 Jan 2017 14:55:52 +0000 (14:55 +0000)
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.

Buildscr
sign.sh
windows/installer.wxs

index c7e32302cb390001096137f57196287371b5c5ef..8a88071a1a671a97e706b08b07f0fd15a084d8a0 100644 (file)
--- a/Buildscr
+++ b/Buildscr
@@ -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
diff --git a/sign.sh b/sign.sh
index 3fdae569593d65062a79583a30fd2ef3c152a6df..bdf6245ff95653a898c06e0805e00732ed5cc984 100755 (executable)
--- a/sign.sh
+++ b/sign.sh
@@ -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
index 53a3f84eb14a731d778796e8d2b0b426738a5970..5bb52914b9932d5cf840db9fbefec1664372dce8 100644 (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">
 
   <!--
       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" />
 
         well...
     -->
     <Directory Id="TARGETDIR" Name="SourceDir">
-      <Directory Id="ProgramFilesFolder" Name="PFiles">
+      <Directory Id="$(var.PlatformProgramFilesFolder)" Name="PFiles">
         <Directory Id="INSTALLDIR" Name="PuTTY">
 
           <!--
               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"
             </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"
             </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"
             </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"
             </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"
             </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"
             </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>
               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"
               </Extension>
             </ProgId>
             <RegistryValue Root="HKLM"
-                           Key="Software\SimonTatham\PuTTY\PPKAssociation"
+                           Key="$(var.RegKeyPathLocation)\PPKAssociation"
                            Type="string" Value="" KeyPath="yes" />
           </Component>
 
               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]"
                          Action="set"
                          System="yes"/>
             <RegistryValue Root="HKLM"
-                           Key="Software\SimonTatham\PuTTY\PathEntry"
+                           Key="$(var.RegKeyPathLocation)\PathEntry"
                            Type="string" Value="" KeyPath="yes" />
           </Component>
         </Directory>
           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>
       -->
       <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>