Windows: Build multiplatform installer

When building the x64 installer, we can optionally include 32-bit
components as well.  This requires that the 32-bit build to be already
completed.  The resulting multiplatform installer will install
both sets of components.

This is enabled by the environment variable MULTIPLATFORM_INSTALLER.
This commit is contained in:
Asanka C. Herath
2010-12-02 21:36:50 -05:00
parent 3f6b4c9fdd
commit dd6d5a0e2c
3 changed files with 278 additions and 195 deletions

View File

@@ -93,19 +93,6 @@ clean::
-$(RM) $(SDKREDISTDIR)\Heimdal.msm
-$(RM) $(SDKREDISTDIR)\Heimdal.Policy.msm
# Locate 32-bit assembly merge modules
!if "$(CPU)"=="AMD64"
ASSEMBLYDIR32=$(SDKREDISTDIR:AMD64=i386)
!if !exist( $(ASSEMBLYDIR32)\Heimdal.msm )
!message 32-bit assembly not found. Skipping 32-bit components
!undef ASSEMBLYDIR32
!endif
!endif
######################################################################
# Runtime modules
@@ -117,12 +104,6 @@ VCVER=VC80
! error Cant determine Visual C compiler version
!endif
!if "$(CPU)"=="AMD64"
CPUSUFFIX=_x64
!else
CPUSUFFIX=
!endif
!if "$(BUILD)"=="rel"
CRTNAME=CRT
!else
@@ -136,11 +117,13 @@ MMDIR=$(SystemDrive)\Program Files (x86)\Common Files\Merge Modules
!if exist("$(MMDIR)")
RUNTIMEMODULE="$(MMDIR)\Microsoft_$(VCVER)_$(CRTNAME)_x86$(CPUSUFFIX).msm"
RUNTIMEMODULE32="$(MMDIR)\Microsoft_$(VCVER)_$(CRTNAME)_x86.msm"
RUNTIMEMODULE64="$(MMDIR)\Microsoft_$(VCVER)_$(CRTNAME)_x86_x64.msm"
!else
RUNTIMEMODULE="$(MSSDK)\Redist\VC\microsoft.vcxx.crt.$(PLATFORM)_msm.msm"
RUNTIMEMODULE32="$(MSSDK)\Redist\VC\microsoft.vcxx.crt.x86_msm.msm"
RUNTIMEMODULE64="$(MSSDK)\Redist\VC\microsoft.vcxx.crt.x64_msm.msm"
!endif
@@ -148,44 +131,72 @@ RUNTIMEMODULE="$(MSSDK)\Redist\VC\microsoft.vcxx.crt.$(PLATFORM)_msm.msm"
######################################################################
# Heimdal installer
CANDLEOPTS= \
-dVersion=$(VERSION) \
-dBinDir=$(BINDIR) \
-dDocDir=$(DOCDIR) \
-dSrcDir=$(SRC) \
-dPlatform=$(PLATFORM) \
-dPolPrefix=$(POLPREFIX) \
!if "$(CPU)"=="AMD64"
INSTDIR32=$(INSTDIR:AMD64=i386)
CANDLEOPTS=$(CANDLEOPTS) -dTarget64 \
-dInstDir32=$(INSTDIR32) \
-dInstDir64=$(INSTDIR) \
-dRuntimeModule32=$(RUNTIMEMODULE32) \
-dRuntimeModule64=$(RUNTIMEMODULE64) \
!ifdef MULTIPLATFORM_INSTALLER
CANDLEOPTS=$(CANDLEOPTS) -dTarget32
!else
! message Excluding 32-bit components from installer
!endif
INSTDEPS=$(INSTDIR32)\Heimdal.msm \
$(INSTDIR32)\Heimdal.Policy.msm \
$(ASSEMBLYMODULE) $(POLICYMODULE)
!else
CANDLEOPTS=$(CANDLEOPTS) -dTarget32 \
-dInstDir32=$(INSTDIR) \
-dRuntimeModule32=$(RUNTIMEMODULE32) \
!endif
!if exist($(SRC)\thirdparty)
THIRDPARTYOBJS=$(INSTDIR)\apicache.wixobj $(INSTDIR)\lsacache.wixobj
THIRDPARTYOPT=-dApiCache=1 -dLsaCache=1
THIRDPARTYOPTS=-dApiCache=1 -dLsaCache=1
!if "$(CPU)"=="AMD64"
THIRDPARTYOBJS=$(THIRDPARTYOBJS) $(INSTDIR32)\apicache.wixobj $(INSTDIR32)\lsacache.wixobj
!endif
!endif
!if exist($(SRC)\thirdparty\MKShim)
THIRDPARTYOBJS=$(THIRDPARTYOBJS) $(INSTDIR)\MKShim.wixlib
THIRDPARTYOPT=$(THIRDPARTYOPT) -dMKShim=1
THIRDPARTYOPTS=$(THIRDPARTYOPTS) -dMKShim=1
!if "$(CPU)"=="AMD64"
THIRDPARTYOBJS=$(THIRDPARTYOBJS) $(INSTDIR32)\MKShim.wixlib
!endif
!endif
INSTALLER=$(INSTDIR)\Heimdal-$(CPU)$(DEBUGOPT)-$(VERSIOND).msi
$(INSTALLER): $(OBJ)\heimdal-installer.wixobj $(ASSEMBLYMODULE) $(POLICYMODULE) \
$(THIRDPARTYOBJS) $(THIRDPARTYDEPS) lang\en-us.wxl
$(INSTALLER): $(OBJ)\heimdal-installer.wixobj $(THIRDPARTYOBJS) $(INSTDEPS) lang\en-us.wxl
$(LIGHT) -out $@ $(OBJ)\heimdal-installer.wixobj $(THIRDPARTYOBJS) \
-sval -cultures:en-us -loc lang\en-us.wxl \
-dWixUILicenseRtf=lang\license-en-us.rtf \
-ext WixUIExtension
$(_CODESIGN)
!ifdef ASSEMBLYDIR32
$(INSTALLER): $(ASSEMBLYDIR32)\Heimdal.msm $(ASSEMBLYDIR32)\Heimdal.Policy.msm
!endif
$(OBJ)\heimdal-installer.wixobj: heimdal-installer.wxs
$(CANDLE) -arch $(PLATFORM) -o $@ heimdal-installer.wxs \
-dVersion=$(VERSION) \
-dBinDir=$(BINDIR) \
-dDocDir=$(DOCDIR) \
-dInstDir=$(INSTDIR) \
!ifdef ASSEMBLYDIR32
-dAssemblyDir32=$(ASSEMBLYDIR32) \
!endif
-dSrcDir=$(SRC) \
-dPlatform=$(PLATFORM) \
-dRuntimeModule=$(RUNTIMEMODULE) \
-dPolPrefix=$(POLPREFIX) \
$(THIRDPARTYOPT)
$(CANDLEOPTS) $(THIRDPARTYOPTS)
all:: $(INSTALLER)

View File

@@ -5,6 +5,8 @@
<?define Win64=yes ?>
<?define PIProgramFilesFolder=ProgramFiles64Folder ?>
<?define ToolsBinDir=dirBin64 ?>
<?define GuidKinit=BAA5BD92-163E-4AA5-8C99-EA2100F3D9DE ?>
<?define GuidKdestroy=289C2C0D-F41D-4E46-9819-6B9B63F83418 ?>
<?define GuidKtutil=28B09087-4731-41F4-B734-C71E84EC31FC ?>
@@ -15,10 +17,14 @@
<?define GuidKdeltkt=3E853905-8CDA-4E14-8EBA-C0C4EEDB811A ?>
<?define GuidKcc=F411A9F1-A186-40CB-B55B-CADBE0166268 ?>
<?define ConfigDir=INSTALLDIR64 ?>
<?else?>
<?define Win64=no ?>
<?define PIProgramFilesFolder=ProgramFilesFolder ?>
<?define ToolsBinDir=dirBin32 ?>
<?define GuidKinit=038F19D7-F7C9-4B6A-8359-321CD1FAD347 ?>
<?define GuidKdestroy=07D96FBC-2251-4EBC-AA68-12C6C52F44E6 ?>
<?define GuidKtutil=CE082458-E2C5-4744-A423-88C23AD3C81C ?>
@@ -29,6 +35,8 @@
<?define GuidKdeltkt=6450EE72-E472-4709-B457-B579BFB2472B ?>
<?define GuidKcc=11800964-4A5F-466E-B2FE-DD2EFC54DDB9 ?>
<?define ConfigDir=INSTALLDIR32 ?>
<?endif?>
<Product Name='!(loc.ProductName) $(var.Version)'
@@ -42,21 +50,87 @@
Compressed='yes' SummaryCodepage='1252' />
<Directory Id='TARGETDIR' Name='SourceDir' DiskId='1'>
<Directory Id='$(var.PIProgramFilesFolder)' Name='PFiles'>
<Directory Id='INSTALLDIR' Name='Heimdal'>
<Directory Id='dirBin' Name='bin' FileSource='$(var.BinDir)'>
<Component Id='comp.SearchPath'
Guid='BA6C1A53-E479-4E87-9B61-7BA793DBAE56' Win64='$(var.Win64)'>
<?ifdef Target32 ?>
<Directory Id='ProgramFilesFolder'>
<Directory Id='INSTALLDIR32' Name='Heimdal'>
<Directory Id='dirBin32' Name='bin'>
<Directory Id='dirPlugin32' Name='plugin'>
<Directory Id='PLUGINDIR32' Name='krb5'>
</Directory>
</Directory>
</Directory>
</Directory>
</Directory>
<?endif?>
<?ifdef Target64?>
<Directory Id='ProgramFiles64Folder'>
<Directory Id='INSTALLDIR64' Name='Heimdal'>
<Directory Id='dirBin64' Name='bin'>
<Directory Id='dirPlugin64' Name='plugin'>
<Directory Id='PLUGINDIR64' Name='krb5'>
</Directory>
</Directory>
</Directory>
</Directory>
</Directory>
<?endif?>
</Directory>
<?ifdef Target32?>
<DirectoryRef Id='dirBin32' DiskId='1'>
<Component Id='comp.SearchPath.32' Feature='feature.Main'
Guid='BA6C1A53-E479-4E87-9B61-7BA793DBAE56' Win64='no'>
<RegistryKey Action='createAndRemoveOnUninstall' Root='HKLM'
Key='Software\Heimdal\CurrentVersion'>
<RegistryValue Name='InstallPath' Type='string'
Value='[dirBin]' KeyPath='yes' />
Value='[dirBin32]' KeyPath='yes' />
</RegistryKey>
<Environment Id='env.Path.32' Name='PATH' Action='set' Part='last'
Separator=';' Value='[dirBin32]' System='yes' />
</Component>
<Merge Id='Heimdal.Assemblies.32' Language='0'
SourceFile='$(var.InstDir32)\Heimdal.msm' />
<Merge Id='Heimdal.Policy.32' Language='0'
SourceFile='$(var.InstDir32)\Heimdal.Policy.msm' />
<Merge Id='Runtime.32' Language='0'
SourceFile='$(var.RuntimeModule32)' />
</DirectoryRef>
<?endif?>
<?ifdef Target64?>
<DirectoryRef Id='dirBin64' DiskId='1'>
<Component Id='comp.SearchPath.64' Feature='feature.Main'
Guid='2F189729-2253-47A1-AA68-06FE3A9697A7' Win64='yes'>
<RegistryKey Action='createAndRemoveOnUninstall' Root='HKLM'
Key='Software\Heimdal\CurrentVersion'>
<RegistryValue Name='InstallPath' Type='string'
Value='[dirBin64]' KeyPath='yes' />
</RegistryKey>
<Environment Id='env.Path' Name='PATH' Action='set' Part='last'
Separator=';' Value='[dirBin]' System='yes' />
Separator=';' Value='[dirBin64]' System='yes' />
</Component>
<Merge Id='Heimdal.Assemblies.64' Language='0'
SourceFile='$(var.InstDir64)\Heimdal.msm' />
<Merge Id='Heimdal.Policy.64' Language='0'
SourceFile='$(var.InstDir64)\Heimdal.Policy.msm' />
<Merge Id='Runtime.64' Language='0'
SourceFile='$(var.RuntimeModule64)' />
</DirectoryRef>
<?endif?>
<DirectoryRef Id='$(var.ToolsBinDir)' FileSource='$(var.BinDir)'>
<Component Id='comp.kinit'
Guid='$(var.GuidKinit)'
Win64='$(var.Win64)'>
@@ -126,61 +200,45 @@
</File>
</Component>
<Merge Id='Heimdal.Assemblies' Language='0'
SourceFile='$(var.InstDir)\Heimdal.msm' />
<Merge Id='Heimdal.Policy' Language='0'
SourceFile='$(var.InstDir)\Heimdal.Policy.msm' />
<?ifdef AssemblyDir32 ?>
<Merge Id='Heimdal.Assemblies.32' Language='0'
SourceFile='$(var.AssemblyDir32)\Heimdal.msm' />
<Merge Id='Heimdal.Policy.32' Language='0'
SourceFile='$(var.AssemblyDir32)\Heimdal.Policy.msm' />
<?endif?>
<Merge Id='Runtime' Language='0'
SourceFile='$(var.RuntimeModule)' />
<?ifdef KrbCompat?>
<Merge Id='Heimdal.Compatibility' Language='0'
SourceFile='$(var.InstDir)\Heimdal-krbcompat.msm' />
<?endif?>
<Directory Id='dirPlugin' Name='plugin'>
<Directory Id='PLUGINDIR' Name='krb5'>
<Component Id='comp.Plugin.Reg'
Guid='4BC44234-70A4-4CC1-A5AF-4CA76E9F9487'>
<RegistryKey Action='createAndRemoveOnUninstall' Root='HKLM'
Key='Software\Kerberos'>
<RegistryValue Name='plugin_dir' Type='multiString' Action='append'
Value='"[PLUGINDIR]"' KeyPath='yes' />
</RegistryKey>
</Component>
</Directory>
</Directory>
</Directory>
<Directory Id='dirDoc' Name='doc' FileSource='$(var.DocDir)'>
<Component Id='comp.Heimdal.chm'
Guid='785F6668-EBDB-4F18-8BEF-F72ECECB43D6'>
<File Name='heimdal.chm' />
<File Source='$(var.DocDir)\heimdal.chm' />
</Component>
<Component Id='comp.HX509.chm'
Guid='CBB379D6-629D-4EB9-AC0D-0167651F14EF'>
<File Name='hx509.chm' />
<File Source='$(var.DocDir)\hx509.chm' />
</Component>
</Directory>
</DirectoryRef>
</Directory>
</Directory>
<?ifdef Target32?>
<DirectoryRef Id='PLUGINDIR32'>
<Component Id='comp.Plugin.Reg.32' Feature='feature.Main'
Guid='4BC44234-70A4-4CC1-A5AF-4CA76E9F9487' Win64='no'>
<RegistryKey Action='createAndRemoveOnUninstall' Root='HKLM'
Key='Software\Kerberos'>
<RegistryValue Name='plugin_dir' Type='multiString' Action='append'
Value='"[PLUGINDIR32]"' KeyPath='yes' />
</RegistryKey>
</Component>
</DirectoryRef>
<?endif?>
<?ifdef Target64?>
<DirectoryRef Id='PLUGINDIR64'>
<Component Id='comp.Plugin.Reg.64' Feature='feature.Main'
Guid='5A99A52E-A4CD-40F8-AFFD-AD61939FC547' Win64='yes'>
<RegistryKey Action='createAndRemoveOnUninstall' Root='HKLM'
Key='Software\Kerberos'>
<RegistryValue Name='plugin_dir' Type='multiString' Action='append'
Value='"[PLUGINDIR64]"' KeyPath='yes' />
</RegistryKey>
</Component>
</DirectoryRef>
<?endif?>
<DirectoryRef Id='TARGETDIR'>
<Directory Id='CommonAppDataFolder' Name='ProgramData'>
<Directory Id='dirCommonKerberos' Name='Kerberos' FileSource='$(var.SrcDir)'>
@@ -245,7 +303,7 @@
</Directory>
<Directory Id='WindowsFolder'>
</Directory>
</Directory>
</DirectoryRef>
<Media Id='1' Cabinet='Disk1' CompressionLevel='high' EmbedCab='yes' />
@@ -294,14 +352,13 @@
<Condition Message='!(loc.AdminRequired)'>Installed OR Privileged</Condition>
<Condition Message='!(loc.AlreadyInstalled)'>Installed OR NOT EXISTINGINSTALLATION</Condition>
<Feature Id='feature.Main' ConfigurableDirectory='INSTALLDIR'
<Feature Id='feature.Main' ConfigurableDirectory='$(var.ConfigDir)'
Title='!(loc.FeaMainTitle)'
Description='!(loc.FeaMainDesc)'
Level='1' TypicalDefault='install' InstallDefault='local'>
<ComponentRef Id='comp.HX509.chm' />
<ComponentRef Id='comp.Heimdal.chm' />
<ComponentRef Id='comp.SearchPath' />
<ComponentRef Id='comp.kcpytkt' />
<ComponentRef Id='comp.kdeltkt' />
<ComponentRef Id='comp.kdestroy' />
@@ -316,27 +373,42 @@
<ComponentRef Id='comp.kcc' />
<?ifdef LsaCache ?>
<ComponentGroupRef Id='comps.LSACache' />
<?ifdef Target32?>
<ComponentGroupRef Id='comps.LSACache.32' />
<?endif?>
<?ifdef Target64?>
<ComponentGroupRef Id='comps.LSACache.64' />
<?endif?>
<?endif?>
<?ifdef ApiCache ?>
<ComponentGroupRef Id='comps.APICache' />
<?ifdef Target32?>
<ComponentGroupRef Id='comps.APICache.32' />
<?endif?>
<ComponentRef Id='comp.Plugin.Reg' />
<MergeRef Id='Heimdal.Assemblies' />
<MergeRef Id='Heimdal.Policy' />
<MergeRef Id='Runtime' />
<?ifdef AssemblyDir32 ?>
<MergeRef Id='Heimdal.Assemblies.32' />
<MergeRef Id='Heimdal.Policy.32' />
<?ifdef Target64?>
<ComponentGroupRef Id='comps.APICache.64' />
<?endif?>
<?ifdef Thirdparty ?>
<ComponentGroupRef Id='comp.Heimdal.Thirdparty' />
<?endif?>
<?ifdef MKShim ?>
<ComponentGroupRef Id='comp.Heimdal.MKShim' />
<?ifdef Target32?>
<ComponentGroupRef Id='comp.Heimdal.MKShim.32' />
<?endif?>
<?ifdef Target64?>
<ComponentGroupRef Id='comp.Heimdal.MKShim.64' />
<?endif?>
<?endif?>
<?ifdef Target32?>
<MergeRef Id='Heimdal.Assemblies.32' />
<MergeRef Id='Heimdal.Policy.32' />
<MergeRef Id='Runtime.32' />
<?endif?>
<?ifdef Target64?>
<MergeRef Id='Heimdal.Assemblies.64' />
<MergeRef Id='Heimdal.Policy.64' />
<MergeRef Id='Runtime.64' />
<?endif?>
</Feature>
@@ -353,7 +425,7 @@
<Property Id='ALLUSERS' Value='1' Secure='yes' />
<Property Id='WIXUI_INSTALLDIR' Value='INSTALLDIR' />
<Property Id='WIXUI_INSTALLDIR' Value='$(var.ConfigDir)' />
<UIRef Id='WixUI_InstallDir' />

View File

@@ -72,8 +72,8 @@ MCPU=amd64
#----------------------------------------------------------------
# Directory macros
DESTDIR =$(SRC)\out\dest_$(OUTDIR)
OBJDIR =$(SRC)\out\obj_$(OUTDIR)
DESTDIR =$(SRC)\out\dest_$(CPU)
OBJDIR =$(SRC)\out\obj_$(CPU)
INCDIR =$(DESTDIR)\inc
LIBDIR =$(DESTDIR)\lib