On 01/22/2013 12:09 AM, Karl Berry wrote: > This would require to change the 'check-recursive' targets not to > share the same code with the other '*-recursive' targets. I really > don't want to go there. > > Totally reasonable :). > > The best solution is on the user-side IMHO: fix the build system to > use less (ideally none) make recursion. > > I don't know what you mean. Texinfo has several separate programs, each > with their own tests. Isn't subdirectory recursion the natural way to > do it? How else? > With a non-recursive, top level Makefile. Quick example:
bin_PROGRAMS = old/info old/c-makeinfo old_info_SOURCES = old/info-reader.c old/term.c old_c_makeinfo_SOURCES = old/makeinfo.c bin_SCRIPTS = new/texi2any new/texi2any: new/texi2any.pl rm -f $@ $@-t sed -e 's|@PERL@|$(PERL)|' <new/texi2any.pl >$@-t chmod a+x,a-w $@-t && mv -f $@-t $@ TESTS = \ old/tests/info.test \ old/tests/c-makeinfo.test \ old/tests/known-regression.test \ new/tests/texi2dvi.test \ new/tests/texi2info.test \ new/tests/texi2txt.test The GNU coreutils build system, now (almost) totally non recursive, can be of help there. See in particular the last lines of: <http://git.savannah.gnu.org/gitweb/?p=coreutils.git;a=blob;f=Makefile.am> the "testsuite" Makefile: <http://git.savannah.gnu.org/gitweb/?p=coreutils.git;a=blob;f=tests/local.mk> and the helper makefile for peoples who want to run "make check" from the 'tests/' subdirectory: <http://git.savannah.gnu.org/gitweb/?p=coreutils.git;a=blob;f=tests/GNUmakefile> See also: <http://miller.emu.id.au/pmiller/books/rmch/> <http://www.gnu.org/software/automake/manual/automake.html#Alternative> (yes, I'm noticing the latter is quite inadequate to show examples of a real non-recursive build systems; patches would be welcome). If, after taking a look at those resources, you have more precise questions, I'll be happy to try to answer them. > For that, a "screen scraping" script wrapping the 'make check' invocation > > Yeah. My related idea was that his build script could run something > like > make check || echo "*** tests failed" > or whatever ... > > Thanks, > Karl Regards, Stefano