From 1ba5712f8823a3cb587cb75d2053a16daa9cdfe6 Mon Sep 17 00:00:00 2001 From: Guenter Knauf Date: Tue, 3 Jul 2012 12:56:41 +0200 Subject: [PATCH] MinGW makefile tweaks for running from sh. Added function macros to make path converting easier. Added CROSSPREFIX to all compile tools. --- docs/examples/Makefile.m32 | 59 ++++++++++++++++++++++++------ lib/Makefile.m32 | 74 +++++++++++++++++++++++++------------- src/Makefile.m32 | 63 ++++++++++++++++++++++---------- 3 files changed, 142 insertions(+), 54 deletions(-) diff --git a/docs/examples/Makefile.m32 b/docs/examples/Makefile.m32 index 3387c9283..c1db6207a 100644 --- a/docs/examples/Makefile.m32 +++ b/docs/examples/Makefile.m32 @@ -75,19 +75,44 @@ ifndef ARCH ARCH = w32 endif -CC = gcc -CFLAGS = -g -O2 -Wall -CFLAGS += -fno-strict-aliasing +CC = $(CROSSPREFIX)gcc +CFLAGS = -g -O2 -Wall +CFLAGS += -fno-strict-aliasing ifeq ($(ARCH),w64) -CFLAGS += -D_AMD64_ +CFLAGS += -D_AMD64_ endif # comment LDFLAGS below to keep debug info -LDFLAGS = -s -RC = windres -RCFLAGS = --include-dir=$(PROOT)/include -O COFF -i +LDFLAGS = -s +RC = $(CROSSPREFIX)windres +RCFLAGS = --include-dir=$(PROOT)/include -O COFF -i -RM = del /q /f 2>NUL -CP = copy +# Platform-dependent helper tool macros +ifeq ($(findstring /sh,$(SHELL)),/sh) +DEL = rm -f $1 +RMDIR = rm -fr $1 +MKDIR = mkdir -p $1 +COPY = -cp -afv $1 $2 +#COPYR = -cp -afr $1/* $2 +COPYR = -rsync -aC $1/* $2 +TOUCH = touch $1 +CAT = cat +ECHONL = echo "" +DL = ' +else +ifeq "$(OS)" "Windows_NT" +DEL = -del 2>NUL /q /f $(subst /,\,$1) +RMDIR = -rd 2>NUL /q /s $(subst /,\,$1) +else +DEL = -del 2>NUL $(subst /,\,$1) +RMDIR = -deltree 2>NUL /y $(subst /,\,$1) +endif +MKDIR = -md 2>NUL $(subst /,\,$1) +COPY = -copy 2>NUL /y $(subst /,\,$1) $(subst /,\,$2) +COPYR = -xcopy 2>NUL /q /y /e $(subst /,\,$1) $(subst /,\,$2) +TOUCH = copy 2>&1>NUL /b $(subst /,\,$1) +,, +CAT = type +ECHONL = $(ComSpec) /c echo. +endif ######################################################## ## Nothing more to do below this line! @@ -132,6 +157,13 @@ endif ifeq ($(findstring -ipv6,$(CFG)),-ipv6) IPV6 = 1 endif +ifeq ($(findstring -metalink,$(CFG)),-metalink) +METALINK = 1 +endif +ifeq ($(findstring -winssl,$(CFG)),-winssl) +SCHANNEL = 1 +SSPI = 1 +endif INCLUDES = -I. -I$(PROOT) -I$(PROOT)/include -I$(PROOT)/lib @@ -194,6 +226,9 @@ endif endif ifdef SSPI CFLAGS += -DUSE_WINDOWS_SSPI + ifdef SCHANNEL + CFLAGS += -DUSE_SCHANNEL + endif endif ifdef SPNEGO CFLAGS += -DHAVE_SPNEGO @@ -225,6 +260,8 @@ include Makefile.inc check_PROGRAMS := $(patsubst %,%.exe,$(strip $(check_PROGRAMS))) check_PROGRAMS += ftpuploadresume.exe synctime.exe +.PRECIOUS: %.o + all: $(check_PROGRAMS) @@ -238,8 +275,8 @@ all: $(check_PROGRAMS) $(RC) $(RCFLAGS) $< -o $@ clean: - -$(RM) $(check_PROGRAMS:.exe=.o) + @$(call DEL, $(check_PROGRAMS:.exe=.o)) distclean vclean: clean - -$(RM) $(check_PROGRAMS) + @$(call DEL, $(check_PROGRAMS)) diff --git a/lib/Makefile.m32 b/lib/Makefile.m32 index 809612b82..050c004b5 100644 --- a/lib/Makefile.m32 +++ b/lib/Makefile.m32 @@ -55,22 +55,47 @@ ifndef ARCH ARCH = w32 endif -CC = gcc -CFLAGS = -g -O2 -Wall -CFLAGS += -fno-strict-aliasing +CC = $(CROSSPREFIX)gcc +CFLAGS = -g -O2 -Wall +CFLAGS += -fno-strict-aliasing ifeq ($(ARCH),w64) -CFLAGS += -D_AMD64_ +CFLAGS += -D_AMD64_ endif # comment LDFLAGS below to keep debug info -LDFLAGS = -s -AR = ar -RANLIB = ranlib -RC = windres -RCFLAGS = --include-dir=$(PROOT)/include -DDEBUGBUILD=0 -O COFF -i -STRIP = strip -g +LDFLAGS = -s +AR = $(CROSSPREFIX)ar +RANLIB = $(CROSSPREFIX)ranlib +RC = $(CROSSPREFIX)windres +RCFLAGS = --include-dir=$(PROOT)/include -DDEBUGBUILD=0 -O COFF -i +STRIP = strip -g -RM = del /q /f 2>NUL -CP = copy +# Platform-dependent helper tool macros +ifeq ($(findstring /sh,$(SHELL)),/sh) +DEL = rm -f $1 +RMDIR = rm -fr $1 +MKDIR = mkdir -p $1 +COPY = -cp -afv $1 $2 +#COPYR = -cp -afr $1/* $2 +COPYR = -rsync -aC $1/* $2 +TOUCH = touch $1 +CAT = cat +ECHONL = echo "" +DL = ' +else +ifeq "$(OS)" "Windows_NT" +DEL = -del 2>NUL /q /f $(subst /,\,$1) +RMDIR = -rd 2>NUL /q /s $(subst /,\,$1) +else +DEL = -del 2>NUL $(subst /,\,$1) +RMDIR = -deltree 2>NUL /y $(subst /,\,$1) +endif +MKDIR = -md 2>NUL $(subst /,\,$1) +COPY = -copy 2>NUL /y $(subst /,\,$1) $(subst /,\,$2) +COPYR = -xcopy 2>NUL /q /y /e $(subst /,\,$1) $(subst /,\,$2) +TOUCH = copy 2>&1>NUL /b $(subst /,\,$1) +,, +CAT = type +ECHONL = $(ComSpec) /c echo. +endif ######################################################## ## Nothing more to do below this line! @@ -115,7 +140,7 @@ endif ifeq ($(findstring -ipv6,$(CFG)),-ipv6) IPV6 = 1 endif -ifeq ($(findstring -schannel,$(CFG)),-schannel) +ifeq ($(findstring -winssl,$(CFG)),-winssl) SCHANNEL = 1 SSPI = 1 endif @@ -185,9 +210,9 @@ endif endif ifdef SSPI CFLAGS += -DUSE_WINDOWS_SSPI -ifdef SCHANNEL - CFLAGS += -DUSE_SCHANNEL -endif + ifdef SCHANNEL + CFLAGS += -DUSE_SCHANNEL + endif endif ifdef SPNEGO CFLAGS += -DHAVE_SPNEGO @@ -231,7 +256,7 @@ RESOURCE = libcurl.res all: $(libcurl_a_LIBRARY) $(libcurl_dll_LIBRARY) $(libcurl_a_LIBRARY): $(libcurl_a_OBJECTS) $(libcurl_a_DEPENDENCIES) - -$(RM) $@ + @$(call DEL, $@) $(AR) cru $@ $(libcurl_a_OBJECTS) $(RANLIB) $@ $(STRIP) $@ @@ -239,7 +264,7 @@ $(libcurl_a_LIBRARY): $(libcurl_a_OBJECTS) $(libcurl_a_DEPENDENCIES) # remove the last line above to keep debug info $(libcurl_dll_LIBRARY): $(libcurl_a_OBJECTS) $(RESOURCE) $(libcurl_dll_DEPENDENCIES) - -$(RM) $@ + @$(call DEL, $@) $(CC) $(LDFLAGS) -shared -Wl,--out-implib,$(libcurl_dll_a_LIBRARY) \ -o $@ $(libcurl_a_OBJECTS) $(RESOURCE) $(DLL_LIBS) @@ -251,17 +276,18 @@ $(libcurl_dll_LIBRARY): $(libcurl_a_OBJECTS) $(RESOURCE) $(libcurl_dll_DEPENDENC clean: ifeq "$(wildcard $(PROOT)/include/curl/curlbuild.h.dist)" "$(PROOT)/include/curl/curlbuild.h.dist" - -$(RM) $(subst /,\,$(PROOT)/include/curl/curlbuild.h) + @$(call DEL, $(PROOT)/include/curl/curlbuild.h) endif - -$(RM) $(libcurl_a_OBJECTS) $(RESOURCE) + @$(call DEL, $(libcurl_a_OBJECTS) $(RESOURCE)) distclean vclean: clean - -$(RM) $(libcurl_a_LIBRARY) $(libcurl_dll_LIBRARY) $(libcurl_dll_a_LIBRARY) + @$(call DEL, $(libcurl_a_LIBRARY) $(libcurl_dll_LIBRARY) $(libcurl_dll_a_LIBRARY)) + +$(PROOT)/include/curl/curlbuild.h: + @echo Creating $@ + @$(call COPY, $@.dist, $@) $(LIBCARES_PATH)/libcares.a: $(MAKE) -C $(LIBCARES_PATH) -f Makefile.m32 -$(PROOT)/include/curl/curlbuild.h: - @echo Creating $@ - @$(CP) $(subst /,\,$@).dist $(subst /,\,$@) diff --git a/src/Makefile.m32 b/src/Makefile.m32 index e74a4188d..8cecfc31c 100644 --- a/src/Makefile.m32 +++ b/src/Makefile.m32 @@ -59,24 +59,49 @@ ifndef ARCH ARCH = w32 endif -CC = gcc -CFLAGS = -g -O2 -Wall -CFLAGS += -fno-strict-aliasing +CC = $(CROSSPREFIX)gcc +CFLAGS = -g -O2 -Wall +CFLAGS += -fno-strict-aliasing ifeq ($(ARCH),w64) -CFLAGS += -D_AMD64_ +CFLAGS += -D_AMD64_ endif # comment LDFLAGS below to keep debug info -LDFLAGS = -s -RC = windres -RCFLAGS = --include-dir=$(PROOT)/include -O COFF -i - -RM = del /q /f 2>NUL -CP = copy +LDFLAGS = -s +RC = $(CROSSPREFIX)windres +RCFLAGS = --include-dir=$(PROOT)/include -O COFF -i # We may need these someday # PERL = perl # NROFF = nroff +# Platform-dependent helper tool macros +ifeq ($(findstring /sh,$(SHELL)),/sh) +DEL = rm -f $1 +RMDIR = rm -fr $1 +MKDIR = mkdir -p $1 +COPY = -cp -afv $1 $2 +#COPYR = -cp -afr $1/* $2 +COPYR = -rsync -aC $1/* $2 +TOUCH = touch $1 +CAT = cat +ECHONL = echo "" +DL = ' +else +ifeq "$(OS)" "Windows_NT" +DEL = -del 2>NUL /q /f $(subst /,\,$1) +RMDIR = -rd 2>NUL /q /s $(subst /,\,$1) +else +DEL = -del 2>NUL $(subst /,\,$1) +RMDIR = -deltree 2>NUL /y $(subst /,\,$1) +endif +MKDIR = -md 2>NUL $(subst /,\,$1) +COPY = -copy 2>NUL /y $(subst /,\,$1) $(subst /,\,$2) +COPYR = -xcopy 2>NUL /q /y /e $(subst /,\,$1) $(subst /,\,$2) +TOUCH = copy 2>&1>NUL /b $(subst /,\,$1) +,, +CAT = type +ECHONL = $(ComSpec) /c echo. +endif + ######################################################## ## Nothing more to do below this line! @@ -123,7 +148,7 @@ endif ifeq ($(findstring -metalink,$(CFG)),-metalink) METALINK = 1 endif -ifeq ($(findstring -schannel,$(CFG)),-schannel) +ifeq ($(findstring -winssl,$(CFG)),-winssl) SCHANNEL = 1 SSPI = 1 endif @@ -194,9 +219,9 @@ ifdef METALINK endif ifdef SSPI CFLAGS += -DUSE_WINDOWS_SSPI -ifdef SCHANNEL - CFLAGS += -DUSE_SCHANNEL -endif + ifdef SCHANNEL + CFLAGS += -DUSE_SCHANNEL + endif endif ifdef SPNEGO CFLAGS += -DHAVE_SPNEGO @@ -239,7 +264,7 @@ RESOURCE = curl.res all: $(curl_PROGRAMS) curl.exe: $(RESOURCE) $(curl_OBJECTS) $(curl_DEPENDENCIES) - -$(RM) $@ + $(call DEL, $@) $(CC) $(LDFLAGS) -o $@ $< $(curl_OBJECTS) $(curl_LDADD) # We don't have nroff normally under win32 @@ -249,7 +274,7 @@ curl.exe: $(RESOURCE) $(curl_OBJECTS) $(curl_DEPENDENCIES) hugehelp.c: @echo Creating $@ - @$(CP) hugehelp.c.cvs $@ + @$(call COPY, $@.cvs, $@) %.o: %.c $(CC) $(INCLUDES) $(CFLAGS) -c $< @@ -259,10 +284,10 @@ hugehelp.c: clean: ifeq "$(wildcard hugehelp.c.cvs)" "hugehelp.c.cvs" - -$(RM) hugehelp.c + @$(call DEL, hugehelp.c) endif - -$(RM) $(curl_OBJECTS) $(curlx_OBJECTS) $(RESOURCE) + @$(call DEL, $(curl_OBJECTS) $(curlx_OBJECTS) $(RESOURCE)) distclean vclean: clean - -$(RM) $(curl_PROGRAMS) + @$(call DEL, $(curl_PROGRAMS))