private/Get-Extension.ps1
function Get-Extension { <# .SYNOPSIS Get the PHP extension. .PARAMETER ExtensionUrl Extension URL .PARAMETER ExtensionRef Extension Reference .PARAMETER BuildDirectory Build directory .PARAMETER LocalSrc Is source local #> [OutputType()] param ( [Parameter(Mandatory = $false, Position=0, HelpMessage='Extension URL')] [string] $ExtensionUrl = '', [Parameter(Mandatory = $false, Position=1, HelpMessage='Extension Reference')] [string] $ExtensionRef = '', [Parameter(Mandatory = $true, Position=2, HelpMessage='Build directory')] [ValidateNotNull()] [ValidateLength(1, [int]::MaxValue)] [string] $BuildDirectory, [Parameter(Mandatory = $true, Position=3, HelpMessage='Is source local')] [ValidateNotNull()] [bool] $LocalSrc = $false ) begin { } process { if($LocalSrc) { $currentDirectory = (Get-Location).Path Copy-Item -Path "$currentDirectory\*" -Destination $BuildDirectory -Recurse -Force } else { Add-StepLog "Fetching extension from $ExtensionUrl" try { if (($null -ne $ExtensionUrl -and $null -ne $ExtensionRef) -and ($ExtensionUrl -ne '' -and $ExtensionRef -ne '')) { Set-Location $BuildDirectory 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 $BuildDirectory Copy-Item -Path "$extension-$ExtensionRef\*" -Destination $BuildDirectory -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 } } } catch { Add-BuildLog cross extension "Failed to fetch extension from $ExtensionUrl" throw } } $patches = $False if($null -ne $extension) { 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) { if($LocalSrc) { throw "No config.w32 found, please make sure you are in the extension source directory and it supports Windows." } else { throw "No config.w32 found, please check if the extension supports Windows." } } $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 } if(-not($LocalSrc)) { Add-BuildLog tick $name "Fetched $name extension" } return $name } end { } } |