1# Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler
2# Copyright 2015, Daniel Axtens, IBM Corporation
3# zlib license, see zlib.h
4
5CC=
6CFLAGS=
7EXE=
8SRCDIR=
9SRCTOP=
10LIBNAME=
11TEST_LDFLAGS=-L.. ../$(LIBNAME).a
12WITH_FUZZERS=
13
14COMPATTESTS =
15QEMU_RUN=
16QEMU_VER:=$(shell command -v $(QEMU_RUN) --version 2> /dev/null)
17
18all: oldtests cvetests $(COMPATTESTS) fuzzer ghtests
19
20oldtests: #set by ../configure
21check_cross_dep:
22ifneq (,$(QEMU_RUN))
23ifeq (,$(QEMU_VER))
24	$(error "You need QEMU to run tests on non-native platform")
25endif
26endif
27
28ALL_SRC_FILES := $(wildcard ../*)
29
30# Only check the fuzzer when it is a stand-alone executable.
31ifneq (,$(LIB_FUZZING_ENGINE))
32fuzzer:
33else
34 ifeq (0,$(WITH_FUZZERS))
35fuzzer:
36 else
37fuzzer:
38	@${QEMU_RUN} ../checksum_fuzzer$(EXE) $(ALL_SRC_FILES) && \
39	${QEMU_RUN} ../compress_fuzzer$(EXE) $(ALL_SRC_FILES) && \
40	${QEMU_RUN} ../example_small_fuzzer$(EXE) $(ALL_SRC_FILES) && \
41	${QEMU_RUN} ../example_large_fuzzer$(EXE) $(ALL_SRC_FILES) && \
42	${QEMU_RUN} ../example_flush_fuzzer$(EXE) $(ALL_SRC_FILES) && \
43	${QEMU_RUN} ../example_dict_fuzzer$(EXE) $(ALL_SRC_FILES) && \
44	${QEMU_RUN} ../minigzip_fuzzer$(EXE) $(ALL_SRC_FILES)
45 endif
46endif
47
48teststatic: check_cross_dep
49	@TMPST=tmpst_$$$$; \
50	HELLOST=tmphellost_$$$$; \
51	if echo hello world | ${QEMU_RUN} ../minigzip$(EXE) > $$HELLOST && ${QEMU_RUN} ../minigzip$(EXE) -d < $$HELLOST && ${QEMU_RUN} ../example$(EXE) $$TMPST && ${QEMU_RUN} ../adler32_test$(EXE); then \
52	  echo '		*** zlib test OK ***'; \
53	else \
54	  echo '		*** zlib test FAILED ***'; exit 1; \
55	fi; \
56	rm -f $$TMPST $$HELLOST
57
58testshared: check_cross_dep
59	@LD_LIBRARY_PATH=`pwd`/..:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \
60	LD_LIBRARYN32_PATH=`pwd`/..:$(LD_LIBRARYN32_PATH) ; export LD_LIBRARYN32_PATH; \
61	DYLD_LIBRARY_PATH=`pwd`/..:$(DYLD_LIBRARY_PATH) ; export DYLD_LIBRARY_PATH; \
62	SHLIB_PATH=`pwd`/..:$(SHLIB_PATH) ; export SHLIB_PATH; \
63	TMPSH=tmpsh_$$$$; \
64	HELLOSH=tmphellosh_$$$$; \
65	if echo hello world | ${QEMU_RUN} ../minigzipsh$(EXE) > $$HELLOSH && ${QEMU_RUN} ../minigzipsh$(EXE) -d < $$HELLOSH && ${QEMU_RUN} ../examplesh$(EXE) $$TMPSH && ${QEMU_RUN} ../adler32_testsh$(EXE); then \
66	  echo '		*** zlib shared test OK ***'; \
67	else \
68	  echo '		*** zlib shared test FAILED ***'; exit 1; \
69	fi; \
70	rm -f $$TMPSH $$HELLOSH
71
72cvetests: testCVEinputs
73
74# Tests requiring zlib-ng to be built with --zlib-compat
75compattests: testCVE-2003-0107
76
77testCVEinputs: check_cross_dep
78	@EXE=$(EXE) QEMU_RUN="${QEMU_RUN}" $(SRCDIR)/testCVEinputs.sh
79
80testCVE-2003-0107: CVE-2003-0107$(EXE) check_cross_dep
81	@if ${QEMU_RUN} ./CVE-2003-0107$(EXE); then \
82	  echo '                *** zlib not vulnerable to CVE-2003-0107 ***'; \
83	else \
84	  echo '                *** zlib VULNERABLE to CVE-2003-0107 ***'; exit 1; \
85	fi
86
87CVE-2003-0107.o: $(SRCDIR)/CVE-2003-0107.c
88	$(CC) $(CFLAGS) -I.. -I$(SRCTOP) -c -o $@ $(SRCDIR)/CVE-2003-0107.c
89
90CVE-2003-0107$(EXE): CVE-2003-0107.o
91	$(CC) $(CFLAGS) -o $@ CVE-2003-0107.o $(TEST_LDFLAGS)
92
93.PHONY: ghtests
94ghtests: testGH-361 testGH-364
95
96.PHONY: testGH-361
97testGH-361:
98	$(QEMU_RUN) ../minigzip$(EXE) -4 <$(SRCDIR)/GH-361/test.txt >/dev/null
99
100switchlevels$(EXE): $(SRCDIR)/switchlevels.c
101	$(CC) $(CFLAGS) -I.. -I$(SRCTOP) -o $@ $< $(TEST_LDFLAGS)
102
103.PHONY: testGH-364
104testGH-364: switchlevels$(EXE)
105	$(QEMU_RUN) ./switchlevels$(EXE) 1 5 9 3 <$(SRCDIR)/GH-364/test.bin >/dev/null
106
107clean:
108	rm -f *.o *.gcda *.gcno *.gcov
109	rm -f CVE-2003-0107$(EXE) switchlevels$(EXE)
110
111distclean:
112	rm -f Makefile
113