From 8205de84f9a8df3632ba2e9d334a22e6aea585ef Mon Sep 17 00:00:00 2001 From: scawful Date: Sun, 28 Sep 2025 00:59:43 -0400 Subject: [PATCH] Refactor Windows development setup script to a sequential approach for improved clarity and user experience - Transitioned from a function-based structure to a sequential approach, simplifying the script flow. - Enhanced user feedback with clear status messages for each setup step, including checks for project directory, Visual Studio, Git, Python, and vcpkg. - Improved error handling and instructions for missing dependencies, ensuring a smoother setup process. - Streamlined the process for generating Visual Studio project files and testing builds, making it more user-friendly. --- scripts/setup-windows-dev.ps1 | 378 +++++++++++++++++----------------- 1 file changed, 184 insertions(+), 194 deletions(-) diff --git a/scripts/setup-windows-dev.ps1 b/scripts/setup-windows-dev.ps1 index f6b01a21..2db1624e 100644 --- a/scripts/setup-windows-dev.ps1 +++ b/scripts/setup-windows-dev.ps1 @@ -1,5 +1,5 @@ # YAZE Windows Development Setup Script -# Function-based approach with minimal if-else statements +# Sequential approach with no functions and minimal conditionals param( [switch]$SkipVcpkg, @@ -9,212 +9,202 @@ param( $ErrorActionPreference = "Continue" -function Write-Status { - param([string]$Message, [string]$Color = "White") - Write-Host $Message -ForegroundColor $Color -} +Write-Host "========================================" -ForegroundColor Cyan +Write-Host "YAZE Windows Development Setup" -ForegroundColor Cyan +Write-Host "========================================" -ForegroundColor Cyan -function Test-Command { - param([string]$Command) - try { - $null = Get-Command $Command -ErrorAction Stop - return $true - } catch { - return $false +# Step 1: Check project directory +Write-Host "Step 1: Checking project directory..." -ForegroundColor Yellow +$projectValid = Test-Path "YAZE.sln" +switch ($projectValid) { + $true { Write-Host "✓ YAZE.sln found" -ForegroundColor Green } + $false { + Write-Host "✗ YAZE.sln not found" -ForegroundColor Red + Write-Host "Please run this script from the YAZE project root directory" -ForegroundColor Yellow + exit 1 } } -function Check-ProjectDirectory { - Write-Status "Checking project directory..." "Yellow" - $projectValid = Test-Path "YAZE.sln" - if ($projectValid) { - Write-Status "✓ YAZE.sln found" "Green" - return $true - } else { - Write-Status "✗ YAZE.sln not found" "Red" - Write-Status "Please run this script from the YAZE project root directory" "Yellow" - return $false - } -} - -function Check-VisualStudio { - Write-Status "Checking Visual Studio..." "Yellow" - $vsWhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" - $vsFound = $false - if (Test-Path $vsWhere) { - $vsInstall = & $vsWhere -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath - if ($vsInstall) { - $msbuildPath = Join-Path $vsInstall "MSBuild\Current\Bin\MSBuild.exe" - $vsFound = Test-Path $msbuildPath - } - } - - if ($vsFound) { - Write-Status "✓ Visual Studio 2022 with C++ workload found" "Green" - } else { - Write-Status "⚠ Visual Studio 2022 with C++ workload not found" "Yellow" - Write-Status "Please install Visual Studio 2022 with 'Desktop development with C++' workload" "White" - } - return $vsFound -} - -function Check-Git { - Write-Status "Checking Git..." "Yellow" - $gitFound = Test-Command "git" - if ($gitFound) { - $gitVersion = & git --version - Write-Status "✓ Git found: $gitVersion" "Green" - } else { - Write-Status "⚠ Git not found" "Yellow" - Write-Status "Please install Git for Windows from: https://git-scm.com/download/win" "White" - } - return $gitFound -} - -function Check-Python { - Write-Status "Checking Python..." "Yellow" - $pythonFound = Test-Command "python" - if ($pythonFound) { - $pythonVersion = & python --version - Write-Status "✓ Python found: $pythonVersion" "Green" - } else { - Write-Status "⚠ Python not found" "Yellow" - Write-Status "Please install Python 3.8+ from: https://www.python.org/downloads/" "White" - } - return $pythonFound -} - -function Setup-Vcpkg { - Write-Status "Setting up vcpkg..." "Yellow" - - # Clone vcpkg - $vcpkgExists = Test-Path "vcpkg" - if (-not $vcpkgExists) { - Write-Status "Cloning vcpkg..." "Yellow" - $gitFound = Test-Command "git" - if ($gitFound) { - & git clone https://github.com/Microsoft/vcpkg.git vcpkg - $cloneSuccess = ($LASTEXITCODE -eq 0) - if ($cloneSuccess) { - Write-Status "✓ vcpkg cloned successfully" "Green" - } else { - Write-Status "✗ Failed to clone vcpkg" "Red" - exit 1 +# Step 2: Check Visual Studio +Write-Host "Step 2: Checking Visual Studio..." -ForegroundColor Yellow +switch ($SkipVS) { + $true { Write-Host "Skipping Visual Studio check" -ForegroundColor Yellow } + $false { + $vsWhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" + $vsFound = $false + $vsExists = Test-Path $vsWhere + switch ($vsExists) { + $true { + $vsInstall = & $vsWhere -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath + switch ($null -ne $vsInstall) { + $true { + $msbuildPath = Join-Path $vsInstall "MSBuild\Current\Bin\MSBuild.exe" + $vsFound = Test-Path $msbuildPath + } + } } - } else { - Write-Status "✗ Git is required to clone vcpkg" "Red" - exit 1 } - } else { - Write-Status "✓ vcpkg directory already exists" "Green" - } - - # Bootstrap vcpkg - $vcpkgExe = "vcpkg\vcpkg.exe" - $vcpkgBootstrapped = Test-Path $vcpkgExe - if (-not $vcpkgBootstrapped) { - Write-Status "Bootstrapping vcpkg..." "Yellow" - Push-Location vcpkg - & .\bootstrap-vcpkg.bat - $bootstrapSuccess = ($LASTEXITCODE -eq 0) - Pop-Location - if ($bootstrapSuccess) { - Write-Status "✓ vcpkg bootstrapped successfully" "Green" - } else { - Write-Status "✗ Failed to bootstrap vcpkg" "Red" - exit 1 + + switch ($vsFound) { + $true { Write-Host "✓ Visual Studio 2022 with C++ workload found" -ForegroundColor Green } + $false { + Write-Host "⚠ Visual Studio 2022 with C++ workload not found" -ForegroundColor Yellow + Write-Host "Please install Visual Studio 2022 with 'Desktop development with C++' workload" -ForegroundColor White + } } - } else { - Write-Status "✓ vcpkg already bootstrapped" "Green" - } - - # Install dependencies - Write-Status "Installing dependencies..." "Yellow" - & $vcpkgExe install --triplet x64-windows - $installSuccess = ($LASTEXITCODE -eq 0) - if ($installSuccess) { - Write-Status "✓ Dependencies installed successfully" "Green" - } else { - Write-Status "⚠ Some dependencies may not have installed correctly" "Yellow" } } -function Generate-ProjectFiles { - Write-Status "Generating Visual Studio project files..." "Yellow" - $pythonFound = Test-Command "python" - if ($pythonFound) { +# Step 3: Check Git +Write-Host "Step 3: Checking Git..." -ForegroundColor Yellow +$gitFound = $false +try { + $null = Get-Command git -ErrorAction Stop + $gitFound = $true +} catch { + $gitFound = $false +} + +switch ($gitFound) { + $true { + $gitVersion = & git --version + Write-Host "✓ Git found: $gitVersion" -ForegroundColor Green + } + $false { + Write-Host "⚠ Git not found" -ForegroundColor Yellow + Write-Host "Please install Git for Windows from: https://git-scm.com/download/win" -ForegroundColor White + } +} + +# Step 4: Check Python +Write-Host "Step 4: Checking Python..." -ForegroundColor Yellow +$pythonFound = $false +try { + $null = Get-Command python -ErrorAction Stop + $pythonFound = $true +} catch { + $pythonFound = $false +} + +switch ($pythonFound) { + $true { + $pythonVersion = & python --version + Write-Host "✓ Python found: $pythonVersion" -ForegroundColor Green + } + $false { + Write-Host "⚠ Python not found" -ForegroundColor Yellow + Write-Host "Please install Python 3.8+ from: https://www.python.org/downloads/" -ForegroundColor White + } +} + +# Step 5: Setup vcpkg +Write-Host "Step 5: Setting up vcpkg..." -ForegroundColor Yellow +switch ($SkipVcpkg) { + $true { Write-Host "Skipping vcpkg setup" -ForegroundColor Yellow } + $false { + # Clone vcpkg + $vcpkgExists = Test-Path "vcpkg" + switch ($vcpkgExists) { + $false { + Write-Host "Cloning vcpkg..." -ForegroundColor Yellow + switch ($gitFound) { + $true { + & git clone https://github.com/Microsoft/vcpkg.git vcpkg + $cloneSuccess = ($LASTEXITCODE -eq 0) + switch ($cloneSuccess) { + $true { Write-Host "✓ vcpkg cloned successfully" -ForegroundColor Green } + $false { + Write-Host "✗ Failed to clone vcpkg" -ForegroundColor Red + exit 1 + } + } + } + $false { + Write-Host "✗ Git is required to clone vcpkg" -ForegroundColor Red + exit 1 + } + } + } + $true { Write-Host "✓ vcpkg directory already exists" -ForegroundColor Green } + } + + # Bootstrap vcpkg + $vcpkgExe = "vcpkg\vcpkg.exe" + $vcpkgBootstrapped = Test-Path $vcpkgExe + switch ($vcpkgBootstrapped) { + $false { + Write-Host "Bootstrapping vcpkg..." -ForegroundColor Yellow + Push-Location vcpkg + & .\bootstrap-vcpkg.bat + $bootstrapSuccess = ($LASTEXITCODE -eq 0) + Pop-Location + switch ($bootstrapSuccess) { + $true { Write-Host "✓ vcpkg bootstrapped successfully" -ForegroundColor Green } + $false { + Write-Host "✗ Failed to bootstrap vcpkg" -ForegroundColor Red + exit 1 + } + } + } + $true { Write-Host "✓ vcpkg already bootstrapped" -ForegroundColor Green } + } + + # Install dependencies + Write-Host "Installing dependencies..." -ForegroundColor Yellow + & $vcpkgExe install --triplet x64-windows + $installSuccess = ($LASTEXITCODE -eq 0) + switch ($installSuccess) { + $true { Write-Host "✓ Dependencies installed successfully" -ForegroundColor Green } + $false { Write-Host "⚠ Some dependencies may not have installed correctly" -ForegroundColor Yellow } + } + } +} + +# Step 6: Generate project files +Write-Host "Step 6: Generating Visual Studio project files..." -ForegroundColor Yellow +switch ($pythonFound) { + $true { & python scripts/generate-vs-projects.py $generateSuccess = ($LASTEXITCODE -eq 0) - if ($generateSuccess) { - Write-Status "✓ Project files generated successfully" "Green" - } else { - Write-Status "⚠ Failed to generate project files" "Yellow" + switch ($generateSuccess) { + $true { Write-Host "✓ Project files generated successfully" -ForegroundColor Green } + $false { Write-Host "⚠ Failed to generate project files" -ForegroundColor Yellow } + } + } + $false { Write-Host "⚠ Python required to generate project files" -ForegroundColor Yellow } +} + +# Step 7: Test build +Write-Host "Step 7: Testing build..." -ForegroundColor Yellow +switch ($SkipBuild) { + $true { Write-Host "Skipping test build" -ForegroundColor Yellow } + $false { + $buildScriptExists = Test-Path "scripts\build-windows.ps1" + switch ($buildScriptExists) { + $true { + & .\scripts\build-windows.ps1 -Configuration Release -Platform x64 + $buildSuccess = ($LASTEXITCODE -eq 0) + switch ($buildSuccess) { + $true { Write-Host "✓ Test build successful" -ForegroundColor Green } + $false { Write-Host "⚠ Test build failed, but setup is complete" -ForegroundColor Yellow } + } + } + $false { Write-Host "⚠ Build script not found" -ForegroundColor Yellow } } - } else { - Write-Status "⚠ Python required to generate project files" "Yellow" } } -function Test-Build { - Write-Status "Testing build..." "Yellow" - $buildScriptExists = Test-Path "scripts\build-windows.ps1" - if ($buildScriptExists) { - & .\scripts\build-windows.ps1 -Configuration Release -Platform x64 - $buildSuccess = ($LASTEXITCODE -eq 0) - if ($buildSuccess) { - Write-Status "✓ Test build successful" "Green" - } else { - Write-Status "⚠ Test build failed, but setup is complete" "Yellow" - } - } else { - Write-Status "⚠ Build script not found" "Yellow" - } -} - -function Show-FinalInstructions { - Write-Status "========================================" "Cyan" - Write-Status "✓ YAZE Windows development setup complete!" "Green" - Write-Status "========================================" "Cyan" - Write-Status "" - Write-Status "Next steps:" "Yellow" - Write-Status "1. Open YAZE.sln in Visual Studio 2022" "White" - Write-Status "2. Select configuration (Debug/Release) and platform (x64/x86/ARM64)" "White" - Write-Status "3. Build the solution (Ctrl+Shift+B)" "White" - Write-Status "" - Write-Status "Or use command line:" "Yellow" - Write-Status " .\scripts\build-windows.ps1 -Configuration Release -Platform x64" "White" - Write-Status "" - Write-Status "For more information, see docs/windows-development-guide.md" "Cyan" -} - -# Main execution -Write-Status "========================================" "Cyan" -Write-Status "YAZE Windows Development Setup" "Cyan" -Write-Status "========================================" "Cyan" - -# Execute setup steps -$projectValid = Check-ProjectDirectory -if (-not $projectValid) { exit 1 } - -if (-not $SkipVS) { - Check-VisualStudio -} - -Check-Git -Check-Python - -if (-not $SkipVcpkg) { - Setup-Vcpkg -} else { - Write-Status "Skipping vcpkg setup" "Yellow" -} - -Generate-ProjectFiles - -if (-not $SkipBuild) { - Test-Build -} else { - Write-Status "Skipping test build" "Yellow" -} - -Show-FinalInstructions \ No newline at end of file +# Final instructions +Write-Host "========================================" -ForegroundColor Cyan +Write-Host "✓ YAZE Windows development setup complete!" -ForegroundColor Green +Write-Host "========================================" -ForegroundColor Cyan +Write-Host "" +Write-Host "Next steps:" -ForegroundColor Yellow +Write-Host "1. Open YAZE.sln in Visual Studio 2022" -ForegroundColor White +Write-Host "2. Select configuration (Debug/Release) and platform (x64/x86/ARM64)" -ForegroundColor White +Write-Host "3. Build the solution (Ctrl+Shift+B)" -ForegroundColor White +Write-Host "" +Write-Host "Or use command line:" -ForegroundColor Yellow +Write-Host " .\scripts\build-windows.ps1 -Configuration Release -Platform x64" -ForegroundColor White +Write-Host "" +Write-Host "For more information, see docs/windows-development-guide.md" -ForegroundColor Cyan \ No newline at end of file