Jesse Keating <jkeating@xxxxxxxxxx> wrote: > On Saturday 04 November 2006 07:49, Jim Meyering wrote: >> I've just realized there's a better way to write the script above. >> Just compute the name of the program under test from the name of >> the script: >> >> #!/bin/sh >> export PATH=@BUILD_DIR@:/sbin:/usr/sbin:/bin >> prog=${0##*/} >> exec /usr/bin/valgrind -v --suppressions=/tmp/cu-vg --log-fd=3 \ >> --leak-check=full --track-fds=yes --num-callers=15 -- "$prog" "$@" >> >> Now, the only variable is the part marked with @BUILD_DIR@. >> Oh. Also the suppressions file name. > > Wouldn't the reviewer/packager still have to know every binary name produced > and write a script for each? Is there no easier way? In automake-based packages, the list of binary program names is often in the $(bin_PROGRAMS) makefile variable. Knowing that, it should be easy to create the temporary directory and populate it with one copy of the above script for each name. IMHO, that part is not hard. Here's a Bourne shell snippet to extract the names of programs from a coreutils build directory in which you've already run configure: coreutils=$(echo 'spy:;@echo $(all_programs)' | (cd src; make -f Makefile -f - spy | tr -s '\n ' ' ')) The part that will usually require manual intervention is the one where you arrange for the PATH used by "make check" (or whatever else runs their test suite) to have that temporary directory first. This part is probably manual by definition, since any test suite must first ensure that PATH has the build directory before any other -- so it can test what's just been built. Now, we want some other directory to be first, so have to make that PATH setting be conditional on whether we're trying to test via valgrind or not. -------------------- Hey! Maybe there *is* an easier way. Instead of presuming we have to leave just-built binaries where the build process put them, we could replace each with the little valgrind-invoking wrapper script, and move the original binary into a subdirectory. The only drawback is that once you've replaced the binary with the wrapper script, any attempt to do e.g., "make install" will do the wrong thing. But even that isn't a problem: just be sure to run "make clean" after the tests -- or simply remove all of those scripts. For example, move each binary "down" one level, into say, .vg-tmp, then put a copy of this script in its place: #!/bin/sh saved_binaries_dir="${0%/*}/.vg-tmp" export PATH=$saved_binaries_dir:/sbin:/usr/sbin:/bin prog=${0##*/} exec /usr/bin/valgrind -v --suppressions=/tmp/cu-vg \ --log-file-exactly=/tmp/vg-log \ --leak-check=full --track-fds=yes --num-callers=15 -- "$prog" "$@" Then, there's no need to modify Makefiles at all. I've changed to --log-file-exactly=/tmp/vg-log above, so that you don't have to redirect fd-3 -- that would have been too easy to forget, and when you do, the diagnostic is too cryptic. -- Fedora-packaging mailing list Fedora-packaging@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/fedora-packaging