2016-02-22 00:06:39 +01:00
|
|
|
function Start-PSBuild
|
|
|
|
{
|
|
|
|
param(
|
|
|
|
[switch]$Restore,
|
|
|
|
[string]$Output = "$PSScriptRoot/bin"
|
|
|
|
)
|
|
|
|
|
|
|
|
if (-Not (Get-Command "dotnet" -ErrorAction SilentlyContinue)) {
|
|
|
|
throw "Build dependency 'dotnet' not found in PATH! See: https://dotnet.github.io/getting-started/"
|
|
|
|
}
|
|
|
|
|
|
|
|
$Top = "$PSScriptRoot/src/Microsoft.PowerShell.Linux.Host"
|
|
|
|
if ($Restore -Or -Not (Test-Path "$Top/project.lock.json")) {
|
|
|
|
dotnet restore
|
|
|
|
}
|
|
|
|
|
|
|
|
# TODO: use PowerShell to check OS when available
|
|
|
|
$Runtime = [System.Runtime.InteropServices.RuntimeInformation]
|
|
|
|
$OSPlatform = [System.Runtime.InteropServices.OSPlatform]
|
|
|
|
$Linux = $Runtime::IsOSPlatform($OSPlatform::Linux)
|
|
|
|
$OSX = $Runtime::IsOSPlatform($OSPlatform::OSX)
|
|
|
|
$Windows = $Runtime::IsOSPlatform($OSPlatform::Windows)
|
|
|
|
|
|
|
|
if ($Linux -Or $OSX) {
|
|
|
|
$InstallCommand = if ($Linux) { "apt-get" } elseif ($OSX) { "brew" }
|
|
|
|
foreach ($Dependency in "cmake", "g++") {
|
|
|
|
if (-Not (Get-Command $Dependency -ErrorAction SilentlyContinue)) {
|
|
|
|
throw "Build dependency '$Dependency' not found in PATH! Run '$InstallCommand install $Dependency'"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$Ext = if ($Linux) { "so" } elseif ($OSX) { "dylib" }
|
|
|
|
$Lib = "src/libpsl-native.$Ext"
|
|
|
|
|
|
|
|
Write-Host "Building $Lib"
|
|
|
|
|
|
|
|
pushd "src/libpsl-native"
|
|
|
|
cmake -DCMAKE_BUILD_TYPE=Debug .
|
|
|
|
make -j
|
|
|
|
ctest -V
|
|
|
|
if (-Not (Test-Path $Lib)) { throw "Compilation of $Lib failed" }
|
|
|
|
cp $Lib $Output
|
|
|
|
popd
|
|
|
|
}
|
|
|
|
|
|
|
|
Write-Host "Building PowerShell"
|
|
|
|
|
|
|
|
$Configuration =
|
|
|
|
if ($Linux -Or $OSX) { "Linux" }
|
|
|
|
elseif ($Windows) { "Debug" }
|
|
|
|
|
|
|
|
dotnet publish -o $Output -c $Configuration -f "netstandardapp1.5" $Top
|
|
|
|
}
|
|
|
|
|
2016-02-20 23:35:46 +01:00
|
|
|
function Start-DevPSGitHub
|
2016-02-03 19:53:43 +01:00
|
|
|
{
|
|
|
|
param(
|
|
|
|
[switch]$ZapDisable,
|
|
|
|
[string[]]$ArgumentList = '',
|
|
|
|
[switch]$LoadProfile,
|
2016-02-04 02:25:51 +01:00
|
|
|
[string]$binDir = "$PSScriptRoot\binFull",
|
|
|
|
[switch]$NoNewWindow
|
2016-02-03 19:53:43 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
try
|
|
|
|
{
|
|
|
|
if ($LoadProfile -eq $false)
|
|
|
|
{
|
2016-02-04 02:25:51 +01:00
|
|
|
$ArgumentList = @('-noprofile') + $ArgumentList
|
2016-02-03 19:53:43 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
$env:DEVPATH = $binDir
|
|
|
|
if ($ZapDisable)
|
|
|
|
{
|
2016-02-22 00:06:39 +01:00
|
|
|
$env:COMPLUS_ZapDisable = 1
|
2016-02-03 19:53:43 +01:00
|
|
|
}
|
|
|
|
|
2016-02-22 00:06:39 +01:00
|
|
|
if (-Not (Test-Path $binDir\powershell.exe.config))
|
2016-02-03 19:53:43 +01:00
|
|
|
{
|
|
|
|
$configContents = @"
|
2016-02-22 00:06:39 +01:00
|
|
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
|
|
<configuration>
|
2016-02-03 19:53:43 +01:00
|
|
|
<runtime>
|
|
|
|
<developmentMode developerInstallation="true"/>
|
|
|
|
</runtime>
|
|
|
|
</configuration>
|
|
|
|
"@
|
|
|
|
$configContents | Out-File -Encoding Ascii $binDir\powershell.exe.config
|
|
|
|
}
|
2016-02-22 00:06:39 +01:00
|
|
|
|
|
|
|
# splatting for the win
|
2016-02-04 02:25:51 +01:00
|
|
|
$startProcessArgs = @{
|
|
|
|
FilePath = "$binDir\powershell.exe"
|
|
|
|
ArgumentList = "$ArgumentList"
|
2016-02-22 00:06:39 +01:00
|
|
|
}
|
2016-02-04 22:19:24 +01:00
|
|
|
|
|
|
|
if ($NoNewWindow) {
|
|
|
|
$startProcessArgs.NoNewWindow = $true
|
|
|
|
$startProcessArgs.Wait = $true
|
|
|
|
}
|
2016-02-22 00:06:39 +01:00
|
|
|
|
2016-02-04 02:25:51 +01:00
|
|
|
Start-Process @startProcessArgs
|
2016-02-03 19:53:43 +01:00
|
|
|
}
|
|
|
|
finally
|
|
|
|
{
|
|
|
|
ri env:DEVPATH
|
|
|
|
if ($ZapDisable)
|
|
|
|
{
|
|
|
|
ri env:COMPLUS_ZapDisable
|
|
|
|
}
|
|
|
|
}
|
2016-02-20 23:35:46 +01:00
|
|
|
}
|