$ErrorActionPreference = "Stop" $version = "4.4.2" $expectedSha256 = "1f323b0fec19794f5e6c0425a61d4b1da396872a10be862d105f4f4b2d2957fe" $projectRoot = (Resolve-Path (Join-Path $PSScriptRoot "../..")).Path $toolsRoot = Join-Path $projectRoot ".tools" $installer = Join-Path $toolsRoot "KTX-Software-$version-Windows-x64.exe" $installDirectory = Join-Path $toolsRoot "ktx" $downloadUrl = "https://github.com/KhronosGroup/KTX-Software/releases/download/v$version/KTX-Software-$version-Windows-x64.exe" New-Item -ItemType Directory -Force $toolsRoot | Out-Null if (-not (Test-Path -LiteralPath $installer)) { Invoke-WebRequest -Uri $downloadUrl -OutFile $installer } $actualSha256 = (Get-FileHash -Algorithm SHA256 -LiteralPath $installer).Hash.ToLowerInvariant() if ($actualSha256 -ne $expectedSha256) { throw "KTX-Software installer checksum mismatch. Expected $expectedSha256, received $actualSha256." } $toktx = Join-Path $installDirectory "bin/toktx.exe" if (-not (Test-Path -LiteralPath $toktx)) { $process = Start-Process -FilePath $installer ` -ArgumentList @("/S", "/D=$installDirectory") ` -Wait ` -PassThru ` -WindowStyle Hidden if ($process.ExitCode -ne 0) { throw "KTX-Software installer exited with code $($process.ExitCode)." } } if (-not (Test-Path -LiteralPath $toktx)) { throw "KTX-Software installation completed without producing $toktx." } Write-Output "KTX-Software $version is ready at $installDirectory"