Rename the README to README.md
[multipath-tools/.git] / tests / Makefile
1 include ../Makefile.inc
2
3 # Test special behavior of gcc 4.8 with nested initializers
4 # gcc 4.8 compiles blacklist.c only with -Wno-missing-field-initializers
5 TEST_MISSING_INITIALIZERS = $(shell \
6         echo 'struct A {int a, b;}; struct B {struct A a; int b;} b = {.a.a=1};' | \
7                 $(CC) -c -Werror -Wmissing-field-initializers -o /dev/null -xc - >/dev/null 2>&1 \
8         || echo -Wno-missing-field-initializers)
9 W_MISSING_INITIALIZERS := $(call TEST_MISSING_INITIALIZERS)
10
11 CFLAGS += $(BIN_CFLAGS) -I$(multipathdir) -I$(mpathcmddir) \
12         -Wno-unused-parameter $(W_MISSING_INITIALIZERS)
13 LIBDEPS += -L$(multipathdir) -L$(mpathcmddir) -lmultipath -lmpathcmd -lcmocka
14
15 TESTS := uevent parser util dmevents hwtable blacklist unaligned vpd pgpolicy \
16          alias directio valid devt
17 HELPERS := test-lib.o test-log.o
18
19 .SILENT: $(TESTS:%=%.o)
20 .PRECIOUS: $(TESTS:%=%-test)
21
22 all:    $(TESTS:%=%.out)
23 valgrind:       $(TESTS:%=%.vgr)
24
25 # test-specific compiler flags
26 # XYZ-test_FLAGS: Additional compiler flags for this test
27
28 ifneq ($(wildcard directio_test_dev),)
29 DIO_TEST_DEV = $(shell sed -n -e 's/^[[:space:]]*DIO_TEST_DEV[[:space:]]*=[[:space:]]*\([^[:space:]\#]\+\).*/\1/p' < directio_test_dev)
30 endif
31 ifneq ($(DIO_TEST_DEV),)
32 directio-test_FLAGS := -DDIO_TEST_DEV=\"$(DIO_TEST_DEV)\"
33 endif
34
35 # test-specific linker flags
36 # XYZ-test_TESTDEPS: test libraries containing __wrap_xyz functions
37 # XYZ-test_OBJDEPS: object files from libraries to link in explicitly
38 #    That may be necessary if functions called from the object file are wrapped
39 #    (wrapping works only for symbols which are undefined after processing a
40 #    linker input file).
41 # XYZ-test_LIBDEPS: Additional libs to link for this test
42
43 dmevents-test_LIBDEPS = -lpthread -ldevmapper -lurcu
44 hwtable-test_TESTDEPS := test-lib.o
45 hwtable-test_OBJDEPS := ../libmultipath/discovery.o ../libmultipath/blacklist.o \
46         ../libmultipath/structs.o
47 hwtable-test_LIBDEPS := -ludev -lpthread -ldl
48 blacklist-test_TESTDEPS := test-log.o
49 blacklist-test_OBJDEPS := ../libmultipath/blacklist.o
50 blacklist-test_LIBDEPS := -ludev
51 vpd-test_OBJDEPS :=  ../libmultipath/discovery.o
52 vpd-test_LIBDEPS := -ludev -lpthread -ldl
53 alias-test_TESTDEPS := test-log.o
54 alias-test_LIBDEPS := -lpthread -ldl
55 valid-test_OBJDEPS := ../libmultipath/valid.o
56 valid-test_LIBDEPS := -ludev -lpthread -ldl
57 devt-test_LIBDEPS := -ludev
58 ifneq ($(DIO_TEST_DEV),)
59 directio-test_LIBDEPS := -laio
60 endif
61
62 %.o: %.c
63         $(CC) $(CFLAGS) $($*-test_FLAGS) -c -o $@ $<
64
65 lib/libchecktur.so:
66         mkdir -p lib
67         ln ../libmultipath/*/*.so lib
68
69 %.out:  %-test lib/libchecktur.so
70         @echo == running $< ==
71         @LD_LIBRARY_PATH=$(multipathdir):$(mpathcmddir) ./$< >$@
72
73 %.vgr:  %-test lib/libchecktur.so
74         @echo == running valgrind for $< ==
75         @LD_LIBRARY_PATH=$(multipathdir):$(mpathcmddir) \
76                 valgrind --leak-check=full --error-exitcode=128 ./$< >$@ 2>&1
77
78 OBJS = $(TESTS:%=%.o) $(HELPERS)
79
80 test_clean:
81         $(RM) $(TESTS:%=%.out) $(TESTS:%=%.vgr)
82
83 valgrind_clean:
84         $(RM) $(TESTS:%=%.vgr)
85
86 clean: test_clean valgrind_clean dep_clean
87         $(RM) $(TESTS:%=%-test) $(OBJS) *.o.wrap
88         $(RM) -rf lib
89
90 .SECONDARY: $(OBJS)
91
92 include $(wildcard $(OBJS:.o=.d))
93
94 dep_clean:
95         $(RM) $(OBJS:.o=.d)
96
97 %.o.wrap:       %.c
98         @sed -n 's/^.*__wrap_\([a-zA-Z0-9_]*\).*$$/-Wl,--wrap=\1/p' $< | \
99                 sort -u | tr '\n' ' ' >$@
100
101
102 # COLON will get expanded during second expansion below
103 COLON:=:
104 .SECONDEXPANSION:
105 %-test: %.o %.o.wrap $$($$@_OBJDEPS) $$($$@_TESTDEPS) $$($$@_TESTDEPS$$(COLON).o=.o.wrap) \
106                 $(multipathdir)/libmultipath.so Makefile
107         $(CC) $(CFLAGS) -o $@ $(LDFLAGS) $< $($@_TESTDEPS) $($@_OBJDEPS) \
108                 $(LIBDEPS) $($@_LIBDEPS) \
109                 $(shell cat $<.wrap) $(foreach dep,$($@_TESTDEPS),$(shell cat $(dep).wrap))