mirror of
https://github.com/PCRE2Project/pcre2.git
synced 2025-10-15 20:37:00 +08:00

Both the Autoconf and CMake build systems are updated to detect linker support for symbol versioning. Currently, Linux, Solaris, and FreeBSD are tested and working. Windows (COFF) and macOS (Mach-O) have no symbol versioning. There is an Autoconf/CMake flag to opt out of the versioning behaviour.
56 lines
1.8 KiB
PowerShell
56 lines
1.8 KiB
PowerShell
# Script to test that all the symbols of a DLL are as expected.
|
|
|
|
param (
|
|
[Parameter(Mandatory=$true)]
|
|
[string]$inputDir,
|
|
|
|
[Parameter(Mandatory=$true)]
|
|
[string]$manifestDir
|
|
)
|
|
|
|
if ((-not $inputDir) -or (-not $manifestDir)) {
|
|
throw "Usage: .\RunSymbolTest.ps1 <dll_dir> <manifest_dir>"
|
|
}
|
|
|
|
$dllNames = @("pcre2-8", "pcre2-16", "pcre2-32", "pcre2-posix")
|
|
|
|
foreach ($dllName in $dllNames) {
|
|
$expectedFile = Join-Path $manifestDir ("manifest-lib$dllName.so")
|
|
$dllFile = Join-Path $inputDir ("$dllName.dll")
|
|
$base = [System.IO.Path]::GetFileName($expectedFile)
|
|
|
|
# Get path to dumpbin using vswhere
|
|
$vswhere = "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe"
|
|
$dumpbin = & $vswhere -latest -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -find VC\Tools\MSVC\*\bin\Hostx64\x64\dumpbin.exe | Select-Object -First 1
|
|
|
|
$actualSymbols = & $dumpbin /exports $dllFile |
|
|
ForEach-Object {
|
|
if ($_ -match '^\s*\d+\s+[0-9A-Fa-f]+\s+[0-9A-Fa-f]+\s+(\S+)') {
|
|
"T $($matches[1])"
|
|
}
|
|
} |
|
|
Where-Object {
|
|
$_ -match '^T '
|
|
} |
|
|
Sort-Object
|
|
|
|
$actualOutput = ($actualSymbols -join "`n") + "`n"
|
|
$null = New-Item -Force $base -Value $actualOutput
|
|
|
|
$expectedSymbols = (Get-Content -Path $expectedFile -Raw).TrimEnd("`n") |
|
|
ForEach-Object { $_ -replace '@@.*', '' }
|
|
$expectedOutput = ($expectedSymbols -join "`n") + "`n"
|
|
|
|
if ($expectedOutput -ne $actualOutput) {
|
|
Write-Host "Shared object contents for $dllFile differ from expected"
|
|
Write-Host "===Actual==="
|
|
Write-Host $actualOutput
|
|
Write-Host "===End==="
|
|
throw "Symbol test failed"
|
|
} else {
|
|
Write-Host "Shared object contents for $dllFile match expected"
|
|
}
|
|
|
|
Remove-Item -Path $base -Force
|
|
}
|