1# This mimics the top-level Makefile. We do it explicitly here so that this 2# Makefile can operate with or without the kbuild infrastructure. 3CC := $(CROSS_COMPILE)gcc 4 5ifeq (0,$(MAKELEVEL)) 6OUTPUT := $(shell pwd) 7endif 8 9TEST_GEN_PROGS := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_PROGS)) 10TEST_GEN_FILES := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_FILES)) 11 12all: $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES) 13 14.ONESHELL: 15define RUN_TESTS 16 @test_num=`echo 0`; 17 @echo "TAP version 13"; 18 @for TEST in $(1); do \ 19 BASENAME_TEST=`basename $$TEST`; \ 20 test_num=`echo $$test_num+1 | bc`; \ 21 echo "selftests: $$BASENAME_TEST"; \ 22 echo "========================================"; \ 23 if [ ! -x $$BASENAME_TEST ]; then \ 24 echo "selftests: Warning: file $$BASENAME_TEST is not executable, correct this.";\ 25 echo "not ok 1..$$test_num selftests: $$BASENAME_TEST [FAIL]"; \ 26 else \ 27 cd `dirname $$TEST` > /dev/null; (./$$BASENAME_TEST && echo "ok 1..$$test_num selftests: $$BASENAME_TEST [PASS]") || echo "not ok 1..$$test_num selftests: $$BASENAME_TEST [FAIL]"; cd - > /dev/null;\ 28 fi; \ 29 done; 30endef 31 32run_tests: all 33 $(call RUN_TESTS, $(TEST_GEN_PROGS) $(TEST_PROGS)) 34 35define INSTALL_RULE 36 @if [ "X$(TEST_PROGS)$(TEST_PROGS_EXTENDED)$(TEST_FILES)" != "X" ]; then \ 37 mkdir -p ${INSTALL_PATH}; \ 38 echo "rsync -a $(TEST_PROGS) $(TEST_PROGS_EXTENDED) $(TEST_FILES) $(INSTALL_PATH)/"; \ 39 rsync -a $(TEST_PROGS) $(TEST_PROGS_EXTENDED) $(TEST_FILES) $(INSTALL_PATH)/; \ 40 fi 41 @if [ "X$(TEST_GEN_PROGS)$(TEST_GEN_PROGS_EXTENDED)$(TEST_GEN_FILES)" != "X" ]; then \ 42 mkdir -p ${INSTALL_PATH}; \ 43 echo "rsync -a $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES) $(INSTALL_PATH)/"; \ 44 rsync -a $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES) $(INSTALL_PATH)/; \ 45 fi 46endef 47 48install: all 49ifdef INSTALL_PATH 50 $(INSTALL_RULE) 51else 52 $(error Error: set INSTALL_PATH to use install) 53endif 54 55define EMIT_TESTS 56 @for TEST in $(TEST_GEN_PROGS) $(TEST_PROGS); do \ 57 BASENAME_TEST=`basename $$TEST`; \ 58 echo "(./$$BASENAME_TEST && echo \"selftests: $$BASENAME_TEST [PASS]\") || echo \"selftests: $$BASENAME_TEST [FAIL]\""; \ 59 done; 60endef 61 62emit_tests: 63 $(EMIT_TESTS) 64 65define CLEAN 66 $(RM) -r $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES) $(EXTRA_CLEAN) 67endef 68 69clean: 70 $(CLEAN) 71 72$(OUTPUT)/%:%.c 73 $(LINK.c) $^ $(LDLIBS) -o $@ 74 75$(OUTPUT)/%.o:%.S 76 $(COMPILE.S) $^ -o $@ 77 78$(OUTPUT)/%:%.S 79 $(LINK.S) $^ $(LDLIBS) -o $@ 80 81.PHONY: run_tests all clean install emit_tests 82