!IF "$(MODE)"=="static"
TARGET = $(LIB_NAME_STATIC)
AS_DLL = false
CFGSET=true
!ELSEIF "$(MODE)"=="dll"
TARGET = $(LIB_NAME_DLL)
AS_DLL = true
CFGSET=true
!ELSE
!MESSAGE Invalid mode: $(MODE)

#######################
# Usage
#

!MESSAGE Usage: nmake /f Makefile.vc mode=<static or dll> <options>
!MESSAGE where <options> is one or many of:
!MESSAGE   VC=<6,7,8,9,10,11,12,14>     - VC versions
!MESSAGE   WITH_DEVEL=<path>            - Paths for the development files (SSL, zlib, etc.)
!MESSAGE                                  Defaults to sibbling directory deps: ../deps
!MESSAGE                                  Libraries can be fetched at http://pecl2.php.net/downloads/php-windows-builds/
!MESSAGE                                  Uncompress them into the deps folder.
!MESSAGE   WITH_SSL=<dll or static>     - Enable OpenSSL support, DLL or static
!MESSAGE   WITH_CARES=<dll or static>   - Enable c-ares support, DLL or static
!MESSAGE   WITH_ZLIB=<dll or static>    - Enable zlib support, DLL or static
!MESSAGE   WITH_SSH2=<dll or static>    - Enable libSSH2 support, DLL or static
!MESSAGE   WITH_MBEDTLS=<dll or static> - Enable mbedTLS support, DLL or static
!MESSAGE   ENABLE_IDN=<yes or no>       - Enable use of Windows IDN APIs, defaults to yes
!MESSAGE                                  Requires Windows Vista or later, or installation from:
!MESSAGE                                  https://www.microsoft.com/en-us/download/details.aspx?id=734
!MESSAGE   ENABLE_IPV6=<yes or no>      - Enable IPv6, defaults to yes
!MESSAGE   ENABLE_SSPI=<yes or no>      - Enable SSPI support, defaults to yes
!MESSAGE   ENABLE_WINSSL=<yes or no>    - Enable native Windows SSL support, defaults to yes
!MESSAGE   GEN_PDB=<yes or no>          - Generate Program Database (debug symbols for release build)
!MESSAGE   DEBUG=<yes or no>            - Debug builds
!MESSAGE   MACHINE=<x86 or x64>         - Target architecture (default x64 on AMD64, x86 on others)
!ERROR please choose a valid mode

!ENDIF

!INCLUDE "../lib/Makefile.inc"
LIBCURL_OBJS=$(CSOURCES:.c=.obj)

!INCLUDE "../src/Makefile.inc"

# tool_hugehelp has a special rule
CURL_OBJS=$(CURL_CFILES:tool_hugehelp.c=)

CURL_OBJS=$(CURL_OBJS:.c=.obj)


# backwards compatible check for USE_SSPI
!IFDEF USE_SSPI
ENABLE_SSPI = $(USE_SSPI)
!ENDIF

# default options
!IFNDEF MACHINE
!IF "$(PROCESSOR_ARCHITECTURE)"=="AMD64"
MACHINE = x64
!ELSE
MACHINE = x86
!ENDIF
!ENDIF

!IFNDEF ENABLE_IDN
USE_IDN = true
!ELSEIF "$(ENABLE_IDN)"=="yes"
USE_IDN = true
!ELSEIF "$(ENABLE_IDN)"=="no"
USE_IDN = false
!ENDIF

!IFNDEF ENABLE_IPV6
USE_IPV6 = true
!ELSEIF "$(ENABLE_IPV6)"=="yes"
USE_IPV6 = true
!ELSEIF "$(ENABLE_IPV6)"=="no"
USE_IPV6 = false
!ENDIF

!IFNDEF ENABLE_SSPI
USE_SSPI = true
!ELSEIF "$(ENABLE_SSPI)"=="yes"
USE_SSPI = true
!ELSEIF "$(ENABLE_SSPI)"=="no"
USE_SSPI = false
!ENDIF

!IFNDEF ENABLE_WINSSL
!IF DEFINED(WITH_SSL) || DEFINED(WITH_MBEDTLS)
USE_WINSSL = false
!ELSE
USE_WINSSL = $(USE_SSPI)
!ENDIF
!ELSEIF "$(ENABLE_WINSSL)"=="yes"
USE_WINSSL = true
!ELSEIF "$(ENABLE_WINSSL)"=="no"
USE_WINSSL = false
!ENDIF

CONFIG_NAME_LIB = libcurl

!IF "$(WITH_SSL)"=="dll"
USE_SSL = true
SSL     = dll
!ELSEIF "$(WITH_SSL)"=="static"
USE_SSL = true
SSL     = static
!ENDIF

!IF "$(WITH_MBEDTLS)"=="dll" || "$(WITH_MBEDTLS)"=="static"
USE_MBEDTLS = true
MBEDTLS     = $(WITH_MBEDTLS)
!ENDIF

!IF ( "$(USE_SSL)"=="true" && "$(USE_WINSSL)"=="true" ) \
 || ( "$(USE_SSL)"=="true" && "$(USE_MBEDTLS)"=="true" ) \
 || ( "$(USE_MBEDTLS)"=="true" && "$(USE_WINSSL)"=="true" )
!ERROR SSL, MBEDTLS and WINSSL are mutual exclusive options.
!ENDIF

!IF "$(WITH_CARES)"=="dll"
USE_CARES = true
CARES     = dll
!ELSEIF "$(WITH_CARES)"=="static"
USE_CARES = true
CARES     = static
!ENDIF

!IF "$(WITH_ZLIB)"=="dll"
USE_ZLIB = true
ZLIB     = dll
!ELSEIF "$(WITH_ZLIB)"=="static"
USE_ZLIB = true
ZLIB     = static
!ENDIF

!IF "$(WITH_SSH2)"=="dll"
USE_SSH2 = true
SSH2     = dll
!ELSEIF "$(WITH_SSH2)"=="static"
USE_SSH2 = true
SSH2     = static
!ENDIF

CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-vc$(VC)-$(MACHINE)

!IF "$(DEBUG)"=="yes"
CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-debug
!ELSE
CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-release
!ENDIF

!IF "$(AS_DLL)"=="true"
CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-dll
!ELSE
CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-static
!ENDIF

!IF "$(USE_SSL)"=="true"
CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-ssl-$(SSL)
!ENDIF

!IF "$(USE_MBEDTLS)"=="true"
CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-mbedtls-$(MBEDTLS)
!ENDIF

!IF "$(USE_CARES)"=="true"
CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-cares-$(CARES)
!ENDIF

!IF "$(USE_ZLIB)"=="true"
CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-zlib-$(ZLIB)
!ENDIF

!IF "$(USE_SSH2)"=="true"
CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-ssh2-$(SSH2)
!ENDIF

!IF "$(USE_IPV6)"=="true"
CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-ipv6
!ENDIF

!IF "$(USE_SSPI)"=="true"
CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-sspi
!ENDIF

!IF "$(USE_WINSSL)"=="true"
CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-winssl
!ENDIF

!MESSAGE configuration name: $(CONFIG_NAME_LIB)

BUILD_DIR=../builds/$(CONFIG_NAME_LIB)
LIBCURL_DIROBJ = ..\builds\$(CONFIG_NAME_LIB)-obj-lib
CURL_DIROBJ = ..\builds\$(CONFIG_NAME_LIB)-obj-curl
DIRDIST = ..\builds\$(CONFIG_NAME_LIB)\

$(MODE):
	@IF NOT EXIST ..\include\curl\curlbuild.h ( \
	   CALL ..\buildconf.bat \
	)
	@SET DIROBJ=$(LIBCURL_DIROBJ)
	@SET MACRO_NAME=LIBCURL_OBJS
	@SET OUTFILE=LIBCURL_OBJS.inc
	@gen_resp_file.bat $(LIBCURL_OBJS)

	@SET DIROBJ=$(CURL_DIROBJ)
	@SET MACRO_NAME=CURL_OBJS
	@SET OUTFILE=CURL_OBJS.inc
	@gen_resp_file.bat $(CURL_OBJS)

	@SET CONFIG_NAME_LIB=$(CONFIG_NAME_LIB)
	@SET MACHINE=$(MACHINE)
	@SET USE_IDN=$(USE_IDN)
	@SET USE_IPV6=$(USE_IPV6)
	@SET USE_SSPI=$(USE_SSPI)
	@SET USE_WINSSL=$(USE_WINSSL)
	@$(MAKE) /NOLOGO /F MakefileBuild.vc

copy_from_lib:
	echo copying .c...
	FOR %%i IN ($(CURLX_CFILES:/=\)) DO copy %%i ..\src\
