| ## automake - create Makefile.in from Makefile.am |
| ## Copyright (C) 2001, 2003, 2006, 2007, 2008, 2009 Free Software |
| ## Foundation, Inc. |
| |
| ## This program is free software; you can redistribute it and/or modify |
| ## it under the terms of the GNU General Public License as published by |
| ## the Free Software Foundation; either version 2, or (at your option) |
| ## any later version. |
| |
| ## This program is distributed in the hope that it will be useful, |
| ## but WITHOUT ANY WARRANTY; without even the implied warranty of |
| ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| ## GNU General Public License for more details. |
| |
| ## You should have received a copy of the GNU General Public License |
| ## along with this program. If not, see <http://www.gnu.org/licenses/>. |
| |
| if %?COLOR% |
| # If stdout is a non-dumb tty, use colors. If test -t is not supported, |
| # then this fails; a conservative approach. Of course do not redirect |
| # stdout here, just stderr. |
| am__tty_colors = \ |
| red=; grn=; lgn=; blu=; std=; \ |
| test "X$(AM_COLOR_TESTS)" != Xno \ |
| && test "X$$TERM" != Xdumb \ |
| && { test "X$(AM_COLOR_TESTS)" = Xalways || test -t 1 2>/dev/null; } \ |
| && { \ |
| red='[0;31m'; \ |
| grn='[0;32m'; \ |
| lgn='[1;32m'; \ |
| blu='[1;34m'; \ |
| std='[m'; \ |
| } |
| else !%?COLOR% |
| am__tty_colors = \ |
| red=; grn=; lgn=; blu=; std= |
| endif !%?COLOR% |
| |
| .PHONY: check-TESTS |
| |
| if %?PARALLEL_TESTS% |
| |
| include inst-vars.am |
| |
| ## New parallel test driver. |
| ## |
| ## This code is adapted from check.mk which was originally |
| ## written at EPITA/LRDE, further developed at Gostai, then made |
| ## its way from GNU coreutils to end up, largely rewritten, in |
| ## Automake. |
| ## |
| ## It provides special support for "unit tests", that is to say, |
| ## tests that (once run) no longer need to be re-compiled and |
| ## re-run at each "make check", unless their sources changed. To |
| ## enable unit-test supports, set RECHECK_LOGS to empty. In such a |
| ## setting, that heavily relies on correct dependencies, its users may |
| ## prefer to define EXTRA_PROGRAMS instead of check_PROGRAMS, because |
| ## it allows intertwined compilation and execution of the tests. |
| ## Sometimes this helps catching errors earlier (you don't have to |
| ## wait for all the tests to be compiled). |
| ## |
| ## Define TEST_SUITE_LOG to be the name of the global log to create. |
| ## Define TEST_LOGS to the set of logs to include in it. It defaults |
| ## to $(TESTS), with `.test' and `@EXEEXT@' removed, and `'.log' |
| ## appended. |
| ## |
| ## In addition to the magic "exit 77 means SKIP" feature (which was |
| ## imported from automake), there is a magic "exit 99 means FAIL" feature |
| ## which is useful if you need to issue a hard error no matter whether the |
| ## test is XFAIL or not. You can disable this feature by setting the |
| ## variable DISABLE_HARD_ERRORS to a nonempty value. |
| |
| # Restructured Text title and section. |
| am__rst_title = sed 's/.*/ & /;h;s/./=/g;p;x;p;g;p;s/.*//' |
| am__rst_section = sed 'p;s/./=/g;p;g' |
| |
| # Put stdin (possibly several lines separated by ". ") in a box. |
| am__text_box = $(AWK) '{ \ |
| n = split($$0, lines, "\\. "); max = 0; \ |
| for (i = 1; i <= n; ++i) \ |
| if (max < length(lines[i])) \ |
| max = length(lines[i]); \ |
| for (i = 0; i < max; ++i) line = line "="; \ |
| print line; \ |
| for (i = 1; i <= n; ++i) if (lines[i]) print lines[i];\ |
| print line; \ |
| }' |
| |
| # Solaris 10 'make', and several other traditional 'make' implementations, |
| # pass "-e" to $(SHELL). This contradicts POSIX. Work around the problem |
| # by disabling -e (using the XSI extension "set +e") if it's set. |
| am__sh_e_setup = case $$- in *e*) set +e;; esac |
| |
| # To be inserted before the command running the test. Creates the |
| # directory for the log if needed. Stores in $dir the directory |
| # containing $f, in $tst the test, in $log the log, and passes |
| # TESTS_ENVIRONMENT. Save and restore TERM around use of |
| # TESTS_ENVIRONMENT, in case that unsets it. |
| am__check_pre = \ |
| $(am__sh_e_setup); \ |
| $(am__vpath_adj_setup) $(am__vpath_adj) \ |
| srcdir=$(srcdir); export srcdir; \ |
| rm -f $@-t; \ |
| trap 'st=$$?; rm -f '\''$(abs_builddir)/$@-t'\''; (exit $$st); exit $$st' \ |
| 1 2 13 15; \ |
| am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`; \ |
| test "x$$am__odir" = x. || $(MKDIR_P) "$$am__odir" || exit $$?; \ |
| if test -f "./$$f"; then dir=./; \ |
| elif test -f "$$f"; then dir=; \ |
| else dir="$(srcdir)/"; fi; \ |
| tst=$$dir$$f; log='$@'; __SAVED_TERM=$$TERM; \ |
| $(TESTS_ENVIRONMENT) |
| |
| # To be appended to the command running the test. Handle the stdout |
| # and stderr redirection, and catch the exit status. |
| am__check_post = \ |
| >$@-t 2>&1; \ |
| estatus=$$?; \ |
| if test -n '$(DISABLE_HARD_ERRORS)' \ |
| && test $$estatus -eq 99; then \ |
| estatus=1; \ |
| fi; \ |
| TERM=$$__SAVED_TERM; export TERM; \ |
| $(am__tty_colors); \ |
| xfailed=PASS; \ |
| case " $(XFAIL_TESTS) " in \ |
| *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ |
| xfailed=XFAIL;; \ |
| esac; \ |
| case $$estatus:$$xfailed in \ |
| 0:XFAIL) col=$$red; res=XPASS;; \ |
| 0:*) col=$$grn; res=PASS ;; \ |
| 77:*) col=$$blu; res=SKIP ;; \ |
| 99:*) col=$$red; res=FAIL ;; \ |
| *:XFAIL) col=$$lgn; res=XFAIL;; \ |
| *:*) col=$$red; res=FAIL ;; \ |
| esac; \ |
| echo "$${col}$$res$${std}: $$f"; \ |
| echo "$$res: $$f (exit: $$estatus)" | \ |
| $(am__rst_section) >$@; \ |
| cat $@-t >>$@; \ |
| rm -f $@-t |
| |
| $(TEST_SUITE_LOG): $(TEST_LOGS) |
| @$(am__sh_e_setup); \ |
| list='$(TEST_LOGS)'; \ |
| results=`for f in $$list; do \ |
| read line < $$f && echo "$$line" || echo FAIL; \ |
| done`; \ |
| all=`echo "$$results" | sed '/^$$/d' | wc -l | sed -e 's/^[ ]*//'`; \ |
| fail=`echo "$$results" | grep -c '^FAIL'`; \ |
| pass=`echo "$$results" | grep -c '^PASS'`; \ |
| skip=`echo "$$results" | grep -c '^SKIP'`; \ |
| xfail=`echo "$$results" | grep -c '^XFAIL'`; \ |
| xpass=`echo "$$results" | grep -c '^XPASS'`; \ |
| failures=`expr $$fail + $$xpass`; \ |
| all=`expr $$all - $$skip`; \ |
| if test "$$all" -eq 1; then tests=test; All=; \ |
| else tests=tests; All="All "; fi; \ |
| case fail=$$fail:xpass=$$xpass:xfail=$$xfail in \ |
| fail=0:xpass=0:xfail=0) \ |
| msg="$$All$$all $$tests passed. "; \ |
| exit=true;; \ |
| fail=0:xpass=0:xfail=*) \ |
| msg="$$All$$all $$tests behaved as expected"; \ |
| if test "$$xfail" -eq 1; then xfailures=failure; \ |
| else xfailures=failures; fi; \ |
| msg="$$msg ($$xfail expected $$xfailures). "; \ |
| exit=true;; \ |
| fail=*:xpass=0:xfail=*) \ |
| msg="$$fail of $$all $$tests failed. "; \ |
| exit=false;; \ |
| fail=*:xpass=*:xfail=*) \ |
| msg="$$failures of $$all $$tests did not behave as expected"; \ |
| if test "$$xpass" -eq 1; then xpasses=pass; \ |
| else xpasses=passes; fi; \ |
| msg="$$msg ($$xpass unexpected $$xpasses). "; \ |
| exit=false;; \ |
| *) \ |
| echo >&2 "incorrect case"; exit 4;; \ |
| esac; \ |
| if test "$$skip" -ne 0; then \ |
| if test "$$skip" -eq 1; then \ |
| msg="$$msg($$skip test was not run). "; \ |
| else \ |
| msg="$$msg($$skip tests were not run). "; \ |
| fi; \ |
| fi; \ |
| { \ |
| echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ |
| $(am__rst_title); \ |
| echo "$$msg"; \ |
| echo; \ |
| echo ".. contents:: :depth: 2"; \ |
| echo; \ |
| for f in $$list; do \ |
| read line < $$f; \ |
| case $$line in \ |
| PASS:*|XFAIL:*);; \ |
| *) echo; cat $$f;; \ |
| esac; \ |
| done; \ |
| } >$(TEST_SUITE_LOG).tmp; \ |
| mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ |
| if test "$$failures" -ne 0; then \ |
| msg="$${msg}See $(subdir)/$(TEST_SUITE_LOG). "; \ |
| if test -n "$(PACKAGE_BUGREPORT)"; then \ |
| msg="$${msg}Please report to $(PACKAGE_BUGREPORT). "; \ |
| fi; \ |
| fi; \ |
| test x"$$VERBOSE" = x || $$exit || cat $(TEST_SUITE_LOG); \ |
| $(am__tty_colors); \ |
| if $$exit; then \ |
| echo $(ECHO_N) "$$grn$(ECHO_C)"; \ |
| else \ |
| echo $(ECHO_N) "$$red$(ECHO_C)"; \ |
| fi; \ |
| echo "$$msg" | $(am__text_box); \ |
| echo $(ECHO_N) "$$std$(ECHO_C)"; \ |
| $$exit |
| |
| RECHECK_LOGS = $(TEST_LOGS) |
| |
| # Run all the tests. |
| check-TESTS: |
| ## Expand $(RECHECK_LOGS) only once, to avoid exceeding line length limits. |
| @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list |
| ## We always have to remove TEST_SUITE_LOG, to ensure its rule is run |
| ## in any case even in lazy mode: otherwise, if no test needs rerunning, |
| ## or a prior run plus reruns all happen within the same timestamp |
| ## (can happen with a prior `make TESTS=<subset>'), |
| ## then we get no log output. |
| ## OTOH, this means that, in the rule for `$(TEST_SUITE_LOG)', we |
| ## cannot use `$?' to compute the set of lazily rerun tests, lest |
| ## we rely on .PHONY to work portably. |
| @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) |
| @list='$(TEST_LOGS)'; \ |
| list=`for f in $$list; do \ |
| test .log = $$f || echo $$f; \ |
| done | tr '\012\015' ' '`; \ |
| $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$list" |
| |
| AM_RECURSIVE_TARGETS += check |
| |
| ## -------------- ## |
| ## Produce HTML. ## |
| ## -------------- ## |
| |
| .log.html: |
| @list='$(RST2HTML) $$RST2HTML rst2html rst2html.py'; \ |
| for r2h in $$list; do \ |
| if ($$r2h --version) >/dev/null 2>&1; then \ |
| R2H=$$r2h; \ |
| fi; \ |
| done; \ |
| if test -z "$$R2H"; then \ |
| echo >&2 "cannot find rst2html, cannot create $@"; \ |
| exit 2; \ |
| fi; \ |
| $$R2H $< >$@.tmp |
| @mv $@.tmp $@ |
| |
| # Be sure to run check first, and then to convert the result. |
| # Beware of concurrent executions. Run "check" not "check-TESTS", as |
| # check-SCRIPTS and other dependencies are rebuilt by the former only. |
| # And expect check to fail. |
| check-html: |
| @if $(MAKE) $(AM_MAKEFLAGS) check; then \ |
| rv=0; else rv=$$?; \ |
| fi; \ |
| $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_HTML) || exit 4; \ |
| exit $$rv |
| |
| .PHONY: check-html |
| .MAKE: check-html |
| |
| AM_RECURSIVE_TARGETS += check-html |
| |
| ## -------------------- ## |
| ## Rechecking failures. ## |
| ## -------------------- ## |
| |
| ## Rerun all FAILed or XPASSed tests. |
| recheck recheck-html: |
| @target=`echo $@ | sed 's,^re,,'`; \ |
| list='$(TEST_LOGS)'; \ |
| list=`for f in $$list; do \ |
| test -f $$f || continue; \ |
| if read line < $$f; then \ |
| case $$line in FAIL*|XPASS*) echo $$f;; esac; \ |
| else echo $$f; fi; \ |
| done | tr '\012\015' ' '`; \ |
| $(MAKE) $(AM_MAKEFLAGS) $$target AM_MAKEFLAGS='$(AM_MAKEFLAGS) TEST_LOGS="'"$$list"'"' |
| |
| .PHONY: recheck recheck-html |
| .MAKE: recheck recheck-html |
| |
| AM_RECURSIVE_TARGETS += recheck recheck-html |
| |
| else !%?PARALLEL_TESTS% |
| |
| check-TESTS: $(TESTS) |
| @failed=0; all=0; xfail=0; xpass=0; skip=0; \ |
| srcdir=$(srcdir); export srcdir; \ |
| ## Make sure Solaris VPATH-expands all members of this list, even |
| ## the first and the last one; thus the spaces around $(TESTS) |
| list=' $(TESTS) '; \ |
| $(am__tty_colors); \ |
| if test -n "$$list"; then \ |
| for tst in $$list; do \ |
| if test -f ./$$tst; then dir=./; \ |
| ## Note: Solaris 2.7 seems to expand TESTS using VPATH. That's |
| ## why we also try `dir=' |
| elif test -f $$tst; then dir=; \ |
| else dir="$(srcdir)/"; fi; \ |
| if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ |
| ## Success |
| all=`expr $$all + 1`; \ |
| case " $(XFAIL_TESTS) " in \ |
| *[\ \ ]$$tst[\ \ ]*) \ |
| xpass=`expr $$xpass + 1`; \ |
| failed=`expr $$failed + 1`; \ |
| col=$$red; res=XPASS; \ |
| ;; \ |
| *) \ |
| col=$$grn; res=PASS; \ |
| ;; \ |
| esac; \ |
| elif test $$? -ne 77; then \ |
| ## Failure |
| all=`expr $$all + 1`; \ |
| case " $(XFAIL_TESTS) " in \ |
| *[\ \ ]$$tst[\ \ ]*) \ |
| xfail=`expr $$xfail + 1`; \ |
| col=$$lgn; res=XFAIL; \ |
| ;; \ |
| *) \ |
| failed=`expr $$failed + 1`; \ |
| col=$$red; res=FAIL; \ |
| ;; \ |
| esac; \ |
| else \ |
| ## Skipped |
| skip=`expr $$skip + 1`; \ |
| col=$$blu; res=SKIP; \ |
| fi; \ |
| echo "$${col}$$res$${std}: $$tst"; \ |
| done; \ |
| ## Prepare the banner |
| if test "$$all" -eq 1; then \ |
| tests="test"; \ |
| All=""; \ |
| else \ |
| tests="tests"; \ |
| All="All "; \ |
| fi; \ |
| if test "$$failed" -eq 0; then \ |
| if test "$$xfail" -eq 0; then \ |
| banner="$$All$$all $$tests passed"; \ |
| else \ |
| if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ |
| banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ |
| fi; \ |
| else \ |
| if test "$$xpass" -eq 0; then \ |
| banner="$$failed of $$all $$tests failed"; \ |
| else \ |
| if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ |
| banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ |
| fi; \ |
| fi; \ |
| ## DASHES should contain the largest line of the banner. |
| dashes="$$banner"; \ |
| skipped=""; \ |
| if test "$$skip" -ne 0; then \ |
| if test "$$skip" -eq 1; then \ |
| skipped="($$skip test was not run)"; \ |
| else \ |
| skipped="($$skip tests were not run)"; \ |
| fi; \ |
| test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ |
| dashes="$$skipped"; \ |
| fi; \ |
| report=""; \ |
| if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ |
| report="Please report to $(PACKAGE_BUGREPORT)"; \ |
| test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ |
| dashes="$$report"; \ |
| fi; \ |
| dashes=`echo "$$dashes" | sed s/./=/g`; \ |
| if test "$$failed" -eq 0; then \ |
| echo "$$grn$$dashes"; \ |
| else \ |
| echo "$$red$$dashes"; \ |
| fi; \ |
| echo "$$banner"; \ |
| test -z "$$skipped" || echo "$$skipped"; \ |
| test -z "$$report" || echo "$$report"; \ |
| echo "$$dashes$$std"; \ |
| test "$$failed" -eq 0; \ |
| else :; fi |
| |
| endif !%?PARALLEL_TESTS% |