Ralf Wildenhues <ralf.wildenh...@gmx.de> writes: > * Simon Josefsson wrote on Tue, May 18, 2010 at 09:36:44AM CEST: >> Ralf Wildenhues writes: >> > Well, one could prepend LOG_COMPILER (the default variable that doesn't >> > go with any specified extension) or have the developer specify some >> > other extension. Your macro could just set some variable that the >> > package author prepends to the needed variables: one of the >> > *LOG_COMPILER ones if parallel-tests is used, and TESTS_ENVIRONMENT >> > otherwise. That would leave the most flexibility, but of course require >> > a bit more work for the package author. >> >> How would this solve the problem of running valgrind on scripts? I'm >> not familiar with the new parallel-tests stuff, but isn't LOG_COMPILER >> applied for all extensions? > > LOG_COMPILER is used for all tests which do not match any of the > extensions given in TEST_EXTENSIONS.
I see. That explains it. >> I don't think I see what advantage your model would give compare to my >> proposal. > > It gives efficiency, as already mentioned elsewhere; and also there is > no need for a different proposal, it works with your proposed patch: > > You would be using something like > TESTS_ENVIRONMENT = $(VALGRIND) > > and I would be using something like > AUTOMAKE_OPTIONS = parallel-tests > TEST_EXTENSIONS = .pl .sh > LOG_COMPILER = $(VALGRIND) > > and maybe also use > TESTS_ENVIRONMENT = VALGRIND='$(VALGRIND)' > > and then, in my shell script tests, prepend $VALGRIND to executables > that are interesting. Sounds good. I've improved the documentation. How about this patch? /Simon >From 79e078df5d62ddd13aa173d1f62c22010f1b3c07 Mon Sep 17 00:00:00 2001 From: Simon Josefsson <si...@josefsson.org> Date: Wed, 19 May 2010 08:41:10 +0200 Subject: [PATCH] valgrind-tests: New module. --- ChangeLog | 8 ++++++++ doc/gnulib.texi | 3 +++ doc/valgrind-tests.texi | 38 ++++++++++++++++++++++++++++++++++++++ m4/valgrind-tests.m4 | 34 ++++++++++++++++++++++++++++++++++ modules/valgrind-tests | 11 +++++++++++ 5 files changed, 94 insertions(+), 0 deletions(-) create mode 100644 doc/valgrind-tests.texi create mode 100644 m4/valgrind-tests.m4 create mode 100644 modules/valgrind-tests diff --git a/ChangeLog b/ChangeLog index 76f0077..090f898 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2010-05-17 Simon Josefsson <si...@josefsson.org> + + * modules/valgrind-tests: New file. + * m4/valgrind-tests.m4: New file. + * doc/valgrind-tests.texi: New file. + * doc/gnulib.texi (Running self-tests under valgrind): New + section. + 2010-05-18 Paolo Bonzini <bonz...@gnu.org> Bruno Haible <br...@clisp.org> diff --git a/doc/gnulib.texi b/doc/gnulib.texi index 62f969e..4cbc9e7 100644 --- a/doc/gnulib.texi +++ b/doc/gnulib.texi @@ -6416,6 +6416,7 @@ This list of functions is sorted according to the header that declares them. * func:: * warnings:: * manywarnings:: +* Running self-tests under valgrind:: @end menu @node alloca @@ -6514,6 +6515,8 @@ generated automatically. @include manywarnings.texi +...@include valgrind-tests.texi + @node GNU Free Documentation License @appendix GNU Free Documentation License diff --git a/doc/valgrind-tests.texi b/doc/valgrind-tests.texi new file mode 100644 index 0000000..e76b2fb --- /dev/null +++ b/doc/valgrind-tests.texi @@ -0,0 +1,38 @@ +...@node Running self-tests under valgrind +...@section Running self-tests under valgrind + +For projects written in C or similar languages, running the self-tests +under Valgrind can reveal hard to find memory issues. The +...@code{valgrind-tests} module searches for Valgrind and declares the +...@code{valgrind} automake variable for use with automake's +...@code{tests_environment}. + +After importing the @code{valgrind-tests} module to your project, you +use it by adding the following to the @code{Makefile.am} that runs the +self-tests: + +...@smallexample +TESTS_ENVIRONMENT = $(VALGRIND) +...@end smallexample + +This will run all self-checks under valgrind. This can be wasteful if +you have many shell scripts or other non-binaries. Using the Automake +parallel-tests feature, this can be avoided by using the following +instead: + +...@smallexample +AUTOMAKE_OPTIONS = parallel-tests +TEST_EXTENSIONS = .pl .sh +LOG_COMPILER = $(VALGRIND) +...@end smallexample + +Then valgrind will only be used for the non-.sh and non-.pl binaries. +However, this means that binaries invoked through scripts will not be +invoked under valgrind, which could be solved by adding the following: + +...@smallexample +TESTS_ENVIRONMENT = VALGRIND='$(VALGRIND)' +...@end smallexample + +And then modify the shell scripts to invoke the binary prefixed with +...@code{$valgrind}. diff --git a/m4/valgrind-tests.m4 b/m4/valgrind-tests.m4 new file mode 100644 index 0000000..e2434c6 --- /dev/null +++ b/m4/valgrind-tests.m4 @@ -0,0 +1,34 @@ +# valgrind-tests.m4 serial 1 +dnl Copyright (C) 2008, 2009, 2010 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, and set VALGRIND to it if available. +AC_DEFUN([gl_VALGRIND_TESTS], +[ + AC_ARG_ENABLE(valgrind-tests, + AS_HELP_STRING([--enable-valgrind-tests], + [run self tests under valgrind]), + [opt_valgrind_tests=$enableval], [opt_valgrind_tests=yes]) + + # Run self-tests under valgrind? + if test "$opt_valgrind_tests" = "yes" && test "$cross_compiling" = no; then + AC_CHECK_PROGS(VALGRIND, valgrind) + fi + + if test -n "$VALGRIND" && $VALGRIND -q true > /dev/null 2>&1; then + opt_valgrind_tests=yes + VALGRIND="$VALGRIND -q" + else + opt_valgrind_tests=no + VALGRIND= + fi + + AC_MSG_CHECKING([whether self tests are run under valgrind]) + AC_MSG_RESULT($opt_valgrind_tests) +]) diff --git a/modules/valgrind-tests b/modules/valgrind-tests new file mode 100644 index 0000000..b9f5682 --- /dev/null +++ b/modules/valgrind-tests @@ -0,0 +1,11 @@ +Description: +Macro to search for valgrind, for self-tests. + +Files: +m4/valgrind-tests.m4 + +License: +unlimited + +Maintainer: +Simon Josefsson -- 1.7.1