1#***************************************************************************
2#                                  _   _ ____  _
3#  Project                     ___| | | |  _ \| |
4#                             / __| | | | |_) | |
5#                            | (__| |_| |  _ <| |___
6#                             \___|\___/|_| \_\_____|
7#
8# Copyright (C) 1999 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
9#
10# This software is licensed as described in the file COPYING, which
11# you should have received as part of this distribution. The terms
12# are also available at http://curl.haxx.se/docs/copyright.html.
13#
14# You may opt to use, copy, modify, merge, publish, distribute and/or sell
15# copies of the Software, and permit persons to whom the Software is
16# furnished to do so, under the terms of the COPYING file.
17#
18# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19# KIND, either express or implied.
20#
21#***************************************************************************
22
23#############################################################
24#
25## Makefile for building curl.exe with MSVC8
26## Use: nmake -f makefile.vc6 [release | debug] [CFG=release-ssl]
27##      (default is release)
28## "nmake -f makefile.vc6 CFG=release-ssl" statically links OpenSSL
29## into curl.exe producing a standalone SSL-enabled executable.
30##
31#
32#############################################################
33
34PROGRAM_NAME = curl.exe
35
36# -------------------------------------------
37# Verify that current subdir is curl's 'src'
38# -------------------------------------------
39
40!IF ! EXIST(.\main.c)
41!  MESSAGE Can not process this makefile from outside of curl's 'src' subdirectory.
42!  MESSAGE Change to curl's 'src' subdirectory, and try again.
43!  ERROR   See previous message.
44!ENDIF
45
46# ------------------------------------------------
47# Makefile.msvc.names provides libcurl file names
48# ------------------------------------------------
49
50!INCLUDE ..\Makefile.msvc.names
51
52
53
54!IFNDEF OPENSSL_PATH
55OPENSSL_PATH = ../../openssl-0.9.8r
56!ENDIF
57
58!IFNDEF ZLIB_PATH
59ZLIB_PATH = ../../zlib-1.2.5
60!ENDIF
61
62!IFNDEF MACHINE
63MACHINE  = X86
64!ENDIF
65
66# USE_WINDOWS_SSPI uses windows libraries to allow NTLM authentication
67# without an openssl installation and offers the ability to authenticate
68# using the "current logged in user". Since at least with MSVC8 the sspi.h
69# header is broken it is either required to install the Windows SDK,
70# or to fix sspi.h with adding this define at the beginning of sspi.h:
71# #define FreeCredentialHandle FreeCredentialsHandle
72#
73# If, for some reason the Windows SDK is installed but not installed
74# in the default location, you can specify WINDOWS_SDK_PATH.
75# It can be downloaded from:
76# http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
77
78# WINDOWS_SSPI = 1
79
80!IFDEF WINDOWS_SSPI
81!IFNDEF WINDOWS_SDK_PATH
82WINDOWS_SDK_PATH = "$(PROGRAMFILES)\Microsoft SDK"
83!ENDIF
84!ENDIF
85
86########################################################
87## Nothing more to do below this line!
88ZLIB_CFLAGS   = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ /I "$(ZLIB_PATH)"
89ZLIB_LFLAGS   = "/LIBPATH:$(ZLIB_PATH)"
90ZLIB_LIBS     = zlib.lib
91ZLIB_IMP_LIBS = zdll.lib
92
93SSL_CFLAGS     = /DUSE_SSLEAY
94SSL_LFLAGS     = /LIBPATH:"$(OPENSSL_PATH)/out32"
95SSL_IMP_LFLAGS = /LIBPATH:"$(OPENSSL_PATH)/out32dll"
96SSL_LIBS       = libeay32.lib ssleay32.lib gdi32.lib user32.lib advapi32.lib
97
98# Runtime library configuration
99RTLIB   = /MD
100RTLIBD  = /MDd
101
102!IF "$(RTLIBCFG)" == "static"
103RTLIB  = /MT
104RTLIBD = /MTd
105!ENDIF
106
107## Release
108CCR   = cl.exe $(RTLIB) /O2 /DNDEBUG
109LINKR = link.exe /incremental:no /libpath:"../lib"
110RCR   = rc.exe /dDEBUGBUILD=0
111
112## Debug
113CCD   = cl.exe $(RTLIBD) /Gm /ZI /Od /D_DEBUG /RTC1
114LINKD = link.exe /incremental:yes /debug /libpath:"../lib"
115RCD   = rc.exe /dDEBUGBUILD=1
116
117CFLAGS   = /I../lib /I../include /nologo /W3 /EHsc /DWIN32 /FD /c /D_BIND_TO_CURRENT_VCLIBS_VERSION=1
118LFLAGS   = /nologo /out:$(PROGRAM_NAME) /subsystem:console /machine:$(MACHINE)
119RESFLAGS = /i../include
120
121# This manifest thing is for VC8, enabled by the maketgz script that
122# builds the VC8 version of this makefile. Left commented out in the VC8
123# version!
124#MANIFESTTOOL = mt -manifest $(PROGRAM_NAME).manifest -outputresource:$(PROGRAM_NAME);1
125
126!IFDEF WINDOWS_SSPI
127CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include
128!ENDIF
129
130RELEASE_OBJS= \
131	curlutilr.obj \
132	getpassr.obj \
133	homedirr.obj \
134	hugehelpr.obj \
135	mainr.obj \
136	nonblockr.obj \
137	os-specificr.obj \
138	rawstrr.obj \
139	strtoofftr.obj \
140	urlglobr.obj \
141	writeoutr.obj \
142	xattrr.obj \
143	curlr.res
144
145DEBUG_OBJS= \
146	curlutild.obj \
147	getpassd.obj \
148	homedird.obj \
149	hugehelpd.obj \
150	maind.obj \
151	nonblockd.obj \
152	os-specificd.obj \
153	rawstrd.obj \
154	strtoofftd.obj \
155	urlglobd.obj \
156	writeoutd.obj \
157	xattrd.obj \
158	curld.res
159
160#################################################
161# If CFG not specified, use static libs
162
163CFLAGS         = $(CFLAGS) /DCURL_STATICLIB
164LINKLIBS       = $(LIBCURL_STA_LIB_REL)
165LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG)
166
167#################################################
168# release dynamic library
169
170!IF "$(CFG)" == "release-dll"
171LINKLIBS       = $(LIBCURL_IMP_LIB_REL)
172LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG)
173!ENDIF
174
175#################################################
176# release static library with zlib
177
178!IF "$(CFG)" == "release-zlib"
179CFLAGS         = $(CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
180LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(ZLIB_LIBS)
181LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(ZLIB_LIBS)
182LFLAGS         = $(LFLAGS) $(ZLIB_LFLAGS)
183!ENDIF
184
185#################################################
186# release static library with ssl
187
188!IF "$(CFG)" == "release-ssl"
189CFLAGS         = $(CFLAGS) $(SSL_CFLAGS) /DCURL_STATICLIB
190LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS)
191LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS)
192LFLAGS         = $(LFLAGS) $(SSL_LFLAGS)
193!ENDIF
194
195#################################################
196# release dynamic library with dynamic ssl
197
198!IF "$(CFG)" == "release-dll-ssl-dll"
199CFLAGS         = $(CFLAGS) $(SSL_CFLAGS)
200LINKLIBS       = $(LIBCURL_IMP_LIB_REL) $(SSL_LIBS)
201LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG) $(SSL_LIBS)
202LFLAGS         = $(LFLAGS) $(SSL_IMP_LFLAGS)
203!ENDIF
204
205#################################################
206# release static library with ssl and zlib
207
208!IF "$(CFG)" == "release-ssl-zlib"
209CFLAGS         = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
210LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS) $(ZLIB_LIBS)
211LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS) $(ZLIB_LIBS)
212LFLAGS         = $(LFLAGS) $(SSL_LFLAGS) $(ZLIB_LFLAGS)
213!ENDIF
214
215#################################################
216# release static library with dynamic ssl
217
218!IF "$(CFG)" == "release-ssl-dll"
219CFLAGS         = $(CFLAGS) $(SSL_CFLAGS) /DCURL_STATICLIB
220LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS)
221LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS)
222LFLAGS         = $(LFLAGS) $(SSL_IMP_LFLAGS)
223!ENDIF
224
225#################################################
226# release static library with dynamic zlib
227
228!IF "$(CFG)" == "release-zlib-dll"
229CFLAGS         = $(CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
230LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(ZLIB_IMP_LIBS)
231LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(ZLIB_IMP_LIBS)
232LFLAGS         = $(LFLAGS) $(ZLIB_LFLAGS)
233!ENDIF
234
235#################################################
236# release dynamic library with dynamic zlib
237
238!IF "$(CFG)" == "release-dll-zlib-dll"
239CFLAGS         = $(CFLAGS) $(ZLIB_CFLAGS)
240LINKLIBS       = $(LIBCURL_IMP_LIB_REL) $(ZLIB_IMP_LIBS)
241LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG) $(ZLIB_IMP_LIBS)
242LFLAGS         = $(LFLAGS) $(ZLIB_LFLAGS)
243!ENDIF
244
245#################################################
246# release static library with dynamic ssl and dynamic zlib
247
248!IF "$(CFG)" == "release-ssl-dll-zlib-dll"
249CFLAGS         = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
250LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS) $(ZLIB_IMP_LIBS)
251LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS) $(ZLIB_IMP_LIBS)
252LFLAGS         = $(LFLAGS) $(SSL_IMP_LFLAGS) $(ZLIB_LFLAGS)
253!ENDIF
254
255#################################################
256# release dynamic library with dynamic ssl and dynamic zlib
257
258!IF "$(CFG)" == "release-dll-ssl-dll-zlib-dll"
259CFLAGS         = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS)
260LINKLIBS       = $(LIBCURL_IMP_LIB_REL) $(SSL_LIBS) $(ZLIB_IMP_LIBS)
261LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG) $(SSL_LIBS) $(ZLIB_IMP_LIBS)
262LFLAGS         = $(LFLAGS) $(SSL_IMP_LFLAGS) $(ZLIB_LFLAGS)
263!ENDIF
264
265
266LINKLIBS       = $(LINKLIBS) ws2_32.lib bufferoverflowu.lib wldap32.lib
267LINKLIBS_DEBUG = $(LINKLIBS_DEBUG) ws2_32.lib bufferoverflowu.lib wldap32.lib
268
269all : release
270
271release: $(RELEASE_OBJS)
272	$(LINKR) $(LFLAGS) $(LINKLIBS) $(RELEASE_OBJS)
273        $(MANIFESTTOOL)
274
275debug: $(DEBUG_OBJS)
276	$(LINKD) $(LFLAGS) $(LINKLIBS_DEBUG) $(DEBUG_OBJS)
277        $(MANIFESTTOOL)
278
279## Release
280hugehelpr.obj: hugehelp.c
281	$(CCR) $(CFLAGS) /Zm200 /Fo"$@" hugehelp.c
282writeoutr.obj: writeout.c
283	$(CCR) $(CFLAGS) /Fo"$@" writeout.c
284urlglobr.obj: urlglob.c
285	$(CCR) $(CFLAGS) /Fo"$@" urlglob.c
286getpassr.obj: getpass.c
287	$(CCR) $(CFLAGS) /Fo"$@" getpass.c
288homedirr.obj: homedir.c
289	$(CCR) $(CFLAGS) /Fo"$@" homedir.c
290curlutilr.obj: curlutil.c
291	$(CCR) $(CFLAGS) /Fo"$@" curlutil.c
292os-specificr.obj: os-specific.c
293	$(CCR) $(CFLAGS) /Fo"$@" os-specific.c
294nonblockr.obj: ../lib/nonblock.c
295	$(CCR) $(CFLAGS) /Fo"$@" ../lib/nonblock.c
296rawstrr.obj: ../lib/rawstr.c
297	$(CCR) $(CFLAGS) /Fo"$@" ../lib/rawstr.c
298strtoofftr.obj: ../lib/strtoofft.c
299	$(CCR) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c
300xattrr.obj: xattr.c
301	$(CCR) $(CFLAGS) /Fo"$@" xattr.c
302mainr.obj: main.c
303	$(CCR) $(CFLAGS) /Fo"$@" main.c
304curlr.res : curl.rc
305	$(RCR) $(RESFLAGS) /Fo"$@" curl.rc
306
307## Debug
308hugehelpd.obj: hugehelp.c
309	$(CCD) $(CFLAGS) /Zm200 /Fo"$@" hugehelp.c
310writeoutd.obj: writeout.c
311	$(CCD) $(CFLAGS) /Fo"$@" writeout.c
312urlglobd.obj: urlglob.c
313	$(CCD) $(CFLAGS) /Fo"$@" urlglob.c
314getpassd.obj: getpass.c
315	$(CCD) $(CFLAGS) /Fo"$@" getpass.c
316homedird.obj: homedir.c
317	$(CCD) $(CFLAGS) /Fo"$@" homedir.c
318curlutild.obj: curlutil.c
319	$(CCD) $(CFLAGS) /Fo"$@" curlutil.c
320os-specificd.obj: os-specific.c
321	$(CCD) $(CFLAGS) /Fo"$@" os-specific.c
322nonblockd.obj: ../lib/nonblock.c
323	$(CCD) $(CFLAGS) /Fo"$@" ../lib/nonblock.c
324rawstrd.obj: ../lib/rawstr.c
325	$(CCD) $(CFLAGS) /Fo"$@" ../lib/rawstr.c
326strtoofftd.obj: ../lib/strtoofft.c
327	$(CCD) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c
328xattrd.obj: xattr.c
329	$(CCD) $(CFLAGS) /Fo"$@" xattr.c
330maind.obj: main.c
331	$(CCD) $(CFLAGS) /Fo"$@" main.c
332curld.res : curl.rc
333	$(RCD) $(RESFLAGS) /Fo"$@" curl.rc
334
335clean:
336	@-erase $(PROGRAM_NAME) 2> NUL
337	@-erase $(RELEASE_OBJS) 2> NUL
338	@-erase $(DEBUG_OBJS) 2> NUL
339	@-erase *.idb 2> NUL
340	@-erase *.pdb 2> NUL
341	@-erase *.pch 2> NUL
342	@-erase *.ilk 2> NUL
343