cmder/scripts/build.ps1

180 lines
5.9 KiB
PowerShell
Raw Normal View History

2014-02-25 00:33:14 +08:00
<#
.Synopsis
Build Cmder
.DESCRIPTION
Use this script to build your own edition of Cmder
2014-02-25 00:33:14 +08:00
This script builds dependencies from current vendor/sources.json file and unpacks them.
2014-02-25 00:33:14 +08:00
You will need to make this script executable by setting your Powershell Execution Policy to Remote signed
Then unblock the script for execution with UnblockFile .\build.ps1
.EXAMPLE
.\build.ps1
2014-02-25 00:33:14 +08:00
2022-10-18 00:38:37 +08:00
Executes the default build for Cmder; ConEmu, clink. This is equivalent to the "minimum" style package in the releases
.EXAMPLE
.\build.ps1 -Compile
Recompile the launcher executable if you have the requisite build tools for C++ installed.
2022-10-16 20:40:51 +08:00
.EXAMPLE
.\build.ps1 -Compile -NoVendor
Skip all downloads and only build launcher.
.EXAMPLE
.\build -verbose
2014-02-25 00:33:14 +08:00
Execute the build and see what's going on.
.EXAMPLE
.\build.ps1 -SourcesPath '~/custom/vendors.json'
2014-02-25 00:33:14 +08:00
Build cmder with your own packages. See vendor/sources.json for the syntax you need to copy.
.NOTES
AUTHORS
Samuel Vasko, Jack Bennett
Part of the Cmder project.
.LINK
2022-10-15 18:19:02 +08:00
http://cmder.app/ - Project Home
#>
[CmdletBinding(SupportsShouldProcess=$true)]
Param(
# CmdletBinding will give us;
# -verbose switch to turn on logging and
# -whatif switch to not actually make changes
# Path to the vendor configuration source file
2022-09-10 05:17:10 +08:00
[string]$sourcesPath = "$PSScriptRoot\..\vendor\sources.json",
2014-08-27 06:52:49 +08:00
# Vendor folder location
2022-09-10 05:17:10 +08:00
[string]$saveTo = "$PSScriptRoot\..\vendor\",
2014-08-27 06:52:49 +08:00
# Launcher folder location
2022-09-10 05:17:10 +08:00
[string]$launcher = "$PSScriptRoot\..\launcher",
# Config folder location
2022-09-10 05:17:10 +08:00
[string]$config = "$PSScriptRoot\..\config",
# Using this option will skip all downloads, if you only need to build launcher
2022-10-16 20:40:51 +08:00
[switch]$noVendor,
2022-10-16 22:04:57 +08:00
# Build launcher if you have MSBuild tools installed
[switch]$Compile
)
2014-02-25 00:33:14 +08:00
2016-07-18 07:28:38 +08:00
# Get the scripts and cmder root dirs we are building in.
2022-09-10 05:17:10 +08:00
$cmder_root = Resolve-Path "$PSScriptRoot\.."
2016-07-18 07:28:38 +08:00
# Dot source util functions into this scope
2018-03-31 02:53:44 +08:00
. "$PSScriptRoot\utils.ps1"
$ErrorActionPreference = "Stop"
if ($Compile) {
# Check for requirements
Ensure-Executable "msbuild"
# Get the version string
$version = Get-VersionStr
Push-Location -Path $launcher
Create-RC $version ($launcher + '\src\version.rc2')
Write-Verbose "Building the launcher..."
# Referene: https://docs.microsoft.com/visualstudio/msbuild/msbuild-command-line-reference
2022-10-15 00:32:03 +08:00
msbuild CmderLauncher.vcxproj /t:Clean,Build /p:configuration=Release /m
if ($LastExitCode -ne 0) {
throw "MSBuild failed to build the launcher executable."
}
2022-10-16 20:40:51 +08:00
Pop-Location
}
if (-Not $noVendor) {
# Check for requirements
Ensure-Exists $sourcesPath
Ensure-Executable "7z"
# Get the vendor sources
2022-10-18 00:38:37 +08:00
$sources = Get-Content $sourcesPath | Out-String | ConvertFrom-Json
2022-10-16 20:40:51 +08:00
Push-Location -Path $saveTo
New-Item -Type Directory -Path (Join-Path $saveTo "/tmp/") -ErrorAction SilentlyContinue >$null
$vend = $pwd
# Preserve modified (by user) ConEmu setting file
if ($config -ne "") {
$ConEmuXml = Join-Path $saveTo "conemu-maximus5\ConEmu.xml"
if (Test-Path $ConEmuXml -pathType leaf) {
$ConEmuXmlSave = Join-Path $config "ConEmu.xml"
Write-Verbose "Backup '$ConEmuXml' to '$ConEmuXmlSave'"
Copy-Item $ConEmuXml $ConEmuXmlSave
} else { $ConEmuXml = "" }
} else { $ConEmuXml = "" }
# Kill ssh-agent.exe if it is running from the $env:cmder_root we are building
foreach ($ssh_agent in $(Get-Process ssh-agent -ErrorAction SilentlyContinue)) {
if ([string]$($ssh_agent.path) -Match [string]$cmder_root.replace('\','\\')) {
Write-Verbose $("Stopping " + $ssh_agent.path + "!")
Stop-Process $ssh_agent.id
}
}
2022-10-16 20:40:51 +08:00
foreach ($s in $sources) {
Write-Verbose "Getting vendored $($s.name) $($s.version)..."
# We do not care about the extensions/type of archive
$tempArchive = "tmp/$($s.name).tmp"
Delete-Existing $tempArchive
Delete-Existing $s.name
Download-File -Url $s.url -File $vend\$tempArchive -ErrorAction Stop
Extract-Archive $tempArchive $s.name
2022-10-18 01:00:12 +08:00
if ((Get-ChildItem $s.name).Count -eq 1) {
2022-10-16 20:40:51 +08:00
Flatten-Directory($s.name)
2022-10-15 18:19:02 +08:00
}
2022-10-16 20:40:51 +08:00
# Write current version to .cmderver file, for later.
"$($s.version)" | Out-File "$($s.name)/.cmderver"
}
# Restore ConEmu user configuration
if ($ConEmuXml -ne "") {
Write-Verbose "Restore '$ConEmuXmlSave' to '$ConEmuXml'"
Copy-Item $ConEmuXmlSave $ConEmuXml
2018-03-29 00:46:27 +08:00
}
2022-10-16 20:40:51 +08:00
# Put vendor\cmder.sh in /etc/profile.d so it runs when we start bash or mintty
if ( (Test-Path $($saveTo + "git-for-windows/etc/profile.d") ) ) {
Write-Verbose "Adding cmder.sh /etc/profile.d"
Copy-Item $($saveTo + "cmder.sh") $($saveTo + "git-for-windows/etc/profile.d/cmder.sh")
}
# Replace /etc/profile.d/git-prompt.sh with cmder lambda prompt so it runs when we start bash or mintty
if ( !(Test-Path $($saveTo + "git-for-windows/etc/profile.d/git-prompt.sh.bak") ) ) {
Write-Verbose "Replacing /etc/profile.d/git-prompt.sh with our git-prompt.sh"
Move-Item $($saveTo + "git-for-windows/etc/profile.d/git-prompt.sh") $($saveTo + "git-for-windows/etc/profile.d/git-prompt.sh.bak")
Copy-Item $($saveTo + "git-prompt.sh") $($saveTo + "git-for-windows/etc/profile.d/git-prompt.sh")
}
Pop-Location
2022-10-16 20:40:51 +08:00
}
if (-Not $Compile -Or $noVendor) {
Write-Warning "You are not building the full project, Use -Compile without -noVendor"
Write-Warning "This cannot be a release. Test build only!"
2022-10-16 20:40:51 +08:00
return
}
2014-08-27 06:52:49 +08:00
2022-10-16 20:40:51 +08:00
Write-Verbose "Successfully built Cmder v$version!"
if ( $Env:APPVEYOR -eq 'True' ) {
Add-AppveyorMessage -Message "Building Cmder v$version was successful." -Category Information
}
2022-10-16 20:40:51 +08:00
if ( $Env:GITHUB_ACTIONS -eq 'true' ) {
Write-Output "::notice title=Build Complete::Building Cmder v$version was successful."
}
2022-10-15 18:19:02 +08:00
Write-Host -ForegroundColor green "All good and done!"