| 1 | # Run tests |
| 2 | # |
| 3 | # Copyright (c) 2005 Junio C Hamano |
| 4 | # |
| 5 | |
| 6 | # The default target of this Makefile is... |
| 7 | all:: |
| 8 | |
| 9 | -include ../../../config.mak.autogen |
| 10 | -include ../../../config.mak |
| 11 | |
| 12 | #GIT_TEST_OPTS=--verbose --debug |
| 13 | SHELL_PATH ?= $(SHELL) |
| 14 | PERL_PATH ?= /usr/bin/perl |
| 15 | TAR ?= $(TAR) |
| 16 | RM ?= rm -f |
| 17 | PROVE ?= prove |
| 18 | DEFAULT_TEST_TARGET ?= test |
| 19 | TEST_LINT ?= test-lint |
| 20 | |
| 21 | ifdef TEST_OUTPUT_DIRECTORY |
| 22 | TEST_RESULTS_DIRECTORY = $(TEST_OUTPUT_DIRECTORY)/test-results |
| 23 | else |
| 24 | TEST_RESULTS_DIRECTORY = ../../../t/test-results |
| 25 | endif |
| 26 | |
| 27 | # Shell quote; |
| 28 | SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH)) |
| 29 | PERL_PATH_SQ = $(subst ','\'',$(PERL_PATH)) |
| 30 | TEST_RESULTS_DIRECTORY_SQ = $(subst ','\'',$(TEST_RESULTS_DIRECTORY)) |
| 31 | |
| 32 | T = $(sort $(wildcard t[0-9][0-9][0-9][0-9]-*.sh)) |
| 33 | TSVN = $(sort $(wildcard t91[0-9][0-9]-*.sh)) |
| 34 | TGITWEB = $(sort $(wildcard t95[0-9][0-9]-*.sh)) |
| 35 | THELPERS = $(sort $(filter-out $(T),$(wildcard *.sh))) |
| 36 | |
| 37 | all:: $(DEFAULT_TEST_TARGET) |
| 38 | |
| 39 | test: pre-clean $(TEST_LINT) |
| 40 | $(MAKE) aggregate-results-and-cleanup |
| 41 | |
| 42 | prove: pre-clean $(TEST_LINT) |
| 43 | @echo "*** prove ***"; GIT_CONFIG=.git/config $(PROVE) --exec '$(SHELL_PATH_SQ)' $(GIT_PROVE_OPTS) $(T) :: $(GIT_TEST_OPTS) |
| 44 | $(MAKE) clean-except-prove-cache |
| 45 | |
| 46 | $(T): |
| 47 | @echo "*** $@ ***"; GIT_CONFIG=.git/config '$(SHELL_PATH_SQ)' $@ $(GIT_TEST_OPTS) |
| 48 | |
| 49 | pre-clean: |
| 50 | $(RM) -r '$(TEST_RESULTS_DIRECTORY_SQ)' |
| 51 | |
| 52 | clean-except-prove-cache: |
| 53 | $(RM) -r 'trash directory'.* |
| 54 | $(RM) -r valgrind/bin |
| 55 | |
| 56 | clean: clean-except-prove-cache |
| 57 | $(RM) -r '$(TEST_RESULTS_DIRECTORY_SQ)' |
| 58 | $(RM) .prove |
| 59 | |
| 60 | test-lint: test-lint-duplicates test-lint-executable test-lint-shell-syntax |
| 61 | |
| 62 | test-lint-duplicates: |
| 63 | @dups=`echo $(T) | tr ' ' '\n' | sed 's/-.*//' | sort | uniq -d` && \ |
| 64 | test -z "$$dups" || { \ |
| 65 | echo >&2 "duplicate test numbers:" $$dups; exit 1; } |
| 66 | |
| 67 | test-lint-executable: |
| 68 | @bad=`for i in $(T); do test -x "$$i" || echo $$i; done` && \ |
| 69 | test -z "$$bad" || { \ |
| 70 | echo >&2 "non-executable tests:" $$bad; exit 1; } |
| 71 | |
| 72 | test-lint-shell-syntax: |
| 73 | @'$(PERL_PATH_SQ)' ../../../t/check-non-portable-shell.pl $(T) $(THELPERS) |
| 74 | |
| 75 | aggregate-results-and-cleanup: $(T) |
| 76 | $(MAKE) aggregate-results |
| 77 | $(MAKE) clean |
| 78 | |
| 79 | aggregate-results: |
| 80 | @'$(SHELL_PATH_SQ)' ../../../t/aggregate-results.sh '$(TEST_RESULTS_DIRECTORY_SQ)' |
| 81 | |
| 82 | valgrind: |
| 83 | $(MAKE) GIT_TEST_OPTS="$(GIT_TEST_OPTS) --valgrind" |
| 84 | |
| 85 | test-results: |
| 86 | mkdir -p test-results |
| 87 | |
| 88 | .PHONY: pre-clean $(T) aggregate-results clean valgrind |