Commit 74eff33f8be680e821d9674ab12da3c0b76dad23

Ramsay Jones 2010-02-01T10:39:10

Makefile: Add support for building with MSVC Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>

diff --git a/Makefile b/Makefile
index bd0d32c..a5ab36d 100644
--- a/Makefile
+++ b/Makefile
@@ -18,14 +18,33 @@ libdir=$(prefix)/lib
 
 uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo no')
 
+ifdef MSVC
+	# avoid the MinGW and Cygwin configuration sections
+	uname_S := Windows
+endif
+
 CFLAGS = -g -O2 -Wall
 OS     = unix
 
 EXTRA_SRC =
 EXTRA_OBJ =
 
+AR_OUT=
+CC_OUT=-o # add a space
+
 # Platform specific tweaks
 
+ifeq ($(uname_S),Windows)
+	OS=win32
+	RANLIB = echo
+	CC = cl -nologo
+	AR = lib -nologo
+	CFLAGS = -TC -W3 -RTC1 -Zi -DWIN32 -D_DEBUG -D_LIB
+	AR_OUT=-out:
+	CC_OUT=-Fo
+	NO_VISIBILITY=YesPlease
+endif
+
 ifneq (,$(findstring CYGWIN,$(uname_S)))
 	NO_VISIBILITY=YesPlease
 endif
@@ -74,6 +93,7 @@ all:: $(GIT_LIB)
 clean:
 	rm -f $(GIT_LIB)
 	rm -f libgit2.pc
+	rm -f *.pdb
 	rm -f src/*.o src/sha1/*.o src/unix/*.o src/win32/*.o
 	rm -rf apidocs
 	rm -f *~ src/*~ src/git/*~ src/sha1/*~ src/unix/*~ src/win32/*~
@@ -119,12 +139,12 @@ uninstall:
 	@rmdir $(DESTDIR)/$(prefix)/include/git
 
 .c.o:
-	$(CC) $(ALL_CFLAGS) -c $< -o $@
+	$(CC) $(ALL_CFLAGS) -c $< $(CC_OUT)$@
 
 $(OBJS): $(HDRS)
 $(GIT_LIB): $(OBJS)
 	rm -f $(GIT_LIB)
-	$(AR) $(GIT_LIB) $(OBJS)
+	$(AR) $(AR_OUT)$(GIT_LIB) $(OBJS)
 	$(RANLIB) $(GIT_LIB)
 
 $(TEST_OBJ) $(TEST_EXE) $(TEST_RUN) $(TEST_VAL): $(GIT_LIB)
diff --git a/tests/Makefile b/tests/Makefile
index 6bdfcbc..487addc 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -5,6 +5,11 @@ LD = $(CC)
 
 uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo no')
 
+ifdef MSVC
+	# avoid the MinGW and Cygwin configuration sections
+	uname_S := Windows
+endif
+
 CFLAGS = -g -O2 -Wall
 LIBS   = -L.. -lgit2 -lz
 OS     = unix
@@ -15,8 +20,22 @@ CRYPTO_LIB = -lcrypto
 
 EXTRA_LIBS =
 
+LD_OUT=-o # add a space
+CC_OUT=-o # add a space
+
 # Platform specific tweaks
 
+ifeq ($(uname_S),Windows)
+	CC = cl -nologo
+	LD = link -nologo
+	CFLAGS = -TC -W3 -RTC1 -Zi -DWIN32 -D_DEBUG -D_LIB
+	LD_OUT=-out:
+	CC_OUT=-Fo
+
+	LIBS = ..\\libgit2.a libz.lib wsock32.lib
+	CRYPTO_LIB = libeay32.lib
+endif
+
 ifneq (,$(findstring MINGW,$(uname_S)))
 	OS=win32
 	EXTRA_LIBS += -lwsock32 -lpthread
@@ -50,7 +69,7 @@ ALL_LIBS = $(LIBS) $(EXTRA_LIBS)
 all:: $(TEST_RUN)
 
 clean:
-	rm -f *.o *.exe *.toc
+	rm -f *.o *.exe *.toc *.pdb
 	rm -rf trash-*.exe
 	rm -f *~
 
@@ -59,7 +78,7 @@ test: $(TEST_RUN)
 valgrind: $(TEST_VAL)
 
 .c.o:
-	$(CC) $(ALL_CFLAGS) -c $< -o $@
+	$(CC) $(ALL_CFLAGS) -c $< $(CC_OUT)$@
 
 T_HDR         = test_lib.h test_helpers.h
 T_LIB         = test_lib.o test_helpers.o
@@ -73,19 +92,19 @@ $(patsubst %.exe,%.toc,$(TEST_EXE)): %.toc: %.c
 	mv $@+ $@
 
 $(TEST_OBJ): %.o: %.c
-	$(CC) $(ALL_CFLAGS) -c $< -o $@
+	$(CC) $(ALL_CFLAGS) -c $< $(CC_OUT)$@
 
 $(patsubst %.exe,%_main.o,$(TEST_EXE)): %_main.o: $(HDRS)
 $(patsubst %.exe,%_main.o,$(TEST_EXE)): %_main.o: $(T_MAIN_C)
 $(patsubst %.exe,%_main.o,$(TEST_EXE)): %_main.o: %.toc
 	$(CC) $(ALL_CFLAGS) '-DTEST_TOC="$<"' \
 		-c $(T_MAIN_C) \
-		-o $@
+		$(CC_OUT)$@
 
 $(TEST_EXE): %.exe: $(T_LIB)
 $(TEST_EXE): %.exe: $(GIT_LIB)
 $(TEST_EXE): %.exe: %.o %_main.o
-	$(LD) -o $@ \
+	$(LD) $(LD_OUT)$@ \
 		$(patsubst %.exe,%_main.o,$@) \
 		$(patsubst %.exe,%.o,$@) \
 		$(T_LIB) $(ALL_LIBS)