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
This commit is contained in:
Marco Trevisan (Treviño)
2022-10-13 19:38:14 +02:00
parent 4824380f79
commit 8e7e5bf710
2 changed files with 76 additions and 0 deletions
+65
View File
@@ -0,0 +1,65 @@
#!/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
+11
View File
@@ -392,4 +392,15 @@ if get_option('tod')
)
endif
endforeach
if find_program('objdump', required: false).found()
check_libs_symbols = find_program(meson.source_root() /
'libfprint/tod/tests/check-library-symbols.sh')
test('check-tod-lib-sybmbols',
check_libs_symbols,
args: [libfprint.full_path(), libfprint_tod.full_path()],
depends: [libfprint, libfprint_tod],
suite: ['abi-check', tod_suites ],
)
endif
endif