curl/winbuild/Makefile.vc
kdekker 7921659450 winbuild: Support custom devel paths for each dependency
- Support custom devel paths for c-ares, mbedTLS, nghttp2, libSSH2,
  OpenSSL and zlib. Respectively: CARES_PATH, MBEDTLS_PATH,
  NGHTTP2_PATH, SSH2_PATH, SSL_PATH and ZLIB_PATH.

- Use lib.exe for making the static library instead of link.exe /lib.
  The latter is undocumented and could cause problems as noted in the
  comments.

- Remove a dangling URL that no longer worked. (I was not able to find
  the IDN download at MSDN/microsoft.com, so it seems to be removed.)

- Remove custom override for release-ssh2-ssl-dll-zlib configuration.
  Nobody knows why it was there and as far as we can see is unnecessary.

Closes https://github.com/curl/curl/pull/2474
2018-04-17 03:13:50 -04:00

281 lines
7.7 KiB
Makefile

#***************************************************************************
# _ _ ____ _
# Project ___| | | | _ \| |
# / __| | | | |_) | |
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
# Copyright (C) 1999 - 2017, 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 https://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.
#
#***************************************************************************
!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,15> - 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_NGHTTP2=<dll or static> - Enable HTTP/2 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
!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)
!MESSAGE CARES_PATH=<path to cares> - Custom path for c-ares
!MESSAGE MBEDTLS_PATH=<path to mbedTLS> - Custom path for mbedTLS
!MESSAGE NGHTTP2_PATH=<path to HTTP/2> - Custom path for nghttp2
!MESSAGE SSH2_PATH=<path to libSSH2> - Custom path for libSSH2
!MESSAGE SSL_PATH=<path to OpenSSL> - Custom path for OpenSSL
!MESSAGE ZLIB_PATH=<path to zlib> - Custom path for zlib
!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
# Note: nmake magically changes the value of PROCESSOR_ARCHITECTURE from "AMD64"
# to "x86" when building in a 32 bit build environment on a 64 bit 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 "$(ENABLE_NGHTTP2)"=="yes"
# compatibility bit, WITH_NGHTTP2 is the correct flag
WITH_NGHTTP2 = dll
USE_NGHTTP2 = true
NGHTTP2 = dll
!ELSEIF "$(WITH_NGHTTP2)"=="dll"
USE_NGHTTP2 = true
NGHTTP2 = dll
!ELSEIF "$(WITH_NGHTTP2)"=="static"
USE_NGHTTP2 = true
NGHTTP2 = static
!ENDIF
!IFNDEF USE_NGHTTP2
USE_NGHTTP2 = false
!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
!IF "$(USE_NGHTTP2)"=="true"
CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-nghttp2-$(NGHTTP2)
!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):
@SET DIROBJ=$(LIBCURL_DIROBJ)
@SET MACRO_NAME=LIBCURL_OBJS
@SET OUTFILE=LIBCURL_OBJS.inc
@CALL gen_resp_file.bat $(LIBCURL_OBJS)
@SET DIROBJ=$(CURL_DIROBJ)
@SET MACRO_NAME=CURL_OBJS
@SET OUTFILE=CURL_OBJS.inc
@CALL gen_resp_file.bat $(CURL_OBJS)
@SET CONFIG_NAME_LIB=$(CONFIG_NAME_LIB)
@SET MACHINE=$(MACHINE)
@SET USE_NGHTTP2=$(USE_NGHTTP2)
@SET USE_IDN=$(USE_IDN)
@SET USE_IPV6=$(USE_IPV6)
@SET USE_SSPI=$(USE_SSPI)
@SET USE_WINSSL=$(USE_WINSSL)
# compatibility bit
@SET WITH_NGHTTP2=$(WITH_NGHTTP2)
@$(MAKE) /NOLOGO /F MakefileBuild.vc
copy_from_lib:
echo copying .c...
FOR %%i IN ($(CURLX_CFILES:/=\)) DO copy %%i ..\src\
clean:
$(MAKE) /NOLOGO /F MakefileBuild.vc $@