tests: add directio unit tests
[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) -lmultipath -lcmocka
14
15 TESTS := uevent parser util dmevents hwtable blacklist unaligned vpd pgpolicy \
16          alias directio
17
18 .SILENT: $(TESTS:%=%.o)
19 .PRECIOUS: $(TESTS:%=%-test)
20
21 all:    $(TESTS:%=%.out)
22
23 # test-specific linker flags
24 # XYZ-test-TESTDEPS: test libraries containing __wrap_xyz functions
25 # XYZ-test_OBJDEPS: object files from libraries to link in explicitly
26 #    That may be necessary if functions called from the object file are wrapped
27 #    (wrapping works only for symbols which are undefined after processing a
28 #    linker input file).
29 # XYZ-test_LIBDEPS: Additional libs to link for this test
30
31 dmevents-test_LIBDEPS = -lpthread -ldevmapper -lurcu
32 hwtable-test_TESTDEPS := test-lib.o
33 hwtable-test_OBJDEPS := ../libmultipath/discovery.o ../libmultipath/blacklist.o \
34         ../libmultipath/prio.o ../libmultipath/callout.o ../libmultipath/structs.o
35 hwtable-test_LIBDEPS := -ludev -lpthread -ldl
36 blacklist-test_TESTDEPS := test-log.o
37 blacklist-test_OBJDEPS := ../libmultipath/blacklist.o
38 blacklist-test_LIBDEPS := -ludev
39 vpd-test_OBJDEPS :=  ../libmultipath/discovery.o
40 vpd-test_LIBDEPS := -ludev -lpthread -ldl
41 alias-test_TESTDEPS := test-log.o
42 alias-test_LIBDEPS := -lpthread -ldl
43
44 lib/libchecktur.so:
45         mkdir lib
46         ln -t lib ../libmultipath/{checkers,prioritizers,foreign}/*.so
47
48 %.out:  %-test lib/libchecktur.so
49         @echo == running $< ==
50         @LD_LIBRARY_PATH=$(multipathdir):$(mpathcmddir) ./$< >$@
51
52 OBJS = $(TESTS:%=%.o) test-lib.o
53
54 clean: dep_clean
55         $(RM) $(TESTS:%=%-test) $(TESTS:%=%.out) $(OBJS) *.o.wrap
56         $(RM) -rf lib
57
58 .SECONDARY: $(OBJS)
59
60 include $(wildcard $(OBJS:.o=.d))
61
62 dep_clean:
63         $(RM) $(OBJS:.o=.d)
64
65 %.o.wrap:       %.c
66         @sed -n 's/^.*__wrap_\([a-zA-Z0-9_]*\).*$$/-Wl,--wrap=\1/p' $< | \
67                 sort -u | tr '\n' ' ' >$@
68
69
70 # COLON will get expanded during second expansion below
71 COLON:=:
72 .SECONDEXPANSION:
73 %-test: %.o %.o.wrap $$($$@_OBJDEPS) $$($$@_TESTDEPS) $$($$@_TESTDEPS$$(COLON).o=.o.wrap) \
74                 $(multipathdir)/libmultipath.so Makefile
75         $(CC) $(CFLAGS) -o $@ $(LDFLAGS) $< $($@_TESTDEPS) $($@_OBJDEPS) \
76                 $(LIBDEPS) $($@_LIBDEPS) \
77                 $(shell cat $<.wrap) $(foreach dep,$($@_TESTDEPS),$(shell cat $(dep).wrap))