#Requires -Version 5.1 <# .SYNOPSIS Build Vulcast Vertical OBS plugin - v7 (downloads zip, no git needed) #> param() $ErrorActionPreference = 'Stop' $CacheDir = Join-Path $env:LOCALAPPDATA "vulcast-build" $PluginDir = Join-Path $CacheDir "vulcast-vertical" $buildDir = Join-Path $PluginDir "build_x64" Write-Host "=== Vulcast Vertical Build v7 ===" -ForegroundColor Cyan # 1. Find VS Build Tools $vswhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" if (!(Test-Path $vswhere)) { throw "VS Build Tools not found" } $installPath = & $vswhere -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath 2>$null if (!$installPath) { throw "VS Build Tools not found" } $vcvarsall = Join-Path $installPath "VC\Auxiliary\Build\vcvarsall.bat" # 2. Download and extract plugin source (no git needed) $zipPath = Join-Path $CacheDir "vulcast-vertical-latest.zip" if (!(Test-Path (Join-Path $PluginDir "CMakeLists.txt"))) { Write-Host "[1/4] Downloading source..." -ForegroundColor Cyan if (Test-Path $PluginDir) { Remove-Item $PluginDir -Recurse -Force } New-Item -ItemType Directory -Path $CacheDir -Force | Out-Null Invoke-WebRequest -Uri "https://vulcast.xyz/dl/vulcast-vertical-latest.zip" -OutFile $zipPath Expand-Archive -Path $zipPath -DestinationPath $PluginDir -Force # If zip has a root folder, flatten it $inner = Get-ChildItem -Path $PluginDir -Directory | Select-Object -First 1 if ($inner -and (Test-Path (Join-Path $inner.FullName "CMakeLists.txt"))) { Get-ChildItem -Path $inner.FullName -Force | Move-Item -Destination $PluginDir -Force Remove-Item $inner.FullName -Recurse -Force -ErrorAction SilentlyContinue } } else { Write-Host "[1/4] Source already cached." -ForegroundColor Green } # 3. Write CMakeUserPresets.json Write-Host "[2/4] Writing cmake presets..." -ForegroundColor Cyan $presetJson = @' { "version": 6, "configurePresets": [ { "name": "vulcast-local", "displayName": "Vulcast Local Build", "generator": "Visual Studio 17 2022", "architecture": "x64", "binaryDir": "${sourceDir}/build_x64", "cacheVariables": { "CMAKE_BUILD_TYPE": "Release", "CMAKE_SYSTEM_VERSION": "10.0.18363.657", "QT_VERSION": "6" } } ] } '@ $presetPath = Join-Path $PluginDir "CMakeUserPresets.json" Set-Content -Path $presetPath -Value $presetJson -Encoding UTF8 # 4. Configure cmake Write-Host "[3/4] Configuring cmake..." -ForegroundColor Cyan New-Item -ItemType Directory -Path $buildDir -Force | Out-Null cmd /c "call `"$vcvarsall`" x64 && cmake --preset vulcast-local -S `"$PluginDir`"" if ($LASTEXITCODE -ne 0) { throw "cmake configure failed" } # 5. Build Write-Host "[4/4] Building DLL..." -ForegroundColor Cyan cmd /c "call `"$vcvarsall`" x64 && cmake --build `"$buildDir`" --config Release" if ($LASTEXITCODE -ne 0) { throw "Build failed" } # Find and install DLL $dll = Get-ChildItem -Path $buildDir -Recurse -Filter "vulcast-vertical.dll" -ErrorAction SilentlyContinue | Select-Object -First 1 if (!$dll) { $dll = Get-ChildItem -Path $buildDir -Recurse -Filter "vertical-canvas.dll" -ErrorAction SilentlyContinue | Select-Object -First 1 } if (!$dll) { $dll = Get-ChildItem -Path $buildDir -Recurse -Filter "*.dll" -ErrorAction SilentlyContinue | Where-Object { $_.FullName -notmatch "Qt6|obs" } | Select-Object -First 1 } if ($dll) { $pluginsDir = Join-Path $env:ProgramFiles "obs-studio\obs-plugins\64bit" if (!(Test-Path $pluginsDir)) { $pluginsDir = Join-Path $CacheDir "obs-plugins"; New-Item -ItemType Directory -Path $pluginsDir -Force | Out-Null } Copy-Item $dll.FullName $pluginsDir -Force Write-Host "`nDone! DLL: $pluginsDir\$($dll.Name)" -ForegroundColor Green } else { throw "DLL not found in build output" }