[Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls" function Invoke-BatchFile { param([string]$Path, [string]$Parameters) $tempFile = [IO.Path]::GetTempFileName() ## Store the output of cmd.exe. We also ask cmd.exe to output ## the environment table after the batch file completes cmd.exe /c " `"$Path`" $Parameters && set " > $tempFile ## Go through the environment variables in the temp file. ## For each of them, set the variable in our local environment. Get-Content $tempFile | Foreach-Object { if ($_ -match "^(.*?)=(.*)$") { Set-Content "env:\$($matches[1])" $matches[2] } else { $_ } } Remove-Item $tempFile } $Dir = "$pwd" $BuildDir = "..\build" $PhpUrl = "https://windows.php.net/downloads/releases/php-7.2.8-nts-Win32-VC15-x64.zip" $PhpDest = $BuildDir + "\php-7.2.8-nts-Win32-VC15-x64.zip" $PhpDevPackUrl = "https://windows.php.net/downloads/releases/php-devel-pack-7.2.8-nts-Win32-VC15-x64.zip" $PhpDevPackDest = $BuildDir + "\php-devel-pack-7.2.8-nts-Win32-VC15-x64.zip" $ZephirParserUrl = "https://github.com/phalcon/php-zephir-parser/releases/download/v1.1.2/zephir_parser_x64_vc15_php7.2-nts_1.1.2-290.zip" $ZephirParserDest = $BuildDir + "\zephir_parser_x64_vc15_php7.2-nts_1.1.2-290.zip" $Color1 = 'DarkGreen' $Color2 = 'White' #$Color3 = 'Red' #$Color4 = 'Black' If (-Not(Test-Path -PathType Container -Path $BuildDir)) { Write-Host "Creating build directory" -BackgroundColor $Color1 -ForegroundColor $Color2 New-Item -ItemType Directory -Force -Path $BuildDir } else { Write-Host "Build directory exists" -BackgroundColor $Color1 -ForegroundColor $Color2 } If (-Not(Test-Path -PathType Container -Path $BuildDir\php)) { #New-Item -ItemType Directory -Force -Path $BuildDir\php } #get php If (-Not(Test-Path -PathType Container -Path $BuildDir\php)) { Write-Host "Getting PHP" -BackgroundColor $Color1 -ForegroundColor $Color2 Invoke-WebRequest -Uri $PhpUrl -OutFile $PhpDest Microsoft.PowerShell.Archive\Expand-Archive -Path $PhpDest -DestinationPath $BuildDir\php -Force Remove-Item $PhpDest } #get php-sdk If (-Not(Test-Path -PathType Container -Path $BuildDir\php-sdk)) { Write-Host "Cloning PHP-SDK" -BackgroundColor $Color1 -ForegroundColor $Color2 git clone -q https://github.com/Microsoft/php-sdk-binary-tools.git $BuildDir\php-sdk } #get php devpack If (-Not(Test-Path -PathType Container -Path $BuildDir\phpdevel)) { Write-Host "Getting PHP-DEVPACK" -BackgroundColor $Color1 -ForegroundColor $Color2 Invoke-WebRequest -Uri $PhpDevPackUrl -OutFile $PhpDevPackDest Microsoft.PowerShell.Archive\Expand-Archive -Force -Path $PhpDevPackDest -DestinationPath $BuildDir Rename-Item -Path $BuildDir\php-7.2.8-devel-VC15-x64 phpdevel Remove-Item $PhpDevPackDest } #get the zephir parser and extract to ext dir If (-Not(Test-Path -Path $BuildDir\php\ext\php_zephir_parser.dll)) { Write-Host "Getting zephir parser" -BackgroundColor $Color1 -ForegroundColor $Color2 Invoke-WebRequest -Uri $ZephirParserUrl -OutFile $ZephirParserDest Microsoft.PowerShell.Archive\Expand-Archive -Force -Path $ZephirParserDest -DestinationPath $BuildDir\php\ext Remove-Item $ZephirParserDest } #get zephir If (-Not(Test-Path -PathType Container -Path $BuildDir\zephir)) { Write-Host "Cloning zephir" -BackgroundColor $Color1 -ForegroundColor $Color2 git clone -q https://github.com/phalcon/zephir.git $BuildDir\zephir } #set env Write-Host "Setting up enviroment" -BackgroundColor $Color1 -ForegroundColor $Color2 $PathExtra = ";" + $Dir + "\..\build\php;" + $Dir + "\..\build\php-sdk;" + $Dir + "\..\build\phpdevel;" + $Dir + "\..\build\zephir\bin" $env:Path += $PathExtra $env:php_sdk = $Dir + "\" + $BuildDir + "\php-sdk" $env:php_devpack = $Dir + "\" + $BuildDir + "\phpdevel" #x86 build i think #Invoke-BatchFile "${env:ProgramFiles(x86)}\Microsoft Visual Studio\2017\BuildTools\Common7\Tools\VsDevCmd.bat" > $null #x64 build Invoke-BatchFile "${env:ProgramFiles(x86)}\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat" > $null Invoke-BatchFile $BuildDir\php-sdk\bin\phpsdk_setvars.bat > $null Write-Host "Enviroment setup done" -BackgroundColor $Color1 -ForegroundColor $Color2 If (-Not(Test-Path -Path $BuildDir\php\php.ini)) { Write-Host "Setting up php.ini" -BackgroundColor $Color1 -ForegroundColor $Color2 Rename-Item -Path $BuildDir\php\php.ini-development php.ini Add-Content $BuildDir\php\php.ini ' extension_dir = "ext" [Zephir Parser] extension=zephir_parser' #use this to enable default extensions needed for your module u can also add custom ones in the Add-Content above #(Get-Content $BuildDir\php\php.ini) | Foreach-Object {$_ -replace ';extension=curl','extension=curl'} | Foreach-Object {$_ -replace ';extension=intl','extension=intl'} | Foreach-Object {$_ -replace ';extension=mbstring','extension=mbstring'} | Foreach-Object {$_ -replace ';extension=mysqli','extension=mysqli'} | Foreach-Object {$_ -replace ';extension=openssl','extension=openssl'} | Foreach-Object {$_ -replace ';extension=pdo_mysql','extension=pdo_mysql'} | Out-File -Encoding UTF8 $BuildDir\php\php.ini } Write-Host "Building extension" -BackgroundColor Red -ForegroundColor Black $confirmation = Read-Host "Fullclean? [y/N]" If($confirmation -eq "y") { zephir fullclean > $null } zephir build > $null Set-Location -Path ext $Arg = "--enable-" + (Get-Item -Path "..\").Name Invoke-BatchFile configure.bat $Arg > $null nmake > $null Write-Output 'All done' Pause