1 #*************************************************************************** 2 # _ _ ____ _ 3 # Project ___| | | | _ \| | 4 # / __| | | | |_) | | 5 # | (__| |_| | _ <| |___ 6 # \___|\___/|_| \_\_____| 7 # 8 # Copyright (C) 1999 - 2017, Daniel Stenberg, <daniel (a] haxx.se>, et al. 9 # 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 https://curl.haxx.se/docs/copyright.html. 13 # 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. 17 # 18 # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 19 # KIND, either express or implied. 20 # 21 #*************************************************************************** 22 23 !IF "$(MODE)"=="static" 24 TARGET = $(LIB_NAME_STATIC) 25 AS_DLL = false 26 CFGSET=true 27 !ELSEIF "$(MODE)"=="dll" 28 TARGET = $(LIB_NAME_DLL) 29 AS_DLL = true 30 CFGSET=true 31 !ELSE 32 !MESSAGE Invalid mode: $(MODE) 33 34 ####################### 35 # Usage 36 # 37 38 !MESSAGE Usage: nmake /f Makefile.vc mode=<static or dll> <options> 39 !MESSAGE where <options> is one or many of: 40 !MESSAGE VC=<6,7,8,9,10,11,12,14,15> - VC versions 41 !MESSAGE WITH_DEVEL=<path> - Paths for the development files (SSL, zlib, etc.) 42 !MESSAGE Defaults to sibbling directory deps: ../deps 43 !MESSAGE Libraries can be fetched at https://windows.php.net/downloads/php-sdk/deps/ 44 !MESSAGE Uncompress them into the deps folder. 45 !MESSAGE WITH_SSL=<dll or static> - Enable OpenSSL support, DLL or static 46 !MESSAGE WITH_NGHTTP2=<dll or static> - Enable HTTP/2 support, DLL or static 47 !MESSAGE WITH_CARES=<dll or static> - Enable c-ares support, DLL or static 48 !MESSAGE WITH_ZLIB=<dll or static> - Enable zlib support, DLL or static 49 !MESSAGE WITH_SSH2=<dll or static> - Enable libSSH2 support, DLL or static 50 !MESSAGE WITH_MBEDTLS=<dll or static> - Enable mbedTLS support, DLL or static 51 !MESSAGE ENABLE_IDN=<yes or no> - Enable use of Windows IDN APIs, defaults to yes 52 !MESSAGE Requires Windows Vista or later 53 !MESSAGE ENABLE_IPV6=<yes or no> - Enable IPv6, defaults to yes 54 !MESSAGE ENABLE_SSPI=<yes or no> - Enable SSPI support, defaults to yes 55 !MESSAGE ENABLE_WINSSL=<yes or no> - Enable native Windows SSL support, defaults to yes 56 !MESSAGE ENABLE_OPENSSL_AUTO_LOAD_CONFIG=<yes or no> 57 !MESSAGE - Whether the OpenSSL configuration will be loaded automatically, defaults to yes 58 !MESSAGE GEN_PDB=<yes or no> - Generate Program Database (debug symbols for release build) 59 !MESSAGE DEBUG=<yes or no> - Debug builds 60 !MESSAGE MACHINE=<x86 or x64> - Target architecture (default x64 on AMD64, x86 on others) 61 !MESSAGE CARES_PATH=<path to cares> - Custom path for c-ares 62 !MESSAGE MBEDTLS_PATH=<path to mbedTLS> - Custom path for mbedTLS 63 !MESSAGE NGHTTP2_PATH=<path to HTTP/2> - Custom path for nghttp2 64 !MESSAGE SSH2_PATH=<path to libSSH2> - Custom path for libSSH2 65 !MESSAGE SSL_PATH=<path to OpenSSL> - Custom path for OpenSSL 66 !MESSAGE ZLIB_PATH=<path to zlib> - Custom path for zlib 67 !ERROR please choose a valid mode 68 69 !ENDIF 70 71 !INCLUDE "../lib/Makefile.inc" 72 LIBCURL_OBJS=$(CSOURCES:.c=.obj) 73 74 !INCLUDE "../src/Makefile.inc" 75 76 # tool_hugehelp has a special rule 77 CURL_OBJS=$(CURL_CFILES:tool_hugehelp.c=) 78 79 CURL_OBJS=$(CURL_OBJS:.c=.obj) 80 81 82 # backwards compatible check for USE_SSPI 83 !IFDEF USE_SSPI 84 ENABLE_SSPI = $(USE_SSPI) 85 !ENDIF 86 87 # default options 88 89 !IFNDEF MACHINE 90 # Note: nmake magically changes the value of PROCESSOR_ARCHITECTURE from "AMD64" 91 # to "x86" when building in a 32 bit build environment on a 64 bit machine. 92 !IF "$(PROCESSOR_ARCHITECTURE)"=="AMD64" 93 MACHINE = x64 94 !ELSE 95 MACHINE = x86 96 !ENDIF 97 !ENDIF 98 99 !IFNDEF ENABLE_IDN 100 USE_IDN = true 101 !ELSEIF "$(ENABLE_IDN)"=="yes" 102 USE_IDN = true 103 !ELSEIF "$(ENABLE_IDN)"=="no" 104 USE_IDN = false 105 !ENDIF 106 107 !IFNDEF ENABLE_IPV6 108 USE_IPV6 = true 109 !ELSEIF "$(ENABLE_IPV6)"=="yes" 110 USE_IPV6 = true 111 !ELSEIF "$(ENABLE_IPV6)"=="no" 112 USE_IPV6 = false 113 !ENDIF 114 115 !IFNDEF ENABLE_SSPI 116 USE_SSPI = true 117 !ELSEIF "$(ENABLE_SSPI)"=="yes" 118 USE_SSPI = true 119 !ELSEIF "$(ENABLE_SSPI)"=="no" 120 USE_SSPI = false 121 !ENDIF 122 123 !IFNDEF ENABLE_WINSSL 124 !IF DEFINED(WITH_SSL) || DEFINED(WITH_MBEDTLS) 125 USE_WINSSL = false 126 !ELSE 127 USE_WINSSL = $(USE_SSPI) 128 !ENDIF 129 !ELSEIF "$(ENABLE_WINSSL)"=="yes" 130 USE_WINSSL = true 131 !ELSEIF "$(ENABLE_WINSSL)"=="no" 132 USE_WINSSL = false 133 !ENDIF 134 135 !IFNDEF ENABLE_OPENSSL_AUTO_LOAD_CONFIG 136 ENABLE_OPENSSL_AUTO_LOAD_CONFIG = true 137 !ENDIF 138 139 CONFIG_NAME_LIB = libcurl 140 141 !IF "$(WITH_SSL)"=="dll" 142 USE_SSL = true 143 SSL = dll 144 !ELSEIF "$(WITH_SSL)"=="static" 145 USE_SSL = true 146 SSL = static 147 !ENDIF 148 149 !IF "$(ENABLE_NGHTTP2)"=="yes" 150 # compatibility bit, WITH_NGHTTP2 is the correct flag 151 WITH_NGHTTP2 = dll 152 USE_NGHTTP2 = true 153 NGHTTP2 = dll 154 !ELSEIF "$(WITH_NGHTTP2)"=="dll" 155 USE_NGHTTP2 = true 156 NGHTTP2 = dll 157 !ELSEIF "$(WITH_NGHTTP2)"=="static" 158 USE_NGHTTP2 = true 159 NGHTTP2 = static 160 !ENDIF 161 162 !IFNDEF USE_NGHTTP2 163 USE_NGHTTP2 = false 164 !ENDIF 165 166 !IF "$(WITH_MBEDTLS)"=="dll" || "$(WITH_MBEDTLS)"=="static" 167 USE_MBEDTLS = true 168 MBEDTLS = $(WITH_MBEDTLS) 169 !ENDIF 170 171 !IF ( "$(USE_SSL)"=="true" && "$(USE_WINSSL)"=="true" ) \ 172 || ( "$(USE_SSL)"=="true" && "$(USE_MBEDTLS)"=="true" ) \ 173 || ( "$(USE_MBEDTLS)"=="true" && "$(USE_WINSSL)"=="true" ) 174 !ERROR SSL, MBEDTLS and WINSSL are mutual exclusive options. 175 !ENDIF 176 177 !IF "$(WITH_CARES)"=="dll" 178 USE_CARES = true 179 CARES = dll 180 !ELSEIF "$(WITH_CARES)"=="static" 181 USE_CARES = true 182 CARES = static 183 !ENDIF 184 185 !IF "$(WITH_ZLIB)"=="dll" 186 USE_ZLIB = true 187 ZLIB = dll 188 !ELSEIF "$(WITH_ZLIB)"=="static" 189 USE_ZLIB = true 190 ZLIB = static 191 !ENDIF 192 193 !IF "$(WITH_SSH2)"=="dll" 194 USE_SSH2 = true 195 SSH2 = dll 196 !ELSEIF "$(WITH_SSH2)"=="static" 197 USE_SSH2 = true 198 SSH2 = static 199 !ENDIF 200 201 CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-vc$(VC)-$(MACHINE) 202 203 !IF "$(DEBUG)"=="yes" 204 CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-debug 205 !ELSE 206 CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-release 207 !ENDIF 208 209 !IF "$(AS_DLL)"=="true" 210 CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-dll 211 !ELSE 212 CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-static 213 !ENDIF 214 215 !IF "$(USE_SSL)"=="true" 216 CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-ssl-$(SSL) 217 !ENDIF 218 219 !IF "$(USE_MBEDTLS)"=="true" 220 CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-mbedtls-$(MBEDTLS) 221 !ENDIF 222 223 !IF "$(USE_CARES)"=="true" 224 CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-cares-$(CARES) 225 !ENDIF 226 227 !IF "$(USE_ZLIB)"=="true" 228 CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-zlib-$(ZLIB) 229 !ENDIF 230 231 !IF "$(USE_SSH2)"=="true" 232 CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-ssh2-$(SSH2) 233 !ENDIF 234 235 !IF "$(USE_IPV6)"=="true" 236 CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-ipv6 237 !ENDIF 238 239 !IF "$(USE_SSPI)"=="true" 240 CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-sspi 241 !ENDIF 242 243 !IF "$(USE_WINSSL)"=="true" 244 CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-winssl 245 !ENDIF 246 247 !IF "$(USE_NGHTTP2)"=="true" 248 CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-nghttp2-$(NGHTTP2) 249 !ENDIF 250 251 !MESSAGE configuration name: $(CONFIG_NAME_LIB) 252 253 BUILD_DIR=../builds/$(CONFIG_NAME_LIB) 254 LIBCURL_DIROBJ = ..\builds\$(CONFIG_NAME_LIB)-obj-lib 255 CURL_DIROBJ = ..\builds\$(CONFIG_NAME_LIB)-obj-curl 256 DIRDIST = ..\builds\$(CONFIG_NAME_LIB)\ 257 258 $(MODE): 259 @SET DIROBJ=$(LIBCURL_DIROBJ) 260 @SET MACRO_NAME=LIBCURL_OBJS 261 @SET OUTFILE=LIBCURL_OBJS.inc 262 @CALL gen_resp_file.bat $(LIBCURL_OBJS) 263 264 @SET DIROBJ=$(CURL_DIROBJ) 265 @SET MACRO_NAME=CURL_OBJS 266 @SET OUTFILE=CURL_OBJS.inc 267 @CALL gen_resp_file.bat $(CURL_OBJS) 268 269 @SET CONFIG_NAME_LIB=$(CONFIG_NAME_LIB) 270 @SET MACHINE=$(MACHINE) 271 @SET USE_NGHTTP2=$(USE_NGHTTP2) 272 @SET USE_IDN=$(USE_IDN) 273 @SET USE_IPV6=$(USE_IPV6) 274 @SET USE_SSPI=$(USE_SSPI) 275 @SET USE_WINSSL=$(USE_WINSSL) 276 # compatibility bit 277 @SET WITH_NGHTTP2=$(WITH_NGHTTP2) 278 279 @$(MAKE) /NOLOGO /F MakefileBuild.vc 280 281 copy_from_lib: 282 echo copying .c... 283 FOR %%i IN ($(CURLX_CFILES:/=\)) DO copy %%i ..\src\ 284 285 clean: 286 $(MAKE) /NOLOGO /F MakefileBuild.vc $@ 287