#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1999 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at http://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is
# furnished to do so, under the terms of the COPYING file.
#
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
# KIND, either express or implied.
#
#***************************************************************************

#############################################################
#
## Makefile for building curl.exe with MSVC6
## Use: nmake -f makefile.vc6 [release | debug] [CFG=release-ssl]
##      (default is release)
## "nmake -f makefile.vc6 CFG=release-ssl" statically links OpenSSL
## into curl.exe producing a standalone SSL-enabled executable.
##
#
#############################################################

PROGRAM_NAME = curl.exe

# -------------------------------------------
# Verify that current subdir is curl's 'src'
# -------------------------------------------

!IF ! EXIST(.\main.c)
!  MESSAGE Can not process this makefile from outside of curl's 'src' subdirectory.
!  MESSAGE Change to curl's 'src' subdirectory, and try again.
!  ERROR   See previous message.
!ENDIF

# ------------------------------------------------
# Makefile.msvc.names provides libcurl file names
# ------------------------------------------------

!INCLUDE ..\Makefile.msvc.names



!IFNDEF OPENSSL_PATH
OPENSSL_PATH = ../../openssl-0.9.8r
!ENDIF

!IFNDEF ZLIB_PATH
ZLIB_PATH = ../../zlib-1.2.5
!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 MSVC6 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 = "$(PROGRAMFILES)\Microsoft SDK"
!ENDIF
!ENDIF

########################################################
## Nothing more to do below this line!
ZLIB_CFLAGS   = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ /I "$(ZLIB_PATH)"
ZLIB_LFLAGS   = "/LIBPATH:$(ZLIB_PATH)"
ZLIB_LIBS     = zlib.lib
ZLIB_IMP_LIBS = zdll.lib

SSL_CFLAGS     = /DUSE_SSLEAY
SSL_LFLAGS     = /LIBPATH:"$(OPENSSL_PATH)/out32"
SSL_IMP_LFLAGS = /LIBPATH:"$(OPENSSL_PATH)/out32dll"
SSL_LIBS       = libeay32.lib ssleay32.lib gdi32.lib user32.lib advapi32.lib

# Runtime library configuration
RTLIB   = /MD
RTLIBD  = /MDd

!IF "$(RTLIBCFG)" == "static"
RTLIB  = /MT
RTLIBD = /MTd
!ENDIF

## Release
CCR   = cl.exe $(RTLIB) /O2 /DNDEBUG
LINKR = link.exe /incremental:no /libpath:"../lib"
RCR   = rc.exe /dDEBUGBUILD=0

## Debug
CCD   = cl.exe $(RTLIBD) /Gm /ZI /Od /D_DEBUG /GZ
LINKD = link.exe /incremental:yes /debug /libpath:"../lib"
RCD   = rc.exe /dDEBUGBUILD=1

CFLAGS   = /I../lib /I../include /nologo /W3 /GX /DWIN32 /YX /FD /c /D_BIND_TO_CURRENT_VCLIBS_VERSION=1
LFLAGS   = /nologo /out:$(PROGRAM_NAME) /subsystem:console /machine:$(MACHINE)
RESFLAGS = /i../include

# This manifest thing is for VC8, enabled by the maketgz script that
# builds the VC8 version of this makefile. Left commented out in the VC6
# version!
#MANIFESTTOOL = mt -manifest $(PROGRAM_NAME).manifest -outputresource:$(PROGRAM_NAME);1

!IFDEF WINDOWS_SSPI
CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include
!ENDIF

RELEASE_OBJS= \
	curlutilr.obj \
	getpassr.obj \
	homedirr.obj \
	hugehelpr.obj \
	mainr.obj \
	nonblockr.obj \
	os-specificr.obj \
	rawstrr.obj \
	strtoofftr.obj \
	urlglobr.obj \
	writeoutr.obj \
	xattrr.obj \
	curlr.res

DEBUG_OBJS= \
	curlutild.obj \
	getpassd.obj \
	homedird.obj \
	hugehelpd.obj \
	maind.obj \
	nonblockd.obj \
	os-specificd.obj \
	rawstrd.obj \
	strtoofftd.obj \
	urlglobd.obj \
	writeoutd.obj \
	xattrd.obj \
	curld.res

#################################################
# If CFG not specified, use static libs

CFLAGS         = $(CFLAGS) /DCURL_STATICLIB
LINKLIBS       = $(LIBCURL_STA_LIB_REL)
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG)

#################################################
# release dynamic library

!IF "$(CFG)" == "release-dll"
LINKLIBS       = $(LIBCURL_IMP_LIB_REL)
LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG)
!ENDIF

#################################################
# release static library with zlib

!IF "$(CFG)" == "release-zlib"
CFLAGS         = $(CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(ZLIB_LIBS)
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(ZLIB_LIBS)
LFLAGS         = $(LFLAGS) $(ZLIB_LFLAGS)
!ENDIF

#################################################
# release static library with ssl

!IF "$(CFG)" == "release-ssl"
CFLAGS         = $(CFLAGS) $(SSL_CFLAGS) /DCURL_STATICLIB
LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS)
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS)
LFLAGS         = $(LFLAGS) $(SSL_LFLAGS)
!ENDIF

#################################################
# release dynamic library with dynamic ssl

!IF "$(CFG)" == "release-dll-ssl-dll"
CFLAGS         = $(CFLAGS) $(SSL_CFLAGS)
LINKLIBS       = $(LIBCURL_IMP_LIB_REL) $(SSL_LIBS)
LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG) $(SSL_LIBS)
LFLAGS         = $(LFLAGS) $(SSL_IMP_LFLAGS)
!ENDIF

#################################################
# release static library with ssl and zlib

!IF "$(CFG)" == "release-ssl-zlib"
CFLAGS         = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS) $(ZLIB_LIBS)
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS) $(ZLIB_LIBS)
LFLAGS         = $(LFLAGS) $(SSL_LFLAGS) $(ZLIB_LFLAGS)
!ENDIF

#################################################
# release static library with dynamic ssl

!IF "$(CFG)" == "release-ssl-dll"
CFLAGS         = $(CFLAGS) $(SSL_CFLAGS) /DCURL_STATICLIB
LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS)
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS)
LFLAGS         = $(LFLAGS) $(SSL_IMP_LFLAGS)
!ENDIF

#################################################
# release static library with dynamic zlib

!IF "$(CFG)" == "release-zlib-dll"
CFLAGS         = $(CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(ZLIB_IMP_LIBS)
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(ZLIB_IMP_LIBS)
LFLAGS         = $(LFLAGS) $(ZLIB_LFLAGS)
!ENDIF

#################################################
# release dynamic library with dynamic zlib

!IF "$(CFG)" == "release-dll-zlib-dll"
CFLAGS         = $(CFLAGS) $(ZLIB_CFLAGS)
LINKLIBS       = $(LIBCURL_IMP_LIB_REL) $(ZLIB_IMP_LIBS)
LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG) $(ZLIB_IMP_LIBS)
LFLAGS         = $(LFLAGS) $(ZLIB_LFLAGS)
!ENDIF

#################################################
# release static library with dynamic ssl and dynamic zlib

!IF "$(CFG)" == "release-ssl-dll-zlib-dll"
CFLAGS         = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS) $(ZLIB_IMP_LIBS)
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS) $(ZLIB_IMP_LIBS)
LFLAGS         = $(LFLAGS) $(SSL_IMP_LFLAGS) $(ZLIB_LFLAGS)
!ENDIF

#################################################
# release dynamic library with dynamic ssl and dynamic zlib

!IF "$(CFG)" == "release-dll-ssl-dll-zlib-dll"
CFLAGS         = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS)
LINKLIBS       = $(LIBCURL_IMP_LIB_REL) $(SSL_LIBS) $(ZLIB_IMP_LIBS)
LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG) $(SSL_LIBS) $(ZLIB_IMP_LIBS)
LFLAGS         = $(LFLAGS) $(SSL_IMP_LFLAGS) $(ZLIB_LFLAGS)
!ENDIF


LINKLIBS       = $(LINKLIBS) ws2_32.lib wldap32.lib
LINKLIBS_DEBUG = $(LINKLIBS_DEBUG) ws2_32.lib wldap32.lib

all : release

release: $(RELEASE_OBJS)
	$(LINKR) $(LFLAGS) $(LINKLIBS) $(RELEASE_OBJS)
        $(MANIFESTTOOL)

debug: $(DEBUG_OBJS)
	$(LINKD) $(LFLAGS) $(LINKLIBS_DEBUG) $(DEBUG_OBJS)
        $(MANIFESTTOOL)

## Release
hugehelpr.obj: hugehelp.c
	$(CCR) $(CFLAGS) /Zm200 /Fo"$@" hugehelp.c
writeoutr.obj: writeout.c
	$(CCR) $(CFLAGS) /Fo"$@" writeout.c
urlglobr.obj: urlglob.c
	$(CCR) $(CFLAGS) /Fo"$@" urlglob.c
getpassr.obj: getpass.c
	$(CCR) $(CFLAGS) /Fo"$@" getpass.c
homedirr.obj: homedir.c
	$(CCR) $(CFLAGS) /Fo"$@" homedir.c
curlutilr.obj: curlutil.c
	$(CCR) $(CFLAGS) /Fo"$@" curlutil.c
os-specificr.obj: os-specific.c
	$(CCR) $(CFLAGS) /Fo"$@" os-specific.c
nonblockr.obj: ../lib/nonblock.c
	$(CCR) $(CFLAGS) /Fo"$@" ../lib/nonblock.c
rawstrr.obj: ../lib/rawstr.c
	$(CCR) $(CFLAGS) /Fo"$@" ../lib/rawstr.c
strtoofftr.obj: ../lib/strtoofft.c
	$(CCR) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c
xattrr.obj: xattr.c
	$(CCR) $(CFLAGS) /Fo"$@" xattr.c
mainr.obj: main.c
	$(CCR) $(CFLAGS) /Fo"$@" main.c
curlr.res : curl.rc
	$(RCR) $(RESFLAGS) /Fo"$@" curl.rc

## Debug
hugehelpd.obj: hugehelp.c
	$(CCD) $(CFLAGS) /Zm200 /Fo"$@" hugehelp.c
writeoutd.obj: writeout.c
	$(CCD) $(CFLAGS) /Fo"$@" writeout.c
urlglobd.obj: urlglob.c
	$(CCD) $(CFLAGS) /Fo"$@" urlglob.c
getpassd.obj: getpass.c
	$(CCD) $(CFLAGS) /Fo"$@" getpass.c
homedird.obj: homedir.c
	$(CCD) $(CFLAGS) /Fo"$@" homedir.c
curlutild.obj: curlutil.c
	$(CCD) $(CFLAGS) /Fo"$@" curlutil.c
os-specificd.obj: os-specific.c
	$(CCD) $(CFLAGS) /Fo"$@" os-specific.c
nonblockd.obj: ../lib/nonblock.c
	$(CCD) $(CFLAGS) /Fo"$@" ../lib/nonblock.c
rawstrd.obj: ../lib/rawstr.c
	$(CCD) $(CFLAGS) /Fo"$@" ../lib/rawstr.c
strtoofftd.obj: ../lib/strtoofft.c
	$(CCD) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c
xattrd.obj: xattr.c
	$(CCD) $(CFLAGS) /Fo"$@" xattr.c
maind.obj: main.c
	$(CCD) $(CFLAGS) /Fo"$@" main.c
curld.res : curl.rc
	$(RCD) $(RESFLAGS) /Fo"$@" curl.rc

clean:
	@-erase $(PROGRAM_NAME) 2> NUL
	@-erase $(RELEASE_OBJS) 2> NUL
	@-erase $(DEBUG_OBJS) 2> NUL
	@-erase *.idb 2> NUL
	@-erase *.pdb 2> NUL
	@-erase *.pch 2> NUL
	@-erase *.ilk 2> NUL
