@@ -631,32 +631,53 @@ function Fetch-Dependencies {
631
631
632
632
Write-Output " Extracting '$ZipFileName ' ..."
633
633
New-Item - ItemType Directory - ErrorAction Ignore - Path $BinaryCache | Out-Null
634
- Expand-Archive - Path $source - DestinationPath $BinaryCache - Force
634
+ Expand-Archive - Path $source - DestinationPath $destination - Force
635
+ }
636
+
637
+ function Extract-Toolchain {
638
+ param (
639
+ [string ]$InstallerExeName ,
640
+ [string ]$BinaryCache ,
641
+ [string ]$ToolchainName
642
+ )
643
+
644
+ $source = Join-Path - Path $BinaryCache - ChildPath $InstallerExeName
645
+ $destination = Join-Path - Path $BinaryCache - ChildPath toolchains\$ToolchainName
646
+
647
+ # Check if the extracted directory already exists and is up to date.
648
+ if (Test-Path $destination ) {
649
+ $installerWriteTime = (Get-Item $source ).LastWriteTime
650
+ $extractedWriteTime = (Get-Item $destination ).LastWriteTime
651
+ if ($installerWriteTime -le $extractedWriteTime ) {
652
+ Write-Output " '$ToolchainName ' is already extracted and up to date."
653
+ return
654
+ }
655
+ }
656
+
657
+ Write-Output " Extracting '$ToolchainName ' ..."
658
+
659
+ # The new runtime MSI is built to expand files into the immediate directory. So, setup the installation location.
660
+ New-Item - ItemType Directory - ErrorAction Ignore $BinaryCache \toolchains\$PinnedToolchain \LocalApp\Programs\Swift\Runtimes\0.0 .0 \usr\bin | Out-Null
661
+ Invoke-Program $BinaryCache \WiX- $WiXVersion \tools\net6.0 \any\wix.exe -- burn extract $BinaryCache \$ToolchainName.exe - out $BinaryCache \toolchains\ - outba $BinaryCache \toolchains\
662
+ Get-ChildItem " $BinaryCache \toolchains\WixAttachedContainer" - Filter " *.msi" | % {
663
+ $LogFile = [System.IO.Path ]::ChangeExtension($_.Name , " log" )
664
+ $TARGETDIR = if ($_.Name -eq " rtl.msi" ) { " $BinaryCache \toolchains\$ToolchainName \LocalApp\Programs\Swift\Runtimes\5.10.1\usr\bin" } else { " $BinaryCache \toolchains\$ToolchainName " }
665
+ Invoke-Program - OutNull msiexec.exe / lvx! $BinaryCache \toolchains\$LogFile / qn / a $BinaryCache \toolchains\WixAttachedContainer\$_ ALLUSERS= 0 TARGETDIR= $TARGETDIR
666
+ }
635
667
}
636
668
637
669
$WiXVersion = " 4.0.4"
638
670
$WiXURL = " https://www.nuget.org/api/v2/package/wix/$WiXVersion "
639
671
$WiXHash = " A9CA12214E61BB49430A8C6E5E48AC5AE6F27DC82573B5306955C4D35F2D34E2"
640
672
DownloadAndVerify $WixURL " $BinaryCache \WiX-$WiXVersion .zip" $WiXHash
641
673
642
- # TODO(compnerd) stamp/validate that we need to re-extract
643
- New-Item - ItemType Directory - ErrorAction Ignore $BinaryCache \WiX- $WiXVersion | Out-Null
644
- Write-Output " Extracting WiX ..."
645
- Expand-Archive - Path $BinaryCache \WiX- $WiXVersion.zip - Destination $BinaryCache \WiX- $WiXVersion - Force
674
+ Extract- ZipFile WiX- $WiXVersion.zip $BinaryCache WiX- $WiXVersion
646
675
647
676
DownloadAndVerify $PinnedBuild " $BinaryCache \$PinnedToolchain .exe" $PinnedSHA256
648
677
649
678
# TODO(compnerd) stamp/validate that we need to re-extract
650
- Write-Output " Extracting $PinnedToolchain ..."
651
679
New-Item - ItemType Directory - ErrorAction Ignore $BinaryCache \toolchains | Out-Null
652
- # The new runtime MSI is built to expand files into the immediate directory. So, setup the installation location.
653
- New-Item - ItemType Directory - ErrorAction Ignore $BinaryCache \toolchains\$PinnedToolchain \LocalApp\Programs\Swift\Runtimes\0.0 .0 \usr\bin | Out-Null
654
- Invoke-Program $BinaryCache \WiX- $WiXVersion \tools\net6.0 \any\wix.exe -- burn extract $BinaryCache \$PinnedToolchain.exe - out $BinaryCache \toolchains\ - outba $BinaryCache \toolchains\
655
- Get-ChildItem " $BinaryCache \toolchains\WixAttachedContainer" - Filter " *.msi" | % {
656
- $LogFile = [System.IO.Path ]::ChangeExtension($_.Name , " log" )
657
- $TARGETDIR = if ($_.Name -eq " rtl.msi" ) { " $BinaryCache \toolchains\$PinnedToolchain \LocalApp\Programs\Swift\Runtimes\5.10.1\usr\bin" } else { " $BinaryCache \toolchains\$PinnedToolchain " }
658
- Invoke-Program - OutNull msiexec.exe / lvx! $BinaryCache \toolchains\$LogFile / qn / a $BinaryCache \toolchains\WixAttachedContainer\$_ ALLUSERS= 0 TARGETDIR= $TARGETDIR
659
- }
680
+ Extract- Toolchain " $PinnedToolchain .exe" $BinaryCache $PinnedToolchain
660
681
661
682
function Download-Python ($ArchName ) {
662
683
$PythonAMD64URL = " https://www.nuget.org/api/v2/package/python/$PythonVersion "
@@ -668,10 +689,7 @@ function Fetch-Dependencies {
668
689
DownloadAndVerify (Get-Variable - Name " Python${ArchName} URL" ).Value $BinaryCache \Python$ArchName - $PythonVersion.zip (Get-Variable - Name " Python${ArchName} Hash" ).Value
669
690
670
691
if (-not $ToBatch ) {
671
- # TODO(compnerd) stamp/validate that we need to re-extract
672
- New-Item - ItemType Directory - ErrorAction Ignore $BinaryCache \Python$ArchName - $PythonVersion | Out-Null
673
- Write-Output " Extracting Python ($ArchName ) ..."
674
- Expand-Archive - Path $BinaryCache \Python$ArchName - $PythonVersion.zip - Destination $BinaryCache \Python$ArchName - $PythonVersion - Force
692
+ Extract- ZipFile Python$ArchName - $PythonVersion.zip $BinaryCache Python$ArchName - $PythonVersion
675
693
}
676
694
}
677
695
0 commit comments