mirror of
https://github.com/PabloMK7/citra.git
synced 2024-11-25 17:04:04 +00:00
70523f68c9
This is done by recursively calling bindump to determine the dependencies of each binary that is required from each of the executables. Doing this allows us to avoid hard-coding a list of required DLL files to copy into the release archives.
39 lines
1.5 KiB
PowerShell
39 lines
1.5 KiB
PowerShell
# Set-up Visual Studio Command Prompt environment for PowerShell
|
|
pushd "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\"
|
|
cmd /c "VsDevCmd.bat -arch=x64 & set" | foreach {
|
|
if ($_ -match "=") {
|
|
$v = $_.split("="); Set-Item -Force -Path "ENV:\$($v[0])" -Value "$($v[1])"
|
|
}
|
|
}
|
|
popd
|
|
|
|
function Which ($search_path, $name) {
|
|
($search_path).Split(";") | Get-ChildItem -Filter $name | Select -First 1 -Exp FullName
|
|
}
|
|
|
|
function GetDeps ($search_path, $binary) {
|
|
((dumpbin /dependents $binary).Where({ $_ -match "dependencies:"}, "SkipUntil") | Select-String "[^ ]*\.dll").Matches | foreach {
|
|
Which $search_path $_.Value
|
|
}
|
|
}
|
|
|
|
function RecursivelyGetDeps ($search_path, $binary) {
|
|
$final_deps = @()
|
|
$deps_to_process = GetDeps $search_path $binary
|
|
while ($deps_to_process.Count -gt 0) {
|
|
$current, $deps_to_process = $deps_to_process
|
|
if ($final_deps -contains $current) { continue }
|
|
|
|
# Is this a system dll file?
|
|
# We use the same algorithm that cmake uses to determine this.
|
|
if ($current -match "$([regex]::Escape($env:SystemRoot))\\sys") { continue }
|
|
if ($current -match "$([regex]::Escape($env:WinDir))\\sys") { continue }
|
|
if ($current -match "\\msvc[^\\]+dll") { continue }
|
|
if ($current -match "\\api-ms-win-[^\\]+dll") { continue }
|
|
|
|
$final_deps += $current
|
|
$new_deps = GetDeps $search_path $current
|
|
$deps_to_process += ($new_deps | ?{-not ($final_deps -contains $_)})
|
|
}
|
|
return $final_deps
|
|
}
|