75 lines
3.6 KiB
PowerShell
75 lines
3.6 KiB
PowerShell
# Download the published flutter-plezy patched Windows engine (DirectComposition)
|
|
# and install it into the active Flutter SDK's artifact cache.
|
|
#
|
|
# Plezy requires this engine on Windows: it honors the FLUTTER_WINDOWS_DCOMP
|
|
# environment variable (set in windows/runner/main.cpp) and presents the Flutter
|
|
# UI on a topmost DirectComposition visual, so the mpv video window composites
|
|
# *beneath* the UI in a single HWND (window capture works, no transparency
|
|
# hacks). On a stock engine the flag is a no-op and compositing breaks.
|
|
#
|
|
# Used by CI (.github/workflows/build.yml) and by contributors building locally.
|
|
# Engine developers who build their own artifacts use swap-engine.ps1 instead.
|
|
#
|
|
# The flutter tool validates the engine cache by engine.stamp string only (no
|
|
# file hashing), so the swap sticks - but `flutter upgrade` /
|
|
# `flutter precache --force` silently restore the stock engine; re-run this
|
|
# afterwards. Run `flutter precache --windows` once before this script so the
|
|
# cache layout and engine.stamp exist.
|
|
#
|
|
# Usage:
|
|
# flutter precache --windows
|
|
# windows/tool/install-patched-engine.ps1
|
|
param(
|
|
# Engine zip published at flutter-plezy release windows-v3.44.0+1 - x64 + arm64
|
|
# (cache dirs windows-{x64,arm64}{,-release}). The asset name is the same across
|
|
# tags, so a version bump only changes the tag segment of the URL.
|
|
[string]$Url = 'https://github.com/edde746/flutter-plezy/releases/download/windows-v3.44.0+1/flutter-plezy-windows-3.44.0.zip',
|
|
[string]$Sha256 = '8de498d28f314c33971226856bea7aa54099e08e60cd7d208cbaf04693dc8274',
|
|
# Engine revision the artifacts were built from. Must match the SDK's
|
|
# engine.stamp (gen_snapshot/dart in the SDK must come from the same
|
|
# checkout), or the swapped binaries are ABI-incompatible with the build.
|
|
[string]$ExpectedEngine = '4c525dac5ebe5971c5708ef73558ed8edcf4a362'
|
|
)
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
|
|
$flutterCmd = Get-Command flutter.bat -ErrorAction SilentlyContinue
|
|
if (-not $flutterCmd) { $flutterCmd = Get-Command flutter }
|
|
$sdkRoot = Split-Path -Parent (Split-Path -Parent $flutterCmd.Source)
|
|
|
|
$stampPath = Join-Path $sdkRoot 'bin\cache\engine.stamp'
|
|
if (-not (Test-Path $stampPath)) {
|
|
Write-Error "engine.stamp not found at $stampPath - run 'flutter precache --windows' first"
|
|
}
|
|
$stamp = (Get-Content $stampPath -Raw).Trim()
|
|
if ($stamp -ne $ExpectedEngine) {
|
|
Write-Error "SDK engine.stamp is $stamp but the patched engine targets $ExpectedEngine - this flutter-plezy build is for a different SDK"
|
|
}
|
|
|
|
$engineDir = Join-Path $sdkRoot 'bin\cache\artifacts\engine'
|
|
if (-not (Test-Path $engineDir)) {
|
|
Write-Error "engine cache not found: $engineDir - run 'flutter precache --windows' first"
|
|
}
|
|
|
|
$zip = Join-Path ([System.IO.Path]::GetTempPath()) 'flutter-plezy-windows.zip'
|
|
|
|
# Invoke-WebRequest renders a per-byte progress bar in Windows PowerShell that
|
|
# makes large downloads crawl; silence it.
|
|
$ProgressPreference = 'SilentlyContinue'
|
|
Write-Output "Downloading patched engine from $Url ..."
|
|
Invoke-WebRequest -Uri $Url -OutFile $zip
|
|
|
|
$actual = (Get-FileHash $zip -Algorithm SHA256).Hash.ToLower()
|
|
if ($actual -ne $Sha256.ToLower()) {
|
|
Remove-Item $zip -Force
|
|
Write-Error "SHA256 mismatch: expected $Sha256 but got $actual"
|
|
}
|
|
|
|
# The zip holds top-level windows-x64/ (debug) and windows-x64-release/ folders;
|
|
# extracting over the engine dir swaps both cache variants in place.
|
|
Write-Output "Extracting patched engine into $engineDir ..."
|
|
Expand-Archive -Path $zip -DestinationPath $engineDir -Force
|
|
Remove-Item $zip -Force
|
|
|
|
Write-Output "Installed patched DComp engine (windows-x64, windows-x64-release)."
|