MakefileBuild.vc (21533B)
1 #*************************************************************************** 2 # _ _ ____ _ 3 # Project ___| | | | _ \| | 4 # / __| | | | |_) | | 5 # | (__| |_| | _ <| |___ 6 # \___|\___/|_| \_\_____| 7 # 8 # Copyright (C) Daniel Stenberg, <daniel@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.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 # SPDX-License-Identifier: curl 22 # 23 #*************************************************************************** 24 25 ########################################################################### 26 # 27 # Makefile for building libcurl with MSVC 28 # 29 # Usage: see README.md 30 # 31 ############################################################## 32 33 CFGSET=FALSE 34 WINBUILD_DIR=`cd` 35 36 # Utilities. 37 # If a path is required that contains characters such as space, quote the path. 38 MT = mt.exe 39 RC = rc.exe 40 ZIP = zip.exe 41 42 # Allow changing C compiler via environment variable CC (default cl.exe) 43 # This command macro is not set by default: https://msdn.microsoft.com/en-us/library/ms933742.aspx 44 !If "$(CC)" == "" 45 CC = cl.exe 46 !Endif 47 48 !IF "$(VC)"=="6" 49 CC_NODEBUG = $(CC) /O2 /DNDEBUG 50 CC_DEBUG = $(CC) /Od /Gm /Zi /D_DEBUG /GZ 51 CFLAGS = /I. /I../lib /I../include /nologo /W4 /GX /YX /FD /c /DBUILDING_LIBCURL 52 !ELSE 53 CC_NODEBUG = $(CC) /O2 /DNDEBUG 54 CC_DEBUG = $(CC) /Od /D_DEBUG /RTC1 /Z7 /LDd 55 CFLAGS = /I. /I ../lib /I../include /nologo /W4 /EHsc /FD /c /DBUILDING_LIBCURL 56 !ENDIF 57 58 LFLAGS = /nologo /machine:$(MACHINE) 59 LNKDLL = link.exe /DLL 60 # Use lib.exe instead of link.exe as link.exe /lib has the following bad habits: 61 # - optimizing options like /opt:ref raises warnings (at least in Visual Studio 2015) 62 # - all (including Windows) dependencies are aggregated (as static parts) 63 # - link.exe /lib is not documented (anymore) at MSDN 64 # Instead of id: just create an archive, that contains all objects 65 LNKLIB = lib.exe 66 67 CFLAGS_PDB = /Zi 68 LFLAGS_PDB = /incremental:no /opt:ref,icf /DEBUG 69 70 CFLAGS_LIBCURL_STATIC = /DCURL_STATICLIB 71 72 WIN_LIBS = ws2_32.lib wldap32.lib advapi32.lib crypt32.lib secur32.lib 73 74 BASE_NAME = libcurl 75 BASE_NAME_DEBUG = $(BASE_NAME)_debug 76 BASE_NAME_STATIC = $(BASE_NAME)_a 77 BASE_NAME_STATIC_DEBUG = $(BASE_NAME_STATIC)_debug 78 79 LIB_NAME_STATIC = $(BASE_NAME_STATIC).lib 80 LIB_NAME_STATIC_DEBUG = $(BASE_NAME_STATIC_DEBUG).lib 81 LIB_NAME_DLL = $(BASE_NAME).dll 82 LIB_NAME_IMP = $(BASE_NAME).lib 83 LIB_NAME_DLL_DEBUG = $(BASE_NAME_DEBUG).dll 84 LIB_NAME_IMP_DEBUG = $(BASE_NAME_DEBUG).lib 85 86 PDB_NAME_STATIC = $(BASE_NAME_STATIC).pdb 87 PDB_NAME_STATIC_DEBUG = $(BASE_NAME_STATIC_DEBUG).pdb 88 PDB_NAME_DLL = $(BASE_NAME).pdb 89 PDB_NAME_DLL_DEBUG = $(BASE_NAME_DEBUG).pdb 90 91 # CURL Command section 92 PROGRAM_NAME = curl.exe 93 CURL_CFLAGS = /I../lib /I../lib/curlx /I../include /nologo /W4 /EHsc /FD /c 94 CURL_LFLAGS = /out:$(DIRDIST)\bin\$(PROGRAM_NAME) /subsystem:console $(LFLAGS) 95 CURL_RESFLAGS = /i../include 96 97 ############################################################# 98 ## Nothing more to do below this line! 99 LIBCURL_SRC_DIR = ..\lib 100 CURL_SRC_DIR = ..\src 101 102 !IF EXISTS($(CURL_SRC_DIR)\tool_hugehelp.c) 103 USE_MANUAL = true 104 CFLAGS = $(CFLAGS) /DUSE_MANUAL 105 !ENDIF 106 107 !IFNDEF WITH_DEVEL 108 WITH_DEVEL = ../../deps 109 !ENDIF 110 DEVEL_INCLUDE= $(WITH_DEVEL)/include 111 DEVEL_LIB = $(WITH_DEVEL)/lib 112 113 !IF EXISTS("$(DEVEL_INCLUDE)") 114 CFLAGS = $(CFLAGS) /I"$(DEVEL_INCLUDE)" 115 !ENDIF 116 !IF EXISTS("$(DEVEL_LIB)") 117 LFLAGS = $(LFLAGS) "/LIBPATH:$(DEVEL_LIB)" 118 !ENDIF 119 120 !IFDEF SSL_PATH 121 SSL_INC_DIR = $(SSL_PATH)\include 122 SSL_LIB_DIR = $(SSL_PATH)\lib 123 SSL_LFLAGS = $(SSL_LFLAGS) "/LIBPATH:$(SSL_LIB_DIR)" 124 !ELSE 125 SSL_INC_DIR=$(DEVEL_INCLUDE)\openssl 126 SSL_LIB_DIR=$(DEVEL_LIB) 127 !ENDIF 128 129 !IF "$(WITH_SSL)"=="dll" || "$(WITH_SSL)"=="static" 130 !IF EXISTS("$(SSL_LIB_DIR)\libssl.lib") 131 SSL_LIBS = libssl.lib libcrypto.lib 132 !ELSE 133 SSL_LIBS = libeay32.lib ssleay32.lib 134 !ENDIF 135 USE_SSL = true 136 SSL = $(WITH_SSL) 137 !IF "$(WITH_SSL)"=="static" 138 WIN_LIBS = $(WIN_LIBS) gdi32.lib user32.lib crypt32.lib 139 !ENDIF 140 !ENDIF 141 142 !IFDEF USE_SSL 143 SSL_CFLAGS = /DUSE_OPENSSL /I"$(SSL_INC_DIR)" 144 !IF "$(ENABLE_OPENSSL_AUTO_LOAD_CONFIG)"=="false" 145 SSL_CFLAGS = $(SSL_CFLAGS) /DCURL_DISABLE_OPENSSL_AUTO_LOAD_CONFIG 146 !ENDIF 147 !ENDIF 148 149 !IF "$(DISABLE_WEBSOCKETS)"=="true" 150 CFLAGS = $(CFLAGS) /DCURL_DISABLE_WEBSOCKETS=1 151 !ENDIF 152 153 !IFDEF NGHTTP2_PATH 154 NGHTTP2_INC_DIR = $(NGHTTP2_PATH)\include 155 NGHTTP2_LIB_DIR = $(NGHTTP2_PATH)\lib 156 NGHTTP2_LFLAGS = $(NGHTTP2_LFLAGS) "/LIBPATH:$(NGHTTP2_LIB_DIR)" 157 !ELSE 158 NGHTTP2_INC_DIR = $(DEVEL_INCLUDE) 159 NGHTTP2_LIB_DIR = $(DEVEL_LIB) 160 !ENDIF 161 162 !IF "$(WITH_NGHTTP2)"=="dll" 163 NGHTTP2_CFLAGS = /DUSE_NGHTTP2 /I"$(NGHTTP2_INC_DIR)" 164 NGHTTP2_LIBS = nghttp2.lib 165 !ELSEIF "$(WITH_NGHTTP2)"=="static" 166 NGHTTP2_CFLAGS = /DUSE_NGHTTP2 /DNGHTTP2_STATICLIB /I"$(NGHTTP2_INC_DIR)" 167 !IF EXISTS("$(NGHTTP2_LIB_DIR)\nghttp2_static.lib") 168 NGHTTP2_LIBS = nghttp2_static.lib 169 !ELSE 170 NGHTTP2_LIBS = nghttp2.lib 171 !ENDIF 172 !ENDIF 173 174 !IFDEF MSH3_PATH 175 MSH3_INC_DIR = $(MSH3_PATH)\include 176 MSH3_LIB_DIR = $(MSH3_PATH)\lib 177 MSH3_LFLAGS = $(MSH3_LFLAGS) "/LIBPATH:$(MSH3_LIB_DIR)" 178 !ELSE 179 MSH3_INC_DIR = $(DEVEL_INCLUDE) 180 MSH3_LIB_DIR = $(DEVEL_LIB) 181 !ENDIF 182 183 !IF "$(WITH_MSH3)"=="dll" 184 MSH3_CFLAGS = /DUSE_MSH3 /I"$(MSH3_INC_DIR)" 185 MSH3_LIBS = msh3.lib 186 !ELSEIF "$(WITH_MSH3)"=="static" 187 MSH3_CFLAGS = /DUSE_MSH3 /DMSH3_STATICLIB /I"$(MSH3_INC_DIR)" 188 !IF EXISTS("$(NGHTTP2_LIB_DIR)\msh3_static.lib") 189 MSH3_LIBS = msh3_static.lib 190 !ELSE 191 MSH3_LIBS = msh3.lib 192 !ENDIF 193 !ENDIF 194 195 !IFDEF MBEDTLS_PATH 196 MBEDTLS_INC_DIR = $(MBEDTLS_PATH)\include 197 MBEDTLS_LIB_DIR = $(MBEDTLS_PATH)\lib 198 MBEDTLS_LFLAGS = $(MBEDTLS_LFLAGS) "/LIBPATH:$(MBEDTLS_LIB_DIR)" 199 !ELSE 200 MBEDTLS_INC_DIR = $(DEVEL_INCLUDE) 201 MBEDTLS_LIB_DIR = $(DEVEL_LIB) 202 !ENDIF 203 204 !IF "$(WITH_MBEDTLS)"=="dll" || "$(WITH_MBEDTLS)"=="static" 205 USE_MBEDTLS = true 206 MBEDTLS = $(WITH_MBEDTLS) 207 MBEDTLS_CFLAGS = /DUSE_MBEDTLS /I"$(MBEDTLS_INC_DIR)" 208 MBEDTLS_LIBS = mbedtls.lib mbedcrypto.lib mbedx509.lib 209 !ENDIF 210 211 !IFDEF WOLFSSL_PATH 212 WOLFSSL_INC_DIR = $(WOLFSSL_PATH)\include 213 WOLFSSL_LIB_DIR = $(WOLFSSL_PATH)\lib 214 WOLFSSL_LFLAGS = $(WOLFSSL_LFLAGS) "/LIBPATH:$(WOLFSSL_LIB_DIR)" 215 !ELSE 216 WOLFSSL_INC_DIR = $(DEVEL_INCLUDE) 217 WOLFSSL_LIB_DIR = $(DEVEL_LIB) 218 !ENDIF 219 220 !IF "$(WITH_WOLFSSL)"=="dll" || "$(WITH_WOLFSSL)"=="static" 221 USE_WOLFSSL = true 222 WOLFSSL = $(WITH_WOLFSSL) 223 WOLFSSL_CFLAGS = /DUSE_WOLFSSL /I"$(WOLFSSL_INC_DIR)" 224 WOLFSSL_LIBS = wolfssl.lib 225 !ENDIF 226 227 228 !IFDEF CARES_PATH 229 CARES_INC_DIR = $(CARES_PATH)\include 230 CARES_LIB_DIR = $(CARES_PATH)\lib 231 CARES_LFLAGS = $(CARES_LFLAGS) "/LIBPATH:$(CARES_LIB_DIR)" 232 !ELSE 233 CARES_INC_DIR = $(DEVEL_INCLUDE)/cares 234 CARES_LIB_DIR = $(DEVEL_LIB) 235 !ENDIF 236 237 !IF "$(WITH_CARES)"=="dll" 238 !IF "$(DEBUG)"=="yes" 239 CARES_LIBS = caresd.lib 240 !ELSE 241 CARES_LIBS = cares.lib 242 !ENDIF 243 USE_CARES = true 244 CARES = dll 245 !ELSEIF "$(WITH_CARES)"=="static" 246 !IF "$(DEBUG)"=="yes" 247 CARES_LIBS = libcaresd.lib 248 !ELSE 249 CARES_LIBS = libcares.lib 250 !ENDIF 251 USE_CARES = true 252 CARES = static 253 !ENDIF 254 255 !IFDEF USE_CARES 256 CARES_CFLAGS = /DUSE_ARES /I"$(CARES_INC_DIR)" 257 !IF "$(CARES)"=="static" 258 CARES_CFLAGS = $(CARES_CFLAGS) /DCARES_STATICLIB 259 !ENDIF 260 !ENDIF 261 262 263 !IFDEF ZLIB_PATH 264 ZLIB_INC_DIR = $(ZLIB_PATH)\include 265 ZLIB_LIB_DIR = $(ZLIB_PATH)\lib 266 ZLIB_LFLAGS = $(ZLIB_LFLAGS) "/LIBPATH:$(ZLIB_LIB_DIR)" 267 !ELSE 268 ZLIB_INC_DIR = $(DEVEL_INCLUDE) 269 ZLIB_LIB_DIR = $(DEVEL_LIB) 270 !ENDIF 271 272 # Depending on how zlib is built the libraries have different names, we 273 # try to handle them all. 274 !IF "$(WITH_ZLIB)"=="dll" 275 !IF EXISTS("$(ZLIB_LIB_DIR)\zlibwapi.lib") 276 ZLIB_LIBS = zlibwapi.lib 277 ADDITIONAL_ZLIB_CFLAGS = /DZLIB_WINAPI 278 !ELSEIF EXISTS("$(ZLIB_LIB_DIR)\zdll.lib") 279 ZLIB_LIBS = zdll.lib 280 !ELSE 281 ZLIB_LIBS = zlib.lib 282 !ENDIF 283 USE_ZLIB = true 284 ZLIB = dll 285 !ELSEIF "$(WITH_ZLIB)"=="static" 286 !IF EXISTS("$(ZLIB_LIB_DIR)\zlibstat.lib") 287 ZLIB_LIBS = zlibstat.lib 288 ADDITIONAL_ZLIB_CFLAGS = /DZLIB_WINAPI 289 !ELSEIF EXISTS("$(ZLIB_LIB_DIR)\zlibstatic.lib") 290 ZLIB_LIBS = zlibstatic.lib 291 !ELSEIF EXISTS("$(ZLIB_LIB_DIR)\zlib.lib") 292 ZLIB_LIBS = zlib.lib 293 !ELSE 294 ZLIB_LIBS = zlib_a.lib 295 !ENDIF 296 USE_ZLIB = true 297 ZLIB = static 298 !ENDIF 299 300 !IFDEF USE_ZLIB 301 ZLIB_CFLAGS = /DHAVE_LIBZ $(ADDITIONAL_ZLIB_CFLAGS) /I"$(ZLIB_INC_DIR)" 302 !ENDIF 303 304 305 !IFDEF SSH2_PATH 306 SSH2_INC_DIR= $(SSH2_PATH)\include 307 SSH2_LIB_DIR= $(SSH2_PATH)\lib 308 SSH2_LFLAGS = $(SSH2_LFLAGS) "/LIBPATH:$(SSH2_LIB_DIR)" 309 !ELSE 310 SSH2_LIB_DIR= $(DEVEL_LIB) 311 SSH2_INC_DIR= $(DEVEL_INCLUDE)/libssh2 312 !ENDIF 313 314 !IF "$(WITH_SSH2)"=="dll" 315 SSH2_LIBS = libssh2.lib 316 USE_SSH2 = true 317 SSH2 = dll 318 !ELSEIF "$(WITH_SSH2)"=="static" 319 # libssh2 NMakefile on Windows at default creates a static library without _a suffix 320 !IF EXISTS("$(SSH2_LIB_DIR)\libssh2.lib") 321 SSH2_LIBS = libssh2.lib 322 !ELSE 323 SSH2_LIBS = libssh2_a.lib 324 !ENDIF 325 WIN_LIBS = $(WIN_LIBS) user32.lib 326 USE_SSH2 = true 327 SSH2 = static 328 !ENDIF 329 330 !IFDEF USE_SSH2 331 SSH2_CFLAGS = /DUSE_LIBSSH2 332 SSH2_CFLAGS = $(SSH2_CFLAGS) /I"$(SSH2_INC_DIR)" 333 !ENDIF 334 335 336 !IFDEF SSH_PATH 337 SSH_INC_DIR= $(SSH_PATH)\include 338 SSH_LIB_DIR= $(SSH_PATH)\lib 339 SSH_LFLAGS = $(SSH_LFLAGS) "/LIBPATH:$(SSH_LIB_DIR)" 340 !ELSE 341 SSH_LIB_DIR= $(DEVEL_LIB) 342 SSH_INC_DIR= $(DEVEL_INCLUDE) 343 !ENDIF 344 345 !IF "$(WITH_SSH)"=="dll" || "$(WITH_SSH)"=="static" 346 SSH_LIBS = ssh.lib 347 USE_SSH = true 348 SSH = $(WITH_SSH) 349 !ENDIF 350 351 !IFDEF USE_SSH 352 SSH_CFLAGS = /DUSE_LIBSSH 353 SSH_CFLAGS = $(SSH_CFLAGS) /I"$(SSH_INC_DIR)" 354 !ENDIF 355 356 357 !IFNDEF USE_IDN 358 USE_IDN = true 359 !ELSEIF "$(USE_IDN)"=="yes" 360 USE_IDN = true 361 !ENDIF 362 363 !IF "$(USE_IDN)"=="true" 364 IDN_CFLAGS = $(IDN_CFLAGS) /DUSE_WIN32_IDN 365 WIN_LIBS = $(WIN_LIBS) Normaliz.lib 366 !ENDIF 367 368 369 !IFNDEF USE_IPV6 370 USE_IPV6 = true 371 !ELSEIF "$(USE_IPV6)"=="yes" 372 USE_IPV6 = true 373 !ENDIF 374 375 !IF "$(USE_IPV6)"=="true" 376 IPV6_CFLAGS = $(IPV6_CFLAGS) /DUSE_IPV6 377 !ENDIF 378 379 380 !IFNDEF USE_SSPI 381 USE_SSPI = true 382 !ELSEIF "$(USE_SSPI)"=="yes" 383 USE_SSPI = true 384 !ENDIF 385 386 !IF "$(USE_SSPI)"=="true" 387 SSPI_CFLAGS = $(SSPI_CFLAGS) /DUSE_WINDOWS_SSPI 388 !ENDIF 389 390 391 !IFNDEF USE_SCHANNEL 392 !IF "$(USE_SSL)"=="true" 393 USE_SCHANNEL = false 394 !ELSE 395 USE_SCHANNEL = $(USE_SSPI) 396 !ENDIF 397 !ELSEIF "$(USE_SCHANNEL)"=="yes" 398 USE_SCHANNEL = true 399 !ENDIF 400 401 402 !IF "$(USE_SCHANNEL)"=="true" 403 !IF "$(USE_SSPI)"!="true" 404 !ERROR cannot build with Schannel without SSPI 405 !ENDIF 406 SSPI_CFLAGS = $(SSPI_CFLAGS) /DUSE_SCHANNEL 407 WIN_LIBS = $(WIN_LIBS) Crypt32.lib 408 !ENDIF 409 410 411 !IF "$(GEN_PDB)"=="yes" 412 GEN_PDB = true 413 !ENDIF 414 415 416 !IFDEF EMBED_MANIFEST 417 MANIFESTTOOL = $(MT) -manifest $(DIRDIST)\bin\$(PROGRAM_NAME).manifest -outputresource:$(DIRDIST)\bin\$(PROGRAM_NAME);1 418 !ENDIF 419 420 # Runtime library configuration 421 !IF "$(RTLIBCFG)"=="static" 422 RTLIB = /MT 423 RTLIB_DEBUG = /MTd 424 !ELSE 425 RTLIB = /MD 426 RTLIB_DEBUG = /MDd 427 !ENDIF 428 429 !IF "$(MODE)"=="static" 430 TARGET = $(LIB_NAME_STATIC) 431 CURL_LIBCURL_LIBNAME=$(LIB_NAME_STATIC) 432 AS_DLL = false 433 CFGSET = true 434 !ELSEIF "$(MODE)"=="dll" 435 TARGET = $(LIB_NAME_DLL) 436 CURL_LIBCURL_LIBNAME=$(LIB_NAME_IMP) 437 AS_DLL = true 438 CFGSET = true 439 !ENDIF 440 441 !IF "$(CFGSET)" == "FALSE" 442 !ERROR please choose a valid mode 443 !ENDIF 444 445 446 447 # CURL_XX macros are for the curl.exe command 448 449 !IF "$(DEBUG)"=="yes" 450 RC_FLAGS = /d_DEBUG /Fo $@ $(LIBCURL_SRC_DIR)\libcurl.rc 451 CURL_CC = $(CC_DEBUG) $(RTLIB_DEBUG) 452 CURL_RC_FLAGS = $(CURL_RC_FLAGS) /i../include /d_DEBUG /Fo $@ $(CURL_SRC_DIR)\curl.rc 453 !ELSE 454 RC_FLAGS = /Fo $@ $(LIBCURL_SRC_DIR)\libcurl.rc 455 CURL_CC = $(CC_NODEBUG) $(RTLIB) 456 CURL_RC_FLAGS = $(CURL_RC_FLAGS) /i../include /Fo $@ $(CURL_SRC_DIR)\curl.rc 457 !ENDIF 458 459 !IF "$(AS_DLL)" == "true" 460 461 LNK = $(LNKDLL) $(LFLAGS) $(WIN_LIBS) /out:$(LIB_DIROBJ)\$(TARGET) 462 !IF "$(DEBUG)"=="yes" 463 TARGET = $(LIB_NAME_DLL_DEBUG) 464 LNK = $(LNK) /DEBUG /IMPLIB:$(LIB_DIROBJ)\$(LIB_NAME_IMP_DEBUG) 465 PDB = $(PDB_NAME_DLL_DEBUG) 466 CURL_LIBS = /IMPLIB:$(LIB_DIROBJ)\$(LIB_NAME_IMP_DEBUG) 467 !ELSE 468 TARGET = $(LIB_NAME_DLL) 469 LNK = $(LNK) /IMPLIB:$(LIB_DIROBJ)\$(LIB_NAME_IMP) 470 PDB = $(PDB_NAME_DLL) 471 CURL_LIBS = /IMPLIB:$(LIB_DIROBJ)\$(LIB_NAME_IMP) 472 !ENDIF 473 RESOURCE = $(LIB_DIROBJ)\libcurl.res 474 475 # AS_DLL 476 !ELSE 477 478 !IF "$(DEBUG)"=="yes" 479 TARGET = $(LIB_NAME_STATIC_DEBUG) 480 PDB = $(PDB_NAME_STATIC_DEBUG) 481 !ELSE 482 TARGET = $(LIB_NAME_STATIC) 483 PDB = $(PDB_NAME_STATIC) 484 !ENDIF 485 LNK = $(LNKLIB) /out:$(LIB_DIROBJ)\$(TARGET) 486 CURL_CC = $(CURL_CC) $(CFLAGS_LIBCURL_STATIC) 487 488 # AS_DLL 489 !ENDIF 490 491 !IF "$(USE_SSL)"=="true" 492 CFLAGS = $(CFLAGS) $(SSL_CFLAGS) 493 LFLAGS = $(LFLAGS) $(SSL_LFLAGS) $(SSL_LIBS) 494 !ENDIF 495 496 !IF "$(USE_MBEDTLS)"=="true" 497 CFLAGS = $(CFLAGS) $(MBEDTLS_CFLAGS) 498 LFLAGS = $(LFLAGS) $(MBEDTLS_LFLAGS) $(MBEDTLS_LIBS) 499 !ENDIF 500 501 !IF "$(USE_WOLFSSL)"=="true" 502 CFLAGS = $(CFLAGS) $(WOLFSSL_CFLAGS) 503 LFLAGS = $(LFLAGS) $(WOLFSSL_LFLAGS) $(WOLFSSL_LIBS) 504 !ENDIF 505 506 !IF "$(USE_CARES)"=="true" 507 CFLAGS = $(CFLAGS) $(CARES_CFLAGS) 508 LFLAGS = $(LFLAGS) $(CARES_LFLAGS) $(CARES_LIBS) 509 !ENDIF 510 511 !IF "$(USE_ZLIB)"=="true" 512 CFLAGS = $(CFLAGS) $(ZLIB_CFLAGS) 513 LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS) $(ZLIB_LIBS) 514 !ENDIF 515 516 !IF "$(USE_SSH2)"=="true" 517 CFLAGS = $(CFLAGS) $(SSH2_CFLAGS) 518 LFLAGS = $(LFLAGS) $(SSH2_LFLAGS) $(SSH2_LIBS) 519 !ENDIF 520 521 !IF "$(USE_SSH)"=="true" 522 CFLAGS = $(CFLAGS) $(SSH_CFLAGS) 523 LFLAGS = $(LFLAGS) $(SSH_LFLAGS) $(SSH_LIBS) 524 !ENDIF 525 526 !IF "$(USE_IDN)"=="true" 527 CFLAGS = $(CFLAGS) $(IDN_CFLAGS) 528 !ENDIF 529 530 !IF "$(USE_IPV6)"=="true" 531 CFLAGS = $(CFLAGS) $(IPV6_CFLAGS) 532 !ENDIF 533 534 !IF "$(USE_SSPI)"=="true" 535 CFLAGS = $(CFLAGS) $(SSPI_CFLAGS) 536 !ENDIF 537 538 !IF "$(USE_NGHTTP2)"=="true" 539 CFLAGS = $(CFLAGS) $(NGHTTP2_CFLAGS) 540 LFLAGS = $(LFLAGS) $(NGHTTP2_LFLAGS) $(NGHTTP2_LIBS) 541 !ENDIF 542 543 !IF "$(USE_MSH3)"=="true" 544 CFLAGS = $(CFLAGS) $(MSH3_CFLAGS) 545 LFLAGS = $(LFLAGS) $(MSH3_LFLAGS) $(MSH3_LIBS) 546 !ENDIF 547 548 !IF "$(GEN_PDB)"=="true" 549 CFLAGS = $(CFLAGS) $(CFLAGS_PDB) /Fd"$(LIB_DIROBJ)\$(PDB)" 550 LFLAGS = $(LFLAGS) $(LFLAGS_PDB) 551 !ENDIF 552 553 !IF ( "$(USE_SSL)"=="true" && "$(USE_SCHANNEL)"=="true" ) \ 554 || ( "$(USE_SSL)"=="true" && "$(USE_MBEDTLS)"=="true" ) \ 555 || ( "$(USE_SSL)"=="true" && "$(USE_WOLFSSL)"=="true" ) \ 556 || ( "$(USE_MBEDTLS)"=="true" && "$(USE_WOLFSSL)"=="true" ) \ 557 || ( "$(USE_MBEDTLS)"=="true" && "$(USE_SCHANNEL)"=="true" ) \ 558 || ( "$(USE_WOLFSSL)"=="true" && "$(USE_SCHANNEL)"=="true" ) 559 CFLAGS = $(CFLAGS) /DCURL_WITH_MULTI_SSL 560 !ENDIF 561 562 !IF "$(USE_UNICODE)"=="true" 563 CFLAGS = $(CFLAGS) /DUNICODE /D_UNICODE 564 !ENDIF 565 566 LIB_DIROBJ = ..\builds\$(CONFIG_NAME_LIB)-obj-lib 567 CURL_DIROBJ = ..\builds\$(CONFIG_NAME_LIB)-obj-curl 568 569 !IFDEF WITH_PREFIX 570 DIRDIST = $(WITH_PREFIX) 571 !ELSE 572 DIRDIST = ..\builds\$(CONFIG_NAME_LIB)\ 573 !ENDIF 574 575 # 576 # curl.exe 577 # 578 CURL_LINK = link.exe /incremental:no /libpath:"$(DIRDIST)\lib" 579 580 !IF "$(CFGSET)" != "FALSE" 581 # A mode was provided, so the library can be built. 582 # 583 !include CURL_OBJS.inc 584 !include LIBCURL_OBJS.inc 585 586 !IF "$(AS_DLL)" == "true" 587 LIB_OBJS = $(LIBCURL_OBJS) $(RESOURCE) 588 !ELSE 589 LIB_OBJS = $(LIBCURL_OBJS) 590 !ENDIF 591 592 EXE_OBJS = $(CURL_OBJS) $(CURL_DIROBJ)\curl.res 593 594 all : $(TARGET) $(PROGRAM_NAME) 595 596 package: $(TARGET) 597 @cd $(DIRDIST) 598 @-$(ZIP) -9 -q -r ..\$(CONFIG_NAME_LIB).zip .>nul 2<&1 599 @cd $(MAKEDIR) 600 601 $(TARGET): $(LIB_OBJS) $(LIB_DIROBJ) $(DIRDIST) 602 @echo Using SSL: $(USE_SSL) 603 @echo Using NGHTTP2: $(USE_NGHTTP2) 604 @echo Using MSH3: $(USE_MSH3) 605 @echo Using c-ares: $(USE_CARES) 606 @echo Using SSH2: $(USE_SSH2) 607 @echo Using SSH: $(USE_SSH) 608 @echo Using ZLIB: $(USE_ZLIB) 609 @echo Using IDN: $(USE_IDN) 610 @echo Using IPv6: $(USE_IPV6) 611 @echo Using SSPI: $(USE_SSPI) 612 @echo Using Schannel: $(USE_SCHANNEL) 613 @echo CFLAGS: $(CFLAGS) 614 @echo LFLAGS: $(LFLAGS) 615 @echo GenPDB: $(GEN_PDB) 616 @echo Debug: $(DEBUG) 617 @echo Machine: $(MACHINE) 618 $(LNK) $(LIB_OBJS) 619 @echo Copying libs... 620 @if exist $(LIB_DIROBJ)\$(LIB_NAME_DLL) copy $(LIB_DIROBJ)\$(LIB_NAME_DLL) $(DIRDIST)\bin\ /y >nul 2<&1 621 @if exist $(LIB_DIROBJ)\$(LIB_NAME_STATIC) copy $(LIB_DIROBJ)\$(LIB_NAME_STATIC) $(DIRDIST)\lib\ /y >nul 2<&1 622 @if exist $(LIB_DIROBJ)\$(LIB_NAME_DLL_DEBUG) copy $(LIB_DIROBJ)\$(LIB_NAME_DLL_DEBUG) $(DIRDIST)\bin\ /y >nul 2<&1 623 @if exist $(LIB_DIROBJ)\$(LIB_NAME_STATIC_DEBUG) copy $(LIB_DIROBJ)\$(LIB_NAME_STATIC_DEBUG) $(DIRDIST)\lib\ /y >nul 2<&1 624 @if exist $(LIB_DIROBJ)\$(LIB_NAME_IMP) copy $(LIB_DIROBJ)\$(LIB_NAME_IMP) $(DIRDIST)\lib\ /y >nul 2<&1 625 @if exist $(LIB_DIROBJ)\$(LIB_NAME_IMP_DEBUG) copy $(LIB_DIROBJ)\$(LIB_NAME_IMP_DEBUG) $(DIRDIST)\lib >nul 2<&1 626 @-copy $(LIB_DIROBJ)\*.exp $(DIRDIST)\lib /y >nul 2<&1 627 @-copy $(LIB_DIROBJ)\*.pdb $(DIRDIST)\lib /y >nul 2<&1 628 @-copy ..\include\curl\*.h $(DIRDIST)\include\curl\ /y >nul 2<&1 629 630 $(LIB_OBJS): $(LIB_DIROBJ) $(DIRDIST) 631 632 $(DIRDIST): 633 @if not exist "$(DIRDIST)\bin" mkdir $(DIRDIST)\bin 634 @if not exist "$(DIRDIST)\include" mkdir $(DIRDIST)\include 635 @if not exist "$(DIRDIST)\include\curl" mkdir $(DIRDIST)\include\curl 636 @if not exist "$(DIRDIST)\lib" mkdir $(DIRDIST)\lib 637 638 $(LIB_DIROBJ): 639 @if not exist "$(LIB_DIROBJ)" mkdir $(LIB_DIROBJ) 640 @if not exist "$(LIB_DIROBJ)\vauth" mkdir $(LIB_DIROBJ)\vauth 641 @if not exist "$(LIB_DIROBJ)\vtls" mkdir $(LIB_DIROBJ)\vtls 642 @if not exist "$(LIB_DIROBJ)\vssh" mkdir $(LIB_DIROBJ)\vssh 643 @if not exist "$(LIB_DIROBJ)\vquic" mkdir $(LIB_DIROBJ)\vquic 644 @if not exist "$(LIB_DIROBJ)\curlx" mkdir $(LIB_DIROBJ)\curlx 645 646 $(CURL_DIROBJ): 647 @if not exist "$(CURL_DIROBJ)" mkdir $(CURL_DIROBJ) 648 # we need a lib dir for the portability functions from libcurl 649 # we use the .c directly here 650 @if not exist "$(CURL_DIROBJ)" mkdir $(CURL_DIROBJ)\lib 651 652 .SUFFIXES: .c .obj .res 653 654 {$(LIBCURL_SRC_DIR)\}.c{$(LIB_DIROBJ)\}.obj:: 655 $(CURL_CC) $(CFLAGS) /Fo"$(LIB_DIROBJ)\\" $< 656 657 {$(LIBCURL_SRC_DIR)\vauth\}.c{$(LIB_DIROBJ)\vauth\}.obj:: 658 $(CURL_CC) $(CFLAGS) /Fo"$(LIB_DIROBJ)\vauth\\" $< 659 660 {$(LIBCURL_SRC_DIR)\vtls\}.c{$(LIB_DIROBJ)\vtls\}.obj:: 661 $(CURL_CC) $(CFLAGS) /Fo"$(LIB_DIROBJ)\vtls\\" $< 662 663 {$(LIBCURL_SRC_DIR)\vssh\}.c{$(LIB_DIROBJ)\vssh\}.obj:: 664 $(CURL_CC) $(CFLAGS) /Fo"$(LIB_DIROBJ)\vssh\\" $< 665 666 {$(LIBCURL_SRC_DIR)\vquic\}.c{$(LIB_DIROBJ)\vquic\}.obj:: 667 $(CURL_CC) $(CFLAGS) /Fo"$(LIB_DIROBJ)\vquic\\" $< 668 669 {$(LIBCURL_SRC_DIR)\curlx\}.c{$(LIB_DIROBJ)\curlx\}.obj:: 670 $(CURL_CC) $(CFLAGS) /Fo"$(LIB_DIROBJ)\curlx\\" $< 671 672 $(LIB_DIROBJ)\libcurl.res: $(LIBCURL_SRC_DIR)\libcurl.rc 673 $(RC) $(RC_FLAGS) 674 675 # 676 # curl.exe 677 # 678 679 680 !IF "$(MODE)"=="static" 681 !IF "$(DEBUG)"=="yes" 682 CURL_LIBCURL_LIBNAME=$(LIB_NAME_STATIC_DEBUG) 683 !ELSE 684 CURL_LIBCURL_LIBNAME=$(LIB_NAME_STATIC) 685 !ENDIF 686 !ELSEIF "$(MODE)"=="dll" 687 !IF "$(DEBUG)"=="yes" 688 CURL_LIBCURL_LIBNAME=$(LIB_NAME_IMP_DEBUG) 689 !ELSE 690 CURL_LIBCURL_LIBNAME=$(LIB_NAME_IMP) 691 !ENDIF 692 !ENDIF 693 694 CURL_FROM_LIBCURL=\ 695 $(CURL_DIROBJ)\nonblock.obj \ 696 $(CURL_DIROBJ)\strparse.obj \ 697 $(CURL_DIROBJ)\strcase.obj \ 698 $(CURL_DIROBJ)\timeval.obj \ 699 $(CURL_DIROBJ)\wait.obj \ 700 $(CURL_DIROBJ)\warnless.obj \ 701 $(CURL_DIROBJ)\multibyte.obj \ 702 $(CURL_DIROBJ)\version_win32.obj \ 703 $(CURL_DIROBJ)\dynbuf.obj \ 704 $(CURL_DIROBJ)\base64.obj 705 706 !IFDEF USE_MANUAL 707 CURL_FROM_LIBCURL = $(CURL_FROM_LIBCURL) $(CURL_DIROBJ)\tool_hugehelp.obj 708 !ENDIF 709 710 $(PROGRAM_NAME): $(CURL_DIROBJ) $(CURL_FROM_LIBCURL) $(EXE_OBJS) 711 $(CURL_LINK) $(CURL_LFLAGS) $(CURL_LIBCURL_LIBNAME) $(WIN_LIBS) $(CURL_FROM_LIBCURL) $(EXE_OBJS) 712 $(MANIFESTTOOL) 713 714 {$(CURL_SRC_DIR)\}.c{$(CURL_DIROBJ)\}.obj:: 715 $(CURL_CC) $(CURL_CFLAGS) /Fo"$(CURL_DIROBJ)\\" $< 716 717 !IFDEF USE_MANUAL 718 $(CURL_DIROBJ)\tool_hugehelp.obj: $(CURL_SRC_DIR)\tool_hugehelp.c 719 $(CURL_CC) $(CURL_CFLAGS) /Zm200 /Fo"$@" $(CURL_SRC_DIR)\tool_hugehelp.c 720 !ENDIF 721 $(CURL_DIROBJ)\nonblock.obj: ../lib/curlx/nonblock.c 722 $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/curlx/nonblock.c 723 $(CURL_DIROBJ)\strparse.obj: ../lib/curlx/strparse.c 724 $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/curlx/strparse.c 725 $(CURL_DIROBJ)\strcase.obj: ../lib/strcase.c 726 $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/strcase.c 727 $(CURL_DIROBJ)\timeval.obj: ../lib/curlx/timeval.c 728 $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/curlx/timeval.c 729 $(CURL_DIROBJ)\multibyte.obj: ../lib/curlx/multibyte.c 730 $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/curlx/multibyte.c 731 $(CURL_DIROBJ)\version_win32.obj: ../lib/curlx/version_win32.c 732 $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/curlx/version_win32.c 733 $(CURL_DIROBJ)\wait.obj: ../lib/curlx/wait.c 734 $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/curlx/wait.c 735 $(CURL_DIROBJ)\warnless.obj: ../lib/curlx/warnless.c 736 $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/curlx/warnless.c 737 $(CURL_DIROBJ)\dynbuf.obj: ../lib/curlx/dynbuf.c 738 $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/curlx/dynbuf.c 739 $(CURL_DIROBJ)\base64.obj: ../lib/curlx/base64.c 740 $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/curlx/base64.c 741 $(CURL_DIROBJ)\curl.res: $(CURL_SRC_DIR)\curl.rc 742 $(RC) $(CURL_RC_FLAGS) 743 744 !ENDIF # End of case where a config was provided. 745 746 # Makefile.vc's clean removes (LIB)CURL_DIROBJ and DIRDIST dirs then calls 747 # this clean. Note those are the original directories we control and not the 748 # directories possibly modified by this makefile to point to user-specified 749 # directories. 750 # For example, don't remove DIRDIST here since it may contain user files if it 751 # has been changed by WITH_PREFIX to a different output dir (eg C:\usr\local). 752 clean: 753 @-erase /s *.dll 2> NUL 754 @-erase /s *.exp 2> NUL 755 @-erase /s *.idb 2> NUL 756 @-erase /s *.lib 2> NUL 757 @-erase /s *.obj 2> NUL 758 @-erase /s *.pch 2> NUL 759 @-erase /s *.pdb 2> NUL 760 @-erase /s *.res 2> NUL