tizen 2.3.1 release
[external/curl.git] / src / Makefile.m32
1 ###########################################################################
2 #
3 ## Makefile for building curl.exe with MingW (GCC-3.2 or later)
4 ## and optionally OpenSSL (0.9.8), libssh2 (1.3), zlib (1.2.5), librtmp (2.3)
5 ##
6 ## Usage:   mingw32-make -f Makefile.m32 CFG=-feature1[-feature2][-feature3][...]
7 ## Example: mingw32-make -f Makefile.m32 CFG=-zlib-ssl-spi-winidn
8 ##
9 ## Hint: you can also set environment vars to control the build, f.e.:
10 ## set ZLIB_PATH=c:/zlib-1.2.8
11 ## set ZLIB=1
12 #
13 ###########################################################################
14
15 # Edit the path below to point to the base of your Zlib sources.
16 ifndef ZLIB_PATH
17 ZLIB_PATH = ../../zlib-1.2.8
18 endif
19 # Edit the path below to point to the base of your OpenSSL package.
20 ifndef OPENSSL_PATH
21 OPENSSL_PATH = ../../openssl-0.9.8zc
22 endif
23 # Edit the path below to point to the base of your LibSSH2 package.
24 ifndef LIBSSH2_PATH
25 LIBSSH2_PATH = ../../libssh2-1.4.3
26 endif
27 # Edit the path below to point to the base of your librtmp package.
28 ifndef LIBRTMP_PATH
29 LIBRTMP_PATH = ../../librtmp-2.3
30 endif
31 # Edit the path below to point to the base of your libmetalink package.
32 ifndef LIBMETALINK_PATH
33 LIBMETALINK_PATH = ../../libmetalink-0.1.2
34 endif
35 # Edit the path below to point to the base of your libexpat package.
36 ifndef LIBEXPAT_PATH
37 LIBEXPAT_PATH = ../../expat-2.1.0
38 endif
39 # Edit the path below to point to the base of your libxml2 package.
40 ifndef LIBXML2_PATH
41 LIBXML2_PATH = ../../libxml2-2.9.0
42 endif
43 # Edit the path below to point to the base of your libidn package.
44 ifndef LIBIDN_PATH
45 LIBIDN_PATH = ../../libidn-1.18
46 endif
47 # Edit the path below to point to the base of your MS IDN package.
48 # Microsoft Internationalized Domain Names (IDN) Mitigation APIs 1.1
49 # http://www.microsoft.com/downloads/en/details.aspx?FamilyID=ad6158d7-ddba-416a-9109-07607425a815
50 ifndef WINIDN_PATH
51 WINIDN_PATH = ../../Microsoft IDN Mitigation APIs
52 endif
53 # Edit the path below to point to the base of your Novell LDAP NDK.
54 ifndef LDAP_SDK
55 LDAP_SDK = c:/novell/ndk/cldapsdk/win32
56 endif
57 # Edit the path below to point to the base of your nghttp2 package.
58 ifndef NGHTTP2_PATH
59 NGHTTP2_PATH = ../../nghttp2-0.6.7
60 endif
61
62 PROOT = ..
63
64 # Edit the path below to point to the base of your c-ares package.
65 ifndef LIBCARES_PATH
66 LIBCARES_PATH = $(PROOT)/ares
67 endif
68
69 CC      = $(CROSSPREFIX)gcc
70 CFLAGS  = -g -O2 -Wall
71 CFLAGS  += -fno-strict-aliasing
72 # comment LDFLAGS below to keep debug info
73 LDFLAGS = -s
74 AR      = $(CROSSPREFIX)ar
75 RC      = $(CROSSPREFIX)windres
76 RCFLAGS = --include-dir=$(PROOT)/include -O COFF
77 STRIP   = $(CROSSPREFIX)strip -g
78
79 # We may need these someday
80 # PERL = perl
81 # NROFF = nroff
82
83 # Set environment var ARCH to your architecture to override autodetection.
84 ifndef ARCH
85 ifeq ($(findstring x86_64,$(shell $(CC) -dumpmachine)),x86_64)
86 ARCH    = w64
87 else
88 ARCH    = w32
89 endif
90 endif
91
92 ifeq ($(ARCH),w64)
93 CFLAGS  += -m64 -D_AMD64_
94 LDFLAGS += -m64
95 RCFLAGS += -F pe-x86-64
96 else
97 CFLAGS  += -m32
98 LDFLAGS += -m32
99 RCFLAGS += -F pe-i386
100 endif
101
102 # Platform-dependent helper tool macros
103 ifeq ($(findstring /sh,$(SHELL)),/sh)
104 DEL     = rm -f $1
105 RMDIR   = rm -fr $1
106 MKDIR   = mkdir -p $1
107 COPY    = -cp -afv $1 $2
108 #COPYR  = -cp -afr $1/* $2
109 COPYR   = -rsync -aC $1/* $2
110 TOUCH   = touch $1
111 CAT     = cat
112 ECHONL  = echo ""
113 DL      = '
114 else
115 ifeq "$(OS)" "Windows_NT"
116 DEL     = -del 2>NUL /q /f $(subst /,\,$1)
117 RMDIR   = -rd 2>NUL /q /s $(subst /,\,$1)
118 else
119 DEL     = -del 2>NUL $(subst /,\,$1)
120 RMDIR   = -deltree 2>NUL /y $(subst /,\,$1)
121 endif
122 MKDIR   = -md 2>NUL $(subst /,\,$1)
123 COPY    = -copy 2>NUL /y $(subst /,\,$1) $(subst /,\,$2)
124 COPYR   = -xcopy 2>NUL /q /y /e $(subst /,\,$1) $(subst /,\,$2)
125 TOUCH   = copy 2>&1>NUL /b $(subst /,\,$1) +,,
126 CAT     = type
127 ECHONL  = $(ComSpec) /c echo.
128 endif
129
130 ########################################################
131 ## Nothing more to do below this line!
132
133 ifeq ($(findstring -dyn,$(CFG)),-dyn)
134 DYN = 1
135 endif
136 ifeq ($(findstring -ares,$(CFG)),-ares)
137 ARES = 1
138 endif
139 ifeq ($(findstring -sync,$(CFG)),-sync)
140 SYNC = 1
141 endif
142 ifeq ($(findstring -rtmp,$(CFG)),-rtmp)
143 RTMP = 1
144 SSL = 1
145 ZLIB = 1
146 endif
147 ifeq ($(findstring -ssh2,$(CFG)),-ssh2)
148 SSH2 = 1
149 SSL = 1
150 ZLIB = 1
151 endif
152 ifeq ($(findstring -ssl,$(CFG)),-ssl)
153 SSL = 1
154 endif
155 ifeq ($(findstring -zlib,$(CFG)),-zlib)
156 ZLIB = 1
157 endif
158 ifeq ($(findstring -idn,$(CFG)),-idn)
159 IDN = 1
160 endif
161 ifeq ($(findstring -winidn,$(CFG)),-winidn)
162 WINIDN = 1
163 endif
164 ifeq ($(findstring -sspi,$(CFG)),-sspi)
165 SSPI = 1
166 endif
167 ifeq ($(findstring -ldaps,$(CFG)),-ldaps)
168 LDAPS = 1
169 endif
170 ifeq ($(findstring -ipv6,$(CFG)),-ipv6)
171 IPV6 = 1
172 endif
173 ifeq ($(findstring -metalink,$(CFG)),-metalink)
174 METALINK = 1
175 endif
176 ifeq ($(findstring -winssl,$(CFG)),-winssl)
177 WINSSL = 1
178 SSPI = 1
179 endif
180 ifeq ($(findstring -nghttp2,$(CFG)),-nghttp2)
181 NGHTTP2 = 1
182 endif
183
184 INCLUDES = -I. -I../include -I../lib
185
186 ifdef DYN
187   curl_DEPENDENCIES = $(PROOT)/lib/libcurldll.a $(PROOT)/lib/libcurl.dll
188   curl_LDADD = -L$(PROOT)/lib -lcurldll
189 else
190   curl_DEPENDENCIES = $(PROOT)/lib/libcurl.a
191   curl_LDADD = -L$(PROOT)/lib -lcurl
192   CFLAGS += -DCURL_STATICLIB
193   LDFLAGS += -static
194 endif
195 ifdef SYNC
196   CFLAGS += -DUSE_SYNC_DNS
197 else
198   ifdef ARES
199     ifndef DYN
200       curl_DEPENDENCIES += $(LIBCARES_PATH)/libcares.a
201     endif
202     CFLAGS += -DUSE_ARES -DCARES_STATICLIB
203     curl_LDADD += -L"$(LIBCARES_PATH)" -lcares
204   endif
205 endif
206 ifdef RTMP
207   CFLAGS += -DUSE_LIBRTMP
208   curl_LDADD += -L"$(LIBRTMP_PATH)/librtmp" -lrtmp -lwinmm
209 endif
210 ifdef NGHTTP2
211   CFLAGS += -DUSE_NGHTTP2
212   curl_LDADD += -L"$(NGHTTP2_PATH)/lib" -lnghttp2
213 endif
214 ifdef SSH2
215   CFLAGS += -DUSE_LIBSSH2 -DHAVE_LIBSSH2_H
216   curl_LDADD += -L"$(LIBSSH2_PATH)/win32" -lssh2
217 endif
218 ifdef SSL
219   ifndef OPENSSL_INCLUDE
220     ifeq "$(wildcard $(OPENSSL_PATH)/outinc)" "$(OPENSSL_PATH)/outinc"
221       OPENSSL_INCLUDE = $(OPENSSL_PATH)/outinc
222     endif
223     ifeq "$(wildcard $(OPENSSL_PATH)/include)" "$(OPENSSL_PATH)/include"
224       OPENSSL_INCLUDE = $(OPENSSL_PATH)/include
225     endif
226   endif
227   ifneq "$(wildcard $(OPENSSL_INCLUDE)/openssl/opensslv.h)" "$(OPENSSL_INCLUDE)/openssl/opensslv.h"
228   $(error Invalid path to OpenSSL package: $(OPENSSL_PATH))
229   endif
230   ifndef OPENSSL_LIBPATH
231     OPENSSL_LIBS = -lssl -lcrypto
232     ifeq "$(wildcard $(OPENSSL_PATH)/out)" "$(OPENSSL_PATH)/out"
233       OPENSSL_LIBPATH = $(OPENSSL_PATH)/out
234       ifdef DYN
235         OPENSSL_LIBS = -lssl32 -leay32
236       endif
237     endif
238     ifeq "$(wildcard $(OPENSSL_PATH)/lib)" "$(OPENSSL_PATH)/lib"
239       OPENSSL_LIBPATH = $(OPENSSL_PATH)/lib
240     endif
241   endif
242   ifndef DYN
243     OPENSSL_LIBS += -lgdi32 -lcrypt32
244   endif
245   INCLUDES += -I"$(OPENSSL_INCLUDE)"
246   CFLAGS += -DUSE_SSLEAY -DUSE_OPENSSL
247   curl_LDADD += -L"$(OPENSSL_LIBPATH)" $(OPENSSL_LIBS)
248 endif
249 ifdef ZLIB
250   INCLUDES += -I"$(ZLIB_PATH)"
251   CFLAGS += -DHAVE_LIBZ -DHAVE_ZLIB_H
252   curl_LDADD += -L"$(ZLIB_PATH)" -lz
253 endif
254 ifdef IDN
255   CFLAGS += -DUSE_LIBIDN
256   curl_LDADD += -L"$(LIBIDN_PATH)/lib" -lidn
257 else
258 ifdef WINIDN
259   CFLAGS += -DUSE_WIN32_IDN
260   curl_LDADD += -L"$(WINIDN_PATH)" -lnormaliz
261 endif
262 endif
263 ifdef METALINK
264   INCLUDES += -I"$(LIBMETALINK_PATH)/include"
265   CFLAGS += -DUSE_METALINK
266   curl_LDADD += -L"$(LIBMETALINK_PATH)/lib" -lmetalink
267   ifndef DYN
268     ifeq ($(findstring libexpat_metalink_parser.o,$(shell $(AR) t "$(LIBMETALINK_PATH)/lib/libmetalink.a")),libexpat_metalink_parser.o)
269       curl_LDADD += -L"$(LIBEXPAT_PATH)/lib" -lexpat
270     else
271       curl_LDADD += -L"$(LIBXML2_PATH)/lib" -lxml2
272     endif
273   endif
274 endif
275 ifdef SSPI
276   CFLAGS += -DUSE_WINDOWS_SSPI
277   ifdef WINSSL
278     CFLAGS += -DUSE_SCHANNEL
279   endif
280 endif
281 ifdef IPV6
282   CFLAGS += -DENABLE_IPV6 -D_WIN32_WINNT=0x0501
283 endif
284 ifdef LDAPS
285   CFLAGS += -DHAVE_LDAP_SSL
286 endif
287 ifdef USE_LDAP_NOVELL
288   CFLAGS += -DCURL_HAS_NOVELL_LDAPSDK
289   curl_LDADD += -L"$(LDAP_SDK)/lib/mscvc" -lldapsdk -lldapssl -lldapx
290 endif
291 ifdef USE_LDAP_OPENLDAP
292   CFLAGS += -DCURL_HAS_OPENLDAP_LDAPSDK
293   curl_LDADD += -L"$(LDAP_SDK)/lib" -lldap -llber
294 endif
295 ifndef USE_LDAP_NOVELL
296 ifndef USE_LDAP_OPENLDAP
297 curl_LDADD += -lwldap32
298 endif
299 endif
300 curl_LDADD += -lws2_32
301
302 # Makefile.inc provides the CSOURCES and HHEADERS defines
303 include Makefile.inc
304
305 curl_PROGRAMS = curl.exe
306 curl_OBJECTS := $(patsubst %.c,%.o,$(strip $(CURL_CFILES)))
307 curlx_OBJECTS := $(patsubst %.c,%.o,$(notdir $(strip $(CURLX_CFILES))))
308 ifdef DYN
309 curl_OBJECTS += $(curlx_OBJECTS)
310 vpath %.c $(PROOT)/lib
311 endif
312
313 RESOURCE = curl.res
314
315
316 all: $(curl_PROGRAMS)
317
318 curl.exe: $(RESOURCE) $(curl_OBJECTS) $(curl_DEPENDENCIES)
319         $(call DEL, $@)
320         $(CC) $(LDFLAGS) -o $@ $< $(curl_OBJECTS) $(curl_LDADD)
321
322 # We don't have nroff normally under win32
323 # tool_hugehelp.c: $(PROOT)/docs/MANUAL $(PROOT)/docs/curl.1 mkhelp.pl
324 #       @$(call DEL, tool_hugehelp.c)
325 #       $(NROFF) -man $(PROOT)/docs/curl.1 | $(PERL) mkhelp.pl $(PROOT)/docs/MANUAL > tool_hugehelp.c
326
327 tool_hugehelp.c:
328         @echo Creating $@
329         @$(call COPY, $@.cvs, $@)
330
331 %.o: %.c
332         $(CC) $(INCLUDES) $(CFLAGS) -c $<
333
334 %.res: %.rc
335         $(RC) $(RCFLAGS) -i $< -o $@
336
337 clean:
338 ifeq "$(wildcard tool_hugehelp.c.cvs)" "tool_hugehelp.c.cvs"
339         @$(call DEL, tool_hugehelp.c)
340 endif
341         @$(call DEL, $(curl_OBJECTS) $(curlx_OBJECTS) $(RESOURCE))
342
343 distclean vclean: clean
344         @$(call DEL, $(curl_PROGRAMS))