summaryrefslogtreecommitdiff
path: root/m4/valgrind-tests.m4
diff options
context:
space:
mode:
Diffstat (limited to 'm4/valgrind-tests.m4')
-rw-r--r--m4/valgrind-tests.m4103
1 files changed, 103 insertions, 0 deletions
diff --git a/m4/valgrind-tests.m4 b/m4/valgrind-tests.m4
new file mode 100644
index 0000000..a8d5a62
--- /dev/null
+++ b/m4/valgrind-tests.m4
@@ -0,0 +1,103 @@
+# valgrind-tests.m4 serial 8
+dnl Copyright (C) 2008-2022 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Simon Josefsson
+
+# gl_VALGRIND_TESTS()
+# -------------------
+# Check if valgrind is available.
+
+# Sets VALGRIND to command line (including options) to invoke valgrind
+# with, may be used directly in autoconf, makefiles or shell scripts.
+
+# Sets LOG_VALGRIND, suitable for use with LOG_COMPILER, that in
+# Makefile will expand to command line to invoke self-tests with,
+# i.e., LOG_VALGRIND = $(VALGRIND) $(DEFAULT_VALGRINDFLAGS)
+# $(VALGRINDFLAGS) $(AM_VALGRINDFLAGS).
+
+# Whether to look for valgrind and set the variables can be influenced
+# by calling gl_VALGRIND_TESTS_DEFAULT_NO in configure.ac.
+# Regardless, the user can change the choice through the options
+# --enable-valgrind-tests or --disable-valgrind-tests.
+
+# You may modify the VALGRIND, DEFAULT_VALGRINDFLAGS and VALGRINDFLAGS
+# variables before calling this function to override defaults. Either
+# as developer from configure.ac or user on the ./configure command
+# line. You may set the AM_VALGRINDFLAGS in Makefile.am to provide a
+# per-directory additional flag.
+
+AC_DEFUN([gl_VALGRIND_TESTS_DEFAULT_NO],
+[
+ gl_valgrind_tests_default=no
+])
+
+AC_DEFUN_ONCE([gl_VALGRIND_TESTS],
+[
+ AC_ARG_ENABLE([valgrind-tests],
+ AS_HELP_STRING([--disable-valgrind-tests],
+ [don't try to run self tests under valgrind]),
+ [opt_valgrind_tests=$enableval], [opt_valgrind_tests=${gl_valgrind_tests_default:-yes}])
+
+ # Run self-tests under valgrind?
+ if test "$opt_valgrind_tests" = "yes" && test "$cross_compiling" = no; then
+ AC_CHECK_PROGS([VALGRIND], [valgrind])
+
+ # VALGRIND_PROGRAM contains the tool found by AC_CHECK_PROGS. For
+ # backwards compatibility, the VALGRIND variable is later modified
+ # to also include all enabled options. However the new variable
+ # LOG_VALGRIND needs to be able to refer to the valgrind tool
+ # without options, hence it uses this variable.
+ AC_SUBST([VALGRIND_PROGRAM], [$VALGRIND])
+
+ AC_SUBST([DEFAULT_VALGRINDFLAGS])
+ if test -z "$DEFAULT_VALGRINDFLAGS"; then
+ DEFAULT_VALGRINDFLAGS="-q --error-exitcode=1 --leak-check=full"
+ fi
+ AC_ARG_VAR([VALGRINDFLAGS], [Additional flags for Valgrind])
+
+ if test -n "$VALGRIND"; then
+ AC_CACHE_CHECK([for valgrind options for tests],
+ [gl_cv_opt_valgrind_tests],
+ [AS_IF([$VALGRIND $DEFAULT_VALGRINDFLAGS $VALGRINDFLAGS true],
+ [gl_cv_opt_valgrind_tests="$DEFAULT_VALGRINDFLAGS $VALGRINDFLAGS"],
+ [gl_cv_opt_valgrind_tests=no])
+ ])
+ if test "$gl_cv_opt_valgrind_tests" != no; then
+ VALGRIND="$VALGRIND $gl_cv_opt_valgrind_tests"
+ fi
+ fi
+
+ if test -n "$VALGRIND"; then
+ dnl On Ubuntu 16.04, /usr/bin/valgrind works only on 64-bit executables
+ dnl but fails on 32-bit executables (with exit code 1) and on x86_64-x32
+ dnl executables (with exit code 126).
+ AC_CACHE_CHECK([whether valgrind works on executables produced by the compiler],
+ [gl_cv_prog_valgrind_works],
+ [AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[int main () { return 0; }]])],
+ [$VALGRIND $gl_cv_opt_valgrind_tests ./conftest$ac_exeext 2>/dev/null
+ if test $? = 0; then
+ gl_cv_prog_valgrind_works=yes
+ else
+ gl_cv_prog_valgrind_works=no
+ fi
+ ],
+ [gl_cv_prog_valgrind_works=no])
+ ])
+ fi
+
+ AC_SUBST([AM_VALGRINDFLAGS])
+ AC_SUBST([LOG_VALGRIND], ["\$(VALGRIND_PROGRAM) \$(DEFAULT_VALGRINDFLAGS) \$(VALGRINDFLAGS) \$(AM_VALGRINDFLAGS)"])
+
+ if test "$gl_cv_prog_valgrind_works" != yes; then
+ DEFAULT_VALGRINDFLAGS=
+ LOG_VALGRIND=
+ VALGRIND=
+ VALGRINDFLAGS=
+ VALGRIND_PROGRAM=
+ fi
+ fi
+])