[PATCH libevdev 4/5] Hook up nm to check for leaking symbols in the static library

Peter Hutterer peter.hutterer at who-t.net
Tue Aug 19 03:24:02 PDT 2014


We ignore anything that starts with an underscore, anything that starts with
libevdev and main (since we test the test-static-link binary) and a couple of
gcov-related functions. This should catch any functions we accidentally
export.

Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
 configure.ac     | 17 ++++++++++++++---
 test/Makefile.am | 22 +++++++++++++++++++++-
 2 files changed, 35 insertions(+), 4 deletions(-)

diff --git a/configure.ac b/configure.ac
index 4781434..bb4bbbb 100644
--- a/configure.ac
+++ b/configure.ac
@@ -125,6 +125,16 @@ AC_MSG_RESULT([$enable_gcov])
 
 AM_PATH_PYTHON([2.6])
 
+# nm to check for leaking symbols in the static library
+AC_PATH_PROG(NM, [nm])
+AM_CONDITIONAL(HAVE_NM, [test "x$NM" != "x"])
+if test "x$NM" == "x"; then
+	AC_MSG_WARN([nm not found - skipping symbol leak test])
+	have_nm="no"
+else
+	have_nm="yes"
+fi
+
 AC_CONFIG_FILES([Makefile
 		 libevdev/Makefile
 		 doc/Makefile
@@ -136,7 +146,8 @@ AC_CONFIG_FILES([Makefile
 AC_OUTPUT
 
 AC_MSG_RESULT([
-	       Build documentation	${have_doxygen}
-	       Build unit-tests		${HAVE_CHECK}
-	       Enable profiling		${enable_gcov}
+	       Build documentation		${have_doxygen}
+	       Build unit-tests			${HAVE_CHECK}
+	       Enable profiling			${enable_gcov}
+	       Static library symbol check	${have_nm}
 	       ])
diff --git a/test/Makefile.am b/test/Makefile.am
index 992ce4f..0781d72 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -119,6 +119,26 @@ endif
 clean-local: gcov-clean
 	rm -f *.gcno *.gcda
 
+if HAVE_NM
+# Hack to check for leaking symbols in the static library.
+# See https://bugs.freedesktop.org/show_bug.cgi?id=82785
+# Note the spaces in the expressions! After the first grep, each line
+# is " T symbol_name"
+static-symbol-leaks: test-static-link
+	$(AM_V_GEN)(\
+		$(NM) --extern-only $(builddir)/test-static-link | \
+			grep -o -e " T .*" | \
+			grep -v -e " main$$" \
+				-e " atexit" \
+				-e " *gcov.*" \
+				-e " _.*" \
+				-e " libevdev_*" && \
+				echo "Leaking symbols found" && \
+				exit 1 || exit 0 \
+	)
+
+check_local_deps += static-symbol-leaks
+endif
+
 check-local: $(check_local_deps)
-
 endif
-- 
1.9.3



More information about the Input-tools mailing list