2016-02-22 01:21:04 +01:00
# TODO: use PowerShell to check OS when available
2016-02-22 02:23:43 +01:00
try {
$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 )
} catch [ System.Management.Automation.RuntimeException ] {
$Linux = $false
$OSX = $false
$Windows = $true
}
2016-02-22 01:21:04 +01:00
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/ "
}
2016-02-22 01:21:04 +01:00
New-Item -Force -Type Directory $Output | Out-Null
2016-02-22 00:06:39 +01:00
$Top = " $PSScriptRoot /src/Microsoft.PowerShell.Linux.Host "
if ( $Restore -Or -Not ( Test-Path " $Top /project.lock.json " ) ) {
dotnet restore
}
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-22 01:21:04 +01:00
function Start-PSPackage
{
param (
[ version ] $Version = " 0.1.0 " ,
[ int ] $Iteration = 1
)
if ( $Windows ) { throw " Building Windows packages is not yet supported! " }
if ( -Not ( Get-Command " fpm " -ErrorAction SilentlyContinue ) ) {
throw " Build dependency 'fpm' not found in PATH! See: https://github.com/jordansissel/fpm "
}
Start-PSBuild
Write-Host " Change permissions for packaging "
chmod -R go = u bin
$Output = if ( $Linux ) { " deb " } elseif ( $OSX ) { " osxpkg " }
fpm - -force - -verbose `
- -name " powershell " `
- -version $Version `
- -iteration $Iteration `
- -maintainer " Andrew Schwartzmeyer <andschwa@microsoft.com> " `
- -vendor " Microsoft <mageng@microsoft.com> " `
- -url " https://github.com/PowerShell/PowerShell " `
- -license " Unlicensed " `
- -description " Open PowerShell on .NET Core\nPowerShell is an open-source, cross-platform, scripting language and rich object shell. Built upon .NET Core, it is also a C# REPL.\n " `
- -category " shells " `
- -depends " libunwind8 " `
- -depends " libicu52 " `
- -deb -build -depends " dotnet " `
- -deb -build -depends " cmake " `
- -deb -build -depends " g++ " `
-t $Output `
-s dir `
- - " bin/=/usr/local/share/powershell/ " " package/powershell=/usr/local/bin "
}
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
}