############################################################# # $Id$ # # Makefile for building libcurl with MSVC8 # # Usage: see usage message below # Should be invoked from \lib directory # Edit the paths and desired library name # SSL path is only required if you intend compiling # with SSL. # # This make file leaves the result either a .lib or .dll file # in the \lib directory. It should be called from the \lib # directory. # # An option would have been to allow the source directory to # be specified, but I saw no requirement. # # Another option would have been to leave the .lib and .dll # files in the "cfg" directory, but then the make file # in \src would need to be changed. # ############################################################## # # Stem for static libs and DLLs # LIB_NAME = libcurl LIB_NAME_DEBUG = libcurld # # Stem for DLL import libs # IMPLIB_NAME = libcurl_imp IMPLIB_NAME_DEBUG = libcurld_imp !IFNDEF OPENSSL_PATH OPENSSL_PATH = ../../openssl-0.9.8g !ENDIF !IFNDEF ZLIB_PATH ZLIB_PATH = ../../zlib-1.2.3 !ENDIF !IFNDEF MACHINE MACHINE = X86 !ENDIF # USE_WINDOWS_SSPI uses windows libraries to allow NTLM authentication # without an openssl installation and offers the ability to authenticate # using the "current logged in user". Since at least with MSVC8 the sspi.h # header is broken it is either required to install the Windows SDK, # or to fix sspi.h with adding this define at the beginning of sspi.h: # #define FreeCredentialHandle FreeCredentialsHandle # # If, for some reason the Windows SDK is installed but not installed # in the default location, you can specify WINDOWS_SDK_PATH. # It can be downloaded from: # http://www.microsoft.com/msdownload/platformsdk/sdkupdate/ # WINDOWS_SSPI = 1 !IFDEF WINDOWS_SSPI !IFNDEF WINDOWS_SDK_PATH WINDOWS_SDK_PATH = "C:\Program Files\Microsoft SDK" !ENDIF !ENDIF ############################################################# ## Nothing more to do below this line! CCNODBG = cl.exe /O2 /DNDEBUG CCDEBUG = cl.exe /Od /Gm /Zi /D_DEBUG /RTC1 CFLAGSSSL = /DUSE_SSLEAY /I "$(OPENSSL_PATH)/inc32" /I "$(OPENSSL_PATH)/inc32/openssl" CFLAGSZLIB = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ /I "$(ZLIB_PATH)" CFLAGS = /I. /I../include /nologo /W3 /EHsc /DWIN32 /FD /c /DBUILDING_LIBCURL CFLAGSLIB = /DCURL_STATICLIB LNKDLL = link.exe /DLL LNKLIB = link.exe /lib LFLAGS = /nologo /machine:$(MACHINE) SSLLIBS = libeay32.lib ssleay32.lib ZLIBLIBSDLL= zdll.lib ZLIBLIBS = zlib.lib WINLIBS = wsock32.lib bufferoverflowu.lib wldap32.lib CFLAGS = $(CFLAGS) CFGSET = FALSE !IFDEF WINDOWS_SSPI CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include !ENDIF ############################################################## # Runtime library configuration RTLIB = /MD RTLIBD = /MDd !IF "$(RTLIBCFG)" == "static" RTLIB = /MT RTLIBD = /MTd !ENDIF ###################### # release !IF "$(CFG)" == "release" TARGET = $(LIB_NAME).lib DIROBJ = $(CFG) LNK = $(LNKLIB) /out:$(DIROBJ)\$(TARGET) CC = $(CCNODBG) $(RTLIB) $(CFLAGSLIB) CFGSET = TRUE !ENDIF ###################### # release-zlib !IF "$(CFG)" == "release-zlib" TARGET = $(LIB_NAME).lib DIROBJ = $(CFG) LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)" LNK = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) CC = $(CCNODBG) $(RTLIB) $(CFLAGSZLIB) $(CFLAGSLIB) CFGSET = TRUE !ENDIF ###################### # release-dll !IF "$(CFG)" == "release-dll" TARGET = $(LIB_NAME).dll DIROBJ = $(CFG) LNK = $(LNKDLL) $(WINLIBS) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME).lib CC = $(CCNODBG) $(RTLIB) CFGSET = TRUE RESOURCE = $(DIROBJ)\libcurl.res !ENDIF ###################### # release-ssl !IF "$(CFG)" == "release-ssl" TARGET = $(LIB_NAME).lib DIROBJ = $(CFG) LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32" LNK = $(LNKLIB) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET) CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSLIB) CFGSET = TRUE !ENDIF ###################### # release-ssl-dll !IF "$(CFG)" == "release-ssl-dll" TARGET = $(LIB_NAME).lib DIROBJ = $(CFG) LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll" LNK = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET) CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSLIB) CFGSET = TRUE !ENDIF ###################### # release-ssl-zlib !IF "$(CFG)" == "release-ssl-zlib" TARGET = $(LIB_NAME).lib DIROBJ = $(CFG) LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32" LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)" LNK = $(LNKLIB) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB) CFGSET = TRUE !ENDIF ###################### # release-dll-ssl-dll !IF "$(CFG)" == "release-dll-ssl-dll" TARGET = $(LIB_NAME).dll DIROBJ = $(CFG) LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll" LNK = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME).lib CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) CFGSET = TRUE RESOURCE = $(DIROBJ)\libcurl.res !ENDIF ###################### # release-zlib-dll !IF "$(CFG)" == "release-zlib-dll" TARGET = $(LIB_NAME).lib DIROBJ = $(CFG) LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)" LNK = $(LNKLIB) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) CC = $(CCNODBG) $(RTLIB) $(CFLAGSZLIB) $(CFLAGSLIB) CFGSET = TRUE !ENDIF ###################### # release-ssl-dll-zlib-dll !IF "$(CFG)" == "release-ssl-dll-zlib-dll" TARGET = $(LIB_NAME).lib DIROBJ = $(CFG) LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)" LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll" LNK = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB) CFGSET = TRUE !ENDIF ###################### # release-dll-zlib-dll !IF "$(CFG)" == "release-dll-zlib-dll" TARGET = $(LIB_NAME).dll DIROBJ = $(CFG) LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)" LNK = $(LNKDLL) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME).lib CC = $(CCNODBG) $(RTLIB) $(CFLAGSZLIB) CFGSET = TRUE RESOURCE = $(DIROBJ)\libcurl.res !ENDIF ###################### # release-dll-ssl-dll-zlib-dll !IF "$(CFG)" == "release-dll-ssl-dll-zlib-dll" TARGET = $(LIB_NAME).dll DIROBJ = $(CFG) LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)" LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll" LNK = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME).lib CC = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSZLIB) CFGSET = TRUE RESOURCE = $(DIROBJ)\libcurl.res !ENDIF ###################### # debug !IF "$(CFG)" == "debug" TARGET = $(LIB_NAME_DEBUG).lib DIROBJ = $(CFG) LNK = $(LNKLIB) /out:$(DIROBJ)\$(TARGET) CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSLIB) CFGSET = TRUE !ENDIF ###################### # debug-ssl !IF "$(CFG)" == "debug-ssl" TARGET = $(LIB_NAME_DEBUG).lib DIROBJ = $(CFG) LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32" LNK = $(LNKLIB) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET) CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSLIB) CFGSET = TRUE !ENDIF ###################### # debug-zlib !IF "$(CFG)" == "debug-zlib" TARGET = $(LIB_NAME_DEBUG).lib DIROBJ = $(CFG) LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)" LNK = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSZLIB) $(CFLAGSLIB) CFGSET = TRUE !ENDIF ###################### # debug-ssl-dll !IF "$(CFG)" == "debug-ssl-dll" TARGET = $(LIB_NAME_DEBUG).lib DIROBJ = $(CFG) LFLAGSSSL = /LIBPATH:$(OPENSSL_PATH)\out32dll LNK = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET) CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSLIB) CFGSET = TRUE !ENDIF ###################### # debug-ssl-zlib !IF "$(CFG)" == "debug-ssl-zlib" TARGET = $(LIB_NAME_DEBUG).lib DIROBJ = $(CFG) LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)" LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32" LNK = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB) CFGSET = TRUE !ENDIF ###################### # debug-zlib-dll !IF "$(CFG)" == "debug-zlib-dll" TARGET = $(LIB_NAME_DEBUG).lib DIROBJ = $(CFG) LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)" LNK = $(LNKLIB) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSZLIB) $(CFLAGSLIB) CFGSET = TRUE !ENDIF ###################### # debug-ssl-dll-zlib-dll !IF "$(CFG)" == "debug-ssl-dll-zlib-dll" TARGET = $(LIB_NAME_DEBUG).lib DIROBJ = $(CFG) LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)" LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll" LNK = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB) CFGSET = TRUE !ENDIF ###################### # debug-dll !IF "$(CFG)" == "debug-dll" TARGET = $(LIB_NAME_DEBUG).dll DIROBJ = $(CFG) LNK = $(LNKDLL) $(WINLIBS) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib /PDB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).pdb CC = $(CCDEBUG) $(RTLIBD) CFGSET = TRUE RESOURCE = $(DIROBJ)\libcurl.res !ENDIF ###################### # debug-dll-ssl-dll !IF "$(CFG)" == "debug-dll-ssl-dll" TARGET = $(LIB_NAME_DEBUG).dll DIROBJ = $(CFG) LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll" LNK = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib /PDB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).pdb CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) CFGSET = TRUE RESOURCE = $(DIROBJ)\libcurl.res !ENDIF ###################### # debug-dll-zlib-dll !IF "$(CFG)" == "debug-dll-zlib-dll" TARGET = $(LIB_NAME_DEBUG).dll DIROBJ = $(CFG) LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)" LNK = $(LNKDLL) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib /PDB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).pdb CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSZLIB) CFGSET = TRUE RESOURCE = $(DIROBJ)\libcurl.res !ENDIF ###################### # debug-dll-ssl-dll-zlib-dll !IF "$(CFG)" == "debug-dll-ssl-dll-zlib-dll" TARGET = $(LIB_NAME_DEBUG).dll DIROBJ = $(CFG) LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)" LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll" LNK = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib /PDB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).pdb CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSZLIB) CFGSET = TRUE RESOURCE = $(DIROBJ)\libcurl.res !ENDIF ####################### # Usage # !IF "$(CFGSET)" == "FALSE" && "$(CFG)" != "" !MESSAGE Usage: nmake /f makefile.vc8 CFG= !MESSAGE where is one of: !MESSAGE release - release static library !MESSAGE release-ssl - release static library with ssl !MESSAGE release-zlib - release static library with zlib !MESSAGE release-ssl-zlib - release static library with ssl and zlib !MESSAGE release-ssl-dll - release static library with dynamic ssl !MESSAGE release-zlib-dll - release static library with dynamic zlib !MESSAGE release-ssl-dll-zlib-dll - release static library with dynamic ssl and dynamic zlib !MESSAGE release-dll - release dynamic library !MESSAGE release-dll-ssl-dll - release dynamic library with dynamic ssl !MESSAGE release-dll-zlib-dll - release dynamic library with dynamic zlib !MESSAGE release-dll-ssl-dll-zlib-dll - release dynamic library with dynamic ssl and dynamic zlib !MESSAGE debug - debug static library !MESSAGE debug-ssl - debug static library with ssl !MESSAGE debug-zlib - debug static library with zlib !MESSAGE debug-ssl-zlib - debug static library with ssl and zlib !MESSAGE debug-ssl-dll - debug static library with dynamic ssl !MESSAGE debug-zlib-dll - debug static library with dynamic zlib !MESSAGE debug-ssl-dll-zlib-dll - debug static library with dynamic ssl and dynamic zlib !MESSAGE debug-dll - debug dynamic library !MESSAGE debug-dll-ssl-dll - debug dynamic library with dynamic ssl !MESSAGE debug-dll-zlib-dll - debug dynamic library with dynamic zlib1 !MESSAGE debug-dll-ssl-dll-zlib-dll - debug dynamic library with dynamic ssl and dynamic zlib !MESSAGE can be left blank in which case all is assumed !ERROR please choose a valid configuration "$(CFG)" !ENDIF ####################### # Only the clean target can be used if a config was not provided. # !IF "$(CFGSET)" == "FALSE" clean: @-erase /s *.dll 2> NUL @-erase /s *.exp 2> NUL @-erase /s *.idb 2> NUL @-erase /s *.lib 2> NUL @-erase /s *.obj 2> NUL @-erase /s *.pch 2> NUL @-erase /s *.pdb 2> NUL @-erase /s *.res 2> NUL !ELSE # A config was provided, so the library can be built. # X_OBJS= \ $(DIROBJ)\base64.obj \ $(DIROBJ)\cookie.obj \ $(DIROBJ)\transfer.obj \ $(DIROBJ)\escape.obj \ $(DIROBJ)\formdata.obj \ $(DIROBJ)\ftp.obj \ $(DIROBJ)\http.obj \ $(DIROBJ)\http_chunks.obj \ $(DIROBJ)\ldap.obj \ $(DIROBJ)\dict.obj \ $(DIROBJ)\telnet.obj \ $(DIROBJ)\parsedate.obj \ $(DIROBJ)\getenv.obj \ $(DIROBJ)\gtls.obj \ $(DIROBJ)\inet_pton.obj \ $(DIROBJ)\hostip.obj \ $(DIROBJ)\hostasyn.obj \ $(DIROBJ)\hostsyn.obj \ $(DIROBJ)\hostares.obj \ $(DIROBJ)\hostthre.obj \ $(DIROBJ)\hostip4.obj \ $(DIROBJ)\hostip6.obj \ $(DIROBJ)\inet_ntop.obj \ $(DIROBJ)\if2ip.obj \ $(DIROBJ)\mprintf.obj \ $(DIROBJ)\netrc.obj \ $(DIROBJ)\progress.obj \ $(DIROBJ)\sendf.obj \ $(DIROBJ)\speedcheck.obj \ $(DIROBJ)\sslgen.obj \ $(DIROBJ)\ssluse.obj \ $(DIROBJ)\timeval.obj \ $(DIROBJ)\url.obj \ $(DIROBJ)\file.obj \ $(DIROBJ)\getinfo.obj \ $(DIROBJ)\version.obj \ $(DIROBJ)\easy.obj \ $(DIROBJ)\strequal.obj \ $(DIROBJ)\strtok.obj \ $(DIROBJ)\strtoofft.obj \ $(DIROBJ)\connect.obj \ $(DIROBJ)\hash.obj \ $(DIROBJ)\llist.obj \ $(DIROBJ)\share.obj \ $(DIROBJ)\multi.obj \ $(DIROBJ)\http_digest.obj \ $(DIROBJ)\http_negotiate.obj \ $(DIROBJ)\http_ntlm.obj \ $(DIROBJ)\md5.obj \ $(DIROBJ)\memdebug.obj \ $(DIROBJ)\strerror.obj \ $(DIROBJ)\select.obj \ $(DIROBJ)\content_encoding.obj \ $(DIROBJ)\tftp.obj \ $(DIROBJ)\splay.obj \ $(DIROBJ)\socks.obj \ $(RESOURCE) all : $(TARGET) $(TARGET): $(X_OBJS) $(LNK) $(LFLAGS) $(X_OBJS) -xcopy $(DIROBJ)\$(LIB_NAME).dll . /y -xcopy $(DIROBJ)\$(LIB_NAME).lib . /y -xcopy $(DIROBJ)\$(LIB_NAME_DEBUG).dll . /y -xcopy $(DIROBJ)\$(LIB_NAME_DEBUG).lib . /y -xcopy $(DIROBJ)\$(IMPLIB_NAME).lib . /y -xcopy $(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib . /y -xcopy $(DIROBJ)\*.exp . /y -xcopy $(DIROBJ)\*.pdb . /y $(X_OBJS): $(DIROBJ) $(DIROBJ): @if not exist "$(DIROBJ)" mkdir $(DIROBJ) .SUFFIXES: .c .obj .res {.\}.c{$(DIROBJ)\}.obj: $(CC) $(CFLAGS) /Fo"$@" $< debug-dll\libcurl.res \ debug-dll-ssl-dll\libcurl.res \ debug-dll-zlib-dll\libcurl.res \ debug-dll-ssl-dll-zlib-dll\libcurl.res: libcurl.rc rc /dCURLDEBUG=1 /Fo $@ libcurl.rc release-dll\libcurl.res \ release-dll-ssl-dll\libcurl.res \ release-dll-zlib-dll\libcurl.res \ release-dll-ssl-dll-zlib-dll\libcurl.res: libcurl.rc rc /dCURLDEBUG=0 /Fo $@ libcurl.rc !ENDIF # End of case where a config was provided.