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