mirror of
https://github.com/oven-sh/bun
synced 2026-02-02 15:08:46 +00:00
69 lines
2.2 KiB
PowerShell
Executable File
69 lines
2.2 KiB
PowerShell
Executable File
# Ensures that commands run in a Visual Studio environment.
|
|
# This is required to run commands like cmake and ninja on Windows.
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
# Detect system architecture
|
|
$script:IsARM64 = [System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture -eq [System.Runtime.InteropServices.Architecture]::Arm64
|
|
$script:VsArch = if ($script:IsARM64) { "arm64" } else { "amd64" }
|
|
|
|
if($env:VSINSTALLDIR -eq $null) {
|
|
Write-Host "Loading Visual Studio environment, this may take a second..."
|
|
|
|
$vswhere = "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe"
|
|
if (!(Test-Path $vswhere)) {
|
|
throw "Command not found: vswhere (did you install Visual Studio?)"
|
|
}
|
|
|
|
$vsDir = (& $vswhere -prerelease -latest -property installationPath)
|
|
if ($vsDir -eq $null) {
|
|
$vsDir = Get-ChildItem -Path "C:\Program Files\Microsoft Visual Studio\2022" -Directory
|
|
if ($vsDir -eq $null) {
|
|
throw "Visual Studio directory not found."
|
|
}
|
|
$vsDir = $vsDir.FullName
|
|
}
|
|
|
|
Push-Location $vsDir
|
|
try {
|
|
$vsShell = (Join-Path -Path $vsDir -ChildPath "Common7\Tools\Launch-VsDevShell.ps1")
|
|
. $vsShell -Arch $script:VsArch -HostArch $script:VsArch
|
|
} finally {
|
|
Pop-Location
|
|
}
|
|
}
|
|
|
|
if($env:VSCMD_ARG_TGT_ARCH -eq "x86") {
|
|
throw "Visual Studio environment is targeting 32 bit x86, but only 64-bit architectures (x64/arm64) are supported."
|
|
}
|
|
|
|
if ($args.Count -gt 0) {
|
|
$command = $args[0]
|
|
$commandArgs = @()
|
|
if ($args.Count -gt 1) {
|
|
$commandArgs = @($args[1..($args.Count - 1)] | % {$_})
|
|
}
|
|
|
|
# Don't print the full command as it may contain sensitive information like certificates
|
|
# Just show the command name and basic info
|
|
$displayArgs = @()
|
|
foreach ($arg in $commandArgs) {
|
|
if ($arg -match "^-") {
|
|
# Include flags
|
|
$displayArgs += $arg
|
|
} elseif ($arg -match "\.(mjs|js|ts|cmake|zig|cpp|c|h|exe)$") {
|
|
# Include file names
|
|
$displayArgs += $arg
|
|
} elseif ($arg.Length -gt 100) {
|
|
# Truncate long arguments (likely certificates or encoded data)
|
|
$displayArgs += "[REDACTED]"
|
|
} else {
|
|
$displayArgs += $arg
|
|
}
|
|
}
|
|
|
|
Write-Host "$ $command $displayArgs"
|
|
& $command $commandArgs
|
|
exit $LASTEXITCODE
|
|
}
|