Home | History | Annotate | Download | only in lib
      1 #ifndef HEADER_CURL_SETUP_H
      2 #define HEADER_CURL_SETUP_H
      3 /***************************************************************************
      4  *                                  _   _ ____  _
      5  *  Project                     ___| | | |  _ \| |
      6  *                             / __| | | | |_) | |
      7  *                            | (__| |_| |  _ <| |___
      8  *                             \___|\___/|_| \_\_____|
      9  *
     10  * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel (at) haxx.se>, et al.
     11  *
     12  * This software is licensed as described in the file COPYING, which
     13  * you should have received as part of this distribution. The terms
     14  * are also available at https://curl.haxx.se/docs/copyright.html.
     15  *
     16  * You may opt to use, copy, modify, merge, publish, distribute and/or sell
     17  * copies of the Software, and permit persons to whom the Software is
     18  * furnished to do so, under the terms of the COPYING file.
     19  *
     20  * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
     21  * KIND, either express or implied.
     22  *
     23  ***************************************************************************/
     24 
     25 #if defined(BUILDING_LIBCURL) && !defined(CURL_NO_OLDIES)
     26 #define CURL_NO_OLDIES
     27 #endif
     28 
     29 /*
     30  * Define WIN32 when build target is Win32 API
     31  */
     32 
     33 #if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32) && \
     34     !defined(__SYMBIAN32__)
     35 #define WIN32
     36 #endif
     37 
     38 #ifdef WIN32
     39 /*
     40  * Don't include unneeded stuff in Windows headers to avoid compiler
     41  * warnings and macro clashes.
     42  * Make sure to define this macro before including any Windows headers.
     43  */
     44 #  ifndef WIN32_LEAN_AND_MEAN
     45 #    define WIN32_LEAN_AND_MEAN
     46 #  endif
     47 #endif
     48 
     49 /*
     50  * Include configuration script results or hand-crafted
     51  * configuration file for platforms which lack config tool.
     52  */
     53 
     54 #ifdef HAVE_CONFIG_H
     55 
     56 #include "curl_config.h"
     57 
     58 #else /* HAVE_CONFIG_H */
     59 
     60 #ifdef _WIN32_WCE
     61 #  include "config-win32ce.h"
     62 #else
     63 #  ifdef WIN32
     64 #    include "config-win32.h"
     65 #  endif
     66 #endif
     67 
     68 #if defined(macintosh) && defined(__MRC__)
     69 #  include "config-mac.h"
     70 #endif
     71 
     72 #ifdef __riscos__
     73 #  include "config-riscos.h"
     74 #endif
     75 
     76 #ifdef __AMIGA__
     77 #  include "config-amigaos.h"
     78 #endif
     79 
     80 #ifdef __SYMBIAN32__
     81 #  include "config-symbian.h"
     82 #endif
     83 
     84 #ifdef __OS400__
     85 #  include "config-os400.h"
     86 #endif
     87 
     88 #ifdef TPF
     89 #  include "config-tpf.h"
     90 #endif
     91 
     92 #ifdef __VXWORKS__
     93 #  include "config-vxworks.h"
     94 #endif
     95 
     96 #endif /* HAVE_CONFIG_H */
     97 
     98 /* ================================================================ */
     99 /* Definition of preprocessor macros/symbols which modify compiler  */
    100 /* behavior or generated code characteristics must be done here,   */
    101 /* as appropriate, before any system header file is included. It is */
    102 /* also possible to have them defined in the config file included   */
    103 /* before this point. As a result of all this we frown inclusion of */
    104 /* system header files in our config files, avoid this at any cost. */
    105 /* ================================================================ */
    106 
    107 /*
    108  * AIX 4.3 and newer needs _THREAD_SAFE defined to build
    109  * proper reentrant code. Others may also need it.
    110  */
    111 
    112 #ifdef NEED_THREAD_SAFE
    113 #  ifndef _THREAD_SAFE
    114 #    define _THREAD_SAFE
    115 #  endif
    116 #endif
    117 
    118 /*
    119  * Tru64 needs _REENTRANT set for a few function prototypes and
    120  * things to appear in the system header files. Unixware needs it
    121  * to build proper reentrant code. Others may also need it.
    122  */
    123 
    124 #ifdef NEED_REENTRANT
    125 #  ifndef _REENTRANT
    126 #    define _REENTRANT
    127 #  endif
    128 #endif
    129 
    130 /* Solaris needs this to get a POSIX-conformant getpwuid_r */
    131 #if defined(sun) || defined(__sun)
    132 #  ifndef _POSIX_PTHREAD_SEMANTICS
    133 #    define _POSIX_PTHREAD_SEMANTICS 1
    134 #  endif
    135 #endif
    136 
    137 /* ================================================================ */
    138 /*  If you need to include a system header file for your platform,  */
    139 /*  please, do it beyond the point further indicated in this file.  */
    140 /* ================================================================ */
    141 
    142 #include <curl/curl.h>
    143 
    144 #define CURL_SIZEOF_CURL_OFF_T SIZEOF_CURL_OFF_T
    145 
    146 /*
    147  * Disable other protocols when http is the only one desired.
    148  */
    149 
    150 #ifdef HTTP_ONLY
    151 #  ifndef CURL_DISABLE_TFTP
    152 #    define CURL_DISABLE_TFTP
    153 #  endif
    154 #  ifndef CURL_DISABLE_FTP
    155 #    define CURL_DISABLE_FTP
    156 #  endif
    157 #  ifndef CURL_DISABLE_LDAP
    158 #    define CURL_DISABLE_LDAP
    159 #  endif
    160 #  ifndef CURL_DISABLE_TELNET
    161 #    define CURL_DISABLE_TELNET
    162 #  endif
    163 #  ifndef CURL_DISABLE_DICT
    164 #    define CURL_DISABLE_DICT
    165 #  endif
    166 #  ifndef CURL_DISABLE_FILE
    167 #    define CURL_DISABLE_FILE
    168 #  endif
    169 #  ifndef CURL_DISABLE_RTSP
    170 #    define CURL_DISABLE_RTSP
    171 #  endif
    172 #  ifndef CURL_DISABLE_POP3
    173 #    define CURL_DISABLE_POP3
    174 #  endif
    175 #  ifndef CURL_DISABLE_IMAP
    176 #    define CURL_DISABLE_IMAP
    177 #  endif
    178 #  ifndef CURL_DISABLE_SMTP
    179 #    define CURL_DISABLE_SMTP
    180 #  endif
    181 #  ifndef CURL_DISABLE_GOPHER
    182 #    define CURL_DISABLE_GOPHER
    183 #  endif
    184 #  ifndef CURL_DISABLE_SMB
    185 #    define CURL_DISABLE_SMB
    186 #  endif
    187 #endif
    188 
    189 /*
    190  * When http is disabled rtsp is not supported.
    191  */
    192 
    193 #if defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_RTSP)
    194 #  define CURL_DISABLE_RTSP
    195 #endif
    196 
    197 /* ================================================================ */
    198 /* No system header file shall be included in this file before this */
    199 /* point. The only allowed ones are those included from curl/system.h */
    200 /* ================================================================ */
    201 
    202 /*
    203  * OS/400 setup file includes some system headers.
    204  */
    205 
    206 #ifdef __OS400__
    207 #  include "setup-os400.h"
    208 #endif
    209 
    210 /*
    211  * VMS setup file includes some system headers.
    212  */
    213 
    214 #ifdef __VMS
    215 #  include "setup-vms.h"
    216 #endif
    217 
    218 /*
    219  * Use getaddrinfo to resolve the IPv4 address literal. If the current network
    220  * interface doesnt support IPv4, but supports IPv6, NAT64, and DNS64,
    221  * performing this task will result in a synthesized IPv6 address.
    222  */
    223 #ifdef  __APPLE__
    224 #define USE_RESOLVE_ON_IPS 1
    225 #endif
    226 
    227 /*
    228  * Include header files for windows builds before redefining anything.
    229  * Use this preprocessor block only to include or exclude windows.h,
    230  * winsock2.h, ws2tcpip.h or winsock.h. Any other windows thing belongs
    231  * to any other further and independent block.  Under Cygwin things work
    232  * just as under linux (e.g. <sys/socket.h>) and the winsock headers should
    233  * never be included when __CYGWIN__ is defined.  configure script takes
    234  * care of this, not defining HAVE_WINDOWS_H, HAVE_WINSOCK_H, HAVE_WINSOCK2_H,
    235  * neither HAVE_WS2TCPIP_H when __CYGWIN__ is defined.
    236  */
    237 
    238 #ifdef HAVE_WINDOWS_H
    239 #  if defined(UNICODE) && !defined(_UNICODE)
    240 #    define _UNICODE
    241 #  endif
    242 #  if defined(_UNICODE) && !defined(UNICODE)
    243 #    define UNICODE
    244 #  endif
    245 #  include <windows.h>
    246 #  ifdef HAVE_WINSOCK2_H
    247 #    include <winsock2.h>
    248 #    ifdef HAVE_WS2TCPIP_H
    249 #      include <ws2tcpip.h>
    250 #    endif
    251 #  else
    252 #    ifdef HAVE_WINSOCK_H
    253 #      include <winsock.h>
    254 #    endif
    255 #  endif
    256 #  include <tchar.h>
    257 #  ifdef UNICODE
    258      typedef wchar_t *(*curl_wcsdup_callback)(const wchar_t *str);
    259 #  endif
    260 #endif
    261 
    262 /*
    263  * Define USE_WINSOCK to 2 if we have and use WINSOCK2 API, else
    264  * define USE_WINSOCK to 1 if we have and use WINSOCK  API, else
    265  * undefine USE_WINSOCK.
    266  */
    267 
    268 #undef USE_WINSOCK
    269 
    270 #ifdef HAVE_WINSOCK2_H
    271 #  define USE_WINSOCK 2
    272 #else
    273 #  ifdef HAVE_WINSOCK_H
    274 #    define USE_WINSOCK 1
    275 #  endif
    276 #endif
    277 
    278 #ifdef USE_LWIPSOCK
    279 #  include <lwip/init.h>
    280 #  include <lwip/sockets.h>
    281 #  include <lwip/netdb.h>
    282 #endif
    283 
    284 #ifdef HAVE_EXTRA_STRICMP_H
    285 #  include <extra/stricmp.h>
    286 #endif
    287 
    288 #ifdef HAVE_EXTRA_STRDUP_H
    289 #  include <extra/strdup.h>
    290 #endif
    291 
    292 #ifdef TPF
    293 #  include <strings.h>    /* for bzero, strcasecmp, and strncasecmp */
    294 #  include <string.h>     /* for strcpy and strlen */
    295 #  include <stdlib.h>     /* for rand and srand */
    296 #  include <sys/socket.h> /* for select and ioctl*/
    297 #  include <netdb.h>      /* for in_addr_t definition */
    298 #  include <tpf/sysapi.h> /* for tpf_process_signals */
    299    /* change which select is used for libcurl */
    300 #  define select(a,b,c,d,e) tpf_select_libcurl(a,b,c,d,e)
    301 #endif
    302 
    303 #ifdef __VXWORKS__
    304 #  include <sockLib.h>    /* for generic BSD socket functions */
    305 #  include <ioLib.h>      /* for basic I/O interface functions */
    306 #endif
    307 
    308 #ifdef __AMIGA__
    309 #  ifndef __ixemul__
    310 #    include <exec/types.h>
    311 #    include <exec/execbase.h>
    312 #    include <proto/exec.h>
    313 #    include <proto/dos.h>
    314 #    define select(a,b,c,d,e) WaitSelect(a,b,c,d,e,0)
    315 #  endif
    316 #endif
    317 
    318 #include <stdio.h>
    319 #ifdef HAVE_ASSERT_H
    320 #include <assert.h>
    321 #endif
    322 
    323 #ifdef __TANDEM /* for nsr-tandem-nsk systems */
    324 #include <floss.h>
    325 #endif
    326 
    327 #ifndef STDC_HEADERS /* no standard C headers! */
    328 #include <curl/stdcheaders.h>
    329 #endif
    330 
    331 #ifdef __POCC__
    332 #  include <sys/types.h>
    333 #  include <unistd.h>
    334 #  define sys_nerr EILSEQ
    335 #endif
    336 
    337 /*
    338  * Salford-C kludge section (mostly borrowed from wxWidgets).
    339  */
    340 #ifdef __SALFORDC__
    341   #pragma suppress 353             /* Possible nested comments */
    342   #pragma suppress 593             /* Define not used */
    343   #pragma suppress 61              /* enum has no name */
    344   #pragma suppress 106             /* unnamed, unused parameter */
    345   #include <clib.h>
    346 #endif
    347 
    348 /*
    349  * Large file (>2Gb) support using WIN32 functions.
    350  */
    351 
    352 #ifdef USE_WIN32_LARGE_FILES
    353 #  include <io.h>
    354 #  include <sys/types.h>
    355 #  include <sys/stat.h>
    356 #  undef  lseek
    357 #  define lseek(fdes,offset,whence)  _lseeki64(fdes, offset, whence)
    358 #  undef  fstat
    359 #  define fstat(fdes,stp)            _fstati64(fdes, stp)
    360 #  undef  stat
    361 #  define stat(fname,stp)            _stati64(fname, stp)
    362 #  define struct_stat                struct _stati64
    363 #  define LSEEK_ERROR                (__int64)-1
    364 #endif
    365 
    366 /*
    367  * Small file (<2Gb) support using WIN32 functions.
    368  */
    369 
    370 #ifdef USE_WIN32_SMALL_FILES
    371 #  include <io.h>
    372 #  include <sys/types.h>
    373 #  include <sys/stat.h>
    374 #  ifndef _WIN32_WCE
    375 #    undef  lseek
    376 #    define lseek(fdes,offset,whence)  _lseek(fdes, (long)offset, whence)
    377 #    define fstat(fdes,stp)            _fstat(fdes, stp)
    378 #    define stat(fname,stp)            _stat(fname, stp)
    379 #    define struct_stat                struct _stat
    380 #  endif
    381 #  define LSEEK_ERROR                (long)-1
    382 #endif
    383 
    384 #ifndef struct_stat
    385 #  define struct_stat struct stat
    386 #endif
    387 
    388 #ifndef LSEEK_ERROR
    389 #  define LSEEK_ERROR (off_t)-1
    390 #endif
    391 
    392 /*
    393  * Default sizeof(off_t) in case it hasn't been defined in config file.
    394  */
    395 
    396 #ifndef SIZEOF_OFF_T
    397 #  if defined(__VMS) && !defined(__VAX)
    398 #    if defined(_LARGEFILE)
    399 #      define SIZEOF_OFF_T 8
    400 #    endif
    401 #  elif defined(__OS400__) && defined(__ILEC400__)
    402 #    if defined(_LARGE_FILES)
    403 #      define SIZEOF_OFF_T 8
    404 #    endif
    405 #  elif defined(__MVS__) && defined(__IBMC__)
    406 #    if defined(_LP64) || defined(_LARGE_FILES)
    407 #      define SIZEOF_OFF_T 8
    408 #    endif
    409 #  elif defined(__370__) && defined(__IBMC__)
    410 #    if defined(_LP64) || defined(_LARGE_FILES)
    411 #      define SIZEOF_OFF_T 8
    412 #    endif
    413 #  endif
    414 #  ifndef SIZEOF_OFF_T
    415 #    define SIZEOF_OFF_T 4
    416 #  endif
    417 #endif
    418 
    419 #if (SIZEOF_CURL_OFF_T == 4)
    420 #  define CURL_OFF_T_MAX CURL_OFF_T_C(0x7FFFFFFF)
    421 #else
    422    /* assume CURL_SIZEOF_CURL_OFF_T == 8 */
    423 #  define CURL_OFF_T_MAX CURL_OFF_T_C(0x7FFFFFFFFFFFFFFF)
    424 #endif
    425 #define CURL_OFF_T_MIN (-CURL_OFF_T_MAX - CURL_OFF_T_C(1))
    426 
    427 /*
    428  * Arg 2 type for gethostname in case it hasn't been defined in config file.
    429  */
    430 
    431 #ifndef GETHOSTNAME_TYPE_ARG2
    432 #  ifdef USE_WINSOCK
    433 #    define GETHOSTNAME_TYPE_ARG2 int
    434 #  else
    435 #    define GETHOSTNAME_TYPE_ARG2 size_t
    436 #  endif
    437 #endif
    438 
    439 /* Below we define some functions. They should
    440 
    441    4. set the SIGALRM signal timeout
    442    5. set dir/file naming defines
    443    */
    444 
    445 #ifdef WIN32
    446 
    447 #  define DIR_CHAR      "\\"
    448 #  define DOT_CHAR      "_"
    449 
    450 #else /* WIN32 */
    451 
    452 #  ifdef MSDOS  /* Watt-32 */
    453 
    454 #    include <sys/ioctl.h>
    455 #    define select(n,r,w,x,t) select_s(n,r,w,x,t)
    456 #    define ioctl(x,y,z) ioctlsocket(x,y,(char *)(z))
    457 #    include <tcp.h>
    458 #    ifdef word
    459 #      undef word
    460 #    endif
    461 #    ifdef byte
    462 #      undef byte
    463 #    endif
    464 
    465 #  endif /* MSDOS */
    466 
    467 #  ifdef __minix
    468      /* Minix 3 versions up to at least 3.1.3 are missing these prototypes */
    469      extern char *strtok_r(char *s, const char *delim, char **last);
    470      extern struct tm *gmtime_r(const time_t * const timep, struct tm *tmp);
    471 #  endif
    472 
    473 #  define DIR_CHAR      "/"
    474 #  ifndef DOT_CHAR
    475 #    define DOT_CHAR      "."
    476 #  endif
    477 
    478 #  ifdef MSDOS
    479 #    undef DOT_CHAR
    480 #    define DOT_CHAR      "_"
    481 #  endif
    482 
    483 #  ifndef fileno /* sunos 4 have this as a macro! */
    484      int fileno(FILE *stream);
    485 #  endif
    486 
    487 #endif /* WIN32 */
    488 
    489 /*
    490  * msvc 6.0 requires PSDK in order to have INET6_ADDRSTRLEN
    491  * defined in ws2tcpip.h as well as to provide IPv6 support.
    492  * Does not apply if lwIP is used.
    493  */
    494 
    495 #if defined(_MSC_VER) && !defined(__POCC__) && !defined(USE_LWIPSOCK)
    496 #  if !defined(HAVE_WS2TCPIP_H) || \
    497      ((_MSC_VER < 1300) && !defined(INET6_ADDRSTRLEN))
    498 #    undef HAVE_GETADDRINFO_THREADSAFE
    499 #    undef HAVE_FREEADDRINFO
    500 #    undef HAVE_GETADDRINFO
    501 #    undef HAVE_GETNAMEINFO
    502 #    undef ENABLE_IPV6
    503 #  endif
    504 #endif
    505 
    506 /* ---------------------------------------------------------------- */
    507 /*             resolver specialty compile-time defines              */
    508 /*         CURLRES_* defines to use in the host*.c sources          */
    509 /* ---------------------------------------------------------------- */
    510 
    511 /*
    512  * lcc-win32 doesn't have _beginthreadex(), lacks threads support.
    513  */
    514 
    515 #if defined(__LCC__) && defined(WIN32)
    516 #  undef USE_THREADS_POSIX
    517 #  undef USE_THREADS_WIN32
    518 #endif
    519 
    520 /*
    521  * MSVC threads support requires a multi-threaded runtime library.
    522  * _beginthreadex() is not available in single-threaded ones.
    523  */
    524 
    525 #if defined(_MSC_VER) && !defined(__POCC__) && !defined(_MT)
    526 #  undef USE_THREADS_POSIX
    527 #  undef USE_THREADS_WIN32
    528 #endif
    529 
    530 /*
    531  * Mutually exclusive CURLRES_* definitions.
    532  */
    533 
    534 #ifdef USE_ARES
    535 #  define CURLRES_ASYNCH
    536 #  define CURLRES_ARES
    537 /* now undef the stock libc functions just to avoid them being used */
    538 #  undef HAVE_GETADDRINFO
    539 #  undef HAVE_FREEADDRINFO
    540 #  undef HAVE_GETHOSTBYNAME
    541 #elif defined(USE_THREADS_POSIX) || defined(USE_THREADS_WIN32)
    542 #  define CURLRES_ASYNCH
    543 #  define CURLRES_THREADED
    544 #else
    545 #  define CURLRES_SYNCH
    546 #endif
    547 
    548 #ifdef ENABLE_IPV6
    549 #  define CURLRES_IPV6
    550 #else
    551 #  define CURLRES_IPV4
    552 #endif
    553 
    554 /* ---------------------------------------------------------------- */
    555 
    556 /*
    557  * When using WINSOCK, TELNET protocol requires WINSOCK2 API.
    558  */
    559 
    560 #if defined(USE_WINSOCK) && (USE_WINSOCK != 2)
    561 #  define CURL_DISABLE_TELNET 1
    562 #endif
    563 
    564 /*
    565  * msvc 6.0 does not have struct sockaddr_storage and
    566  * does not define IPPROTO_ESP in winsock2.h. But both
    567  * are available if PSDK is properly installed.
    568  */
    569 
    570 #if defined(_MSC_VER) && !defined(__POCC__)
    571 #  if !defined(HAVE_WINSOCK2_H) || ((_MSC_VER < 1300) && !defined(IPPROTO_ESP))
    572 #    undef HAVE_STRUCT_SOCKADDR_STORAGE
    573 #  endif
    574 #endif
    575 
    576 /*
    577  * Intentionally fail to build when using msvc 6.0 without PSDK installed.
    578  * The brave of heart can circumvent this, defining ALLOW_MSVC6_WITHOUT_PSDK
    579  * in lib/config-win32.h although absolutely discouraged and unsupported.
    580  */
    581 
    582 #if defined(_MSC_VER) && !defined(__POCC__)
    583 #  if !defined(HAVE_WINDOWS_H) || ((_MSC_VER < 1300) && !defined(_FILETIME_))
    584 #    if !defined(ALLOW_MSVC6_WITHOUT_PSDK)
    585 #      error MSVC 6.0 requires "February 2003 Platform SDK" a.k.a. \
    586              "Windows Server 2003 PSDK"
    587 #    else
    588 #      define CURL_DISABLE_LDAP 1
    589 #    endif
    590 #  endif
    591 #endif
    592 
    593 #ifdef NETWARE
    594 int netware_init(void);
    595 #ifndef __NOVELL_LIBC__
    596 #include <sys/bsdskt.h>
    597 #include <sys/timeval.h>
    598 #endif
    599 #endif
    600 
    601 #if defined(HAVE_LIBIDN2) && defined(HAVE_IDN2_H) && !defined(USE_WIN32_IDN)
    602 /* The lib and header are present */
    603 #define USE_LIBIDN2
    604 #endif
    605 
    606 #if defined(USE_LIBIDN2) && defined(USE_WIN32_IDN)
    607 #error "Both libidn2 and WinIDN are enabled, choose one."
    608 #endif
    609 
    610 #ifndef SIZEOF_TIME_T
    611 /* assume default size of time_t to be 32 bit */
    612 #define SIZEOF_TIME_T 4
    613 #endif
    614 
    615 #define LIBIDN_REQUIRED_VERSION "0.4.1"
    616 
    617 #if defined(USE_GNUTLS) || defined(USE_OPENSSL) || defined(USE_NSS) || \
    618     defined(USE_POLARSSL) || defined(USE_AXTLS) || defined(USE_MBEDTLS) || \
    619     defined(USE_CYASSL) || defined(USE_SCHANNEL) || \
    620     defined(USE_DARWINSSL) || defined(USE_GSKIT)
    621 #define USE_SSL    /* SSL support has been enabled */
    622 #endif
    623 
    624 /* Single point where USE_SPNEGO definition might be defined */
    625 #if !defined(CURL_DISABLE_CRYPTO_AUTH) && \
    626     (defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI))
    627 #define USE_SPNEGO
    628 #endif
    629 
    630 /* Single point where USE_KERBEROS5 definition might be defined */
    631 #if !defined(CURL_DISABLE_CRYPTO_AUTH) && \
    632     (defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI))
    633 #define USE_KERBEROS5
    634 #endif
    635 
    636 /* Single point where USE_NTLM definition might be defined */
    637 #if !defined(CURL_DISABLE_NTLM) && !defined(CURL_DISABLE_CRYPTO_AUTH)
    638 #if defined(USE_OPENSSL) || defined(USE_WINDOWS_SSPI) || \
    639     defined(USE_GNUTLS) || defined(USE_NSS) || defined(USE_DARWINSSL) || \
    640     defined(USE_OS400CRYPTO) || defined(USE_WIN32_CRYPTO) || \
    641     defined(USE_MBEDTLS)
    642 
    643 #define USE_NTLM
    644 
    645 #  if defined(USE_MBEDTLS)
    646 /* Get definition of MBEDTLS_MD4_C */
    647 #  include <mbedtls/md4.h>
    648 #  endif
    649 
    650 #endif
    651 #endif
    652 
    653 #ifdef CURL_WANTS_CA_BUNDLE_ENV
    654 #error "No longer supported. Set CURLOPT_CAINFO at runtime instead."
    655 #endif
    656 
    657 /*
    658  * Provide a mechanism to silence picky compilers, such as gcc 4.6+.
    659  * Parameters should of course normally not be unused, but for example when
    660  * we have multiple implementations of the same interface it may happen.
    661  */
    662 
    663 #if defined(__GNUC__) && ((__GNUC__ >= 3) || \
    664   ((__GNUC__ == 2) && defined(__GNUC_MINOR__) && (__GNUC_MINOR__ >= 7)))
    665 #  define UNUSED_PARAM __attribute__((__unused__))
    666 #  define WARN_UNUSED_RESULT __attribute__((warn_unused_result))
    667 #else
    668 #  define UNUSED_PARAM /*NOTHING*/
    669 #  define WARN_UNUSED_RESULT
    670 #endif
    671 
    672 /*
    673  * Include macros and defines that should only be processed once.
    674  */
    675 
    676 #ifndef HEADER_CURL_SETUP_ONCE_H
    677 #include "curl_setup_once.h"
    678 #endif
    679 
    680 /*
    681  * Definition of our NOP statement Object-like macro
    682  */
    683 
    684 #ifndef Curl_nop_stmt
    685 #  define Curl_nop_stmt do { } WHILE_FALSE
    686 #endif
    687 
    688 /*
    689  * Ensure that Winsock and lwIP TCP/IP stacks are not mixed.
    690  */
    691 
    692 #if defined(__LWIP_OPT_H__) || defined(LWIP_HDR_OPT_H)
    693 #  if defined(SOCKET) || \
    694      defined(USE_WINSOCK) || \
    695      defined(HAVE_WINSOCK_H) || \
    696      defined(HAVE_WINSOCK2_H) || \
    697      defined(HAVE_WS2TCPIP_H)
    698 #    error "Winsock and lwIP TCP/IP stack definitions shall not coexist!"
    699 #  endif
    700 #endif
    701 
    702 /*
    703  * Portable symbolic names for Winsock shutdown() mode flags.
    704  */
    705 
    706 #ifdef USE_WINSOCK
    707 #  define SHUT_RD   0x00
    708 #  define SHUT_WR   0x01
    709 #  define SHUT_RDWR 0x02
    710 #endif
    711 
    712 /* Define S_ISREG if not defined by system headers, f.e. MSVC */
    713 #if !defined(S_ISREG) && defined(S_IFMT) && defined(S_IFREG)
    714 #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
    715 #endif
    716 
    717 /* Define S_ISDIR if not defined by system headers, f.e. MSVC */
    718 #if !defined(S_ISDIR) && defined(S_IFMT) && defined(S_IFDIR)
    719 #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
    720 #endif
    721 
    722 /* In Windows the default file mode is text but an application can override it.
    723 Therefore we specify it explicitly. https://github.com/curl/curl/pull/258
    724 */
    725 #if defined(WIN32) || defined(MSDOS)
    726 #define FOPEN_READTEXT "rt"
    727 #define FOPEN_WRITETEXT "wt"
    728 #define FOPEN_APPENDTEXT "at"
    729 #elif defined(__CYGWIN__)
    730 /* Cygwin has specific behavior we need to address when WIN32 is not defined.
    731 https://cygwin.com/cygwin-ug-net/using-textbinary.html
    732 For write we want our output to have line endings of LF and be compatible with
    733 other Cygwin utilities. For read we want to handle input that may have line
    734 endings either CRLF or LF so 't' is appropriate.
    735 */
    736 #define FOPEN_READTEXT "rt"
    737 #define FOPEN_WRITETEXT "w"
    738 #define FOPEN_APPENDTEXT "a"
    739 #else
    740 #define FOPEN_READTEXT "r"
    741 #define FOPEN_WRITETEXT "w"
    742 #define FOPEN_APPENDTEXT "a"
    743 #endif
    744 
    745 /* WinSock destroys recv() buffer when send() failed.
    746  * Enabled automatically for Windows and for Cygwin as Cygwin sockets are
    747  * wrappers for WinSock sockets. https://github.com/curl/curl/issues/657
    748  * Define DONT_USE_RECV_BEFORE_SEND_WORKAROUND to force disable workaround.
    749  */
    750 #if !defined(DONT_USE_RECV_BEFORE_SEND_WORKAROUND)
    751 #  if defined(WIN32) || defined(__CYGWIN__)
    752 #    define USE_RECV_BEFORE_SEND_WORKAROUND
    753 #  endif
    754 #else  /* DONT_USE_RECV_BEFORE_SEND_WORKAROUNDS */
    755 #  ifdef USE_RECV_BEFORE_SEND_WORKAROUND
    756 #    undef USE_RECV_BEFORE_SEND_WORKAROUND
    757 #  endif
    758 #endif /* DONT_USE_RECV_BEFORE_SEND_WORKAROUNDS */
    759 
    760 /* Detect Windows App environment which has a restricted access
    761  * to the Win32 APIs. */
    762 # if (defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0602)) || \
    763   defined(WINAPI_FAMILY)
    764 #  include <winapifamily.h>
    765 #  if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) &&  \
    766      !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
    767 #    define CURL_WINDOWS_APP
    768 #  endif
    769 # endif
    770 
    771 #endif /* HEADER_CURL_SETUP_H */
    772