66 lines
3.8 KiB
PowerShell
66 lines
3.8 KiB
PowerShell
param(
|
|
[string]$GameDir = 'C:\Program Files (x86)\Steam\steamapps\common\A Dance of Fire and Ice',
|
|
[string]$MSBuildPath,
|
|
[switch]$FetchFFmpeg,
|
|
[switch]$Test
|
|
)
|
|
$ErrorActionPreference = 'Stop'
|
|
$ProgressPreference = 'SilentlyContinue'
|
|
Set-StrictMode -Version Latest
|
|
Set-Location $PSScriptRoot
|
|
|
|
|
|
# Build dependencies remain local and ignored. No game DLL is redistributed.
|
|
function Get-Package([string]$Id, [string]$Version, [string]$Destination, [string]$Expected) {
|
|
if (Test-Path -LiteralPath (Join-Path $Destination $Expected)) { return }
|
|
New-Item -ItemType Directory -Force -Path $Destination | Out-Null
|
|
$archive = Join-Path $Destination 'package.zip'
|
|
Invoke-WebRequest "https://api.nuget.org/v3-flatcontainer/$Id/$Version/$Id.$Version.nupkg" -OutFile $archive
|
|
Expand-Archive -LiteralPath $archive -DestinationPath $Destination -Force
|
|
Remove-Item -LiteralPath $archive
|
|
if (!(Test-Path -LiteralPath (Join-Path $Destination $Expected))) { throw "Package $Id is incomplete." }
|
|
}
|
|
Get-Package 'unitymodmanager' '0.32.4' 'packages/UnityModManager' 'lib/net35/UnityModManager.dll'
|
|
Get-Package 'microsoft.netframework.referenceassemblies.net48' '1.0.3' 'packages/net48' 'build/.NETFramework/v4.8/mscorlib.dll'
|
|
if (!(Test-Path 'packages/0Harmony.dll')) {
|
|
Get-Package 'lib.harmony' '2.2.2' 'packages/Harmony' 'lib/net48/0Harmony.dll'
|
|
Copy-Item -LiteralPath 'packages/Harmony/lib/net48/0Harmony.dll' -Destination 'packages/0Harmony.dll'
|
|
}
|
|
if (!$MSBuildPath) {
|
|
$command = Get-Command MSBuild.exe -ErrorAction SilentlyContinue
|
|
if ($command) { $MSBuildPath = $command.Source }
|
|
else {
|
|
$rider = Get-ChildItem "${env:ProgramFiles}/JetBrains" -Filter 'JetBrains Rider *' -Directory -ErrorAction SilentlyContinue |
|
|
Sort-Object Name -Descending | Select-Object -First 1
|
|
if ($rider) { $MSBuildPath = Join-Path $rider.FullName 'tools/MSBuild/Current/Bin/MSBuild.exe' }
|
|
}
|
|
}
|
|
if (!$MSBuildPath -or !(Test-Path -LiteralPath $MSBuildPath)) { throw 'Pass -MSBuildPath with Visual Studio or Rider MSBuild.exe.' }
|
|
if (!(Test-Path -LiteralPath "$GameDir/A Dance of Fire and Ice_Data/Managed/Assembly-CSharp.dll")) { throw 'Pass -GameDir with your ADOFAI installation.' }
|
|
& $MSBuildPath ADOFAIRenderer.sln /t:Rebuild /p:Configuration=Release "/p:GameDir=$GameDir" /v:minimal /nologo
|
|
if ($LASTEXITCODE -ne 0) { throw 'Mod build failed.' }
|
|
|
|
$ffmpeg = Get-ChildItem packages/ffmpeg -Filter ffmpeg.exe -Recurse -ErrorAction SilentlyContinue | Select-Object -First 1
|
|
if ($FetchFFmpeg -and !$ffmpeg) {
|
|
New-Item -ItemType Directory -Force packages/ffmpeg | Out-Null
|
|
$archive = Join-Path $PSScriptRoot 'packages/ffmpeg/essentials.zip'
|
|
# Windows build linked by ffmpeg.org/download.html; keep its original package
|
|
# (including licenses/source links) under packages rather than replacing game FFmpeg.
|
|
Invoke-WebRequest 'https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-essentials.zip' -OutFile $archive
|
|
Expand-Archive -LiteralPath $archive -DestinationPath packages/ffmpeg -Force
|
|
Remove-Item -LiteralPath $archive
|
|
$ffmpeg = Get-ChildItem packages/ffmpeg -Filter ffmpeg.exe -Recurse | Select-Object -First 1
|
|
}
|
|
if ($ffmpeg) {
|
|
Copy-Item -LiteralPath $ffmpeg.FullName -Destination ADOFAIRenderer/bin/Release/ffmpeg.exe -Force
|
|
}
|
|
if ($Test) {
|
|
if (!$ffmpeg) { throw 'Run with -FetchFFmpeg -Test to install an encoding-capable FFmpeg.' }
|
|
& $MSBuildPath Tests/RendererTests.csproj /t:Rebuild /v:minimal /nologo
|
|
if ($LASTEXITCODE -ne 0) { throw 'Test build failed.' }
|
|
$testOutput = Join-Path $env:TEMP ('adofai-render-tests-' + [guid]::NewGuid().ToString('N'))
|
|
& ./Tests/bin/Release/RendererTests.exe $ffmpeg.FullName $testOutput
|
|
if ($LASTEXITCODE -ne 0) { throw 'Renderer tests failed.' }
|
|
Write-Host "Test videos: $testOutput"
|
|
}
|
|
Write-Host "Mod output: $PSScriptRoot/ADOFAIRenderer/bin/Release"
|