Skip to content

Instantly share code, notes, and snippets.

@DaveM2011
Last active July 24, 2018 22:40
Show Gist options
  • Save DaveM2011/a18a741ea3d91e89a96bbc58e8d048d3 to your computer and use it in GitHub Desktop.
Save DaveM2011/a18a741ea3d91e89a96bbc58e8d048d3 to your computer and use it in GitHub Desktop.
[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
}
zephir init yournamespace
Write-Output 'All done'
Pause
[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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment