public/Invoke-PhpBuildExtension.ps1

function Invoke-PhpBuildExtension {
    <#
    .SYNOPSIS
        Build PHP Extension
    .PARAMETER ExtensionUrl
        Extension URL
    .PARAMETER ExtensionRef
        Extension Reference
    .PARAMETER PhpVersion
        PHP Version
    .PARAMETER Arch
        Architecture
    .PARAMETER Ts
        Thread Safety
    .PARAMETER Libraries
        Libraries required by the extension
    .PARAMETER ConfigureArgs
        Additional arguments for the configure script
    #>

    [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='PHP Version')]
        [ValidateNotNull()]
        [ValidateLength(1, [int]::MaxValue)]
        [string] $PhpVersion,
        [Parameter(Mandatory = $true, Position=3, HelpMessage='PHP Architecture')]
        [ValidateNotNull()]
        [ValidateSet('x86', 'x64')]
        [string] $Arch,
        [Parameter(Mandatory = $true, Position=4, HelpMessage='PHP Build Type')]
        [ValidateNotNull()]
        [ValidateSet('nts', 'ts')]
        [string] $Ts,
        [Parameter(Mandatory = $false, Position=5, HelpMessage='Libraries required by the extension')]
        [string] $Libraries = '',
        [Parameter(Mandatory = $false, Position=6, HelpMessage='Additional arguments for the configure script')]
        [string] $Args = ''
    )
    begin {
    }
    process {
        Set-StrictMode -Off
        Set-NetSecurityProtocolType
        $VsData = (Get-VsVersion -PhpVersion $PhpVersion)
        if($null -eq $VsData.vs) {
            throw "PHP version $PhpVersion is not supported."
        }

        if($null -ne $Libraries -and $Libraries -ne '') {
            $env:LIBRARIES = $Libraries
        }

        if($null -ne $Args -and $Args -ne '') {
            $env:CONFIGURE_ARGS = $Args
        }

        $currentDirectory = (Get-Location).Path

        $buildDirectory = Get-BuildDirectory

        $source = Get-ExtensionSource -ExtensionUrl $ExtensionUrl -ExtensionRef $ExtensionRef

        $extension = Get-Extension -ExtensionUrl $source.url -ExtensionRef $source.ref -BuildDirectory $buildDirectory -LocalSrc $source.local

        Set-Location "$buildDirectory"

        $config = Add-BuildRequirements -Extension $extension `
                                        -ExtensionRef $source.ref `
                                        -PhpVersion $PhpVersion `
                                        -Arch $Arch `
                                        -Ts $Ts `
                                        -VsVersion $VsData.vs `
                                        -VsToolset $VsData.toolset

        Invoke-Build -Config $config

        if($env:RUN_TESTS -eq 'true') {
            Invoke-Tests -Config $config
        }

        Add-Package -Config $config

        Set-Location $currentDirectory

        Move-Item -Path "$buildDirectory\artifacts" -Destination "$currentDirectory" -Force
    }
    end {
    }
}