xref: /aosp_15_r20/external/curl/lib/curl_setup.h (revision 6236dae45794135f37c4eb022389c904c8b0090d)
1*6236dae4SAndroid Build Coastguard Worker #ifndef HEADER_CURL_SETUP_H
2*6236dae4SAndroid Build Coastguard Worker #define HEADER_CURL_SETUP_H
3*6236dae4SAndroid Build Coastguard Worker /***************************************************************************
4*6236dae4SAndroid Build Coastguard Worker  *                                  _   _ ____  _
5*6236dae4SAndroid Build Coastguard Worker  *  Project                     ___| | | |  _ \| |
6*6236dae4SAndroid Build Coastguard Worker  *                             / __| | | | |_) | |
7*6236dae4SAndroid Build Coastguard Worker  *                            | (__| |_| |  _ <| |___
8*6236dae4SAndroid Build Coastguard Worker  *                             \___|\___/|_| \_\_____|
9*6236dae4SAndroid Build Coastguard Worker  *
10*6236dae4SAndroid Build Coastguard Worker  * Copyright (C) Daniel Stenberg, <[email protected]>, et al.
11*6236dae4SAndroid Build Coastguard Worker  *
12*6236dae4SAndroid Build Coastguard Worker  * This software is licensed as described in the file COPYING, which
13*6236dae4SAndroid Build Coastguard Worker  * you should have received as part of this distribution. The terms
14*6236dae4SAndroid Build Coastguard Worker  * are also available at https://curl.se/docs/copyright.html.
15*6236dae4SAndroid Build Coastguard Worker  *
16*6236dae4SAndroid Build Coastguard Worker  * You may opt to use, copy, modify, merge, publish, distribute and/or sell
17*6236dae4SAndroid Build Coastguard Worker  * copies of the Software, and permit persons to whom the Software is
18*6236dae4SAndroid Build Coastguard Worker  * furnished to do so, under the terms of the COPYING file.
19*6236dae4SAndroid Build Coastguard Worker  *
20*6236dae4SAndroid Build Coastguard Worker  * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
21*6236dae4SAndroid Build Coastguard Worker  * KIND, either express or implied.
22*6236dae4SAndroid Build Coastguard Worker  *
23*6236dae4SAndroid Build Coastguard Worker  * SPDX-License-Identifier: curl
24*6236dae4SAndroid Build Coastguard Worker  *
25*6236dae4SAndroid Build Coastguard Worker  ***************************************************************************/
26*6236dae4SAndroid Build Coastguard Worker 
27*6236dae4SAndroid Build Coastguard Worker #if defined(BUILDING_LIBCURL) && !defined(CURL_NO_OLDIES)
28*6236dae4SAndroid Build Coastguard Worker #define CURL_NO_OLDIES
29*6236dae4SAndroid Build Coastguard Worker #endif
30*6236dae4SAndroid Build Coastguard Worker 
31*6236dae4SAndroid Build Coastguard Worker /* Tell "curl/curl.h" not to include "curl/mprintf.h" */
32*6236dae4SAndroid Build Coastguard Worker #define CURL_SKIP_INCLUDE_MPRINTF
33*6236dae4SAndroid Build Coastguard Worker 
34*6236dae4SAndroid Build Coastguard Worker /* FIXME: Delete this once the warnings have been fixed. */
35*6236dae4SAndroid Build Coastguard Worker #if !defined(CURL_WARN_SIGN_CONVERSION)
36*6236dae4SAndroid Build Coastguard Worker #if defined(__GNUC__) || defined(__clang__)
37*6236dae4SAndroid Build Coastguard Worker #pragma GCC diagnostic ignored "-Wsign-conversion"
38*6236dae4SAndroid Build Coastguard Worker #endif
39*6236dae4SAndroid Build Coastguard Worker #endif
40*6236dae4SAndroid Build Coastguard Worker 
41*6236dae4SAndroid Build Coastguard Worker /* Set default _WIN32_WINNT */
42*6236dae4SAndroid Build Coastguard Worker #ifdef __MINGW32__
43*6236dae4SAndroid Build Coastguard Worker #include <_mingw.h>
44*6236dae4SAndroid Build Coastguard Worker #endif
45*6236dae4SAndroid Build Coastguard Worker 
46*6236dae4SAndroid Build Coastguard Worker /* Workaround for Homebrew gcc 12.4.0, 13.3.0, 14.1.0 and newer (as of 14.1.0)
47*6236dae4SAndroid Build Coastguard Worker    that started advertising the `availability` attribute, which then gets used
48*6236dae4SAndroid Build Coastguard Worker    by Apple SDK, but, in a way incompatible with gcc, resulting in misc errors
49*6236dae4SAndroid Build Coastguard Worker    inside SDK headers, e.g.:
50*6236dae4SAndroid Build Coastguard Worker      error: attributes should be specified before the declarator in a function
51*6236dae4SAndroid Build Coastguard Worker             definition
52*6236dae4SAndroid Build Coastguard Worker      error: expected ',' or '}' before
53*6236dae4SAndroid Build Coastguard Worker    Followed by missing declarations.
54*6236dae4SAndroid Build Coastguard Worker    Fix it by overriding the built-in feature-check macro used by the headers
55*6236dae4SAndroid Build Coastguard Worker    to enable the problematic attributes. This makes the feature check fail. */
56*6236dae4SAndroid Build Coastguard Worker #if defined(__APPLE__) &&                \
57*6236dae4SAndroid Build Coastguard Worker   !defined(__clang__) &&                 \
58*6236dae4SAndroid Build Coastguard Worker   defined(__GNUC__) && __GNUC__ >= 12 && \
59*6236dae4SAndroid Build Coastguard Worker   defined(__has_attribute)
60*6236dae4SAndroid Build Coastguard Worker #define availability curl_pp_attribute_disabled
61*6236dae4SAndroid Build Coastguard Worker #endif
62*6236dae4SAndroid Build Coastguard Worker 
63*6236dae4SAndroid Build Coastguard Worker #if defined(__APPLE__)
64*6236dae4SAndroid Build Coastguard Worker #include <sys/types.h>
65*6236dae4SAndroid Build Coastguard Worker #include <TargetConditionals.h>
66*6236dae4SAndroid Build Coastguard Worker /* Fixup faulty target macro initialization in macOS SDK since v14.4 (as of
67*6236dae4SAndroid Build Coastguard Worker    15.0 beta). The SDK target detection in `TargetConditionals.h` correctly
68*6236dae4SAndroid Build Coastguard Worker    detects macOS, but fails to set the macro's old name `TARGET_OS_OSX`, then
69*6236dae4SAndroid Build Coastguard Worker    continues to set it to a default value of 0. Other parts of the SDK still
70*6236dae4SAndroid Build Coastguard Worker    rely on the old name, and with this inconsistency our builds fail due to
71*6236dae4SAndroid Build Coastguard Worker    missing declarations. It happens when using mainline llvm older than v18.
72*6236dae4SAndroid Build Coastguard Worker    Later versions fixed it by predefining these target macros, avoiding the
73*6236dae4SAndroid Build Coastguard Worker    faulty dynamic detection. gcc is not affected (for now) because it lacks
74*6236dae4SAndroid Build Coastguard Worker    the necessary dynamic detection features, so the SDK falls back to
75*6236dae4SAndroid Build Coastguard Worker    a codepath that sets both the old and new macro to 1. */
76*6236dae4SAndroid Build Coastguard Worker #if defined(TARGET_OS_MAC) && TARGET_OS_MAC && \
77*6236dae4SAndroid Build Coastguard Worker   defined(TARGET_OS_OSX) && !TARGET_OS_OSX && \
78*6236dae4SAndroid Build Coastguard Worker   (!defined(TARGET_OS_IPHONE) || !TARGET_OS_IPHONE) && \
79*6236dae4SAndroid Build Coastguard Worker   (!defined(TARGET_OS_SIMULATOR) || !TARGET_OS_SIMULATOR)
80*6236dae4SAndroid Build Coastguard Worker #undef TARGET_OS_OSX
81*6236dae4SAndroid Build Coastguard Worker #define TARGET_OS_OSX TARGET_OS_MAC
82*6236dae4SAndroid Build Coastguard Worker #endif
83*6236dae4SAndroid Build Coastguard Worker #endif
84*6236dae4SAndroid Build Coastguard Worker 
85*6236dae4SAndroid Build Coastguard Worker /*
86*6236dae4SAndroid Build Coastguard Worker  * Disable Visual Studio warnings:
87*6236dae4SAndroid Build Coastguard Worker  * 4127 "conditional expression is constant"
88*6236dae4SAndroid Build Coastguard Worker  */
89*6236dae4SAndroid Build Coastguard Worker #ifdef _MSC_VER
90*6236dae4SAndroid Build Coastguard Worker #pragma warning(disable:4127)
91*6236dae4SAndroid Build Coastguard Worker #endif
92*6236dae4SAndroid Build Coastguard Worker 
93*6236dae4SAndroid Build Coastguard Worker #ifdef _WIN32
94*6236dae4SAndroid Build Coastguard Worker /*
95*6236dae4SAndroid Build Coastguard Worker  * Do not include unneeded stuff in Windows headers to avoid compiler
96*6236dae4SAndroid Build Coastguard Worker  * warnings and macro clashes.
97*6236dae4SAndroid Build Coastguard Worker  * Make sure to define this macro before including any Windows headers.
98*6236dae4SAndroid Build Coastguard Worker  */
99*6236dae4SAndroid Build Coastguard Worker #  ifndef WIN32_LEAN_AND_MEAN
100*6236dae4SAndroid Build Coastguard Worker #    define WIN32_LEAN_AND_MEAN
101*6236dae4SAndroid Build Coastguard Worker #  endif
102*6236dae4SAndroid Build Coastguard Worker #  ifndef NOGDI
103*6236dae4SAndroid Build Coastguard Worker #    define NOGDI
104*6236dae4SAndroid Build Coastguard Worker #  endif
105*6236dae4SAndroid Build Coastguard Worker /* Detect Windows App environment which has a restricted access
106*6236dae4SAndroid Build Coastguard Worker  * to the Win32 APIs. */
107*6236dae4SAndroid Build Coastguard Worker # if (defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0602)) || \
108*6236dae4SAndroid Build Coastguard Worker   defined(WINAPI_FAMILY)
109*6236dae4SAndroid Build Coastguard Worker #  include <winapifamily.h>
110*6236dae4SAndroid Build Coastguard Worker #  if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) &&  \
111*6236dae4SAndroid Build Coastguard Worker      !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
112*6236dae4SAndroid Build Coastguard Worker #    define CURL_WINDOWS_UWP
113*6236dae4SAndroid Build Coastguard Worker #  endif
114*6236dae4SAndroid Build Coastguard Worker # endif
115*6236dae4SAndroid Build Coastguard Worker #endif
116*6236dae4SAndroid Build Coastguard Worker 
117*6236dae4SAndroid Build Coastguard Worker /* Compatibility */
118*6236dae4SAndroid Build Coastguard Worker #if defined(ENABLE_IPV6)
119*6236dae4SAndroid Build Coastguard Worker #  define USE_IPV6 1
120*6236dae4SAndroid Build Coastguard Worker #endif
121*6236dae4SAndroid Build Coastguard Worker 
122*6236dae4SAndroid Build Coastguard Worker /*
123*6236dae4SAndroid Build Coastguard Worker  * Include configuration script results or hand-crafted
124*6236dae4SAndroid Build Coastguard Worker  * configuration file for platforms which lack config tool.
125*6236dae4SAndroid Build Coastguard Worker  */
126*6236dae4SAndroid Build Coastguard Worker 
127*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_CONFIG_H
128*6236dae4SAndroid Build Coastguard Worker 
129*6236dae4SAndroid Build Coastguard Worker #include "curl_config.h"
130*6236dae4SAndroid Build Coastguard Worker 
131*6236dae4SAndroid Build Coastguard Worker #else /* HAVE_CONFIG_H */
132*6236dae4SAndroid Build Coastguard Worker 
133*6236dae4SAndroid Build Coastguard Worker #ifdef _WIN32_WCE
134*6236dae4SAndroid Build Coastguard Worker #  include "config-win32ce.h"
135*6236dae4SAndroid Build Coastguard Worker #else
136*6236dae4SAndroid Build Coastguard Worker #  ifdef _WIN32
137*6236dae4SAndroid Build Coastguard Worker #    include "config-win32.h"
138*6236dae4SAndroid Build Coastguard Worker #  endif
139*6236dae4SAndroid Build Coastguard Worker #endif
140*6236dae4SAndroid Build Coastguard Worker 
141*6236dae4SAndroid Build Coastguard Worker #ifdef macintosh
142*6236dae4SAndroid Build Coastguard Worker #  include "config-mac.h"
143*6236dae4SAndroid Build Coastguard Worker #endif
144*6236dae4SAndroid Build Coastguard Worker 
145*6236dae4SAndroid Build Coastguard Worker #ifdef __riscos__
146*6236dae4SAndroid Build Coastguard Worker #  include "config-riscos.h"
147*6236dae4SAndroid Build Coastguard Worker #endif
148*6236dae4SAndroid Build Coastguard Worker 
149*6236dae4SAndroid Build Coastguard Worker #ifdef __AMIGA__
150*6236dae4SAndroid Build Coastguard Worker #  include "config-amigaos.h"
151*6236dae4SAndroid Build Coastguard Worker #endif
152*6236dae4SAndroid Build Coastguard Worker 
153*6236dae4SAndroid Build Coastguard Worker #ifdef __OS400__
154*6236dae4SAndroid Build Coastguard Worker #  include "config-os400.h"
155*6236dae4SAndroid Build Coastguard Worker #endif
156*6236dae4SAndroid Build Coastguard Worker 
157*6236dae4SAndroid Build Coastguard Worker #ifdef __PLAN9__
158*6236dae4SAndroid Build Coastguard Worker #  include "config-plan9.h"
159*6236dae4SAndroid Build Coastguard Worker #endif
160*6236dae4SAndroid Build Coastguard Worker 
161*6236dae4SAndroid Build Coastguard Worker #ifdef MSDOS
162*6236dae4SAndroid Build Coastguard Worker #  include "config-dos.h"
163*6236dae4SAndroid Build Coastguard Worker #endif
164*6236dae4SAndroid Build Coastguard Worker 
165*6236dae4SAndroid Build Coastguard Worker #endif /* HAVE_CONFIG_H */
166*6236dae4SAndroid Build Coastguard Worker 
167*6236dae4SAndroid Build Coastguard Worker /* ================================================================ */
168*6236dae4SAndroid Build Coastguard Worker /* Definition of preprocessor macros/symbols which modify compiler  */
169*6236dae4SAndroid Build Coastguard Worker /* behavior or generated code characteristics must be done here,   */
170*6236dae4SAndroid Build Coastguard Worker /* as appropriate, before any system header file is included. It is */
171*6236dae4SAndroid Build Coastguard Worker /* also possible to have them defined in the config file included   */
172*6236dae4SAndroid Build Coastguard Worker /* before this point. As a result of all this we frown inclusion of */
173*6236dae4SAndroid Build Coastguard Worker /* system header files in our config files, avoid this at any cost. */
174*6236dae4SAndroid Build Coastguard Worker /* ================================================================ */
175*6236dae4SAndroid Build Coastguard Worker 
176*6236dae4SAndroid Build Coastguard Worker /*
177*6236dae4SAndroid Build Coastguard Worker  * AIX 4.3 and newer needs _THREAD_SAFE defined to build
178*6236dae4SAndroid Build Coastguard Worker  * proper reentrant code. Others may also need it.
179*6236dae4SAndroid Build Coastguard Worker  */
180*6236dae4SAndroid Build Coastguard Worker 
181*6236dae4SAndroid Build Coastguard Worker #ifdef NEED_THREAD_SAFE
182*6236dae4SAndroid Build Coastguard Worker #  ifndef _THREAD_SAFE
183*6236dae4SAndroid Build Coastguard Worker #    define _THREAD_SAFE
184*6236dae4SAndroid Build Coastguard Worker #  endif
185*6236dae4SAndroid Build Coastguard Worker #endif
186*6236dae4SAndroid Build Coastguard Worker 
187*6236dae4SAndroid Build Coastguard Worker /*
188*6236dae4SAndroid Build Coastguard Worker  * Tru64 needs _REENTRANT set for a few function prototypes and
189*6236dae4SAndroid Build Coastguard Worker  * things to appear in the system header files. Unixware needs it
190*6236dae4SAndroid Build Coastguard Worker  * to build proper reentrant code. Others may also need it.
191*6236dae4SAndroid Build Coastguard Worker  */
192*6236dae4SAndroid Build Coastguard Worker 
193*6236dae4SAndroid Build Coastguard Worker #ifdef NEED_REENTRANT
194*6236dae4SAndroid Build Coastguard Worker #  ifndef _REENTRANT
195*6236dae4SAndroid Build Coastguard Worker #    define _REENTRANT
196*6236dae4SAndroid Build Coastguard Worker #  endif
197*6236dae4SAndroid Build Coastguard Worker #endif
198*6236dae4SAndroid Build Coastguard Worker 
199*6236dae4SAndroid Build Coastguard Worker /* Solaris needs this to get a POSIX-conformant getpwuid_r */
200*6236dae4SAndroid Build Coastguard Worker #if defined(sun) || defined(__sun)
201*6236dae4SAndroid Build Coastguard Worker #  ifndef _POSIX_PTHREAD_SEMANTICS
202*6236dae4SAndroid Build Coastguard Worker #    define _POSIX_PTHREAD_SEMANTICS 1
203*6236dae4SAndroid Build Coastguard Worker #  endif
204*6236dae4SAndroid Build Coastguard Worker #endif
205*6236dae4SAndroid Build Coastguard Worker 
206*6236dae4SAndroid Build Coastguard Worker /* ================================================================ */
207*6236dae4SAndroid Build Coastguard Worker /*  If you need to include a system header file for your platform,  */
208*6236dae4SAndroid Build Coastguard Worker /*  please, do it beyond the point further indicated in this file.  */
209*6236dae4SAndroid Build Coastguard Worker /* ================================================================ */
210*6236dae4SAndroid Build Coastguard Worker 
211*6236dae4SAndroid Build Coastguard Worker /* Give calloc a chance to be dragging in early, so we do not redefine */
212*6236dae4SAndroid Build Coastguard Worker #if defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)
213*6236dae4SAndroid Build Coastguard Worker #  include <pthread.h>
214*6236dae4SAndroid Build Coastguard Worker #endif
215*6236dae4SAndroid Build Coastguard Worker 
216*6236dae4SAndroid Build Coastguard Worker /*
217*6236dae4SAndroid Build Coastguard Worker  * Disable other protocols when http is the only one desired.
218*6236dae4SAndroid Build Coastguard Worker  */
219*6236dae4SAndroid Build Coastguard Worker 
220*6236dae4SAndroid Build Coastguard Worker #ifdef HTTP_ONLY
221*6236dae4SAndroid Build Coastguard Worker #  ifndef CURL_DISABLE_DICT
222*6236dae4SAndroid Build Coastguard Worker #    define CURL_DISABLE_DICT
223*6236dae4SAndroid Build Coastguard Worker #  endif
224*6236dae4SAndroid Build Coastguard Worker #  ifndef CURL_DISABLE_FILE
225*6236dae4SAndroid Build Coastguard Worker #    define CURL_DISABLE_FILE
226*6236dae4SAndroid Build Coastguard Worker #  endif
227*6236dae4SAndroid Build Coastguard Worker #  ifndef CURL_DISABLE_FTP
228*6236dae4SAndroid Build Coastguard Worker #    define CURL_DISABLE_FTP
229*6236dae4SAndroid Build Coastguard Worker #  endif
230*6236dae4SAndroid Build Coastguard Worker #  ifndef CURL_DISABLE_GOPHER
231*6236dae4SAndroid Build Coastguard Worker #    define CURL_DISABLE_GOPHER
232*6236dae4SAndroid Build Coastguard Worker #  endif
233*6236dae4SAndroid Build Coastguard Worker #  ifndef CURL_DISABLE_IMAP
234*6236dae4SAndroid Build Coastguard Worker #    define CURL_DISABLE_IMAP
235*6236dae4SAndroid Build Coastguard Worker #  endif
236*6236dae4SAndroid Build Coastguard Worker #  ifndef CURL_DISABLE_LDAP
237*6236dae4SAndroid Build Coastguard Worker #    define CURL_DISABLE_LDAP
238*6236dae4SAndroid Build Coastguard Worker #  endif
239*6236dae4SAndroid Build Coastguard Worker #  ifndef CURL_DISABLE_LDAPS
240*6236dae4SAndroid Build Coastguard Worker #    define CURL_DISABLE_LDAPS
241*6236dae4SAndroid Build Coastguard Worker #  endif
242*6236dae4SAndroid Build Coastguard Worker #  ifndef CURL_DISABLE_MQTT
243*6236dae4SAndroid Build Coastguard Worker #    define CURL_DISABLE_MQTT
244*6236dae4SAndroid Build Coastguard Worker #  endif
245*6236dae4SAndroid Build Coastguard Worker #  ifndef CURL_DISABLE_POP3
246*6236dae4SAndroid Build Coastguard Worker #    define CURL_DISABLE_POP3
247*6236dae4SAndroid Build Coastguard Worker #  endif
248*6236dae4SAndroid Build Coastguard Worker #  ifndef CURL_DISABLE_RTSP
249*6236dae4SAndroid Build Coastguard Worker #    define CURL_DISABLE_RTSP
250*6236dae4SAndroid Build Coastguard Worker #  endif
251*6236dae4SAndroid Build Coastguard Worker #  ifndef CURL_DISABLE_SMB
252*6236dae4SAndroid Build Coastguard Worker #    define CURL_DISABLE_SMB
253*6236dae4SAndroid Build Coastguard Worker #  endif
254*6236dae4SAndroid Build Coastguard Worker #  ifndef CURL_DISABLE_SMTP
255*6236dae4SAndroid Build Coastguard Worker #    define CURL_DISABLE_SMTP
256*6236dae4SAndroid Build Coastguard Worker #  endif
257*6236dae4SAndroid Build Coastguard Worker #  ifndef CURL_DISABLE_TELNET
258*6236dae4SAndroid Build Coastguard Worker #    define CURL_DISABLE_TELNET
259*6236dae4SAndroid Build Coastguard Worker #  endif
260*6236dae4SAndroid Build Coastguard Worker #  ifndef CURL_DISABLE_TFTP
261*6236dae4SAndroid Build Coastguard Worker #    define CURL_DISABLE_TFTP
262*6236dae4SAndroid Build Coastguard Worker #  endif
263*6236dae4SAndroid Build Coastguard Worker #endif
264*6236dae4SAndroid Build Coastguard Worker 
265*6236dae4SAndroid Build Coastguard Worker /*
266*6236dae4SAndroid Build Coastguard Worker  * When http is disabled rtsp is not supported.
267*6236dae4SAndroid Build Coastguard Worker  */
268*6236dae4SAndroid Build Coastguard Worker 
269*6236dae4SAndroid Build Coastguard Worker #if defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_RTSP)
270*6236dae4SAndroid Build Coastguard Worker #  define CURL_DISABLE_RTSP
271*6236dae4SAndroid Build Coastguard Worker #endif
272*6236dae4SAndroid Build Coastguard Worker 
273*6236dae4SAndroid Build Coastguard Worker /*
274*6236dae4SAndroid Build Coastguard Worker  * When HTTP is disabled, disable HTTP-only features
275*6236dae4SAndroid Build Coastguard Worker  */
276*6236dae4SAndroid Build Coastguard Worker 
277*6236dae4SAndroid Build Coastguard Worker #if defined(CURL_DISABLE_HTTP)
278*6236dae4SAndroid Build Coastguard Worker #  define CURL_DISABLE_ALTSVC 1
279*6236dae4SAndroid Build Coastguard Worker #  define CURL_DISABLE_COOKIES 1
280*6236dae4SAndroid Build Coastguard Worker #  define CURL_DISABLE_BASIC_AUTH 1
281*6236dae4SAndroid Build Coastguard Worker #  define CURL_DISABLE_BEARER_AUTH 1
282*6236dae4SAndroid Build Coastguard Worker #  define CURL_DISABLE_AWS 1
283*6236dae4SAndroid Build Coastguard Worker #  define CURL_DISABLE_DOH 1
284*6236dae4SAndroid Build Coastguard Worker #  define CURL_DISABLE_FORM_API 1
285*6236dae4SAndroid Build Coastguard Worker #  define CURL_DISABLE_HEADERS_API 1
286*6236dae4SAndroid Build Coastguard Worker #  define CURL_DISABLE_HSTS 1
287*6236dae4SAndroid Build Coastguard Worker #  define CURL_DISABLE_HTTP_AUTH 1
288*6236dae4SAndroid Build Coastguard Worker #endif
289*6236dae4SAndroid Build Coastguard Worker 
290*6236dae4SAndroid Build Coastguard Worker /* ================================================================ */
291*6236dae4SAndroid Build Coastguard Worker /* No system header file shall be included in this file before this */
292*6236dae4SAndroid Build Coastguard Worker /* point.                                                           */
293*6236dae4SAndroid Build Coastguard Worker /* ================================================================ */
294*6236dae4SAndroid Build Coastguard Worker 
295*6236dae4SAndroid Build Coastguard Worker /*
296*6236dae4SAndroid Build Coastguard Worker  * OS/400 setup file includes some system headers.
297*6236dae4SAndroid Build Coastguard Worker  */
298*6236dae4SAndroid Build Coastguard Worker 
299*6236dae4SAndroid Build Coastguard Worker #ifdef __OS400__
300*6236dae4SAndroid Build Coastguard Worker #  include "setup-os400.h"
301*6236dae4SAndroid Build Coastguard Worker #endif
302*6236dae4SAndroid Build Coastguard Worker 
303*6236dae4SAndroid Build Coastguard Worker /*
304*6236dae4SAndroid Build Coastguard Worker  * VMS setup file includes some system headers.
305*6236dae4SAndroid Build Coastguard Worker  */
306*6236dae4SAndroid Build Coastguard Worker 
307*6236dae4SAndroid Build Coastguard Worker #ifdef __VMS
308*6236dae4SAndroid Build Coastguard Worker #  include "setup-vms.h"
309*6236dae4SAndroid Build Coastguard Worker #endif
310*6236dae4SAndroid Build Coastguard Worker 
311*6236dae4SAndroid Build Coastguard Worker /*
312*6236dae4SAndroid Build Coastguard Worker  * Windows setup file includes some system headers.
313*6236dae4SAndroid Build Coastguard Worker  */
314*6236dae4SAndroid Build Coastguard Worker 
315*6236dae4SAndroid Build Coastguard Worker #ifdef _WIN32
316*6236dae4SAndroid Build Coastguard Worker #  include "setup-win32.h"
317*6236dae4SAndroid Build Coastguard Worker #endif
318*6236dae4SAndroid Build Coastguard Worker 
319*6236dae4SAndroid Build Coastguard Worker #include <curl/system.h>
320*6236dae4SAndroid Build Coastguard Worker 
321*6236dae4SAndroid Build Coastguard Worker /* Helper macro to expand and concatenate two macros.
322*6236dae4SAndroid Build Coastguard Worker  * Direct macros concatenation does not work because macros
323*6236dae4SAndroid Build Coastguard Worker  * are not expanded before direct concatenation.
324*6236dae4SAndroid Build Coastguard Worker  */
325*6236dae4SAndroid Build Coastguard Worker #define CURL_CONC_MACROS_(A,B) A ## B
326*6236dae4SAndroid Build Coastguard Worker #define CURL_CONC_MACROS(A,B) CURL_CONC_MACROS_(A,B)
327*6236dae4SAndroid Build Coastguard Worker 
328*6236dae4SAndroid Build Coastguard Worker /* curl uses its own printf() function internally. It understands the GNU
329*6236dae4SAndroid Build Coastguard Worker  * format. Use this format, so that is matches the GNU format attribute we
330*6236dae4SAndroid Build Coastguard Worker  * use with the MinGW compiler, allowing it to verify them at compile-time.
331*6236dae4SAndroid Build Coastguard Worker  */
332*6236dae4SAndroid Build Coastguard Worker #ifdef  __MINGW32__
333*6236dae4SAndroid Build Coastguard Worker #  undef CURL_FORMAT_CURL_OFF_T
334*6236dae4SAndroid Build Coastguard Worker #  undef CURL_FORMAT_CURL_OFF_TU
335*6236dae4SAndroid Build Coastguard Worker #  define CURL_FORMAT_CURL_OFF_T   "lld"
336*6236dae4SAndroid Build Coastguard Worker #  define CURL_FORMAT_CURL_OFF_TU  "llu"
337*6236dae4SAndroid Build Coastguard Worker #endif
338*6236dae4SAndroid Build Coastguard Worker 
339*6236dae4SAndroid Build Coastguard Worker /* based on logic in "curl/mprintf.h" */
340*6236dae4SAndroid Build Coastguard Worker 
341*6236dae4SAndroid Build Coastguard Worker #if (defined(__GNUC__) || defined(__clang__) ||                         \
342*6236dae4SAndroid Build Coastguard Worker   defined(__IAR_SYSTEMS_ICC__)) &&                                      \
343*6236dae4SAndroid Build Coastguard Worker   defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) &&         \
344*6236dae4SAndroid Build Coastguard Worker   !defined(CURL_NO_FMT_CHECKS)
345*6236dae4SAndroid Build Coastguard Worker #if defined(__MINGW32__) && !defined(__clang__)
346*6236dae4SAndroid Build Coastguard Worker #define CURL_PRINTF(fmt, arg) \
347*6236dae4SAndroid Build Coastguard Worker   __attribute__((format(gnu_printf, fmt, arg)))
348*6236dae4SAndroid Build Coastguard Worker #else
349*6236dae4SAndroid Build Coastguard Worker #define CURL_PRINTF(fmt, arg) \
350*6236dae4SAndroid Build Coastguard Worker   __attribute__((format(__printf__, fmt, arg)))
351*6236dae4SAndroid Build Coastguard Worker #endif
352*6236dae4SAndroid Build Coastguard Worker #else
353*6236dae4SAndroid Build Coastguard Worker #define CURL_PRINTF(fmt, arg)
354*6236dae4SAndroid Build Coastguard Worker #endif
355*6236dae4SAndroid Build Coastguard Worker 
356*6236dae4SAndroid Build Coastguard Worker /* Override default printf mask check rules in "curl/mprintf.h" */
357*6236dae4SAndroid Build Coastguard Worker #define CURL_TEMP_PRINTF CURL_PRINTF
358*6236dae4SAndroid Build Coastguard Worker 
359*6236dae4SAndroid Build Coastguard Worker /* Workaround for mainline llvm v16 and earlier missing a built-in macro
360*6236dae4SAndroid Build Coastguard Worker    expected by macOS SDK v14 / Xcode v15 (2023) and newer.
361*6236dae4SAndroid Build Coastguard Worker    gcc (as of v14) is also missing it. */
362*6236dae4SAndroid Build Coastguard Worker #if defined(__APPLE__) &&                                   \
363*6236dae4SAndroid Build Coastguard Worker   ((!defined(__apple_build_version__) &&                    \
364*6236dae4SAndroid Build Coastguard Worker     defined(__clang__) && __clang_major__ < 17) ||          \
365*6236dae4SAndroid Build Coastguard Worker    (defined(__GNUC__) && __GNUC__ <= 14)) &&                \
366*6236dae4SAndroid Build Coastguard Worker   defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && \
367*6236dae4SAndroid Build Coastguard Worker   !defined(__ENVIRONMENT_OS_VERSION_MIN_REQUIRED__)
368*6236dae4SAndroid Build Coastguard Worker #define __ENVIRONMENT_OS_VERSION_MIN_REQUIRED__             \
369*6236dae4SAndroid Build Coastguard Worker   __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__
370*6236dae4SAndroid Build Coastguard Worker #endif
371*6236dae4SAndroid Build Coastguard Worker 
372*6236dae4SAndroid Build Coastguard Worker /*
373*6236dae4SAndroid Build Coastguard Worker  * Use getaddrinfo to resolve the IPv4 address literal. If the current network
374*6236dae4SAndroid Build Coastguard Worker  * interface does not support IPv4, but supports IPv6, NAT64, and DNS64,
375*6236dae4SAndroid Build Coastguard Worker  * performing this task will result in a synthesized IPv6 address.
376*6236dae4SAndroid Build Coastguard Worker  */
377*6236dae4SAndroid Build Coastguard Worker #if defined(__APPLE__) && !defined(USE_ARES)
378*6236dae4SAndroid Build Coastguard Worker #define USE_RESOLVE_ON_IPS 1
379*6236dae4SAndroid Build Coastguard Worker #  if TARGET_OS_MAC && !(defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) && \
380*6236dae4SAndroid Build Coastguard Worker      defined(USE_IPV6)
381*6236dae4SAndroid Build Coastguard Worker #    define CURL_MACOS_CALL_COPYPROXIES 1
382*6236dae4SAndroid Build Coastguard Worker #  endif
383*6236dae4SAndroid Build Coastguard Worker #endif
384*6236dae4SAndroid Build Coastguard Worker 
385*6236dae4SAndroid Build Coastguard Worker #ifdef USE_LWIPSOCK
386*6236dae4SAndroid Build Coastguard Worker #  include <lwip/init.h>
387*6236dae4SAndroid Build Coastguard Worker #  include <lwip/sockets.h>
388*6236dae4SAndroid Build Coastguard Worker #  include <lwip/netdb.h>
389*6236dae4SAndroid Build Coastguard Worker #endif
390*6236dae4SAndroid Build Coastguard Worker 
391*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_EXTRA_STRICMP_H
392*6236dae4SAndroid Build Coastguard Worker #  include <extra/stricmp.h>
393*6236dae4SAndroid Build Coastguard Worker #endif
394*6236dae4SAndroid Build Coastguard Worker 
395*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_EXTRA_STRDUP_H
396*6236dae4SAndroid Build Coastguard Worker #  include <extra/strdup.h>
397*6236dae4SAndroid Build Coastguard Worker #endif
398*6236dae4SAndroid Build Coastguard Worker 
399*6236dae4SAndroid Build Coastguard Worker #ifdef __AMIGA__
400*6236dae4SAndroid Build Coastguard Worker #  ifdef __amigaos4__
401*6236dae4SAndroid Build Coastguard Worker #    define __USE_INLINE__
402*6236dae4SAndroid Build Coastguard Worker      /* use our own resolver which uses runtime feature detection */
403*6236dae4SAndroid Build Coastguard Worker #    define CURLRES_AMIGA
404*6236dae4SAndroid Build Coastguard Worker      /* getaddrinfo() currently crashes bsdsocket.library, so disable */
405*6236dae4SAndroid Build Coastguard Worker #    undef HAVE_GETADDRINFO
406*6236dae4SAndroid Build Coastguard Worker #    if !(defined(__NEWLIB__) || \
407*6236dae4SAndroid Build Coastguard Worker           (defined(__CLIB2__) && defined(__THREAD_SAFE)))
408*6236dae4SAndroid Build Coastguard Worker        /* disable threaded resolver with clib2 - requires newlib or clib-ts */
409*6236dae4SAndroid Build Coastguard Worker #      undef USE_THREADS_POSIX
410*6236dae4SAndroid Build Coastguard Worker #    endif
411*6236dae4SAndroid Build Coastguard Worker #  endif
412*6236dae4SAndroid Build Coastguard Worker #  include <exec/types.h>
413*6236dae4SAndroid Build Coastguard Worker #  include <exec/execbase.h>
414*6236dae4SAndroid Build Coastguard Worker #  include <proto/exec.h>
415*6236dae4SAndroid Build Coastguard Worker #  include <proto/dos.h>
416*6236dae4SAndroid Build Coastguard Worker #  include <unistd.h>
417*6236dae4SAndroid Build Coastguard Worker #  if defined(HAVE_PROTO_BSDSOCKET_H) && \
418*6236dae4SAndroid Build Coastguard Worker     (!defined(__amigaos4__) || defined(USE_AMISSL))
419*6236dae4SAndroid Build Coastguard Worker      /* use bsdsocket.library directly, instead of libc networking functions */
420*6236dae4SAndroid Build Coastguard Worker #    define _SYS_MBUF_H /* m_len define clashes with curl */
421*6236dae4SAndroid Build Coastguard Worker #    include <proto/bsdsocket.h>
422*6236dae4SAndroid Build Coastguard Worker #    ifdef __amigaos4__
423*6236dae4SAndroid Build Coastguard Worker        int Curl_amiga_select(int nfds, fd_set *readfds, fd_set *writefds,
424*6236dae4SAndroid Build Coastguard Worker                              fd_set *errorfds, struct timeval *timeout);
425*6236dae4SAndroid Build Coastguard Worker #      define select(a,b,c,d,e) Curl_amiga_select(a,b,c,d,e)
426*6236dae4SAndroid Build Coastguard Worker #    else
427*6236dae4SAndroid Build Coastguard Worker #      define select(a,b,c,d,e) WaitSelect(a,b,c,d,e,0)
428*6236dae4SAndroid Build Coastguard Worker #    endif
429*6236dae4SAndroid Build Coastguard Worker      /* must not use libc's fcntl() on bsdsocket.library sockfds! */
430*6236dae4SAndroid Build Coastguard Worker #    undef HAVE_FCNTL
431*6236dae4SAndroid Build Coastguard Worker #    undef HAVE_FCNTL_O_NONBLOCK
432*6236dae4SAndroid Build Coastguard Worker #  else
433*6236dae4SAndroid Build Coastguard Worker      /* use libc networking and hence close() and fnctl() */
434*6236dae4SAndroid Build Coastguard Worker #    undef HAVE_CLOSESOCKET_CAMEL
435*6236dae4SAndroid Build Coastguard Worker #    undef HAVE_IOCTLSOCKET_CAMEL
436*6236dae4SAndroid Build Coastguard Worker #  endif
437*6236dae4SAndroid Build Coastguard Worker /*
438*6236dae4SAndroid Build Coastguard Worker  * In clib2 arpa/inet.h warns that some prototypes may clash
439*6236dae4SAndroid Build Coastguard Worker  * with bsdsocket.library. This avoids the definition of those.
440*6236dae4SAndroid Build Coastguard Worker  */
441*6236dae4SAndroid Build Coastguard Worker #  define __NO_NET_API
442*6236dae4SAndroid Build Coastguard Worker #endif
443*6236dae4SAndroid Build Coastguard Worker 
444*6236dae4SAndroid Build Coastguard Worker #include <stdio.h>
445*6236dae4SAndroid Build Coastguard Worker #include <assert.h>
446*6236dae4SAndroid Build Coastguard Worker 
447*6236dae4SAndroid Build Coastguard Worker #ifdef __TANDEM /* for ns*-tandem-nsk systems */
448*6236dae4SAndroid Build Coastguard Worker # if ! defined __LP64
449*6236dae4SAndroid Build Coastguard Worker #  include <floss.h> /* FLOSS is only used for 32-bit builds. */
450*6236dae4SAndroid Build Coastguard Worker # endif
451*6236dae4SAndroid Build Coastguard Worker #endif
452*6236dae4SAndroid Build Coastguard Worker 
453*6236dae4SAndroid Build Coastguard Worker #ifndef STDC_HEADERS /* no standard C headers! */
454*6236dae4SAndroid Build Coastguard Worker #include <curl/stdcheaders.h>
455*6236dae4SAndroid Build Coastguard Worker #endif
456*6236dae4SAndroid Build Coastguard Worker 
457*6236dae4SAndroid Build Coastguard Worker /*
458*6236dae4SAndroid Build Coastguard Worker  * Large file (>2Gb) support using Win32 functions.
459*6236dae4SAndroid Build Coastguard Worker  */
460*6236dae4SAndroid Build Coastguard Worker 
461*6236dae4SAndroid Build Coastguard Worker #ifdef USE_WIN32_LARGE_FILES
462*6236dae4SAndroid Build Coastguard Worker #  include <io.h>
463*6236dae4SAndroid Build Coastguard Worker #  include <sys/types.h>
464*6236dae4SAndroid Build Coastguard Worker #  include <sys/stat.h>
465*6236dae4SAndroid Build Coastguard Worker #  undef  lseek
466*6236dae4SAndroid Build Coastguard Worker #  define lseek(fdes,offset,whence)  _lseeki64(fdes, offset, whence)
467*6236dae4SAndroid Build Coastguard Worker #  undef  fstat
468*6236dae4SAndroid Build Coastguard Worker #  define fstat(fdes,stp)            _fstati64(fdes, stp)
469*6236dae4SAndroid Build Coastguard Worker #  undef  stat
470*6236dae4SAndroid Build Coastguard Worker #  define stat(fname,stp)            curlx_win32_stat(fname, stp)
471*6236dae4SAndroid Build Coastguard Worker #  define struct_stat                struct _stati64
472*6236dae4SAndroid Build Coastguard Worker #  define LSEEK_ERROR                (__int64)-1
473*6236dae4SAndroid Build Coastguard Worker #  define open                       curlx_win32_open
474*6236dae4SAndroid Build Coastguard Worker #  define fopen(fname,mode)          curlx_win32_fopen(fname, mode)
475*6236dae4SAndroid Build Coastguard Worker    int curlx_win32_open(const char *filename, int oflag, ...);
476*6236dae4SAndroid Build Coastguard Worker    int curlx_win32_stat(const char *path, struct_stat *buffer);
477*6236dae4SAndroid Build Coastguard Worker    FILE *curlx_win32_fopen(const char *filename, const char *mode);
478*6236dae4SAndroid Build Coastguard Worker #endif
479*6236dae4SAndroid Build Coastguard Worker 
480*6236dae4SAndroid Build Coastguard Worker /*
481*6236dae4SAndroid Build Coastguard Worker  * Small file (<2Gb) support using Win32 functions.
482*6236dae4SAndroid Build Coastguard Worker  */
483*6236dae4SAndroid Build Coastguard Worker 
484*6236dae4SAndroid Build Coastguard Worker #ifdef USE_WIN32_SMALL_FILES
485*6236dae4SAndroid Build Coastguard Worker #  include <io.h>
486*6236dae4SAndroid Build Coastguard Worker #  include <sys/types.h>
487*6236dae4SAndroid Build Coastguard Worker #  include <sys/stat.h>
488*6236dae4SAndroid Build Coastguard Worker #  ifndef _WIN32_WCE
489*6236dae4SAndroid Build Coastguard Worker #    undef  lseek
490*6236dae4SAndroid Build Coastguard Worker #    define lseek(fdes,offset,whence)  _lseek(fdes, (long)offset, whence)
491*6236dae4SAndroid Build Coastguard Worker #    define fstat(fdes,stp)            _fstat(fdes, stp)
492*6236dae4SAndroid Build Coastguard Worker #    define stat(fname,stp)            curlx_win32_stat(fname, stp)
493*6236dae4SAndroid Build Coastguard Worker #    define struct_stat                struct _stat
494*6236dae4SAndroid Build Coastguard Worker #    define open                       curlx_win32_open
495*6236dae4SAndroid Build Coastguard Worker #    define fopen(fname,mode)          curlx_win32_fopen(fname, mode)
496*6236dae4SAndroid Build Coastguard Worker      int curlx_win32_stat(const char *path, struct_stat *buffer);
497*6236dae4SAndroid Build Coastguard Worker      int curlx_win32_open(const char *filename, int oflag, ...);
498*6236dae4SAndroid Build Coastguard Worker      FILE *curlx_win32_fopen(const char *filename, const char *mode);
499*6236dae4SAndroid Build Coastguard Worker #  endif
500*6236dae4SAndroid Build Coastguard Worker #  define LSEEK_ERROR                (long)-1
501*6236dae4SAndroid Build Coastguard Worker #endif
502*6236dae4SAndroid Build Coastguard Worker 
503*6236dae4SAndroid Build Coastguard Worker #ifndef struct_stat
504*6236dae4SAndroid Build Coastguard Worker #  define struct_stat struct stat
505*6236dae4SAndroid Build Coastguard Worker #endif
506*6236dae4SAndroid Build Coastguard Worker 
507*6236dae4SAndroid Build Coastguard Worker #ifndef LSEEK_ERROR
508*6236dae4SAndroid Build Coastguard Worker #  define LSEEK_ERROR (off_t)-1
509*6236dae4SAndroid Build Coastguard Worker #endif
510*6236dae4SAndroid Build Coastguard Worker 
511*6236dae4SAndroid Build Coastguard Worker #ifndef SIZEOF_TIME_T
512*6236dae4SAndroid Build Coastguard Worker /* assume default size of time_t to be 32 bits */
513*6236dae4SAndroid Build Coastguard Worker #define SIZEOF_TIME_T 4
514*6236dae4SAndroid Build Coastguard Worker #endif
515*6236dae4SAndroid Build Coastguard Worker 
516*6236dae4SAndroid Build Coastguard Worker #ifndef SIZEOF_CURL_SOCKET_T
517*6236dae4SAndroid Build Coastguard Worker /* configure and cmake check and set the define */
518*6236dae4SAndroid Build Coastguard Worker #  ifdef _WIN64
519*6236dae4SAndroid Build Coastguard Worker #    define SIZEOF_CURL_SOCKET_T 8
520*6236dae4SAndroid Build Coastguard Worker #  else
521*6236dae4SAndroid Build Coastguard Worker /* default guess */
522*6236dae4SAndroid Build Coastguard Worker #    define SIZEOF_CURL_SOCKET_T 4
523*6236dae4SAndroid Build Coastguard Worker #  endif
524*6236dae4SAndroid Build Coastguard Worker #endif
525*6236dae4SAndroid Build Coastguard Worker 
526*6236dae4SAndroid Build Coastguard Worker #if SIZEOF_CURL_SOCKET_T < 8
527*6236dae4SAndroid Build Coastguard Worker #  define FMT_SOCKET_T "d"
528*6236dae4SAndroid Build Coastguard Worker #elif defined(__MINGW32__)
529*6236dae4SAndroid Build Coastguard Worker #  define FMT_SOCKET_T "zd"
530*6236dae4SAndroid Build Coastguard Worker #else
531*6236dae4SAndroid Build Coastguard Worker #  define FMT_SOCKET_T "qd"
532*6236dae4SAndroid Build Coastguard Worker #endif
533*6236dae4SAndroid Build Coastguard Worker 
534*6236dae4SAndroid Build Coastguard Worker /*
535*6236dae4SAndroid Build Coastguard Worker  * Default sizeof(off_t) in case it has not been defined in config file.
536*6236dae4SAndroid Build Coastguard Worker  */
537*6236dae4SAndroid Build Coastguard Worker 
538*6236dae4SAndroid Build Coastguard Worker #ifndef SIZEOF_OFF_T
539*6236dae4SAndroid Build Coastguard Worker #  if defined(__VMS) && !defined(__VAX)
540*6236dae4SAndroid Build Coastguard Worker #    if defined(_LARGEFILE)
541*6236dae4SAndroid Build Coastguard Worker #      define SIZEOF_OFF_T 8
542*6236dae4SAndroid Build Coastguard Worker #    endif
543*6236dae4SAndroid Build Coastguard Worker #  elif defined(__OS400__) && defined(__ILEC400__)
544*6236dae4SAndroid Build Coastguard Worker #    if defined(_LARGE_FILES)
545*6236dae4SAndroid Build Coastguard Worker #      define SIZEOF_OFF_T 8
546*6236dae4SAndroid Build Coastguard Worker #    endif
547*6236dae4SAndroid Build Coastguard Worker #  elif defined(__MVS__) && defined(__IBMC__)
548*6236dae4SAndroid Build Coastguard Worker #    if defined(_LP64) || defined(_LARGE_FILES)
549*6236dae4SAndroid Build Coastguard Worker #      define SIZEOF_OFF_T 8
550*6236dae4SAndroid Build Coastguard Worker #    endif
551*6236dae4SAndroid Build Coastguard Worker #  elif defined(__370__) && defined(__IBMC__)
552*6236dae4SAndroid Build Coastguard Worker #    if defined(_LP64) || defined(_LARGE_FILES)
553*6236dae4SAndroid Build Coastguard Worker #      define SIZEOF_OFF_T 8
554*6236dae4SAndroid Build Coastguard Worker #    endif
555*6236dae4SAndroid Build Coastguard Worker #  endif
556*6236dae4SAndroid Build Coastguard Worker #  ifndef SIZEOF_OFF_T
557*6236dae4SAndroid Build Coastguard Worker #    define SIZEOF_OFF_T 4
558*6236dae4SAndroid Build Coastguard Worker #  endif
559*6236dae4SAndroid Build Coastguard Worker #endif
560*6236dae4SAndroid Build Coastguard Worker 
561*6236dae4SAndroid Build Coastguard Worker #if (SIZEOF_CURL_OFF_T < 8)
562*6236dae4SAndroid Build Coastguard Worker #error "too small curl_off_t"
563*6236dae4SAndroid Build Coastguard Worker #else
564*6236dae4SAndroid Build Coastguard Worker    /* assume SIZEOF_CURL_OFF_T == 8 */
565*6236dae4SAndroid Build Coastguard Worker #  define CURL_OFF_T_MAX CURL_OFF_T_C(0x7FFFFFFFFFFFFFFF)
566*6236dae4SAndroid Build Coastguard Worker #endif
567*6236dae4SAndroid Build Coastguard Worker #define CURL_OFF_T_MIN (-CURL_OFF_T_MAX - CURL_OFF_T_C(1))
568*6236dae4SAndroid Build Coastguard Worker 
569*6236dae4SAndroid Build Coastguard Worker #if (SIZEOF_CURL_OFF_T != 8)
570*6236dae4SAndroid Build Coastguard Worker #  error "curl_off_t must be exactly 64 bits"
571*6236dae4SAndroid Build Coastguard Worker #else
572*6236dae4SAndroid Build Coastguard Worker   typedef unsigned CURL_TYPEOF_CURL_OFF_T curl_uint64_t;
573*6236dae4SAndroid Build Coastguard Worker   typedef CURL_TYPEOF_CURL_OFF_T  curl_int64_t;
574*6236dae4SAndroid Build Coastguard Worker #  ifndef CURL_SUFFIX_CURL_OFF_TU
575*6236dae4SAndroid Build Coastguard Worker #    error "CURL_SUFFIX_CURL_OFF_TU must be defined"
576*6236dae4SAndroid Build Coastguard Worker #  endif
577*6236dae4SAndroid Build Coastguard Worker #  define CURL_UINT64_SUFFIX  CURL_SUFFIX_CURL_OFF_TU
578*6236dae4SAndroid Build Coastguard Worker #  define CURL_UINT64_C(val)  CURL_CONC_MACROS(val,CURL_UINT64_SUFFIX)
579*6236dae4SAndroid Build Coastguard Worker # define FMT_PRId64  CURL_FORMAT_CURL_OFF_T
580*6236dae4SAndroid Build Coastguard Worker # define FMT_PRIu64  CURL_FORMAT_CURL_OFF_TU
581*6236dae4SAndroid Build Coastguard Worker #endif
582*6236dae4SAndroid Build Coastguard Worker 
583*6236dae4SAndroid Build Coastguard Worker #define FMT_OFF_T CURL_FORMAT_CURL_OFF_T
584*6236dae4SAndroid Build Coastguard Worker #define FMT_OFF_TU CURL_FORMAT_CURL_OFF_TU
585*6236dae4SAndroid Build Coastguard Worker 
586*6236dae4SAndroid Build Coastguard Worker #if (SIZEOF_TIME_T == 4)
587*6236dae4SAndroid Build Coastguard Worker #  ifdef HAVE_TIME_T_UNSIGNED
588*6236dae4SAndroid Build Coastguard Worker #  define TIME_T_MAX UINT_MAX
589*6236dae4SAndroid Build Coastguard Worker #  define TIME_T_MIN 0
590*6236dae4SAndroid Build Coastguard Worker #  else
591*6236dae4SAndroid Build Coastguard Worker #  define TIME_T_MAX INT_MAX
592*6236dae4SAndroid Build Coastguard Worker #  define TIME_T_MIN INT_MIN
593*6236dae4SAndroid Build Coastguard Worker #  endif
594*6236dae4SAndroid Build Coastguard Worker #else
595*6236dae4SAndroid Build Coastguard Worker #  ifdef HAVE_TIME_T_UNSIGNED
596*6236dae4SAndroid Build Coastguard Worker #  define TIME_T_MAX 0xFFFFFFFFFFFFFFFF
597*6236dae4SAndroid Build Coastguard Worker #  define TIME_T_MIN 0
598*6236dae4SAndroid Build Coastguard Worker #  else
599*6236dae4SAndroid Build Coastguard Worker #  define TIME_T_MAX 0x7FFFFFFFFFFFFFFF
600*6236dae4SAndroid Build Coastguard Worker #  define TIME_T_MIN (-TIME_T_MAX - 1)
601*6236dae4SAndroid Build Coastguard Worker #  endif
602*6236dae4SAndroid Build Coastguard Worker #endif
603*6236dae4SAndroid Build Coastguard Worker 
604*6236dae4SAndroid Build Coastguard Worker #ifndef SIZE_T_MAX
605*6236dae4SAndroid Build Coastguard Worker /* some limits.h headers have this defined, some do not */
606*6236dae4SAndroid Build Coastguard Worker #if defined(SIZEOF_SIZE_T) && (SIZEOF_SIZE_T > 4)
607*6236dae4SAndroid Build Coastguard Worker #define SIZE_T_MAX 18446744073709551615U
608*6236dae4SAndroid Build Coastguard Worker #else
609*6236dae4SAndroid Build Coastguard Worker #define SIZE_T_MAX 4294967295U
610*6236dae4SAndroid Build Coastguard Worker #endif
611*6236dae4SAndroid Build Coastguard Worker #endif
612*6236dae4SAndroid Build Coastguard Worker 
613*6236dae4SAndroid Build Coastguard Worker #ifndef SSIZE_T_MAX
614*6236dae4SAndroid Build Coastguard Worker /* some limits.h headers have this defined, some do not */
615*6236dae4SAndroid Build Coastguard Worker #if defined(SIZEOF_SIZE_T) && (SIZEOF_SIZE_T > 4)
616*6236dae4SAndroid Build Coastguard Worker #define SSIZE_T_MAX 9223372036854775807
617*6236dae4SAndroid Build Coastguard Worker #else
618*6236dae4SAndroid Build Coastguard Worker #define SSIZE_T_MAX 2147483647
619*6236dae4SAndroid Build Coastguard Worker #endif
620*6236dae4SAndroid Build Coastguard Worker #endif
621*6236dae4SAndroid Build Coastguard Worker 
622*6236dae4SAndroid Build Coastguard Worker /*
623*6236dae4SAndroid Build Coastguard Worker  * Arg 2 type for gethostname in case it has not been defined in config file.
624*6236dae4SAndroid Build Coastguard Worker  */
625*6236dae4SAndroid Build Coastguard Worker 
626*6236dae4SAndroid Build Coastguard Worker #ifndef GETHOSTNAME_TYPE_ARG2
627*6236dae4SAndroid Build Coastguard Worker #  ifdef USE_WINSOCK
628*6236dae4SAndroid Build Coastguard Worker #    define GETHOSTNAME_TYPE_ARG2 int
629*6236dae4SAndroid Build Coastguard Worker #  else
630*6236dae4SAndroid Build Coastguard Worker #    define GETHOSTNAME_TYPE_ARG2 size_t
631*6236dae4SAndroid Build Coastguard Worker #  endif
632*6236dae4SAndroid Build Coastguard Worker #endif
633*6236dae4SAndroid Build Coastguard Worker 
634*6236dae4SAndroid Build Coastguard Worker /* Below we define some functions. They should
635*6236dae4SAndroid Build Coastguard Worker 
636*6236dae4SAndroid Build Coastguard Worker    4. set the SIGALRM signal timeout
637*6236dae4SAndroid Build Coastguard Worker    5. set dir/file naming defines
638*6236dae4SAndroid Build Coastguard Worker    */
639*6236dae4SAndroid Build Coastguard Worker 
640*6236dae4SAndroid Build Coastguard Worker #ifdef _WIN32
641*6236dae4SAndroid Build Coastguard Worker 
642*6236dae4SAndroid Build Coastguard Worker #  define DIR_CHAR      "\\"
643*6236dae4SAndroid Build Coastguard Worker 
644*6236dae4SAndroid Build Coastguard Worker #else /* _WIN32 */
645*6236dae4SAndroid Build Coastguard Worker 
646*6236dae4SAndroid Build Coastguard Worker #  ifdef MSDOS  /* Watt-32 */
647*6236dae4SAndroid Build Coastguard Worker 
648*6236dae4SAndroid Build Coastguard Worker #    include <sys/ioctl.h>
649*6236dae4SAndroid Build Coastguard Worker #    define select(n,r,w,x,t) select_s(n,r,w,x,t)
650*6236dae4SAndroid Build Coastguard Worker #    define ioctl(x,y,z) ioctlsocket(x,y,(char *)(z))
651*6236dae4SAndroid Build Coastguard Worker #    include <tcp.h>
652*6236dae4SAndroid Build Coastguard Worker #    ifdef word
653*6236dae4SAndroid Build Coastguard Worker #      undef word
654*6236dae4SAndroid Build Coastguard Worker #    endif
655*6236dae4SAndroid Build Coastguard Worker #    ifdef byte
656*6236dae4SAndroid Build Coastguard Worker #      undef byte
657*6236dae4SAndroid Build Coastguard Worker #    endif
658*6236dae4SAndroid Build Coastguard Worker 
659*6236dae4SAndroid Build Coastguard Worker #  endif /* MSDOS */
660*6236dae4SAndroid Build Coastguard Worker 
661*6236dae4SAndroid Build Coastguard Worker #  ifdef __minix
662*6236dae4SAndroid Build Coastguard Worker      /* Minix 3 versions up to at least 3.1.3 are missing these prototypes */
663*6236dae4SAndroid Build Coastguard Worker      extern char *strtok_r(char *s, const char *delim, char **last);
664*6236dae4SAndroid Build Coastguard Worker      extern struct tm *gmtime_r(const time_t * const timep, struct tm *tmp);
665*6236dae4SAndroid Build Coastguard Worker #  endif
666*6236dae4SAndroid Build Coastguard Worker 
667*6236dae4SAndroid Build Coastguard Worker #  define DIR_CHAR      "/"
668*6236dae4SAndroid Build Coastguard Worker 
669*6236dae4SAndroid Build Coastguard Worker #endif /* _WIN32 */
670*6236dae4SAndroid Build Coastguard Worker 
671*6236dae4SAndroid Build Coastguard Worker /* ---------------------------------------------------------------- */
672*6236dae4SAndroid Build Coastguard Worker /*             resolver specialty compile-time defines              */
673*6236dae4SAndroid Build Coastguard Worker /*         CURLRES_* defines to use in the host*.c sources          */
674*6236dae4SAndroid Build Coastguard Worker /* ---------------------------------------------------------------- */
675*6236dae4SAndroid Build Coastguard Worker 
676*6236dae4SAndroid Build Coastguard Worker /*
677*6236dae4SAndroid Build Coastguard Worker  * MSVC threads support requires a multi-threaded runtime library.
678*6236dae4SAndroid Build Coastguard Worker  * _beginthreadex() is not available in single-threaded ones.
679*6236dae4SAndroid Build Coastguard Worker  */
680*6236dae4SAndroid Build Coastguard Worker 
681*6236dae4SAndroid Build Coastguard Worker #if defined(_MSC_VER) && !defined(_MT)
682*6236dae4SAndroid Build Coastguard Worker #  undef USE_THREADS_POSIX
683*6236dae4SAndroid Build Coastguard Worker #  undef USE_THREADS_WIN32
684*6236dae4SAndroid Build Coastguard Worker #endif
685*6236dae4SAndroid Build Coastguard Worker 
686*6236dae4SAndroid Build Coastguard Worker /*
687*6236dae4SAndroid Build Coastguard Worker  * Mutually exclusive CURLRES_* definitions.
688*6236dae4SAndroid Build Coastguard Worker  */
689*6236dae4SAndroid Build Coastguard Worker 
690*6236dae4SAndroid Build Coastguard Worker #if defined(USE_IPV6) && defined(HAVE_GETADDRINFO)
691*6236dae4SAndroid Build Coastguard Worker #  define CURLRES_IPV6
692*6236dae4SAndroid Build Coastguard Worker #elif defined(USE_IPV6) && (defined(_WIN32) || defined(__CYGWIN__))
693*6236dae4SAndroid Build Coastguard Worker /* assume on Windows that IPv6 without getaddrinfo is a broken build */
694*6236dae4SAndroid Build Coastguard Worker #  error "Unexpected build: IPv6 is enabled but getaddrinfo was not found."
695*6236dae4SAndroid Build Coastguard Worker #else
696*6236dae4SAndroid Build Coastguard Worker #  define CURLRES_IPV4
697*6236dae4SAndroid Build Coastguard Worker #endif
698*6236dae4SAndroid Build Coastguard Worker 
699*6236dae4SAndroid Build Coastguard Worker #ifdef USE_ARES
700*6236dae4SAndroid Build Coastguard Worker #  define CURLRES_ASYNCH
701*6236dae4SAndroid Build Coastguard Worker #  define CURLRES_ARES
702*6236dae4SAndroid Build Coastguard Worker /* now undef the stock libc functions just to avoid them being used */
703*6236dae4SAndroid Build Coastguard Worker #  undef HAVE_GETADDRINFO
704*6236dae4SAndroid Build Coastguard Worker #  undef HAVE_FREEADDRINFO
705*6236dae4SAndroid Build Coastguard Worker #elif defined(USE_THREADS_POSIX) || defined(USE_THREADS_WIN32)
706*6236dae4SAndroid Build Coastguard Worker #  define CURLRES_ASYNCH
707*6236dae4SAndroid Build Coastguard Worker #  define CURLRES_THREADED
708*6236dae4SAndroid Build Coastguard Worker #else
709*6236dae4SAndroid Build Coastguard Worker #  define CURLRES_SYNCH
710*6236dae4SAndroid Build Coastguard Worker #endif
711*6236dae4SAndroid Build Coastguard Worker 
712*6236dae4SAndroid Build Coastguard Worker /* ---------------------------------------------------------------- */
713*6236dae4SAndroid Build Coastguard Worker 
714*6236dae4SAndroid Build Coastguard Worker #if defined(HAVE_LIBIDN2) && defined(HAVE_IDN2_H) && \
715*6236dae4SAndroid Build Coastguard Worker   !defined(USE_WIN32_IDN) && !defined(USE_APPLE_IDN)
716*6236dae4SAndroid Build Coastguard Worker /* The lib and header are present */
717*6236dae4SAndroid Build Coastguard Worker #define USE_LIBIDN2
718*6236dae4SAndroid Build Coastguard Worker #endif
719*6236dae4SAndroid Build Coastguard Worker 
720*6236dae4SAndroid Build Coastguard Worker #if defined(USE_LIBIDN2) && (defined(USE_WIN32_IDN) || defined(USE_APPLE_IDN))
721*6236dae4SAndroid Build Coastguard Worker #error "libidn2 cannot be enabled with WinIDN or AppleIDN, choose one."
722*6236dae4SAndroid Build Coastguard Worker #endif
723*6236dae4SAndroid Build Coastguard Worker 
724*6236dae4SAndroid Build Coastguard Worker #define LIBIDN_REQUIRED_VERSION "0.4.1"
725*6236dae4SAndroid Build Coastguard Worker 
726*6236dae4SAndroid Build Coastguard Worker #if defined(USE_GNUTLS) || defined(USE_OPENSSL) || defined(USE_MBEDTLS) || \
727*6236dae4SAndroid Build Coastguard Worker   defined(USE_WOLFSSL) || defined(USE_SCHANNEL) || defined(USE_SECTRANSP) || \
728*6236dae4SAndroid Build Coastguard Worker   defined(USE_BEARSSL) || defined(USE_RUSTLS)
729*6236dae4SAndroid Build Coastguard Worker #define USE_SSL    /* SSL support has been enabled */
730*6236dae4SAndroid Build Coastguard Worker #endif
731*6236dae4SAndroid Build Coastguard Worker 
732*6236dae4SAndroid Build Coastguard Worker #if defined(USE_WOLFSSL) && defined(USE_GNUTLS)
733*6236dae4SAndroid Build Coastguard Worker /* Avoid defining unprefixed wolfSSL SHA macros colliding with nettle ones */
734*6236dae4SAndroid Build Coastguard Worker #define NO_OLD_WC_NAMES
735*6236dae4SAndroid Build Coastguard Worker #endif
736*6236dae4SAndroid Build Coastguard Worker 
737*6236dae4SAndroid Build Coastguard Worker /* Single point where USE_SPNEGO definition might be defined */
738*6236dae4SAndroid Build Coastguard Worker #if !defined(CURL_DISABLE_NEGOTIATE_AUTH) && \
739*6236dae4SAndroid Build Coastguard Worker     (defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI))
740*6236dae4SAndroid Build Coastguard Worker #define USE_SPNEGO
741*6236dae4SAndroid Build Coastguard Worker #endif
742*6236dae4SAndroid Build Coastguard Worker 
743*6236dae4SAndroid Build Coastguard Worker /* Single point where USE_KERBEROS5 definition might be defined */
744*6236dae4SAndroid Build Coastguard Worker #if !defined(CURL_DISABLE_KERBEROS_AUTH) && \
745*6236dae4SAndroid Build Coastguard Worker     (defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI))
746*6236dae4SAndroid Build Coastguard Worker #define USE_KERBEROS5
747*6236dae4SAndroid Build Coastguard Worker #endif
748*6236dae4SAndroid Build Coastguard Worker 
749*6236dae4SAndroid Build Coastguard Worker /* Single point where USE_NTLM definition might be defined */
750*6236dae4SAndroid Build Coastguard Worker #if !defined(CURL_DISABLE_NTLM)
751*6236dae4SAndroid Build Coastguard Worker #  if defined(USE_OPENSSL) || defined(USE_MBEDTLS) ||                   \
752*6236dae4SAndroid Build Coastguard Worker   defined(USE_GNUTLS) || defined(USE_SECTRANSP) ||                      \
753*6236dae4SAndroid Build Coastguard Worker   defined(USE_OS400CRYPTO) || defined(USE_WIN32_CRYPTO) ||              \
754*6236dae4SAndroid Build Coastguard Worker   (defined(USE_WOLFSSL) && defined(HAVE_WOLFSSL_DES_ECB_ENCRYPT))
755*6236dae4SAndroid Build Coastguard Worker #    define USE_CURL_NTLM_CORE
756*6236dae4SAndroid Build Coastguard Worker #  endif
757*6236dae4SAndroid Build Coastguard Worker #  if defined(USE_CURL_NTLM_CORE) || defined(USE_WINDOWS_SSPI)
758*6236dae4SAndroid Build Coastguard Worker #    define USE_NTLM
759*6236dae4SAndroid Build Coastguard Worker #  endif
760*6236dae4SAndroid Build Coastguard Worker #endif
761*6236dae4SAndroid Build Coastguard Worker 
762*6236dae4SAndroid Build Coastguard Worker #ifdef CURL_WANTS_CA_BUNDLE_ENV
763*6236dae4SAndroid Build Coastguard Worker #error "No longer supported. Set CURLOPT_CAINFO at runtime instead."
764*6236dae4SAndroid Build Coastguard Worker #endif
765*6236dae4SAndroid Build Coastguard Worker 
766*6236dae4SAndroid Build Coastguard Worker #if defined(USE_LIBSSH2) || defined(USE_LIBSSH) || defined(USE_WOLFSSH)
767*6236dae4SAndroid Build Coastguard Worker #define USE_SSH
768*6236dae4SAndroid Build Coastguard Worker #endif
769*6236dae4SAndroid Build Coastguard Worker 
770*6236dae4SAndroid Build Coastguard Worker /*
771*6236dae4SAndroid Build Coastguard Worker  * Provide a mechanism to silence picky compilers, such as gcc 4.6+.
772*6236dae4SAndroid Build Coastguard Worker  * Parameters should of course normally not be unused, but for example when
773*6236dae4SAndroid Build Coastguard Worker  * we have multiple implementations of the same interface it may happen.
774*6236dae4SAndroid Build Coastguard Worker  */
775*6236dae4SAndroid Build Coastguard Worker 
776*6236dae4SAndroid Build Coastguard Worker #if defined(__GNUC__) && ((__GNUC__ >= 3) || \
777*6236dae4SAndroid Build Coastguard Worker   ((__GNUC__ == 2) && defined(__GNUC_MINOR__) && (__GNUC_MINOR__ >= 7)))
778*6236dae4SAndroid Build Coastguard Worker #  define UNUSED_PARAM __attribute__((__unused__))
779*6236dae4SAndroid Build Coastguard Worker #  define WARN_UNUSED_RESULT __attribute__((warn_unused_result))
780*6236dae4SAndroid Build Coastguard Worker #elif defined(__IAR_SYSTEMS_ICC__)
781*6236dae4SAndroid Build Coastguard Worker #  define UNUSED_PARAM __attribute__((__unused__))
782*6236dae4SAndroid Build Coastguard Worker #  if (__VER__ >= 9040001)
783*6236dae4SAndroid Build Coastguard Worker #    define WARN_UNUSED_RESULT __attribute__((warn_unused_result))
784*6236dae4SAndroid Build Coastguard Worker #  else
785*6236dae4SAndroid Build Coastguard Worker #    define WARN_UNUSED_RESULT
786*6236dae4SAndroid Build Coastguard Worker #  endif
787*6236dae4SAndroid Build Coastguard Worker #else
788*6236dae4SAndroid Build Coastguard Worker #  define UNUSED_PARAM /* NOTHING */
789*6236dae4SAndroid Build Coastguard Worker #  define WARN_UNUSED_RESULT
790*6236dae4SAndroid Build Coastguard Worker #endif
791*6236dae4SAndroid Build Coastguard Worker 
792*6236dae4SAndroid Build Coastguard Worker /* noreturn attribute */
793*6236dae4SAndroid Build Coastguard Worker 
794*6236dae4SAndroid Build Coastguard Worker #if !defined(CURL_NORETURN)
795*6236dae4SAndroid Build Coastguard Worker #if (defined(__GNUC__) && (__GNUC__ >= 3)) || defined(__clang__) || \
796*6236dae4SAndroid Build Coastguard Worker   defined(__IAR_SYSTEMS_ICC__)
797*6236dae4SAndroid Build Coastguard Worker #  define CURL_NORETURN  __attribute__((__noreturn__))
798*6236dae4SAndroid Build Coastguard Worker #elif defined(_MSC_VER) && (_MSC_VER >= 1200)
799*6236dae4SAndroid Build Coastguard Worker #  define CURL_NORETURN  __declspec(noreturn)
800*6236dae4SAndroid Build Coastguard Worker #else
801*6236dae4SAndroid Build Coastguard Worker #  define CURL_NORETURN
802*6236dae4SAndroid Build Coastguard Worker #endif
803*6236dae4SAndroid Build Coastguard Worker #endif
804*6236dae4SAndroid Build Coastguard Worker 
805*6236dae4SAndroid Build Coastguard Worker /* fallthrough attribute */
806*6236dae4SAndroid Build Coastguard Worker 
807*6236dae4SAndroid Build Coastguard Worker #if !defined(FALLTHROUGH)
808*6236dae4SAndroid Build Coastguard Worker #if (defined(__GNUC__) && __GNUC__ >= 7) || \
809*6236dae4SAndroid Build Coastguard Worker     (defined(__clang__) && __clang_major__ >= 10)
810*6236dae4SAndroid Build Coastguard Worker #  define FALLTHROUGH()  __attribute__((fallthrough))
811*6236dae4SAndroid Build Coastguard Worker #else
812*6236dae4SAndroid Build Coastguard Worker #  define FALLTHROUGH()  do {} while (0)
813*6236dae4SAndroid Build Coastguard Worker #endif
814*6236dae4SAndroid Build Coastguard Worker #endif
815*6236dae4SAndroid Build Coastguard Worker 
816*6236dae4SAndroid Build Coastguard Worker /*
817*6236dae4SAndroid Build Coastguard Worker  * Include macros and defines that should only be processed once.
818*6236dae4SAndroid Build Coastguard Worker  */
819*6236dae4SAndroid Build Coastguard Worker 
820*6236dae4SAndroid Build Coastguard Worker #ifndef HEADER_CURL_SETUP_ONCE_H
821*6236dae4SAndroid Build Coastguard Worker #include "curl_setup_once.h"
822*6236dae4SAndroid Build Coastguard Worker #endif
823*6236dae4SAndroid Build Coastguard Worker 
824*6236dae4SAndroid Build Coastguard Worker /*
825*6236dae4SAndroid Build Coastguard Worker  * Definition of our NOP statement Object-like macro
826*6236dae4SAndroid Build Coastguard Worker  */
827*6236dae4SAndroid Build Coastguard Worker 
828*6236dae4SAndroid Build Coastguard Worker #ifndef Curl_nop_stmt
829*6236dae4SAndroid Build Coastguard Worker #  define Curl_nop_stmt do { } while(0)
830*6236dae4SAndroid Build Coastguard Worker #endif
831*6236dae4SAndroid Build Coastguard Worker 
832*6236dae4SAndroid Build Coastguard Worker /*
833*6236dae4SAndroid Build Coastguard Worker  * Ensure that Winsock and lwIP TCP/IP stacks are not mixed.
834*6236dae4SAndroid Build Coastguard Worker  */
835*6236dae4SAndroid Build Coastguard Worker 
836*6236dae4SAndroid Build Coastguard Worker #if defined(__LWIP_OPT_H__) || defined(LWIP_HDR_OPT_H)
837*6236dae4SAndroid Build Coastguard Worker #  if defined(SOCKET) || defined(USE_WINSOCK)
838*6236dae4SAndroid Build Coastguard Worker #    error "Winsock and lwIP TCP/IP stack definitions shall not coexist!"
839*6236dae4SAndroid Build Coastguard Worker #  endif
840*6236dae4SAndroid Build Coastguard Worker #endif
841*6236dae4SAndroid Build Coastguard Worker 
842*6236dae4SAndroid Build Coastguard Worker /*
843*6236dae4SAndroid Build Coastguard Worker  * shutdown() flags for systems that do not define them
844*6236dae4SAndroid Build Coastguard Worker  */
845*6236dae4SAndroid Build Coastguard Worker 
846*6236dae4SAndroid Build Coastguard Worker #ifndef SHUT_RD
847*6236dae4SAndroid Build Coastguard Worker #define SHUT_RD 0x00
848*6236dae4SAndroid Build Coastguard Worker #endif
849*6236dae4SAndroid Build Coastguard Worker 
850*6236dae4SAndroid Build Coastguard Worker #ifndef SHUT_WR
851*6236dae4SAndroid Build Coastguard Worker #define SHUT_WR 0x01
852*6236dae4SAndroid Build Coastguard Worker #endif
853*6236dae4SAndroid Build Coastguard Worker 
854*6236dae4SAndroid Build Coastguard Worker #ifndef SHUT_RDWR
855*6236dae4SAndroid Build Coastguard Worker #define SHUT_RDWR 0x02
856*6236dae4SAndroid Build Coastguard Worker #endif
857*6236dae4SAndroid Build Coastguard Worker 
858*6236dae4SAndroid Build Coastguard Worker /* Define S_ISREG if not defined by system headers, e.g. MSVC */
859*6236dae4SAndroid Build Coastguard Worker #if !defined(S_ISREG) && defined(S_IFMT) && defined(S_IFREG)
860*6236dae4SAndroid Build Coastguard Worker #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
861*6236dae4SAndroid Build Coastguard Worker #endif
862*6236dae4SAndroid Build Coastguard Worker 
863*6236dae4SAndroid Build Coastguard Worker /* Define S_ISDIR if not defined by system headers, e.g. MSVC */
864*6236dae4SAndroid Build Coastguard Worker #if !defined(S_ISDIR) && defined(S_IFMT) && defined(S_IFDIR)
865*6236dae4SAndroid Build Coastguard Worker #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
866*6236dae4SAndroid Build Coastguard Worker #endif
867*6236dae4SAndroid Build Coastguard Worker 
868*6236dae4SAndroid Build Coastguard Worker /* In Windows the default file mode is text but an application can override it.
869*6236dae4SAndroid Build Coastguard Worker Therefore we specify it explicitly. https://github.com/curl/curl/pull/258
870*6236dae4SAndroid Build Coastguard Worker */
871*6236dae4SAndroid Build Coastguard Worker #if defined(_WIN32) || defined(MSDOS)
872*6236dae4SAndroid Build Coastguard Worker #define FOPEN_READTEXT "rt"
873*6236dae4SAndroid Build Coastguard Worker #define FOPEN_WRITETEXT "wt"
874*6236dae4SAndroid Build Coastguard Worker #define FOPEN_APPENDTEXT "at"
875*6236dae4SAndroid Build Coastguard Worker #elif defined(__CYGWIN__)
876*6236dae4SAndroid Build Coastguard Worker /* Cygwin has specific behavior we need to address when _WIN32 is not defined.
877*6236dae4SAndroid Build Coastguard Worker https://cygwin.com/cygwin-ug-net/using-textbinary.html
878*6236dae4SAndroid Build Coastguard Worker For write we want our output to have line endings of LF and be compatible with
879*6236dae4SAndroid Build Coastguard Worker other Cygwin utilities. For read we want to handle input that may have line
880*6236dae4SAndroid Build Coastguard Worker endings either CRLF or LF so 't' is appropriate.
881*6236dae4SAndroid Build Coastguard Worker */
882*6236dae4SAndroid Build Coastguard Worker #define FOPEN_READTEXT "rt"
883*6236dae4SAndroid Build Coastguard Worker #define FOPEN_WRITETEXT "w"
884*6236dae4SAndroid Build Coastguard Worker #define FOPEN_APPENDTEXT "a"
885*6236dae4SAndroid Build Coastguard Worker #else
886*6236dae4SAndroid Build Coastguard Worker #define FOPEN_READTEXT "r"
887*6236dae4SAndroid Build Coastguard Worker #define FOPEN_WRITETEXT "w"
888*6236dae4SAndroid Build Coastguard Worker #define FOPEN_APPENDTEXT "a"
889*6236dae4SAndroid Build Coastguard Worker #endif
890*6236dae4SAndroid Build Coastguard Worker 
891*6236dae4SAndroid Build Coastguard Worker /* for systems that do not detect this in configure */
892*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_SA_FAMILY_T
893*6236dae4SAndroid Build Coastguard Worker #  if defined(HAVE_SA_FAMILY_T)
894*6236dae4SAndroid Build Coastguard Worker #    define CURL_SA_FAMILY_T sa_family_t
895*6236dae4SAndroid Build Coastguard Worker #  elif defined(HAVE_ADDRESS_FAMILY)
896*6236dae4SAndroid Build Coastguard Worker #    define CURL_SA_FAMILY_T ADDRESS_FAMILY
897*6236dae4SAndroid Build Coastguard Worker #  else
898*6236dae4SAndroid Build Coastguard Worker /* use a sensible default */
899*6236dae4SAndroid Build Coastguard Worker #    define CURL_SA_FAMILY_T unsigned short
900*6236dae4SAndroid Build Coastguard Worker #  endif
901*6236dae4SAndroid Build Coastguard Worker #endif
902*6236dae4SAndroid Build Coastguard Worker 
903*6236dae4SAndroid Build Coastguard Worker /* Some convenience macros to get the larger/smaller value out of two given.
904*6236dae4SAndroid Build Coastguard Worker    We prefix with CURL to prevent name collisions. */
905*6236dae4SAndroid Build Coastguard Worker #define CURLMAX(x,y) ((x)>(y)?(x):(y))
906*6236dae4SAndroid Build Coastguard Worker #define CURLMIN(x,y) ((x)<(y)?(x):(y))
907*6236dae4SAndroid Build Coastguard Worker 
908*6236dae4SAndroid Build Coastguard Worker /* A convenience macro to provide both the string literal and the length of
909*6236dae4SAndroid Build Coastguard Worker    the string literal in one go, useful for functions that take "string,len"
910*6236dae4SAndroid Build Coastguard Worker    as their argument */
911*6236dae4SAndroid Build Coastguard Worker #define STRCONST(x) x,sizeof(x)-1
912*6236dae4SAndroid Build Coastguard Worker 
913*6236dae4SAndroid Build Coastguard Worker /* Some versions of the Android SDK is missing the declaration */
914*6236dae4SAndroid Build Coastguard Worker #if defined(HAVE_GETPWUID_R) && defined(HAVE_DECL_GETPWUID_R_MISSING)
915*6236dae4SAndroid Build Coastguard Worker struct passwd;
916*6236dae4SAndroid Build Coastguard Worker int getpwuid_r(uid_t uid, struct passwd *pwd, char *buf,
917*6236dae4SAndroid Build Coastguard Worker                size_t buflen, struct passwd **result);
918*6236dae4SAndroid Build Coastguard Worker #endif
919*6236dae4SAndroid Build Coastguard Worker 
920*6236dae4SAndroid Build Coastguard Worker #ifdef UNITTESTS
921*6236dae4SAndroid Build Coastguard Worker #define UNITTEST
922*6236dae4SAndroid Build Coastguard Worker #else
923*6236dae4SAndroid Build Coastguard Worker #define UNITTEST static
924*6236dae4SAndroid Build Coastguard Worker #endif
925*6236dae4SAndroid Build Coastguard Worker 
926*6236dae4SAndroid Build Coastguard Worker /* Hyper supports HTTP2 also, but Curl's integration with Hyper does not */
927*6236dae4SAndroid Build Coastguard Worker #if defined(USE_NGHTTP2)
928*6236dae4SAndroid Build Coastguard Worker #define USE_HTTP2
929*6236dae4SAndroid Build Coastguard Worker #endif
930*6236dae4SAndroid Build Coastguard Worker 
931*6236dae4SAndroid Build Coastguard Worker #if (defined(USE_NGTCP2) && defined(USE_NGHTTP3)) || \
932*6236dae4SAndroid Build Coastguard Worker     (defined(USE_OPENSSL_QUIC) && defined(USE_NGHTTP3)) || \
933*6236dae4SAndroid Build Coastguard Worker     defined(USE_QUICHE) || defined(USE_MSH3)
934*6236dae4SAndroid Build Coastguard Worker 
935*6236dae4SAndroid Build Coastguard Worker #ifdef CURL_WITH_MULTI_SSL
936*6236dae4SAndroid Build Coastguard Worker #error "Multi-SSL combined with QUIC is not supported"
937*6236dae4SAndroid Build Coastguard Worker #endif
938*6236dae4SAndroid Build Coastguard Worker 
939*6236dae4SAndroid Build Coastguard Worker #define USE_HTTP3
940*6236dae4SAndroid Build Coastguard Worker #endif
941*6236dae4SAndroid Build Coastguard Worker 
942*6236dae4SAndroid Build Coastguard Worker /* Certain Windows implementations are not aligned with what curl expects,
943*6236dae4SAndroid Build Coastguard Worker    so always use the local one on this platform. E.g. the mingw-w64
944*6236dae4SAndroid Build Coastguard Worker    implementation can return wrong results for non-ASCII inputs. */
945*6236dae4SAndroid Build Coastguard Worker #if defined(HAVE_BASENAME) && defined(_WIN32)
946*6236dae4SAndroid Build Coastguard Worker #undef HAVE_BASENAME
947*6236dae4SAndroid Build Coastguard Worker #endif
948*6236dae4SAndroid Build Coastguard Worker 
949*6236dae4SAndroid Build Coastguard Worker #if defined(USE_UNIX_SOCKETS) && defined(_WIN32)
950*6236dae4SAndroid Build Coastguard Worker #  if !defined(UNIX_PATH_MAX)
951*6236dae4SAndroid Build Coastguard Worker      /* Replicating logic present in afunix.h
952*6236dae4SAndroid Build Coastguard Worker         (distributed with newer Windows 10 SDK versions only) */
953*6236dae4SAndroid Build Coastguard Worker #    define UNIX_PATH_MAX 108
954*6236dae4SAndroid Build Coastguard Worker      /* !checksrc! disable TYPEDEFSTRUCT 1 */
955*6236dae4SAndroid Build Coastguard Worker      typedef struct sockaddr_un {
956*6236dae4SAndroid Build Coastguard Worker        ADDRESS_FAMILY sun_family;
957*6236dae4SAndroid Build Coastguard Worker        char sun_path[UNIX_PATH_MAX];
958*6236dae4SAndroid Build Coastguard Worker      } SOCKADDR_UN, *PSOCKADDR_UN;
959*6236dae4SAndroid Build Coastguard Worker #    define WIN32_SOCKADDR_UN
960*6236dae4SAndroid Build Coastguard Worker #  endif
961*6236dae4SAndroid Build Coastguard Worker #endif
962*6236dae4SAndroid Build Coastguard Worker 
963*6236dae4SAndroid Build Coastguard Worker /* OpenSSLv3 marks DES, MD5 and ENGINE functions deprecated but we have no
964*6236dae4SAndroid Build Coastguard Worker    replacements (yet) so tell the compiler to not warn for them. */
965*6236dae4SAndroid Build Coastguard Worker #ifdef USE_OPENSSL
966*6236dae4SAndroid Build Coastguard Worker #define OPENSSL_SUPPRESS_DEPRECATED
967*6236dae4SAndroid Build Coastguard Worker #endif
968*6236dae4SAndroid Build Coastguard Worker 
969*6236dae4SAndroid Build Coastguard Worker #if defined(inline)
970*6236dae4SAndroid Build Coastguard Worker   /* 'inline' is defined as macro and assumed to be correct */
971*6236dae4SAndroid Build Coastguard Worker   /* No need for 'inline' replacement */
972*6236dae4SAndroid Build Coastguard Worker #elif defined(__cplusplus)
973*6236dae4SAndroid Build Coastguard Worker   /* The code is compiled with C++ compiler.
974*6236dae4SAndroid Build Coastguard Worker      C++ always supports 'inline'. */
975*6236dae4SAndroid Build Coastguard Worker   /* No need for 'inline' replacement */
976*6236dae4SAndroid Build Coastguard Worker #elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901
977*6236dae4SAndroid Build Coastguard Worker   /* C99 (and later) supports 'inline' keyword */
978*6236dae4SAndroid Build Coastguard Worker   /* No need for 'inline' replacement */
979*6236dae4SAndroid Build Coastguard Worker #elif defined(__GNUC__) && __GNUC__ >= 3
980*6236dae4SAndroid Build Coastguard Worker   /* GCC supports '__inline__' as an extension */
981*6236dae4SAndroid Build Coastguard Worker #  define inline __inline__
982*6236dae4SAndroid Build Coastguard Worker #elif defined(_MSC_VER) && _MSC_VER >= 1400
983*6236dae4SAndroid Build Coastguard Worker   /* MSC supports '__inline' from VS 2005 (or even earlier) */
984*6236dae4SAndroid Build Coastguard Worker #  define inline __inline
985*6236dae4SAndroid Build Coastguard Worker #else
986*6236dae4SAndroid Build Coastguard Worker   /* Probably 'inline' is not supported by compiler.
987*6236dae4SAndroid Build Coastguard Worker      Define to the empty string to be on the safe side. */
988*6236dae4SAndroid Build Coastguard Worker #  define inline /* empty */
989*6236dae4SAndroid Build Coastguard Worker #endif
990*6236dae4SAndroid Build Coastguard Worker 
991*6236dae4SAndroid Build Coastguard Worker #endif /* HEADER_CURL_SETUP_H */
992