private/Get-PhpDepsPackages.ps1
|
function Get-PhpDepsPackages { <# .SYNOPSIS Get PHP dependency packages, applying configured library overrides when required. .PARAMETER PhpVersion PHP version (e.g., 8.4.18, 8.4, or master). .PARAMETER VsVersion Visual Studio toolset version (e.g., vs16, vs17). .PARAMETER Arch Target architecture: x86 or x64. #> [CmdletBinding()] [OutputType([PSCustomObject])] param( [Parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()] [string] $PhpVersion, [Parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()] [string] $VsVersion, [Parameter(Mandatory=$true)] [ValidateSet('x86','x64')] [string] $Arch ) begin { $baseurl = 'https://downloads.php.net/~windows/php-sdk/deps' $configPath = Join-Path $PSScriptRoot '..\config\deps-overrides.json' } process { $depsPhpVersion = $PhpVersion if ($PhpVersion -ne 'master') { $versionParts = $PhpVersion.Split('.') if ($versionParts.Count -ge 2) { $depsPhpVersion = $versionParts[0..1] -join '.' } } $seriesUrl = "$baseurl/series/packages-$depsPhpVersion-$VsVersion-$Arch-staging.txt" Write-Host "Fetching series listing: $seriesUrl" $series = Invoke-WebRequest -Uri $seriesUrl -UseBasicParsing -ErrorAction Stop $packages = @() if ($series -and $series.Content) { $packages = $series.Content -split "[\r\n]+" | Where-Object { $_ -and $_.Trim().Length -gt 0 } } $overrideLibraries = @() if ((Test-Path -LiteralPath $configPath) -and $PhpVersion -match '^\d+\.\d+\.\d+$') { $config = Get-Content -LiteralPath $configPath -Raw | ConvertFrom-Json $seriesConfigProperty = $config.PSObject.Properties[$depsPhpVersion] if ($null -ne $seriesConfigProperty) { $seriesConfig = $seriesConfigProperty.Value if ([version]$PhpVersion -le [version]$seriesConfig.maxVersion) { foreach ($libraryProperty in $seriesConfig.libraries.PSObject.Properties) { $libraryName = $libraryProperty.Name $overrideConfig = $libraryProperty.Value $package = $null if ($overrideConfig -is [string]) { $package = "$libraryName-$overrideConfig-$VsVersion-$Arch.zip" } elseif ($overrideConfig.PSObject.Properties.Name -contains 'package') { $package = $overrideConfig.package } elseif ($overrideConfig.PSObject.Properties.Name -contains 'version') { $package = "$libraryName-$($overrideConfig.version)-$VsVersion-$Arch.zip" } if ([string]::IsNullOrWhiteSpace($package)) { continue } $overrideLibraries += $libraryName $packagePattern = '^' + [regex]::Escape($libraryName) + '-\d' $packages = $packages | ForEach-Object { if ($_ -match $packagePattern) { $package } else { $_ } } if (-not ($packages -contains $package)) { $packages += $package } } } } } return [PSCustomObject]@{ Packages = @($packages) OverrideLibraries = @($overrideLibraries | Select-Object -Unique) } } } |