Valgrind with autotools
helpfully provides the ability to run tests with "make check" - you can give it a list of test programs to run, and it will go through each in turn and check that they exit with a success status (0). However, when running test cases for stuff written in C, it's nice to run them in Valgrind
- that way, you can pick up on any memory leaks or other subtle memory errors that you wouldn't otherwise notice.
Automake allows you to set a variable called "TESTS_ENVIRONMENT" that is prefixed to all your test commands, so you can run your tests in valgrind with something like:
make check TESTS_ENVIRONMENT=valgrind
Unfortunately, this isn't perfect. First of all, it's rather tedious having to type that every time you want to run some tests, and secondly, it doesn't automatically fail in error cases.
So I wrote some automake magic to make it all a bit more streamlined. Firstly, a --enable-valgrind
flag to configure, to run tests with valgrind. It's then a simple matter of tweaking Makefile.am
to set TESTS_ENVIRONMENT when we have valgrind enabled. Finally, a short wrapper script
for valgrind to fail the test on any valgrind error output. I run with the -q (quiet) option to hide the normal valgrind blurb.
One thing that is important is to ensure that the tests are real executables and not magic libtool wrapper scripts (automake does this if you build against a .la file). Valgrind gets confused otherwise.
All in all, fairly straightforward. I guess autotools isn't always such a pain after all.
Syndicated 2008-06-10 00:20:25 from fragglet