56 lines
1.7 KiB
PowerShell
56 lines
1.7 KiB
PowerShell
param(
|
|
[switch]$SkipInstall,
|
|
[switch]$OneDir
|
|
)
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
$Root = Split-Path -Parent $PSScriptRoot
|
|
Set-Location $Root
|
|
$DistApp = Join-Path $Root "dist\seshat-tts"
|
|
$DistExe = Join-Path $Root "dist\seshat-tts.exe"
|
|
|
|
$RunningApps = @(Get-Process -Name "seshat-tts" -ErrorAction SilentlyContinue)
|
|
foreach ($Process in $RunningApps) {
|
|
try {
|
|
Stop-Process -Id $Process.Id -Force -ErrorAction Stop
|
|
} catch {
|
|
& taskkill.exe /PID $Process.Id /T /F | Out-Null
|
|
}
|
|
}
|
|
Start-Sleep -Milliseconds 500
|
|
$StillRunning = @(Get-Process -Name "seshat-tts" -ErrorAction SilentlyContinue)
|
|
if ($StillRunning.Count -gt 0) {
|
|
$Ids = ($StillRunning | ForEach-Object { $_.Id }) -join ", "
|
|
throw "Close Seshat TTS before building. Could not stop running process id(s): $Ids"
|
|
}
|
|
foreach ($Target in @($DistApp, $DistExe)) {
|
|
if (Test-Path $Target) {
|
|
for ($Attempt = 1; $Attempt -le 5; $Attempt++) {
|
|
try {
|
|
Remove-Item -LiteralPath $Target -Recurse -Force
|
|
break
|
|
} catch {
|
|
if ($Attempt -eq 5) {
|
|
throw
|
|
}
|
|
Start-Sleep -Seconds 2
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (-not $SkipInstall) {
|
|
python -m pip install --upgrade pip
|
|
python -m pip install -e ".[build,test]"
|
|
}
|
|
|
|
if ($OneDir) {
|
|
python -m PyInstaller --clean --noconfirm seshat-tts.spec
|
|
Write-Host "Built: $Root\dist\seshat-tts\seshat-tts.exe"
|
|
} else {
|
|
python -m PyInstaller --clean --noconfirm seshat-tts-portable.spec
|
|
Write-Host "Built portable EXE: $Root\dist\seshat-tts.exe"
|
|
}
|
|
|
|
Write-Host "The portable EXE bundles the GUI runtime, bundled OCR files when Tesseract is installed on this build machine, and uvx.exe when found."
|