Building Open Source PowerShell
Open Source PowerShell is available on several operating systems, that really what’s special about the whole project! To get PowerShell to function on these various systems we need to build (compile) the software in that environment. This is what will produce the actual executable program that is powershell.
To facilitate the build process the PowerShell team has documented how to do this for the currently available platforms, Linux, MacOS and Windows. In this post I want to talk about why this is important, point you to the resources available online to help you build Open Source PowerShell and tell you my experiences building PowerShell on the Windows, macOS and Linux!
Why would one want to build PowerShell?
Well for me, I’m and internals geek and I want to be able to debug running PowerShell code so I can follow the flow of control during program execution. This will enable me to learn the internals of certain commands. A great way to see what’s happening on the inside.
Another reason is perhaps you want to contribute, you yourself can download the code…make a change and submit it to the PowerShell team for review. Pretty cool stuff at the “New Microsoft”. Following these steps you’ll be able to have a functioning environment to develop in.
Getting Started with building PowerShell
In general building complex software projects is not a trivial task, but the PowerShell team has done an exceptional job making this as easy as possible for everyone. The documented build processes leverage PowerShell scripts for installing the appropriate dependencies on your system and then managing the build process itself. At a high level, it’s really five easy steps. For more details on building for your platform, check out the links at the bottom of this post.
- Download the code from GitHub
- Install PowerShell
- Import the build module –
build.psm1 - Install the build dependencies (toolchain setup) with
Start-PSBootStrap - Build PowerShell with
Start-PSBootBuild (once this is finished, you’ll have apowershellexecutable)
My notes on building PowerShell
-
On the Linux side of things, it was VERY easy. The PowerShell team includes installation of all build dependencies and package installation for things like
makeand g++ insideStart-PSBootStrap then built powershell with``Start-PSBootBuild -
Well Windows was pretty easy too, but I had to install a few things manually. First I installed Visual Studio 2015, added the required C++ components, installed Chocolatey, installed
cmake, downloaded the PowerShell source, ranStart-PSBootStrapto get the build dependencies, then built PowerShell withStart-PSBootBuild -
macOS was a little tougher, updated my installation of XCode, I installed Brew, installed
cmake, downloaded the source, ranStart-PSBootStrapto get the build dependencies, then built PowerShell withStart-PSBootBuild. It failed with this error (which has since been corrected) ** ** -
deprecated in macOS 10.12 – syscall(2) is unsupported; please switch to a supported interface. For SYS_kdebug_trace use kdebug_signpost().
[-Werror,-Wdeprecated-declarations]
tid = syscall(SYS_thread_selfid);
^
/usr/include/unistd.h:733:6: note: ‘syscall’ has been explicitly marked deprecated here
int syscall(int, …);
^
-
Basically what’s going on here is there’s a deprecated system call on macOS 10.12 which causes the completion to fail. To get the build to work, I changed the function to just return 0. Doing this will likely break something, so I’m not suggesting you do this. I just did this to get the build to work. I’ve submitted this issue to the PowerShell team via GitHub here.
What’s next?
Well, now that I’m able to get Open Source PowerShell built on three major operating systems I’m going to take some time using debugging techniques on each to see what’s going on under the hood inside of PowerShell when I execute certain commands. And of course, up first…Get-Process;)
**Resources for building Open Source PowerShell **
Here are some resources for you to get started working with the PowerShell Projects.