52 lines
2.0 KiB
PowerShell
52 lines
2.0 KiB
PowerShell
# Build the Windows installer: PyInstaller one-folder build (fast start) + Inno Setup.
|
|
# Install ISCC without admin: winget install --id JRSoftware.InnoSetup -e
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
$repoRoot = Resolve-Path (Join-Path $scriptDir '..\..')
|
|
$pyiDir = Join-Path $repoRoot 'package\pyinstaller'
|
|
|
|
# Locate PyInstaller: PATH first, then the known project venvs.
|
|
$pyi = (Get-Command pyinstaller.exe -ErrorAction SilentlyContinue).Source
|
|
if (-not $pyi) {
|
|
foreach ($p in @(
|
|
(Join-Path $repoRoot 'test\tmp\testium_venv\Scripts\pyinstaller.exe'),
|
|
(Join-Path $repoRoot 'test\tmp\.venv\Scripts\pyinstaller.exe'))) {
|
|
if (Test-Path $p) { $pyi = $p; break }
|
|
}
|
|
}
|
|
if (-not $pyi) { throw "pyinstaller.exe not found (PATH or project venv)." }
|
|
|
|
# One-folder PyInstaller build => dist\testium\testium.exe + dist\testium\_internal\.
|
|
Write-Host "Building one-folder exe with: $pyi"
|
|
Remove-Item -Recurse -Force (Join-Path $pyiDir 'build'), (Join-Path $pyiDir 'dist') -ErrorAction SilentlyContinue
|
|
Push-Location $pyiDir
|
|
try {
|
|
$env:TESTIUM_ONEDIR = '1'
|
|
& $pyi 'testium.spec'
|
|
if ($LASTEXITCODE -ne 0) { throw "pyinstaller failed with exit code $LASTEXITCODE" }
|
|
} finally {
|
|
Remove-Item Env:\TESTIUM_ONEDIR -ErrorAction SilentlyContinue
|
|
Pop-Location
|
|
}
|
|
|
|
# Locate ISCC: PATH, then the usual install dirs.
|
|
$iscc = (Get-Command ISCC.exe -ErrorAction SilentlyContinue).Source
|
|
if (-not $iscc) {
|
|
foreach ($p in @(
|
|
"$env:LOCALAPPDATA\Programs\Inno Setup 6\ISCC.exe",
|
|
"${env:ProgramFiles(x86)}\Inno Setup 6\ISCC.exe",
|
|
"$env:ProgramFiles\Inno Setup 6\ISCC.exe")) {
|
|
if (Test-Path $p) { $iscc = $p; break }
|
|
}
|
|
}
|
|
if (-not $iscc) {
|
|
throw "ISCC.exe not found. Install Inno Setup 6:`n winget install --id JRSoftware.InnoSetup -e"
|
|
}
|
|
|
|
Write-Host "Using ISCC: $iscc"
|
|
& $iscc (Join-Path $scriptDir 'testium.iss')
|
|
if ($LASTEXITCODE -ne 0) { throw "ISCC failed with exit code $LASTEXITCODE" }
|
|
|
|
Write-Host "`nInstaller built in: $(Join-Path $scriptDir 'dist')"
|