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 = Get-File -Url $seriesUrl $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) } } } |