MSVC: Fix some compiler warnings
[libgit2/raj.git] / Makefile
blob00c5bdc46d8f91dda9f64086347d60c18d1a1f8f
1 all::
3 # Define NO_VISIBILITY if your compiler does not support symbol
4 # visibility in general (and the -fvisibility switch in particular).
7 DOXYGEN = doxygen
8 INSTALL = install
9 RANLIB = ranlib
10 AR = ar cr
12 prefix=/usr/local
13 libdir=$(prefix)/lib
15 uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo no')
17 ifdef MSVC
18 # avoid the MinGW and Cygwin configuration sections
19 uname_S := Windows
20 endif
22 CFLAGS = -g -O2 -Wall
23 OS = unix
25 EXTRA_SRC =
26 EXTRA_OBJ =
27 EXTRA_CFLAGS =
29 AR_OUT=
30 CC_OUT=-o # add a space
32 # Platform specific tweaks
34 ifeq ($(uname_S),Windows)
35 OS=win32
36 RANLIB = echo
37 CC = cl -nologo
38 AR = lib -nologo
39 CFLAGS = -TC -W3 -RTC1 -Zi -DWIN32 -D_DEBUG -D_LIB
40 AR_OUT=-out:
41 CC_OUT=-Fo
42 NO_VISIBILITY=YesPlease
43 endif
45 ifneq (,$(findstring CYGWIN,$(uname_S)))
46 NO_VISIBILITY=YesPlease
47 endif
49 ifneq (,$(findstring MINGW,$(uname_S)))
50 OS=win32
51 NO_VISIBILITY=YesPlease
52 SPARSE_FLAGS=-Wno-one-bit-signed-bitfield
53 endif
55 -include config.mak
57 SRC_C = $(wildcard src/*.c)
58 OS_SRC = $(wildcard src/$(OS)/*.c)
59 SRC_C += $(OS_SRC)
60 OBJS = $(patsubst %.c,%.o,$(SRC_C)) $(EXTRA_OBJ)
61 HDRS = $(wildcard src/*.h)
62 PUBLIC_HEADERS = $(wildcard src/git/*.h)
63 HDRS += $(PUBLIC_HEADERS)
65 GIT_LIB = libgit2.a
67 TEST_OBJ = $(patsubst %.c,%.o,\
68 $(wildcard tests/t[0-9][0-9][0-9][0-9]-*.c))
69 TEST_EXE = $(patsubst %.o,%.exe,$(TEST_OBJ))
70 TEST_RUN = $(patsubst %.exe,%.run,$(TEST_EXE))
71 TEST_VAL = $(patsubst %.exe,%.val,$(TEST_EXE))
73 ifdef PPC_SHA1
74 EXTRA_SRC += src/ppc/sha1.c src/ppc/sha1ppc.S
75 EXTRA_OBJ += src/ppc/sha1.o src/ppc/sha1ppc.o
76 EXTRA_CFLAGS += -DPPC_SHA1
77 else
78 EXTRA_SRC += src/block-sha1/sha1.c
79 EXTRA_OBJ += src/block-sha1/sha1.o
80 endif
82 BASIC_CFLAGS := -Isrc
83 ifndef NO_VISIBILITY
84 BASIC_CFLAGS += -fvisibility=hidden
85 endif
87 ALL_CFLAGS = $(CFLAGS) $(BASIC_CFLAGS) $(EXTRA_CFLAGS)
89 all:: $(GIT_LIB)
91 clean:
92 rm -f $(GIT_LIB)
93 rm -f libgit2.pc
94 rm -f *.pdb
95 rm -f src/*.o src/*/*.o
96 rm -rf apidocs
97 rm -f *~ src/*~ src/git/*~ src/sha1/*~ src/unix/*~ src/win32/*~
98 @$(MAKE) -C tests -s --no-print-directory clean
99 @$(MAKE) -s --no-print-directory cov-clean
101 test-clean:
102 @$(MAKE) -C tests -s --no-print-directory clean
104 apidocs:
105 $(DOXYGEN) api.doxygen
106 cp CONVENTIONS apidocs/
108 test: $(GIT_LIB)
109 @$(MAKE) -C tests --no-print-directory test
111 valgrind: $(GIT_LIB)
112 @$(MAKE) -C tests --no-print-directory valgrind
114 sparse:
115 cgcc -no-compile $(ALL_CFLAGS) $(SPARSE_FLAGS) $(SRC_C)
117 install-headers: $(PUBLIC_HEADERS)
118 @$(INSTALL) -d /tmp/gitinc/git
119 @for i in $^; do cat .HEADER $$i > /tmp/gitinc/$${i##src/}; done
121 install: $(GIT_LIB) $(PUBLIC_HEADERS) libgit2.pc
122 @$(INSTALL) -d $(DESTDIR)/$(prefix)/include/git
123 @for i in $(PUBLIC_HEADERS); do \
124 cat .HEADER $$i > $(DESTDIR)/$(prefix)/include/$${i##src/}; \
125 done
126 @$(INSTALL) -d $(DESTDIR)/$(libdir)
127 @$(INSTALL) $(GIT_LIB) $(DESTDIR)/$(libdir)/libgit2.a
128 @$(INSTALL) -d $(DESTDIR)/$(libdir)/pkgconfig
129 @$(INSTALL) libgit2.pc $(DESTDIR)/$(libdir)/pkgconfig/libgit2.pc
131 uninstall:
132 @rm -f $(DESTDIR)/$(libdir)/libgit2.a
133 @rm -f $(DESTDIR)/$(libdir)/pkgconfig/libgit2.pc
134 @for i in $(PUBLIC_HEADERS); do \
135 rm -f $(DESTDIR)/$(prefix)/include/$${i##src/}; \
136 done
137 @rmdir $(DESTDIR)/$(prefix)/include/git
139 .c.o:
140 $(CC) $(ALL_CFLAGS) -c $< $(CC_OUT)$@
142 .S.o:
143 $(CC) $(ALL_CFLAGS) -c $< $(CC_OUT)$@
145 $(OBJS): $(HDRS)
146 $(GIT_LIB): $(OBJS)
147 rm -f $(GIT_LIB)
148 $(AR) $(AR_OUT)$(GIT_LIB) $(OBJS)
149 $(RANLIB) $(GIT_LIB)
151 $(TEST_OBJ) $(TEST_EXE) $(TEST_RUN) $(TEST_VAL): $(GIT_LIB)
152 @$(MAKE) -C tests --no-print-directory \
153 OS=$(OS) NO_OPENSSL=$(NO_OPENSSL) $(@F)
155 libgit2.pc: libgit2.pc.in
156 sed -e 's#@prefix@#$(prefix)#' -e 's#@libdir@#$(libdir)#' $< > $@
158 .PHONY: all
159 .PHONY: clean
160 .PHONY: test $(TEST_VAL) $(TEST_RUN) $(TEST_EXE) $(TEST_OBJ)
161 .PHONY: apidocs
162 .PHONY: install-headers
163 .PHONY: install uninstall
164 .PHONY: sparse
166 ### Test suite coverage testing
168 .PHONY: coverage cov-clean cov-build cov-report
170 COV_GCDA = $(patsubst %.c,%.gcda,$(SRC_C))
171 COV_GCNO = $(patsubst %.c,%.gcno,$(SRC_C))
173 coverage:
174 @$(MAKE) -s --no-print-directory clean
175 @$(MAKE) --no-print-directory cov-build
176 @$(MAKE) --no-print-directory cov-report
178 cov-clean:
179 rm -f $(COV_GCDA) $(COV_GCNO) *.gcov untested
181 COV_CFLAGS = $(CFLAGS) -O0 -ftest-coverage -fprofile-arcs
183 cov-build:
184 $(MAKE) CFLAGS="$(COV_CFLAGS)" all
185 $(MAKE) TEST_COVERAGE=1 NO_OPENSSL=$(NO_OPENSSL) test
187 cov-report:
188 @echo "--- untested files:" | tee untested
189 @{ for f in $(SRC_C); do \
190 gcda=$$(dirname $$f)"/"$$(basename $$f .c)".gcda"; \
191 if test -f $$gcda; then \
192 gcov -b -p -o $$(dirname $$f) $$f >/dev/null; \
193 else \
194 echo $$f | tee -a untested; \
195 fi; \
196 done; }
197 @rm -f *.h.gcov
198 @echo "--- untested functions:" | tee -a untested
199 @grep '^function .* called 0' *.c.gcov \
200 | sed -e 's/\([^:]*\)\.gcov:function \([^ ]*\) called.*/\1: \2/' \
201 | sed -e 's|#|/|g' | tee -a untested