GstPipelineStudio/installer/wix/build_installer.ps1
2023-09-28 16:45:01 +02:00

79 lines
No EOL
3 KiB
PowerShell

# Check wix installation
$wixInstalledFolder = "C:\Program Files (x86)\WiX Toolset v3.11\bin"
if(Test-Path $wixInstalledFolder)
{
$wixFolder = $wixInstalledFolder
}
else
{
$prepareWix = Join-Path $PSScriptRoot -ChildPath prepare_wix.ps1
& "$prepareWix"
$wixFolder = Join-Path $PSScriptRoot -ChildPath 'wix/'
}
$candleToolPath = Join-Path $wixFolder -ChildPath candle.exe
$lightToolPath = Join-Path $wixFolder -ChildPath light.exe
$heatToolPath = Join-Path $wixFolder -ChildPath heat.exe
$GPSUpgradeCode = "9B87C8FF-599C-4F20-914E-AF5E68CB3DC0"
$GPSVersion = Get-Content $PSScriptRoot\..\..\VERSION -Raw
Write-Output $GPSVersion
try
{
Push-Location $PSScriptRoot
if(-not (Test-Path $wixFolder))
{
throw "Folder $wixFolder does not exist. Start DownloadAndExtractWix.ps1 script to create it."
}
if((-not (Test-Path $candleToolPath)) -or (-not (Test-Path $lightToolPath)))
{
throw "Tools required to build installer (candle.exe and light.exe) do not exist in wix folder."
}
# GST and GTK are installed in this folder by prepare_gstreamer.ps1.
# GST and GTK are built by the docker image.
$gstreamerInstallDir="c:\gst-install-clean"
$gstreamerBinInstallDir= Join-Path $gstreamerInstallDir -ChildPath "bin"
$gstreamerPluginInstallDir= Join-Path $gstreamerInstallDir -ChildPath "lib"
$gstreamerShareInstallDir= Join-Path $gstreamerInstallDir -ChildPath "share"
& "$heatToolPath" dir "$gstreamerBinInstallDir" -gg -sfrag -template:fragment -out gstreamer-1.0.wxs -cg "_gstreamer" -var var.gstreamerBinInstallDir -dr INSTALLFOLDER
& "$heatToolPath" dir "$gstreamerPluginInstallDir" -gg -sfrag -template:fragment -out gstreamer-plugins-1.0.wxs -cg "_gstreamer_plugins" -var var.gstreamerPluginInstallDir -dr INSTALLFOLDER
& "$heatToolPath" dir "$gstreamerShareInstallDir" -v -ke -gg -sfrag -template:fragment -out gstreamer-share-1.0.wxs -cg "_gstreamer_share" -var var.gstreamerShareInstallDir -dr INSTALLFOLDER
$files = "gps gstreamer-1.0 gstreamer-plugins-1.0 gstreamer-share-1.0"
$wxs_files = @()
$obj_files = @()
foreach ($f in $files.split(" ")){
$wxs_files += "$f.wxs"
$obj_files += "$f.wixobj"
}
Write-Output $wxs_files
Write-Output $obj_files
# compiling wxs file into wixobj
$msiFileName = "GstPipelineStudio-$GPSVersion.msi"
foreach ($f in $wxs_files){
& "$candleToolPath" "$f" -dPlatform=x64 -dGPSUpgradeCode="$GPSUpgradeCode" -dGPSVersion="$GPSVersion" -dgstreamerBinInstallDir="$gstreamerBinInstallDir" -dgstreamerPluginInstallDir="$gstreamerPluginInstallDir" -dgstreamerShareInstallDir="$gstreamerShareInstallDir"
if($LASTEXITCODE -ne 0)
{
throw "Compilation of $wxsFileName failed with exit code $LASTEXITCODE"
}
}
$AllArgs = $obj_files + @('-out', $msiFileName)
& $lightToolPath $AllArgs -ext WixUIExtension
if($LASTEXITCODE -ne 0)
{
throw "Linking of $wixobjFileName failed with exit code $LASTEXITCODE"
}
}
catch
{
Write-Error $_
exit 1
}
finally
{
Pop-Location
}