3 Commits
Author SHA1 Message Date
omgitsalexl ba5120b9de Skips adding Windows Kit dependency files 2026-08-24 19:45:58 -07:00
omgitsalexl 1449bb059b Locates the dumpbin.exe without adding to PATH 2026-08-24 19:20:22 -07:00
omgitsalexl e006bfd613 Added Powershell token 2026-08-24 17:23:22 -07:00
2 changed files with 63 additions and 3 deletions
+1 -1
View File
@@ -18,4 +18,4 @@ runs:
- name: Collect dependencies - name: Collect dependencies
shell: powershell shell: powershell
run: | run: |
"${{ github.action_path }}\collect.ps1" -Executable "${{ inputs.executable }}" -Output "${{ inputs.output }}" & "${{ github.action_path }}\collect.ps1" -Executable "${{ inputs.executable }}" -Output "${{ inputs.output }}"
+62 -2
View File
@@ -14,12 +14,55 @@ if (-not (Test-Path $Executable)) {
New-Item -ItemType Directory -Force -Path $Output | Out-Null New-Item -ItemType Directory -Force -Path $Output | Out-Null
$vswherePath = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
if (-not (Test-Path $vswherePath)) {
throw "Could not locate vswhere.exe. Verify that Visual Studio or Visual Studio Build Tools is installed."
}
$visualStudioPath = & $vswherePath `
-latest `
-products * `
-requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 `
-property installationPath
if (-not $visualStudioPath) {
throw "Could not locate a Visual Studio installation with the MSVC C++ tools installed."
}
$toolsetVersionPath = Join-Path `
$visualStudioPath `
"VC\Auxiliary\Build\Microsoft.VCToolsVersion.default.txt"
if (-not (Test-Path $toolsetVersionPath)) {
throw "Could not locate the MSVC toolset version file."
}
$toolsetVersion = (Get-Content $toolsetVersionPath -Raw).Trim()
$dumpbinPath = Join-Path `
$visualStudioPath `
"VC\Tools\MSVC\$toolsetVersion\bin\Hostx64\x64\dumpbin.exe"
if (-not (Test-Path $dumpbinPath)) {
throw "Could not locate dumpbin.exe at: $dumpbinPath"
}
Write-Host "Using dumpbin: $dumpbinPath"
$windowsDirectories = @( $windowsDirectories = @(
$env:WINDIR, $env:WINDIR,
(Join-Path $env:WINDIR "System32"), (Join-Path $env:WINDIR "System32"),
(Join-Path $env:WINDIR "SysWOW64") (Join-Path $env:WINDIR "SysWOW64")
) )
$windowsKitsDirectories = @(
"${env:ProgramFiles(x86)}\Windows Kits",
"$env:ProgramFiles\Windows Kits"
) | Where-Object {
$_ -and (Test-Path $_)
}
$processed = @{} $processed = @{}
function Test-IsWindowsSystemDll { function Test-IsWindowsSystemDll {
@@ -27,6 +70,10 @@ function Test-IsWindowsSystemDll {
[string]$Name [string]$Name
) )
if ($Name -like "api-ms-win-*.dll") {
return $true
}
foreach ($directory in $windowsDirectories) { foreach ($directory in $windowsDirectories) {
$path = Join-Path $directory $Name $path = Join-Path $directory $Name
@@ -35,6 +82,20 @@ function Test-IsWindowsSystemDll {
} }
} }
foreach ($directory in $windowsKitsDirectories) {
$match = Get-ChildItem `
-Path $directory `
-Filter $Name `
-File `
-Recurse `
-ErrorAction SilentlyContinue |
Select-Object -First 1
if ($match) {
return $true
}
}
return $false return $false
} }
@@ -66,13 +127,12 @@ function Copy-Dependencies {
$binaryDirectory = Split-Path -Parent $Binary $binaryDirectory = Split-Path -Parent $Binary
$dependencies = dumpbin /DEPENDENTS $Binary | $dependencies = & $dumpbinPath /DEPENDENTS $Binary |
Select-String '^\s+.*\.dll$' | Select-String '^\s+.*\.dll$' |
ForEach-Object { $_.Line.Trim() } | ForEach-Object { $_.Line.Trim() } |
Sort-Object -Unique Sort-Object -Unique
foreach ($dll in $dependencies) { foreach ($dll in $dependencies) {
$key = $dll.ToLowerInvariant() $key = $dll.ToLowerInvariant()
if ($processed.ContainsKey($key)) { if ($processed.ContainsKey($key)) {