On Mon, Apr 18, 2022 at 11:49 AM Michael Paquier <mich...@paquier.xyz> wrote: > On Sun, Apr 17, 2022 at 10:56:08AM -0400, Andrew Dunstan wrote: > > I don't really think it's Cluster.pm's business to deal with that. It > > takes an install path as given either explicitly or implicitly. > > > > It shouldn't be too hard to get Makefile.global to install valgrind > > wrappers into the tmp_install/bin directory. > > Or what gets used in just a wrapper of the contents of bin/ that get > enforced to be first in PATH?
Delayed response to the question on how I did that, because it was a 4 day weekend down here and I got distracted by sunshine... A horrible slow way to do it is to build with -DUSE_VALGRIND and then just run the whole process tree (eg make, perl, psql, ... and all) under valgrind with --trace-children=yes: tmunro@x1:~/projects/postgresql$ valgrind --quiet --suppressions=`pwd`/src/tools/valgrind.supp --trace-children=yes --track-origins=yes --run-libc-freeres=no --vgdb=no --error-markers=VALGRINDERROR-BEGIN,VALGRINDERROR-END make -C src/test/recovery/ check PROVE_TESTS=t/002_* PROVE_FLAGS=-v I think that sort of thing actually worked when I tried it on a beefier workstation, but it sent my Thinkpad that "only" has a 16GB of RAM into some kind of death spiral. The way I succeeded was indeed using a wrapper script, based on a suggestion from Andres, my kludgy-hardcoded-path-assuming implementation of which looked like: === install-postgres-valgrind, to be run once after building === #!/bin/sh SRC=$HOME/projects/postgresql # move the real binary out of the way mv $SRC/src/backend/postgres $SRC/src/backend/postgres.real # install the wrapper, in the location it'll be copied from for tmp_install cp postgres.valgrind $SRC/src/backend/postgres === === postgres.valgrind wrapper script === #!/bin/sh exec /usr/bin/valgrind \ --quiet \ --error-exitcode=128 \ --suppressions=$HOME/projects/postgresql/src/tools/valgrind.supp \ --trace-children=yes --track-origins=yes --read-var-info=no \ --leak-check=no \ --run-libc-freeres=no \ --vgdb=no \ --error-markers=VALGRINDERROR-BEGIN,VALGRINDERROR-END \ $HOME/projects/postgresql/src/backend/postgres.real \ "$@" === Then just: make -C src/test/recovery/ check PROVE_TESTS=t/002_* PROVE_FLAGS=-v Yeah, it might be quite neat to find a tool-supported way to do that. Tangentially, I'd also like to look into making PostgreSQL-under-Valgrind work on FreeBSD and macOS, which didn't work last time I tried it for reasons that might, I hope, have been fixed on the Valgrind side by now.