##// END OF EJS Templates
packaging: support building WiX installers with PyOxidizer...
packaging: support building WiX installers with PyOxidizer We initially implemented PyOxidizer support for Inno installers. That did most of the heavy work of integrating PyOxidizer into the packaging system. Implementing WiX installer support was pretty straightforward. Aspects of this patch look very similar to Inno's. The main difference is the handling of the Visual C++ Redistributable Runtime files. The WiX installer was formerly using merge modules to install the VC++ 9.0 runtime because this feature is supported by the WiX installer (it isn't easily available to Inno installers). Our strategy for the runtime files is to install the vcruntime140.dll file next to hg.exe just like any other file. While we could leverage WiX's functionality for invoking a VCRedist installer, I don't want to deal with the complexity at this juncture. So, we let run_pyoxidizer() copy vcruntime140.dll into the staging directory (like it does for Inno) and our dynamic WiX XML generator picks it up as a regular file and installs it. We did, however, have to teach mercurial.wxs how to conditionally use the merge modules. But this was rather straightforward. Comparing the file layout of the WiX installers before and after: * Various lib/*.{pyd, dll} files no longer exist * python27.dll was replaced by python37.dll * vcruntime140.dll was added All these changes are expected due to the transition to Python 3 and to PyOxidizer, which embeded the .pyd and .dll files in hg.exe. Differential Revision: https://phab.mercurial-scm.org/D8477

File last commit:

r45260:c9517d9d default
r45274:234882d1 stable
Show More
mercurial.wxs
152 lines | 6.3 KiB | text/plain | TextLexer
Gregory Szorc
wix: move contrib/wix to contrib/packaging/wix...
r42086 <?xml version='1.0' encoding='windows-1252'?>
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
<!-- Copyright 2010 Steve Borho <steve@borho.org>
This software may be used and distributed according to the terms of the
GNU General Public License version 2 or any later version. -->
<?include guids.wxi ?>
<?include defines.wxi ?>
<?if $(var.Platform) = "x64" ?>
<?define PFolder = ProgramFiles64Folder ?>
<?else?>
<?define PFolder = ProgramFilesFolder ?>
<?endif?>
<Product Id='*'
Name='Mercurial $(var.Version) ($(var.Platform))'
UpgradeCode='$(var.ProductUpgradeCode)'
Language='1033' Codepage='1252' Version='$(var.Version)'
Manufacturer='Matt Mackall and others'>
<Package Id='*'
Keywords='Installer'
Description="Mercurial distributed SCM (version $(var.Version))"
Comments='$(var.Comments)'
Platform='$(var.Platform)'
Manufacturer='Matt Mackall and others'
InstallerVersion='300' Languages='1033' Compressed='yes' SummaryCodepage='1252' />
<Media Id='1' Cabinet='mercurial.cab' EmbedCab='yes' DiskPrompt='CD-ROM #1'
CompressionLevel='high' />
<Property Id='DiskPrompt' Value="Mercurial $(var.Version) Installation [1]" />
<Condition Message='Mercurial MSI installers require Windows XP or higher'>
VersionNT >= 501
</Condition>
<Property Id="INSTALLDIR">
<ComponentSearch Id='SearchForMainExecutableComponent'
Guid='$(var.ComponentMainExecutableGUID)' />
</Property>
<!--Property Id='ARPCOMMENTS'>any comments</Property-->
<Property Id='ARPCONTACT'>mercurial@mercurial-scm.org</Property>
<Property Id='ARPHELPLINK'>https://mercurial-scm.org/wiki/</Property>
<Property Id='ARPURLINFOABOUT'>https://mercurial-scm.org/about/</Property>
<Property Id='ARPURLUPDATEINFO'>https://mercurial-scm.org/downloads/</Property>
<Property Id='ARPHELPTELEPHONE'>https://mercurial-scm.org/wiki/Support</Property>
<Property Id='ARPPRODUCTICON'>hgIcon.ico</Property>
<Property Id='INSTALLEDMERCURIALPRODUCTS' Secure='yes'></Property>
<Property Id='REINSTALLMODE'>amus</Property>
<!--Auto-accept the license page-->
<Property Id='LicenseAccepted'>1</Property>
<Directory Id='TARGETDIR' Name='SourceDir'>
<Directory Id='$(var.PFolder)' Name='PFiles'>
<Directory Id='INSTALLDIR' Name='Mercurial'>
<Component Id='MainExecutable' Guid='$(var.ComponentMainExecutableGUID)' Win64='$(var.IsX64)'>
Gregory Szorc
packaging: stage files and dynamically generate WiX installer...
r44022 <CreateFolder />
Gregory Szorc
wix: move contrib/wix to contrib/packaging/wix...
r42086 <Environment Id="Environment" Name="PATH" Part="last" System="yes"
Permanent="no" Value="[INSTALLDIR]" Action="set" />
</Component>
</Directory>
</Directory>
<Directory Id="ProgramMenuFolder" Name="Programs">
<Directory Id="ProgramMenuDir" Name="Mercurial $(var.Version)">
<Component Id="ProgramMenuDir" Guid="$(var.ProgramMenuDir.guid)" Win64='$(var.IsX64)'>
<RemoveFolder Id='ProgramMenuDir' On='uninstall' />
<RegistryValue Root='HKCU' Key='Software\Mercurial\InstallDir' Type='string'
Value='[INSTALLDIR]' KeyPath='yes' />
<Shortcut Id='UrlShortcut' Directory='ProgramMenuDir' Name='Mercurial Web Site'
Target='[ARPHELPLINK]' Icon="hgIcon.ico" IconIndex='0' />
</Component>
</Directory>
</Directory>
Gregory Szorc
packaging: support building WiX installers with PyOxidizer...
r45274 <!-- Install VCRedist merge modules on Python 2. On Python 3,
vcruntimeXXX.dll is part of the install layout and gets picked up
as a regular file. -->
<?if $(var.PythonVersion) = "2" ?>
<?if $(var.Platform) = "x86" ?>
<Merge Id='VCRuntime' DiskId='1' Language='1033'
SourceFile='$(var.VCRedistSrcDir)\microsoft.vcxx.crt.x86_msm.msm' />
<Merge Id='VCRuntimePolicy' DiskId='1' Language='1033'
SourceFile='$(var.VCRedistSrcDir)\policy.x.xx.microsoft.vcxx.crt.x86_msm.msm' />
<?else?>
<Merge Id='VCRuntime' DiskId='1' Language='1033'
SourceFile='$(var.VCRedistSrcDir)\microsoft.vcxx.crt.x64_msm.msm' />
<Merge Id='VCRuntimePolicy' DiskId='1' Language='1033'
SourceFile='$(var.VCRedistSrcDir)\policy.x.xx.microsoft.vcxx.crt.x64_msm.msm' />
<?endif?>
Gregory Szorc
wix: move contrib/wix to contrib/packaging/wix...
r42086 <?endif?>
</Directory>
<Feature Id='Complete' Title='Mercurial' Description='The complete package'
Display='expand' Level='1' ConfigurableDirectory='INSTALLDIR' >
<Feature Id='MainProgram' Title='Program' Description='Mercurial command line app'
Level='1' Absent='disallow' >
<ComponentRef Id='MainExecutable' />
<ComponentRef Id='ProgramMenuDir' />
Gregory Szorc
packaging: stage files and dynamically generate WiX installer...
r44022 <ComponentGroupRef Id="hg.group.ROOT" />
Matt Harbison
packaging: rename hgrc.d to defaultrc for Windows config files next to the exe...
r44614 <ComponentGroupRef Id="hg.group.defaultrc" />
Augie Fackler
windows: further build fixes for the WiX installer...
r44188 <ComponentGroupRef Id="hg.group.helptext" />
Gregory Szorc
packaging: support building WiX installers with PyOxidizer...
r45274 <?ifdef MercurialHasLib?>
<ComponentGroupRef Id="hg.group.lib" />
<?endif?>
Gregory Szorc
packaging: stage files and dynamically generate WiX installer...
r44022 <ComponentGroupRef Id="hg.group.templates" />
Gregory Szorc
packaging: support building WiX installers with PyOxidizer...
r45274 <?if $(var.PythonVersion) = "2" ?>
<MergeRef Id='VCRuntime' />
<MergeRef Id='VCRuntimePolicy' />
<?endif?>
Gregory Szorc
wix: move contrib/wix to contrib/packaging/wix...
r42086 </Feature>
Augie Fackler
wix: fix the package build when not adding features...
r42220 <?ifdef MercurialExtraFeatures?>
Augie Fackler
wix: add functionality to inject additional Features into installer...
r42216 <?foreach EXTRAFEAT in $(var.MercurialExtraFeatures)?>
<FeatureRef Id="$(var.EXTRAFEAT)" />
<?endforeach?>
<?endif?>
Gregory Szorc
wix: move contrib/wix to contrib/packaging/wix...
r42086 <Feature Id='Locales' Title='Translations' Description='Translations' Level='1'>
Gregory Szorc
packaging: stage files and dynamically generate WiX installer...
r44022 <ComponentGroupRef Id="hg.group.locale" />
Gregory Szorc
wix: move contrib/wix to contrib/packaging/wix...
r42086 </Feature>
<Feature Id='Documentation' Title='Documentation' Description='HTML man pages' Level='1'>
Gregory Szorc
packaging: stage files and dynamically generate WiX installer...
r44022 <ComponentGroupRef Id="hg.group.doc" />
Gregory Szorc
wix: move contrib/wix to contrib/packaging/wix...
r42086 </Feature>
<Feature Id='Misc' Title='Miscellaneous' Description='Contributed scripts' Level='1'>
Gregory Szorc
packaging: stage files and dynamically generate WiX installer...
r44022 <ComponentGroupRef Id="hg.group.contrib" />
Gregory Szorc
wix: move contrib/wix to contrib/packaging/wix...
r42086 </Feature>
</Feature>
<UIRef Id="WixUI_FeatureTree" />
<UIRef Id="WixUI_ErrorProgressText" />
<WixVariable Id="WixUILicenseRtf" Value="contrib\packaging\wix\COPYING.rtf" />
<Icon Id="hgIcon.ico" SourceFile="contrib/win32/mercurial.ico" />
<Upgrade Id='$(var.ProductUpgradeCode)'>
<UpgradeVersion
IncludeMinimum='yes' Minimum='0.0.0' IncludeMaximum='no' OnlyDetect='no'
Property='INSTALLEDMERCURIALPRODUCTS' />
</Upgrade>
<InstallExecuteSequence>
<RemoveExistingProducts After='InstallInitialize'/>
</InstallExecuteSequence>
</Product>
</Wix>