1#ifndef HEADER_CURL_SETUP_H 2#define HEADER_CURL_SETUP_H 3/*************************************************************************** 4 * _ _ ____ _ 5 * Project ___| | | | _ \| | 6 * / __| | | | |_) | | 7 * | (__| |_| | _ <| |___ 8 * \___|\___/|_| \_\_____| 9 * 10 * Copyright (C) 1998 - 2013, 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 http://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/* 26 * Define WIN32 when build target is Win32 API 27 */ 28 29#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32) && \ 30 !defined(__SYMBIAN32__) 31#define WIN32 32#endif 33 34/* 35 * Include configuration script results or hand-crafted 36 * configuration file for platforms which lack config tool. 37 */ 38 39#ifdef HAVE_CONFIG_H 40 41#include "curl_config.h" 42 43#else /* HAVE_CONFIG_H */ 44 45#ifdef _WIN32_WCE 46# include "config-win32ce.h" 47#else 48# ifdef WIN32 49# include "config-win32.h" 50# endif 51#endif 52 53#if defined(macintosh) && defined(__MRC__) 54# include "config-mac.h" 55#endif 56 57#ifdef __riscos__ 58# include "config-riscos.h" 59#endif 60 61#ifdef __AMIGA__ 62# include "config-amigaos.h" 63#endif 64 65#ifdef __SYMBIAN32__ 66# include "config-symbian.h" 67#endif 68 69#ifdef __OS400__ 70# include "config-os400.h" 71#endif 72 73#ifdef TPF 74# include "config-tpf.h" 75#endif 76 77#ifdef __VXWORKS__ 78# include "config-vxworks.h" 79#endif 80 81#endif /* HAVE_CONFIG_H */ 82 83/* ================================================================ */ 84/* Definition of preprocessor macros/symbols which modify compiler */ 85/* behavior or generated code characteristics must be done here, */ 86/* as appropriate, before any system header file is included. It is */ 87/* also possible to have them defined in the config file included */ 88/* before this point. As a result of all this we frown inclusion of */ 89/* system header files in our config files, avoid this at any cost. */ 90/* ================================================================ */ 91 92/* 93 * AIX 4.3 and newer needs _THREAD_SAFE defined to build 94 * proper reentrant code. Others may also need it. 95 */ 96 97#ifdef NEED_THREAD_SAFE 98# ifndef _THREAD_SAFE 99# define _THREAD_SAFE 100# endif 101#endif 102 103/* 104 * Tru64 needs _REENTRANT set for a few function prototypes and 105 * things to appear in the system header files. Unixware needs it 106 * to build proper reentrant code. Others may also need it. 107 */ 108 109#ifdef NEED_REENTRANT 110# ifndef _REENTRANT 111# define _REENTRANT 112# endif 113#endif 114 115/* ================================================================ */ 116/* If you need to include a system header file for your platform, */ 117/* please, do it beyond the point further indicated in this file. */ 118/* ================================================================ */ 119 120/* 121 * libcurl's external interface definitions are also used internally, 122 * and might also include required system header files to define them. 123 */ 124 125#include <curl/curlbuild.h> 126 127/* 128 * Compile time sanity checks must also be done when building the library. 129 */ 130 131#include <curl/curlrules.h> 132 133/* 134 * Ensure that no one is using the old SIZEOF_CURL_OFF_T macro 135 */ 136 137#ifdef SIZEOF_CURL_OFF_T 138# error "SIZEOF_CURL_OFF_T shall not be defined!" 139 Error Compilation_aborted_SIZEOF_CURL_OFF_T_shall_not_be_defined 140#endif 141 142/* 143 * Set up internal curl_off_t formatting string directives for 144 * exclusive use with libcurl's internal *printf functions. 145 */ 146 147#ifdef FORMAT_OFF_T 148# error "FORMAT_OFF_T shall not be defined before this point!" 149 Error Compilation_aborted_FORMAT_OFF_T_already_defined 150#endif 151 152#ifdef FORMAT_OFF_TU 153# error "FORMAT_OFF_TU shall not be defined before this point!" 154 Error Compilation_aborted_FORMAT_OFF_TU_already_defined 155#endif 156 157#if (CURL_SIZEOF_CURL_OFF_T > CURL_SIZEOF_LONG) 158# define FORMAT_OFF_T "lld" 159# define FORMAT_OFF_TU "llu" 160#else 161# define FORMAT_OFF_T "ld" 162# define FORMAT_OFF_TU "lu" 163#endif 164 165/* 166 * Disable other protocols when http is the only one desired. 167 */ 168 169#ifdef HTTP_ONLY 170# ifndef CURL_DISABLE_TFTP 171# define CURL_DISABLE_TFTP 172# endif 173# ifndef CURL_DISABLE_FTP 174# define CURL_DISABLE_FTP 175# endif 176# ifndef CURL_DISABLE_LDAP 177# define CURL_DISABLE_LDAP 178# endif 179# ifndef CURL_DISABLE_TELNET 180# define CURL_DISABLE_TELNET 181# endif 182# ifndef CURL_DISABLE_DICT 183# define CURL_DISABLE_DICT 184# endif 185# ifndef CURL_DISABLE_FILE 186# define CURL_DISABLE_FILE 187# endif 188# ifndef CURL_DISABLE_RTSP 189# define CURL_DISABLE_RTSP 190# endif 191# ifndef CURL_DISABLE_POP3 192# define CURL_DISABLE_POP3 193# endif 194# ifndef CURL_DISABLE_IMAP 195# define CURL_DISABLE_IMAP 196# endif 197# ifndef CURL_DISABLE_SMTP 198# define CURL_DISABLE_SMTP 199# endif 200# ifndef CURL_DISABLE_RTSP 201# define CURL_DISABLE_RTSP 202# endif 203# ifndef CURL_DISABLE_RTMP 204# define CURL_DISABLE_RTMP 205# endif 206# ifndef CURL_DISABLE_GOPHER 207# define CURL_DISABLE_GOPHER 208# endif 209#endif 210 211/* 212 * When http is disabled rtsp is not supported. 213 */ 214 215#if defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_RTSP) 216# define CURL_DISABLE_RTSP 217#endif 218 219/* ================================================================ */ 220/* No system header file shall be included in this file before this */ 221/* point. The only allowed ones are those included from curlbuild.h */ 222/* ================================================================ */ 223 224/* 225 * OS/400 setup file includes some system headers. 226 */ 227 228#ifdef __OS400__ 229# include "setup-os400.h" 230#endif 231 232/* 233 * VMS setup file includes some system headers. 234 */ 235 236#ifdef __VMS 237# include "setup-vms.h" 238#endif 239 240/* 241 * Include header files for windows builds before redefining anything. 242 * Use this preprocessor block only to include or exclude windows.h, 243 * winsock2.h, ws2tcpip.h or winsock.h. Any other windows thing belongs 244 * to any other further and independent block. Under Cygwin things work 245 * just as under linux (e.g. <sys/socket.h>) and the winsock headers should 246 * never be included when __CYGWIN__ is defined. configure script takes 247 * care of this, not defining HAVE_WINDOWS_H, HAVE_WINSOCK_H, HAVE_WINSOCK2_H, 248 * neither HAVE_WS2TCPIP_H when __CYGWIN__ is defined. 249 */ 250 251#ifdef HAVE_WINDOWS_H 252# if defined(UNICODE) && !defined(_UNICODE) 253# define _UNICODE 254# endif 255# if defined(_UNICODE) && !defined(UNICODE) 256# define UNICODE 257# endif 258# ifndef WIN32_LEAN_AND_MEAN 259# define WIN32_LEAN_AND_MEAN 260# endif 261# include <windows.h> 262# ifdef HAVE_WINSOCK2_H 263# include <winsock2.h> 264# ifdef HAVE_WS2TCPIP_H 265# include <ws2tcpip.h> 266# endif 267# else 268# ifdef HAVE_WINSOCK_H 269# include <winsock.h> 270# endif 271# endif 272# include <tchar.h> 273 typedef wchar_t *(*curl_wcsdup_callback)(const wchar_t *str); 274#endif 275 276/* 277 * Define USE_WINSOCK to 2 if we have and use WINSOCK2 API, else 278 * define USE_WINSOCK to 1 if we have and use WINSOCK API, else 279 * undefine USE_WINSOCK. 280 */ 281 282#undef USE_WINSOCK 283 284#ifdef HAVE_WINSOCK2_H 285# define USE_WINSOCK 2 286#else 287# ifdef HAVE_WINSOCK_H 288# define USE_WINSOCK 1 289# endif 290#endif 291 292#ifdef USE_LWIPSOCK 293# include <lwip/init.h> 294# include <lwip/sockets.h> 295# include <lwip/netdb.h> 296#endif 297 298#ifdef HAVE_EXTRA_STRICMP_H 299# include <extra/stricmp.h> 300#endif 301 302#ifdef HAVE_EXTRA_STRDUP_H 303# include <extra/strdup.h> 304#endif 305 306#ifdef TPF 307# include <strings.h> /* for bzero, strcasecmp, and strncasecmp */ 308# include <string.h> /* for strcpy and strlen */ 309# include <stdlib.h> /* for rand and srand */ 310# include <sys/socket.h> /* for select and ioctl*/ 311# include <netdb.h> /* for in_addr_t definition */ 312# include <tpf/sysapi.h> /* for tpf_process_signals */ 313 /* change which select is used for libcurl */ 314# define select(a,b,c,d,e) tpf_select_libcurl(a,b,c,d,e) 315#endif 316 317#ifdef __VXWORKS__ 318# include <sockLib.h> /* for generic BSD socket functions */ 319# include <ioLib.h> /* for basic I/O interface functions */ 320#endif 321 322#ifdef __AMIGA__ 323# ifndef __ixemul__ 324# include <exec/types.h> 325# include <exec/execbase.h> 326# include <proto/exec.h> 327# include <proto/dos.h> 328# define select(a,b,c,d,e) WaitSelect(a,b,c,d,e,0) 329# endif 330#endif 331 332#include <stdio.h> 333#ifdef HAVE_ASSERT_H 334#include <assert.h> 335#endif 336 337#ifdef __TANDEM /* for nsr-tandem-nsk systems */ 338#include <floss.h> 339#endif 340 341#ifndef STDC_HEADERS /* no standard C headers! */ 342#include <curl/stdcheaders.h> 343#endif 344 345#ifdef __POCC__ 346# include <sys/types.h> 347# include <unistd.h> 348# define sys_nerr EILSEQ 349#endif 350 351/* 352 * Salford-C kludge section (mostly borrowed from wxWidgets). 353 */ 354#ifdef __SALFORDC__ 355 #pragma suppress 353 /* Possible nested comments */ 356 #pragma suppress 593 /* Define not used */ 357 #pragma suppress 61 /* enum has no name */ 358 #pragma suppress 106 /* unnamed, unused parameter */ 359 #include <clib.h> 360#endif 361 362/* 363 * Large file (>2Gb) support using WIN32 functions. 364 */ 365 366#ifdef USE_WIN32_LARGE_FILES 367# include <io.h> 368# include <sys/types.h> 369# include <sys/stat.h> 370# undef lseek 371# define lseek(fdes,offset,whence) _lseeki64(fdes, offset, whence) 372# define fstat(fdes,stp) _fstati64(fdes, stp) 373# define stat(fname,stp) _stati64(fname, stp) 374# define struct_stat struct _stati64 375# define LSEEK_ERROR (__int64)-1 376#endif 377 378/* 379 * Small file (<2Gb) support using WIN32 functions. 380 */ 381 382#ifdef USE_WIN32_SMALL_FILES 383# include <io.h> 384# include <sys/types.h> 385# include <sys/stat.h> 386# ifndef _WIN32_WCE 387# undef lseek 388# define lseek(fdes,offset,whence) _lseek(fdes, (long)offset, whence) 389# define fstat(fdes,stp) _fstat(fdes, stp) 390# define stat(fname,stp) _stat(fname, stp) 391# define struct_stat struct _stat 392# endif 393# define LSEEK_ERROR (long)-1 394#endif 395 396#ifndef struct_stat 397# define struct_stat struct stat 398#endif 399 400#ifndef LSEEK_ERROR 401# define LSEEK_ERROR (off_t)-1 402#endif 403 404/* 405 * Default sizeof(off_t) in case it hasn't been defined in config file. 406 */ 407 408#ifndef SIZEOF_OFF_T 409# if defined(__VMS) && !defined(__VAX) 410# if defined(_LARGEFILE) 411# define SIZEOF_OFF_T 8 412# endif 413# elif defined(__OS400__) && defined(__ILEC400__) 414# if defined(_LARGE_FILES) 415# define SIZEOF_OFF_T 8 416# endif 417# elif defined(__MVS__) && defined(__IBMC__) 418# if defined(_LP64) || defined(_LARGE_FILES) 419# define SIZEOF_OFF_T 8 420# endif 421# elif defined(__370__) && defined(__IBMC__) 422# if defined(_LP64) || defined(_LARGE_FILES) 423# define SIZEOF_OFF_T 8 424# endif 425# endif 426# ifndef SIZEOF_OFF_T 427# define SIZEOF_OFF_T 4 428# endif 429#endif 430 431/* 432 * Arg 2 type for gethostname in case it hasn't been defined in config file. 433 */ 434 435#ifndef GETHOSTNAME_TYPE_ARG2 436# ifdef USE_WINSOCK 437# define GETHOSTNAME_TYPE_ARG2 int 438# else 439# define GETHOSTNAME_TYPE_ARG2 size_t 440# endif 441#endif 442 443/* Below we define some functions. They should 444 445 4. set the SIGALRM signal timeout 446 5. set dir/file naming defines 447 */ 448 449#ifdef WIN32 450 451# define DIR_CHAR "\\" 452# define DOT_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# ifndef DOT_CHAR 479# define DOT_CHAR "." 480# endif 481 482# ifdef MSDOS 483# undef DOT_CHAR 484# define DOT_CHAR "_" 485# endif 486 487# ifndef fileno /* sunos 4 have this as a macro! */ 488 int fileno( FILE *stream); 489# endif 490 491#endif /* WIN32 */ 492 493/* 494 * msvc 6.0 requires PSDK in order to have INET6_ADDRSTRLEN 495 * defined in ws2tcpip.h as well as to provide IPv6 support. 496 */ 497 498#if defined(_MSC_VER) && !defined(__POCC__) 499# if !defined(HAVE_WS2TCPIP_H) || \ 500 ((_MSC_VER < 1300) && !defined(INET6_ADDRSTRLEN)) 501# undef HAVE_GETADDRINFO_THREADSAFE 502# undef HAVE_FREEADDRINFO 503# undef HAVE_GETADDRINFO 504# undef HAVE_GETNAMEINFO 505# undef ENABLE_IPV6 506# endif 507#endif 508 509/* ---------------------------------------------------------------- */ 510/* resolver specialty compile-time defines */ 511/* CURLRES_* defines to use in the host*.c sources */ 512/* ---------------------------------------------------------------- */ 513 514/* 515 * lcc-win32 doesn't have _beginthreadex(), lacks threads support. 516 */ 517 518#if defined(__LCC__) && defined(WIN32) 519# undef USE_THREADS_POSIX 520# undef USE_THREADS_WIN32 521#endif 522 523/* 524 * MSVC threads support requires a multi-threaded runtime library. 525 * _beginthreadex() is not available in single-threaded ones. 526 */ 527 528#if defined(_MSC_VER) && !defined(__POCC__) && !defined(_MT) 529# undef USE_THREADS_POSIX 530# undef USE_THREADS_WIN32 531#endif 532 533/* 534 * Mutually exclusive CURLRES_* definitions. 535 */ 536 537#ifdef USE_ARES 538# define CURLRES_ASYNCH 539# define CURLRES_ARES 540/* now undef the stock libc functions just to avoid them being used */ 541# undef HAVE_GETADDRINFO 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#ifdef ENABLE_IPV6 551# define CURLRES_IPV6 552#else 553# define CURLRES_IPV4 554#endif 555 556/* ---------------------------------------------------------------- */ 557 558/* 559 * When using WINSOCK, TELNET protocol requires WINSOCK2 API. 560 */ 561 562#if defined(USE_WINSOCK) && (USE_WINSOCK != 2) 563# define CURL_DISABLE_TELNET 1 564#endif 565 566/* 567 * msvc 6.0 does not have struct sockaddr_storage and 568 * does not define IPPROTO_ESP in winsock2.h. But both 569 * are available if PSDK is properly installed. 570 */ 571 572#if defined(_MSC_VER) && !defined(__POCC__) 573# if !defined(HAVE_WINSOCK2_H) || ((_MSC_VER < 1300) && !defined(IPPROTO_ESP)) 574# undef HAVE_STRUCT_SOCKADDR_STORAGE 575# endif 576#endif 577 578/* 579 * Intentionally fail to build when using msvc 6.0 without PSDK installed. 580 * The brave of heart can circumvent this, defining ALLOW_MSVC6_WITHOUT_PSDK 581 * in lib/config-win32.h although absolutely discouraged and unsupported. 582 */ 583 584#if defined(_MSC_VER) && !defined(__POCC__) 585# if !defined(HAVE_WINDOWS_H) || ((_MSC_VER < 1300) && !defined(_FILETIME_)) 586# if !defined(ALLOW_MSVC6_WITHOUT_PSDK) 587# error MSVC 6.0 requires "February 2003 Platform SDK" a.k.a. \ 588 "Windows Server 2003 PSDK" 589# else 590# define CURL_DISABLE_LDAP 1 591# endif 592# endif 593#endif 594 595#ifdef NETWARE 596int netware_init(void); 597#ifndef __NOVELL_LIBC__ 598#include <sys/bsdskt.h> 599#include <sys/timeval.h> 600#endif 601#endif 602 603#if defined(HAVE_LIBIDN) && defined(HAVE_TLD_H) 604/* The lib was present and the tld.h header (which is missing in libidn 0.3.X 605 but we only work with libidn 0.4.1 or later) */ 606#define USE_LIBIDN 607#endif 608 609#ifndef SIZEOF_TIME_T 610/* assume default size of time_t to be 32 bit */ 611#define SIZEOF_TIME_T 4 612#endif 613 614#define LIBIDN_REQUIRED_VERSION "0.4.1" 615 616#if defined(USE_GNUTLS) || defined(USE_SSLEAY) || defined(USE_NSS) || \ 617 defined(USE_QSOSSL) || defined(USE_POLARSSL) || defined(USE_AXTLS) || \ 618 defined(USE_CYASSL) || defined(USE_SCHANNEL) || \ 619 defined(USE_DARWINSSL) 620#define USE_SSL /* SSL support has been enabled */ 621#endif 622 623#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI) 624#define USE_HTTP_NEGOTIATE 625#endif 626 627/* Single point where USE_NTLM definition might be done */ 628#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_NTLM) 629#if defined(USE_SSLEAY) || defined(USE_WINDOWS_SSPI) || \ 630 defined(USE_GNUTLS) || defined(USE_NSS) || defined(USE_DARWINSSL) 631#define USE_NTLM 632#endif 633#endif 634 635/* non-configure builds may define CURL_WANTS_CA_BUNDLE_ENV */ 636#if defined(CURL_WANTS_CA_BUNDLE_ENV) && !defined(CURL_CA_BUNDLE) 637#define CURL_CA_BUNDLE getenv("CURL_CA_BUNDLE") 638#endif 639 640/* 641 * Provide a mechanism to silence picky compilers, such as gcc 4.6+. 642 * Parameters should of course normally not be unused, but for example when 643 * we have multiple implementations of the same interface it may happen. 644 */ 645 646#if defined(__GNUC__) && ((__GNUC__ >= 3) || \ 647 ((__GNUC__ == 2) && defined(__GNUC_MINOR__) && (__GNUC_MINOR__ >= 7))) 648# define UNUSED_PARAM __attribute__((__unused__)) 649#else 650# define UNUSED_PARAM /*NOTHING*/ 651#endif 652 653/* 654 * Include macros and defines that should only be processed once. 655 */ 656 657#ifndef HEADER_CURL_SETUP_ONCE_H 658#include "curl_setup_once.h" 659#endif 660 661/* 662 * Definition of our NOP statement Object-like macro 663 */ 664 665#ifndef Curl_nop_stmt 666# define Curl_nop_stmt do { } WHILE_FALSE 667#endif 668 669/* 670 * Ensure that Winsock and lwIP TCP/IP stacks are not mixed. 671 */ 672 673#if defined(__LWIP_OPT_H__) 674# if defined(SOCKET) || \ 675 defined(USE_WINSOCK) || \ 676 defined(HAVE_WINSOCK_H) || \ 677 defined(HAVE_WINSOCK2_H) || \ 678 defined(HAVE_WS2TCPIP_H) 679# error "Winsock and lwIP TCP/IP stack definitions shall not coexist!" 680# endif 681#endif 682 683/* 684 * Portable symbolic names for Winsock shutdown() mode flags. 685 */ 686 687#ifdef USE_WINSOCK 688# define SHUT_RD 0x00 689# define SHUT_WR 0x01 690# define SHUT_RDWR 0x02 691#endif 692 693/* Define S_ISREG if not defined by system headers, f.e. MSVC */ 694#if !defined(S_ISREG) && defined(S_IFMT) && defined(S_IFREG) 695#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) 696#endif 697 698/* Define S_ISDIR if not defined by system headers, f.e. MSVC */ 699#if !defined(S_ISDIR) && defined(S_IFMT) && defined(S_IFDIR) 700#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) 701#endif 702 703#endif /* HEADER_CURL_SETUP_H */ 704