private/Get-Extension.ps1
function Get-Extension { <# .SYNOPSIS Get the PHP extension. .PARAMETER ExtensionUrl Extension URL .PARAMETER ExtensionRef Extension Reference #> [OutputType()] param ( [Parameter(Mandatory = $true, Position=0, HelpMessage='Extension URL')] [string] $ExtensionUrl, [Parameter(Mandatory = $true, Position=1, HelpMessage='Extension Reference')] [string] $ExtensionRef ) begin { } process { Add-StepLog "Fetching extension from $ExtensionUrl" try { if( ($null -eq $ExtensionUrl -or $null -eq $ExtensionRef) -or ($ExtensionUrl -eq '' -or $ExtensionRef -eq '') ) { throw "Both Extension URL and Extension Reference are required." } $currentDirectory = (Get-Location).Path if($null -ne $ExtensionUrl -and $null -ne $ExtensionRef) { if ($ExtensionUrl -like "*pecl.php.net*") { $extension = Split-Path -Path $ExtensionUrl -Leaf try { Get-File -Url "https://pecl.php.net/get/$extension-$ExtensionRef.tgz" -OutFile "$extension-$ExtensionRef.tgz" } catch {} if(-not(Test-Path "$extension-$ExtensionRef.tgz")) { try { Get-File -Url "https://pecl.php.net/get/$($extension.ToUpper())-$ExtensionRef.tgz" -OutFile "$extension-$ExtensionRef.tgz" } catch {} } & tar -xzf "$extension-$ExtensionRef.tgz" -C $currentDirectory Copy-Item -Path "$extension-$ExtensionRef\*" -Destination $currentDirectory -Recurse -Force Remove-Item -Path "$extension-$ExtensionRef" -Recurse -Force } else { if($null -ne $env:AUTH_TOKEN) { $ExtensionUrl = $ExtensionUrl -replace '^https://', "https://${Env:AUTH_TOKEN}@" } git init > $null 2>&1 git remote add origin $ExtensionUrl > $null 2>&1 git fetch --depth=1 origin $ExtensionRef > $null 2>&1 git checkout FETCH_HEAD > $null 2>&1 } } $patches = $False if(Test-Path -PATH $PSScriptRoot\..\patches\$extension.ps1) { if((Get-Content $PSScriptRoot\..\patches\$extension.ps1).Contains('config.w32')) { Add-Patches $extension $patches = $True } } $configW32 = Get-ChildItem (Get-Location).Path -Recurse -Filter "config.w32" -ErrorAction SilentlyContinue if($null -eq $configW32) { throw "No config.w32 found" } $subDirectory = $configW32.DirectoryName if((Get-Location).Path -ne $subDirectory) { Copy-Item -Path "${subDirectory}\*" -Destination $currentDirectory -Recurse -Force Remove-Item -Path $subDirectory -Recurse -Force } $configW32Content = Get-Content -Path "config.w32" $extensionLine = $configW32Content | Select-String -Pattern '\s+(ZEND_)?EXTENSION\(' | Select-Object -Last 1 if($null -eq $extensionLine) { throw "No extension found in config.w32" } $name = ($extensionLine -replace '.*EXTENSION\(([^,]+),.*', '$1') -replace '["'']', '' if($name.Contains('oci8')) { $name = 'oci8_19' } elseif ([string]$configW32Content -match ($([regex]::Escape($name)) + '\s*=\s*["''](.+?)["'']')) { if($matches[1] -ne 'no') { $name = $matches[1] } } if(!$patches) { Add-Patches $name } Add-BuildLog tick $name "Fetched $name extension" return $name } catch { Add-BuildLog cross extension "Failed to fetch extension from $ExtensionUrl" throw } } end { } } |