1
#***************************************************************************
3
# Project ___| | | | _ \| |
5
# | (__| |_| | _ <| |___
6
# \___|\___/|_| \_\_____|
8
# Copyright (C) 1999 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
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.
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.
18
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19
# KIND, either express or implied.
21
# $Id: Makefile.am,v 1.139 2008-11-03 08:50:58 bagder Exp $
22
###########################################################################
24
# Makefile for building libcurl with MSVC9
26
# Usage: see usage message below
27
# Should be invoked from \lib directory
28
# Edit the paths and desired library name
29
# SSL path is only required if you intend compiling
32
# This make file leaves the result either a .lib or .dll file
33
# in the \lib directory. It should be called from the \lib
36
# An option would have been to allow the source directory to
37
# be specified, but I saw no requirement.
39
# Another option would have been to leave the .lib and .dll
40
# files in the "cfg" directory, but then the make file
41
# in \src would need to be changed.
43
##############################################################
46
# Stem for static libs and DLLs
49
LIB_NAME_DEBUG = libcurld
52
# Stem for DLL import libs
54
IMPLIB_NAME = libcurl_imp
55
IMPLIB_NAME_DEBUG = libcurld_imp
58
OPENSSL_PATH = ../../openssl-0.9.8g
62
ZLIB_PATH = ../../zlib-1.2.3
69
# USE_WINDOWS_SSPI uses windows libraries to allow NTLM authentication
70
# without an openssl installation and offers the ability to authenticate
71
# using the "current logged in user". Since at least with MSVC9 the sspi.h
72
# header is broken it is either required to install the Windows SDK,
73
# or to fix sspi.h with adding this define at the beginning of sspi.h:
74
# #define FreeCredentialHandle FreeCredentialsHandle
76
# If, for some reason the Windows SDK is installed but not installed
77
# in the default location, you can specify WINDOWS_SDK_PATH.
78
# It can be downloaded from:
79
# http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
84
!IFNDEF WINDOWS_SDK_PATH
85
WINDOWS_SDK_PATH = "C:\Program Files\Microsoft SDK"
89
#############################################################
90
## Nothing more to do below this line!
92
CCNODBG = cl.exe /O2 /DNDEBUG
93
CCDEBUG = cl.exe /Od /Gm /Zi /D_DEBUG /RTC1
94
CFLAGSSSL = /DUSE_SSLEAY /I "$(OPENSSL_PATH)/inc32" /I "$(OPENSSL_PATH)/inc32/openssl"
95
CFLAGSZLIB = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ /I "$(ZLIB_PATH)"
96
CFLAGS = /I. /I../include /nologo /W3 /EHsc /DWIN32 /FD /c /DBUILDING_LIBCURL
97
CFLAGSLIB = /DCURL_STATICLIB
98
LNKDLL = link.exe /DLL
99
LNKLIB = link.exe /lib
100
LFLAGS = /nologo /machine:$(MACHINE)
101
SSLLIBS = libeay32.lib ssleay32.lib
102
ZLIBLIBSDLL= zdll.lib
104
WINLIBS = ws2_32.lib wldap32.lib
110
CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include
113
##############################################################
114
# Runtime library configuration
119
!IF "$(RTLIBCFG)" == "static"
125
######################
128
!IF "$(CFG)" == "release"
129
TARGET = $(LIB_NAME).lib
131
LNK = $(LNKLIB) /out:$(DIROBJ)\$(TARGET)
132
CC = $(CCNODBG) $(RTLIB) $(CFLAGSLIB)
136
######################
139
!IF "$(CFG)" == "release-zlib"
140
TARGET = $(LIB_NAME).lib
142
LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
143
LNK = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
144
CC = $(CCNODBG) $(RTLIB) $(CFLAGSZLIB) $(CFLAGSLIB)
148
######################
151
!IF "$(CFG)" == "release-dll"
152
TARGET = $(LIB_NAME).dll
154
LNK = $(LNKDLL) $(WINLIBS) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME).lib
155
CC = $(CCNODBG) $(RTLIB)
157
RESOURCE = $(DIROBJ)\libcurl.res
160
######################
163
!IF "$(CFG)" == "release-ssl"
164
TARGET = $(LIB_NAME).lib
166
LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"
167
LNK = $(LNKLIB) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)
168
CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSLIB)
172
######################
175
!IF "$(CFG)" == "release-ssl-dll"
176
TARGET = $(LIB_NAME).lib
178
LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
179
LNK = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)
180
CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSLIB)
184
######################
187
!IF "$(CFG)" == "release-ssl-zlib"
188
TARGET = $(LIB_NAME).lib
190
LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"
191
LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
192
LNK = $(LNKLIB) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
193
CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)
197
######################
198
# release-dll-ssl-dll
200
!IF "$(CFG)" == "release-dll-ssl-dll"
201
TARGET = $(LIB_NAME).dll
203
LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
204
LNK = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME).lib
205
CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL)
207
RESOURCE = $(DIROBJ)\libcurl.res
210
######################
213
!IF "$(CFG)" == "release-zlib-dll"
214
TARGET = $(LIB_NAME).lib
216
LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
217
LNK = $(LNKLIB) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
218
CC = $(CCNODBG) $(RTLIB) $(CFLAGSZLIB) $(CFLAGSLIB)
222
######################
223
# release-ssl-dll-zlib-dll
225
!IF "$(CFG)" == "release-ssl-dll-zlib-dll"
226
TARGET = $(LIB_NAME).lib
228
LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
229
LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
230
LNK = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
231
CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)
235
######################
236
# release-dll-zlib-dll
238
!IF "$(CFG)" == "release-dll-zlib-dll"
239
TARGET = $(LIB_NAME).dll
241
LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
242
LNK = $(LNKDLL) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME).lib
243
CC = $(CCNODBG) $(RTLIB) $(CFLAGSZLIB)
245
RESOURCE = $(DIROBJ)\libcurl.res
248
######################
249
# release-dll-ssl-dll-zlib-dll
251
!IF "$(CFG)" == "release-dll-ssl-dll-zlib-dll"
252
TARGET = $(LIB_NAME).dll
254
LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
255
LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
256
LNK = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME).lib
257
CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSZLIB)
259
RESOURCE = $(DIROBJ)\libcurl.res
262
######################
265
!IF "$(CFG)" == "debug"
266
TARGET = $(LIB_NAME_DEBUG).lib
268
LNK = $(LNKLIB) /out:$(DIROBJ)\$(TARGET)
269
CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSLIB)
273
######################
276
!IF "$(CFG)" == "debug-ssl"
277
TARGET = $(LIB_NAME_DEBUG).lib
279
LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"
280
LNK = $(LNKLIB) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)
281
CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSLIB)
285
######################
288
!IF "$(CFG)" == "debug-zlib"
289
TARGET = $(LIB_NAME_DEBUG).lib
291
LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
292
LNK = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
293
CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSZLIB) $(CFLAGSLIB)
297
######################
300
!IF "$(CFG)" == "debug-ssl-dll"
301
TARGET = $(LIB_NAME_DEBUG).lib
303
LFLAGSSSL = /LIBPATH:$(OPENSSL_PATH)\out32dll
304
LNK = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)
305
CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSLIB)
309
######################
312
!IF "$(CFG)" == "debug-ssl-zlib"
313
TARGET = $(LIB_NAME_DEBUG).lib
315
LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
316
LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"
317
LNK = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
318
CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)
322
######################
325
!IF "$(CFG)" == "debug-zlib-dll"
326
TARGET = $(LIB_NAME_DEBUG).lib
328
LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
329
LNK = $(LNKLIB) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
330
CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSZLIB) $(CFLAGSLIB)
334
######################
335
# debug-ssl-dll-zlib-dll
337
!IF "$(CFG)" == "debug-ssl-dll-zlib-dll"
338
TARGET = $(LIB_NAME_DEBUG).lib
340
LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
341
LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
342
LNK = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)
343
CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)
347
######################
350
!IF "$(CFG)" == "debug-dll"
351
TARGET = $(LIB_NAME_DEBUG).dll
353
LNK = $(LNKDLL) $(WINLIBS) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib /PDB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).pdb
354
CC = $(CCDEBUG) $(RTLIBD)
356
RESOURCE = $(DIROBJ)\libcurl.res
359
######################
362
!IF "$(CFG)" == "debug-dll-ssl-dll"
363
TARGET = $(LIB_NAME_DEBUG).dll
365
LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
366
LNK = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib /PDB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).pdb
367
CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL)
369
RESOURCE = $(DIROBJ)\libcurl.res
372
######################
375
!IF "$(CFG)" == "debug-dll-zlib-dll"
376
TARGET = $(LIB_NAME_DEBUG).dll
378
LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
379
LNK = $(LNKDLL) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib /PDB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).pdb
380
CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSZLIB)
382
RESOURCE = $(DIROBJ)\libcurl.res
385
######################
386
# debug-dll-ssl-dll-zlib-dll
388
!IF "$(CFG)" == "debug-dll-ssl-dll-zlib-dll"
389
TARGET = $(LIB_NAME_DEBUG).dll
391
LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"
392
LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"
393
LNK = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib /PDB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).pdb
394
CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSZLIB)
396
RESOURCE = $(DIROBJ)\libcurl.res
399
#######################
402
!IF "$(CFGSET)" == "FALSE" && "$(CFG)" != ""
403
!MESSAGE Usage: nmake /f makefile.vc9 CFG=<config> <target>
404
!MESSAGE where <config> is one of:
405
!MESSAGE release - release static library
406
!MESSAGE release-ssl - release static library with ssl
407
!MESSAGE release-zlib - release static library with zlib
408
!MESSAGE release-ssl-zlib - release static library with ssl and zlib
409
!MESSAGE release-ssl-dll - release static library with dynamic ssl
410
!MESSAGE release-zlib-dll - release static library with dynamic zlib
411
!MESSAGE release-ssl-dll-zlib-dll - release static library with dynamic ssl and dynamic zlib
412
!MESSAGE release-dll - release dynamic library
413
!MESSAGE release-dll-ssl-dll - release dynamic library with dynamic ssl
414
!MESSAGE release-dll-zlib-dll - release dynamic library with dynamic zlib
415
!MESSAGE release-dll-ssl-dll-zlib-dll - release dynamic library with dynamic ssl and dynamic zlib
416
!MESSAGE debug - debug static library
417
!MESSAGE debug-ssl - debug static library with ssl
418
!MESSAGE debug-zlib - debug static library with zlib
419
!MESSAGE debug-ssl-zlib - debug static library with ssl and zlib
420
!MESSAGE debug-ssl-dll - debug static library with dynamic ssl
421
!MESSAGE debug-zlib-dll - debug static library with dynamic zlib
422
!MESSAGE debug-ssl-dll-zlib-dll - debug static library with dynamic ssl and dynamic zlib
423
!MESSAGE debug-dll - debug dynamic library
424
!MESSAGE debug-dll-ssl-dll - debug dynamic library with dynamic ssl
425
!MESSAGE debug-dll-zlib-dll - debug dynamic library with dynamic zlib1
426
!MESSAGE debug-dll-ssl-dll-zlib-dll - debug dynamic library with dynamic ssl and dynamic zlib
427
!MESSAGE <target> can be left blank in which case all is assumed
428
!ERROR please choose a valid configuration "$(CFG)"
431
#######################
432
# Only the clean target can be used if a config was not provided.
434
!IF "$(CFGSET)" == "FALSE"
436
@-erase /s *.dll 2> NUL
437
@-erase /s *.exp 2> NUL
438
@-erase /s *.idb 2> NUL
439
@-erase /s *.lib 2> NUL
440
@-erase /s *.obj 2> NUL
441
@-erase /s *.pch 2> NUL
442
@-erase /s *.pdb 2> NUL
443
@-erase /s *.res 2> NUL
445
# A config was provided, so the library can be built.
448
$(DIROBJ)\base64.obj \
449
$(DIROBJ)\connect.obj \
450
$(DIROBJ)\content_encoding.obj \
451
$(DIROBJ)\cookie.obj \
452
$(DIROBJ)\curl_addrinfo.obj \
453
$(DIROBJ)\curl_sspi.obj \
456
$(DIROBJ)\escape.obj \
458
$(DIROBJ)\formdata.obj \
460
$(DIROBJ)\getenv.obj \
461
$(DIROBJ)\getinfo.obj \
464
$(DIROBJ)\hostares.obj \
465
$(DIROBJ)\hostasyn.obj \
466
$(DIROBJ)\hostip.obj \
467
$(DIROBJ)\hostip4.obj \
468
$(DIROBJ)\hostip6.obj \
469
$(DIROBJ)\hostsyn.obj \
470
$(DIROBJ)\hostthre.obj \
472
$(DIROBJ)\http_chunks.obj \
473
$(DIROBJ)\http_digest.obj \
474
$(DIROBJ)\http_negotiate.obj \
475
$(DIROBJ)\http_ntlm.obj \
476
$(DIROBJ)\if2ip.obj \
477
$(DIROBJ)\inet_ntop.obj \
478
$(DIROBJ)\inet_pton.obj \
480
$(DIROBJ)\llist.obj \
482
$(DIROBJ)\memdebug.obj \
483
$(DIROBJ)\mprintf.obj \
484
$(DIROBJ)\multi.obj \
485
$(DIROBJ)\netrc.obj \
486
$(DIROBJ)\parsedate.obj \
487
$(DIROBJ)\progress.obj \
488
$(DIROBJ)\rawstr.obj \
489
$(DIROBJ)\select.obj \
490
$(DIROBJ)\sendf.obj \
491
$(DIROBJ)\share.obj \
492
$(DIROBJ)\socks.obj \
493
$(DIROBJ)\socks_sspi.obj \
494
$(DIROBJ)\speedcheck.obj \
495
$(DIROBJ)\splay.obj \
497
$(DIROBJ)\sslgen.obj \
498
$(DIROBJ)\ssluse.obj \
499
$(DIROBJ)\strequal.obj \
500
$(DIROBJ)\strerror.obj \
501
$(DIROBJ)\strtok.obj \
502
$(DIROBJ)\strtoofft.obj \
503
$(DIROBJ)\telnet.obj \
505
$(DIROBJ)\timeval.obj \
506
$(DIROBJ)\transfer.obj \
508
$(DIROBJ)\version.obj \
514
$(LNK) $(LFLAGS) $(X_OBJS)
515
-xcopy $(DIROBJ)\$(LIB_NAME).dll . /y
516
-xcopy $(DIROBJ)\$(LIB_NAME).lib . /y
517
-xcopy $(DIROBJ)\$(LIB_NAME_DEBUG).dll . /y
518
-xcopy $(DIROBJ)\$(LIB_NAME_DEBUG).lib . /y
519
-xcopy $(DIROBJ)\$(IMPLIB_NAME).lib . /y
520
-xcopy $(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib . /y
521
-xcopy $(DIROBJ)\*.exp . /y
522
-xcopy $(DIROBJ)\*.pdb . /y
527
@if not exist "$(DIROBJ)" mkdir $(DIROBJ)
529
.SUFFIXES: .c .obj .res
531
{.\}.c{$(DIROBJ)\}.obj:
532
$(CC) $(CFLAGS) /Fo"$@" $<
534
debug-dll\libcurl.res \
535
debug-dll-ssl-dll\libcurl.res \
536
debug-dll-zlib-dll\libcurl.res \
537
debug-dll-ssl-dll-zlib-dll\libcurl.res: libcurl.rc
538
rc /dCURLDEBUG=1 /Fo $@ libcurl.rc
540
release-dll\libcurl.res \
541
release-dll-ssl-dll\libcurl.res \
542
release-dll-zlib-dll\libcurl.res \
543
release-dll-ssl-dll-zlib-dll\libcurl.res: libcurl.rc
544
rc /dCURLDEBUG=0 /Fo $@ libcurl.rc
545
!ENDIF # End of case where a config was provided.