Skip to content

Commit f4d6eda

Browse files
authored
Merge pull request #75712 from al45tair/improve-windows-build-script
[Build][Windows] Don't extract archives needlessly.
2 parents 1d48548 + ddedfe0 commit f4d6eda

File tree

1 file changed

+36
-18
lines changed

1 file changed

+36
-18
lines changed

utils/build.ps1

Lines changed: 36 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -632,32 +632,53 @@ function Fetch-Dependencies {
632632

633633
Write-Output "Extracting '$ZipFileName' ..."
634634
New-Item -ItemType Directory -ErrorAction Ignore -Path $BinaryCache | Out-Null
635-
Expand-Archive -Path $source -DestinationPath $BinaryCache -Force
635+
Expand-Archive -Path $source -DestinationPath $destination -Force
636+
}
637+
638+
function Extract-Toolchain {
639+
param (
640+
[string]$InstallerExeName,
641+
[string]$BinaryCache,
642+
[string]$ToolchainName
643+
)
644+
645+
$source = Join-Path -Path $BinaryCache -ChildPath $InstallerExeName
646+
$destination = Join-Path -Path $BinaryCache -ChildPath toolchains\$ToolchainName
647+
648+
# Check if the extracted directory already exists and is up to date.
649+
if (Test-Path $destination) {
650+
$installerWriteTime = (Get-Item $source).LastWriteTime
651+
$extractedWriteTime = (Get-Item $destination).LastWriteTime
652+
if ($installerWriteTime -le $extractedWriteTime) {
653+
Write-Output "'$ToolchainName' is already extracted and up to date."
654+
return
655+
}
656+
}
657+
658+
Write-Output "Extracting '$ToolchainName' ..."
659+
660+
# The new runtime MSI is built to expand files into the immediate directory. So, setup the installation location.
661+
New-Item -ItemType Directory -ErrorAction Ignore $BinaryCache\toolchains\$PinnedToolchain\LocalApp\Programs\Swift\Runtimes\0.0.0\usr\bin | Out-Null
662+
Invoke-Program $BinaryCache\WiX-$WiXVersion\tools\net6.0\any\wix.exe -- burn extract $BinaryCache\$ToolchainName.exe -out $BinaryCache\toolchains\ -outba $BinaryCache\toolchains\
663+
Get-ChildItem "$BinaryCache\toolchains\WixAttachedContainer" -Filter "*.msi" | % {
664+
$LogFile = [System.IO.Path]::ChangeExtension($_.Name, "log")
665+
$TARGETDIR = if ($_.Name -eq "rtl.msi") { "$BinaryCache\toolchains\$ToolchainName\LocalApp\Programs\Swift\Runtimes\5.10.1\usr\bin" } else { "$BinaryCache\toolchains\$ToolchainName" }
666+
Invoke-Program -OutNull msiexec.exe /lvx! $BinaryCache\toolchains\$LogFile /qn /a $BinaryCache\toolchains\WixAttachedContainer\$_ ALLUSERS=0 TARGETDIR=$TARGETDIR
667+
}
636668
}
637669

638670
$WiXVersion = "4.0.4"
639671
$WiXURL = "https://www.nuget.org/api/v2/package/wix/$WiXVersion"
640672
$WiXHash = "A9CA12214E61BB49430A8C6E5E48AC5AE6F27DC82573B5306955C4D35F2D34E2"
641673
DownloadAndVerify $WixURL "$BinaryCache\WiX-$WiXVersion.zip" $WiXHash
642674

643-
# TODO(compnerd) stamp/validate that we need to re-extract
644-
New-Item -ItemType Directory -ErrorAction Ignore $BinaryCache\WiX-$WiXVersion | Out-Null
645-
Write-Output "Extracting WiX ..."
646-
Expand-Archive -Path $BinaryCache\WiX-$WiXVersion.zip -Destination $BinaryCache\WiX-$WiXVersion -Force
675+
Extract-ZipFile WiX-$WiXVersion.zip $BinaryCache WiX-$WiXVersion
647676

648677
DownloadAndVerify $PinnedBuild "$BinaryCache\$PinnedToolchain.exe" $PinnedSHA256
649678

650679
# TODO(compnerd) stamp/validate that we need to re-extract
651-
Write-Output "Extracting $PinnedToolchain ..."
652680
New-Item -ItemType Directory -ErrorAction Ignore $BinaryCache\toolchains | Out-Null
653-
# The new runtime MSI is built to expand files into the immediate directory. So, setup the installation location.
654-
New-Item -ItemType Directory -ErrorAction Ignore $BinaryCache\toolchains\$PinnedToolchain\LocalApp\Programs\Swift\Runtimes\0.0.0\usr\bin | Out-Null
655-
Invoke-Program $BinaryCache\WiX-$WiXVersion\tools\net6.0\any\wix.exe -- burn extract $BinaryCache\$PinnedToolchain.exe -out $BinaryCache\toolchains\ -outba $BinaryCache\toolchains\
656-
Get-ChildItem "$BinaryCache\toolchains\WixAttachedContainer" -Filter "*.msi" | % {
657-
$LogFile = [System.IO.Path]::ChangeExtension($_.Name, "log")
658-
$TARGETDIR = if ($_.Name -eq "rtl.msi") { "$BinaryCache\toolchains\$PinnedToolchain\LocalApp\Programs\Swift\Runtimes\5.10.1\usr\bin" } else { "$BinaryCache\toolchains\$PinnedToolchain" }
659-
Invoke-Program -OutNull msiexec.exe /lvx! $BinaryCache\toolchains\$LogFile /qn /a $BinaryCache\toolchains\WixAttachedContainer\$_ ALLUSERS=0 TARGETDIR=$TARGETDIR
660-
}
681+
Extract-Toolchain "$PinnedToolchain.exe" $BinaryCache $PinnedToolchain
661682

662683
function Download-Python($ArchName) {
663684
$PythonAMD64URL = "https://www.nuget.org/api/v2/package/python/$PythonVersion"
@@ -669,10 +690,7 @@ function Fetch-Dependencies {
669690
DownloadAndVerify (Get-Variable -Name "Python${ArchName}URL").Value $BinaryCache\Python$ArchName-$PythonVersion.zip (Get-Variable -Name "Python${ArchName}Hash").Value
670691

671692
if (-not $ToBatch) {
672-
# TODO(compnerd) stamp/validate that we need to re-extract
673-
New-Item -ItemType Directory -ErrorAction Ignore $BinaryCache\Python$ArchName-$PythonVersion | Out-Null
674-
Write-Output "Extracting Python ($ArchName) ..."
675-
Expand-Archive -Path $BinaryCache\Python$ArchName-$PythonVersion.zip -Destination $BinaryCache\Python$ArchName-$PythonVersion -Force
693+
Extract-ZipFile Python$ArchName-$PythonVersion.zip $BinaryCache Python$ArchName-$PythonVersion
676694
}
677695
}
678696

0 commit comments

Comments
 (0)