mirror of
https://github.com/microsoft/vcpkg.git
synced 2024-12-29 03:34:26 +08:00
51 lines
1.6 KiB
PowerShell
51 lines
1.6 KiB
PowerShell
[cmdletbinding()]
|
|
param([string]$targetBinary, [string]$installedDir, [string]$tlogFile)
|
|
|
|
$g_searched = @{}
|
|
|
|
function deployBinary([string]$targetBinaryDir, [string]$targetBinaryName) {
|
|
if (Test-Path "$targetBinaryDir\$targetBinaryName") {
|
|
Write-Verbose " ${targetBinaryName}: already present - Only recurse"
|
|
}
|
|
else {
|
|
Copy-Item "$installedDir\$targetBinaryName" $targetBinaryDir
|
|
Write-Verbose " ${targetBinaryName}: Copying $installedDir\$targetBinaryName"
|
|
}
|
|
"$targetBinaryDir\$targetBinaryName"
|
|
if ($tlogFile) { Add-Content $tlogFile "$targetBinaryDir\$targetBinaryName" }
|
|
}
|
|
|
|
function resolve([string]$targetBinary) {
|
|
Write-Verbose "Resolving $targetBinary..."
|
|
try
|
|
{
|
|
$targetBinaryPath = Resolve-Path $targetBinary -erroraction stop
|
|
}
|
|
catch [System.Management.Automation.ItemNotFoundException]
|
|
{
|
|
return
|
|
}
|
|
$targetBinaryDir = Split-Path $targetBinaryPath -parent
|
|
|
|
$a = $(dumpbin /DEPENDENTS $targetBinary | ? { $_ -match "^ [^ ].*\.dll" } | % { $_ -replace "^ ","" })
|
|
$a | % {
|
|
if ([string]::IsNullOrEmpty($_)) {
|
|
return
|
|
}
|
|
if ($g_searched.ContainsKey($_)) {
|
|
Write-Verbose " ${_}: previously searched - Skip"
|
|
return
|
|
}
|
|
$g_searched.Set_Item($_, $true)
|
|
if (Test-Path "$installedDir\$_") {
|
|
deployBinary($targetBinaryDir, $_)
|
|
resolve("$targetBinaryDir\$_")
|
|
} else {
|
|
Write-Verbose " ${_}: $installedDir\$_ not found"
|
|
}
|
|
}
|
|
Write-Verbose "Done Resolving $targetBinary."
|
|
}
|
|
|
|
resolve($targetBinary)
|
|
Write-Verbose $($g_searched | out-string) |