Files
libfprint/libfprint/tod/tests/check-library-symbols.sh
T
Marco Trevisan (Treviño) 8e7e5bf710 tests: Add tests to ensure that we don't duplicate symbols in libraries
We have an issue where some symbols are exposed by both the tod library
and the public one, and this may lead to big issues like GType's being
defined multiple times.

So add a test checking whether this is working

See: 3v1n0/libfprint#1
2022-10-13 19:41:39 +02:00

66 lines
1.2 KiB
Bash
Executable File

#!/bin/bash
library1=$1
library2=$2
function cleanup_results() {
grep -F -w '.text' | cut -s -f2 | awk '{print $(NF)}'
}
function dump_exported_symbols() {
objdump -TC "$1" | cleanup_results
}
function dump_defined_symbols() {
objdump -t "$1" | cleanup_results
}
function in_array() {
local target=$1
shift
local i;
for i in "$@"; do
if [[ "$i" == "$target" ]]; then
return 0
fi
done
return 1
}
function is_fatal() {
if [[ "$1" == "fp_"* ]] || [[ "$1" == "fpi_"* ]]; then
return 0
fi
return 1
}
lib1_exported=($(dump_exported_symbols "$library1"))
lib2_exported=($(dump_exported_symbols "$library2"))
lib1_defined=("$(dump_defined_symbols "$library1")")
lib2_defined=("$(dump_defined_symbols "$library2")")
valid=true
for f in ${lib1_exported[*]}; do
if in_array "$f" ${lib2_exported[*]}; then
echo "$f function exported in both $library1 and $library2"
if is_fatal "$f"; then
valid=false
fi
fi
done
for f in ${lib1_defined[*]}; do
if in_array "$f" ${lib2_defined[*]}; then
echo "$f function defined in both $library1 and $library2"
if is_fatal "$f"; then
valid=false
fi
fi
done
[[ "$valid" == true ]] && exit 0