Hi Jeff, * Daily, Jeff A wrote on Fri, Apr 15, 2011 at 08:06:56PM CEST: > I'm using automake 1.11.1's 'parallel-tests' test suite capabilities. It's > been fine so far. I even hacked it a little to support launching my MPI > programs. I have some tests that run serially (without MPI) and some that > do: > > TESTS = $(SERIAL_TESTS) $(PARALLEL_TESTS) > LOG_COMPILER = \ > maybe_mpi=`if echo "$(SERIAL_TESTS)" | $(GREP) "$$p" > /dev/null; then echo > ""; else echo "$(MPIEXEC)"; fi`; \ > $$maybe_mpi > > Users run the test suite using something like > > make check MPIEXEC="mpiexec -np 4" > > On one particular platform we don't use MPI but instead have our own process > manager built into each of our programs. This means each program must be > launched by passing command-line arguments such as "-np 4". How can I do > this? I tried: > > LOG_COMPILER = \ > maybe_mpi=`if echo "$(SERIAL_TESTS)" | $(GREP) "$$p" > /dev/null; then echo > ""; else echo "$(MPIEXEC)"; fi`; \ > tst="$$dir$$f -np 4"; \ > $$maybe_mpi
Make that last line eval "$$maybe_mpi" instead. > To make things even harder, I have some test programs which take specific > command-line arguments. I've been leaving them out of the test suite since > I can't figure out how to pass command-line arguments to any tests let alone > individual tests. We should add support for that. Right now your best bet is a wrapper script that transports its options to the programs options. That wrapper script can be part of LOG_COMPILER. If your MPI and non-MPI programs have different suffixes, you could make things simpler; for example: TEST_SUFFIXES = .t .t-mpi T_MPI_LOG_COMPILER = $(MPIEXEC) FWIW, we still go a simpler way and have a wrapper script for each test. It sources a defs scriptlet (generated from $(srcdir)/defs.in) that contains a more-or-less portable shell function to start MPI jobs. The shell function aims to work also with batch schedulers like qsub. Hope that helps. Cheers, Ralf
