Makefile: Add support for building with MSVC
[libgit2.git] / tests / Makefile
blob487addc854add2a93bfb25f29cd7a5c2ce3bc40f
2 all::
4 LD = $(CC)
6 uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo no')
8 ifdef MSVC
9 # avoid the MinGW and Cygwin configuration sections
10 uname_S := Windows
11 endif
13 CFLAGS = -g -O2 -Wall
14 LIBS = -L.. -lgit2 -lz
15 OS = unix
17 VFLAGS = -q --error-exitcode=1 --leak-check=yes --suppressions=../tests.supp
19 CRYPTO_LIB = -lcrypto
21 EXTRA_LIBS =
23 LD_OUT=-o # add a space
24 CC_OUT=-o # add a space
26 # Platform specific tweaks
28 ifeq ($(uname_S),Windows)
29 CC = cl -nologo
30 LD = link -nologo
31 CFLAGS = -TC -W3 -RTC1 -Zi -DWIN32 -D_DEBUG -D_LIB
32 LD_OUT=-out:
33 CC_OUT=-Fo
35 LIBS = ..\\libgit2.a libz.lib wsock32.lib
36 CRYPTO_LIB = libeay32.lib
37 endif
39 ifneq (,$(findstring MINGW,$(uname_S)))
40 OS=win32
41 EXTRA_LIBS += -lwsock32 -lpthread
42 endif
44 GIT_LIB = ../libgit2.a
46 HDRS = $(wildcard ../src/*.h)
47 PUBLIC_HEADERS = $(wildcard ../src/git/*.h)
48 HDRS += $(PUBLIC_HEADERS)
50 TEST_OBJ = $(patsubst %.c,%.o,\
51 $(wildcard t[0-9][0-9][0-9][0-9]-*.c))
52 TEST_EXE = $(patsubst %.o,%.exe,$(TEST_OBJ))
53 TEST_RUN = $(patsubst %.exe,%.run,$(TEST_EXE))
54 TEST_VAL = $(patsubst %.exe,%.val,$(TEST_EXE))
56 ifdef TEST_COVERAGE
57 EXTRA_LIBS += -O0 -lgcov
58 endif
60 ifndef NO_OPENSSL
61 EXTRA_LIBS += $(CRYPTO_LIB)
62 endif
64 BASIC_CFLAGS := -I../src
66 ALL_CFLAGS = $(CFLAGS) $(BASIC_CFLAGS)
67 ALL_LIBS = $(LIBS) $(EXTRA_LIBS)
69 all:: $(TEST_RUN)
71 clean:
72 rm -f *.o *.exe *.toc *.pdb
73 rm -rf trash-*.exe
74 rm -f *~
76 test: $(TEST_RUN)
78 valgrind: $(TEST_VAL)
80 .c.o:
81 $(CC) $(ALL_CFLAGS) -c $< $(CC_OUT)$@
83 T_HDR = test_lib.h test_helpers.h
84 T_LIB = test_lib.o test_helpers.o
85 T_MAIN_C = test_main.c
87 $(T_LIB): $(T_HDR) $(HDRS)
88 $(TEST_OBJ): $(T_HDR) $(HDRS)
90 $(patsubst %.exe,%.toc,$(TEST_EXE)): %.toc: %.c
91 grep BEGIN_TEST $< >$@+
92 mv $@+ $@
94 $(TEST_OBJ): %.o: %.c
95 $(CC) $(ALL_CFLAGS) -c $< $(CC_OUT)$@
97 $(patsubst %.exe,%_main.o,$(TEST_EXE)): %_main.o: $(HDRS)
98 $(patsubst %.exe,%_main.o,$(TEST_EXE)): %_main.o: $(T_MAIN_C)
99 $(patsubst %.exe,%_main.o,$(TEST_EXE)): %_main.o: %.toc
100 $(CC) $(ALL_CFLAGS) '-DTEST_TOC="$<"' \
101 -c $(T_MAIN_C) \
102 $(CC_OUT)$@
104 $(TEST_EXE): %.exe: $(T_LIB)
105 $(TEST_EXE): %.exe: $(GIT_LIB)
106 $(TEST_EXE): %.exe: %.o %_main.o
107 $(LD) $(LD_OUT)$@ \
108 $(patsubst %.exe,%_main.o,$@) \
109 $(patsubst %.exe,%.o,$@) \
110 $(T_LIB) $(ALL_LIBS)
112 $(TEST_RUN): %.run: %.exe
113 @t=trash-$(<F) && \
114 mkdir $$t && \
115 if (cd $$t && ../$<); \
116 then rm -rf $$t; \
117 else rmdir $$t; exit 1; \
120 $(TEST_VAL): %.val: %.exe
121 @t=trash-$(<F) && \
122 mkdir $$t && \
123 if (cd $$t && valgrind $(VFLAGS) ../$<); \
124 then rm -rf $$t; \
125 else rmdir $$t; exit 1; \
128 .PHONY: all
129 .PHONY: clean
130 .PHONY: test $(TEST_RUN)
131 .PHONY: $(TEST_VAL)