summaryrefslogtreecommitdiff
path: root/libcurl/libcurl/curl_config.h
blob: f41ca147792cfa8f96d5ba580040fb1b698a223b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
/* file      : libcurl/curl_config.h -*- C -*-
 * license   : cURL License; see accompanying COPYING file
 */

#ifndef LIBCURL_CURL_CONFIG_H
#define LIBCURL_CURL_CONFIG_H

/* For the semantics of the following macros refer to upstream's configure.ac,
 * .m4, lib/curl_config.h.cmake and lib/config-win32.h files.
 *
 * Note that we will explicitly undefine macros that should not be defined.
 * While this is not technically required, it simplifies the change tracking
 * (see ../README-DEV). As a bonus we also make sure that they are not get
 * eventually defined by some system headers.
 */

/* These macros are defined via the -D preprocessor option. Keep them listed
 * (in this exact form) for the change tracking (see ../README-DEV).

#define OS
#define VERSION

  */

/* See the ../../README-DEV for the SSL backend and CA information lookup
 * configuration.
 */
#define USE_OPENSSL 1
#define USE_TLS_SRP 1

#if (defined(__APPLE__) && defined(__clang__)) || defined(_WIN32)
#  define CURL_WITH_MULTI_SSL        1
#  if defined(__APPLE__)
#    define USE_SECTRANSP            1
#    define CURL_DEFAULT_SSL_BACKEND "secure-transport"
#  else
#    define USE_SCHANNEL             1
#    define CURL_DEFAULT_SSL_BACKEND "schannel"
#  endif
#endif

#undef  CURL_CA_BUNDLE
#undef  CURL_CA_PATH
#define CURL_CA_FALLBACK 1

#define CURL_DISABLE_OPENSSL_AUTO_LOAD_CONFIG 1

#undef  HAVE_BORINGSSL
#undef  USE_WOLFSSL

/* Enabled features.
 */
#define ENABLE_IPV6 1
#define HAVE_ZLIB_H 1
#define HAVE_LIBZ   1

#undef CURL_DISABLE_COOKIES
#undef CURL_DISABLE_CRYPTO_AUTH
#undef CURL_DISABLE_DICT
#undef CURL_DISABLE_DOH
#undef CURL_DISABLE_FILE
#undef CURL_DISABLE_FTP
#undef CURL_DISABLE_GOPHER
#undef CURL_DISABLE_HTTP
#undef CURL_DISABLE_HTTP_AUTH
#undef CURL_DISABLE_IMAP
#undef CURL_DISABLE_MIME
#undef CURL_DISABLE_LIBCURL_OPTION
#undef CURL_DISABLE_NETRC
#undef CURL_DISABLE_PARSEDATE
#undef CURL_DISABLE_POP3
#undef CURL_DISABLE_PROGRESS_METER
#undef CURL_DISABLE_PROXY
#undef CURL_DISABLE_RTSP
#undef CURL_DISABLE_SHUFFLE_DNS
#undef CURL_DISABLE_SMB
#undef CURL_DISABLE_SMTP
#undef CURL_DISABLE_TELNET
#undef CURL_DISABLE_TFTP
#undef CURL_DISABLE_VERBOSE_STRINGS

/* Diabled features.
 */
#define CURL_DISABLE_LDAP  1
#define CURL_DISABLE_LDAPS 1

#undef USE_WIN32_LDAP
#undef HAVE_LDAP_SSL
#undef HAVE_LDAP_SSL_H
#undef HAVE_LDAP_URL_PARSE

#undef USE_LIBSSH
#undef USE_LIBSSH2
#undef HAVE_LIBSSH2_H
#undef HAVE_LIBSSH_LIBSSH_H
#undef USE_AMISSL
#undef USE_GNUTLS
#undef USE_GNUTLS_NETTLE
#undef USE_ARES
#undef USE_ESNI
#undef USE_LIBPSL
#undef USE_MANUAL
#undef USE_MBEDTLS
#undef USE_MESALINK
#undef USE_METALINK
#undef USE_NGHTTP2
#undef USE_NGHTTP3
#undef USE_NGTCP2
#undef USE_NSS
#undef USE_OPENLDAP
#undef USE_ALTSVC
#undef USE_LIBRTMP
#undef USE_QUICHE

/* Specific for (non-) Linux.
 */
#ifdef __linux__
#  define HAVE_FSETXATTR_5 1
#  define HAVE_LINUX_TCP_H 1
#else
#  define HAVE_SETMODE 1
#endif

/* Specific FreeBSD.
 */
#ifdef __FreeBSD__
#  define HAVE_MEMRCHR 1
#endif

/* Specific for MacOS.
 */
#ifdef __APPLE__
#  define HAVE_FSETXATTR_6         1
#  define HAVE_MACH_ABSOLUTE_TIME  1
#  define _DARWIN_USE_64_BIT_INODE 1
#endif

/* Specific for FreeBSD and Linux.
 */
#if defined(__FreeBSD__) || defined(__linux__)
#  define HAVE_MSG_NOSIGNAL 1
#  define HAVE_POLL_FINE    1
#endif

/* Specific for FreeBSD and Mac OS.
 */
#if defined(__FreeBSD__) || defined(__APPLE__)
#  define HAVE_SYS_SOCKIO_H 1
#endif

/* Specific for Linux and Mac OS.
 */
#if defined(__linux__) || defined(__APPLE__)
#  define HAVE_FSETXATTR 1
#endif

/* Specific for POSIX.
 */
#ifndef _WIN32
#  define HAVE_ARPA_INET_H       1
#  define HAVE_IFADDRS_H         1
#  define HAVE_NETDB_H           1
#  define HAVE_NETINET_IN_H      1
#  define HAVE_NETINET_TCP_H     1
#  define HAVE_NET_IF_H          1
#  define HAVE_POLL_H            1
#  define HAVE_PWD_H             1
#  define HAVE_ALARM             1
#  define HAVE_FCNTL_O_NONBLOCK  1
#  define HAVE_FNMATCH           1
#  define HAVE_GETEUID           1
#  define HAVE_GETIFADDRS        1
#  define HAVE_GETPWUID          1
#  define HAVE_GETPWUID_R        1
#  define HAVE_GETTIMEOFDAY      1
#  define HAVE_GMTIME_R          1
#  define HAVE_IF_NAMETOINDEX    1
#  define HAVE_IOCTL_FIONBIO     1
#  define HAVE_IOCTL_SIOCGIFADDR 1
#  define HAVE_PIPE              1
#  define HAVE_POSIX_STRERROR_R  1
#  define HAVE_SIGACTION         1
#  define HAVE_SIGSETJMP         1
#  define HAVE_SOCKETPAIR        1
#  define HAVE_STRERROR_R        1
#  define HAVE_SYS_IOCTL_H       1
#  define HAVE_SYS_POLL_H        1
#  define HAVE_SYS_SELECT_H      1
#  define HAVE_SYS_SOCKET_H      1
#  define HAVE_SYS_UN_H          1
#  define HAVE_SYS_WAIT_H        1
#  define HAVE_TERMIOS_H         1
#  define HAVE_UTIMES            1
#  define NTLM_WB_ENABLED        1
#  define USE_UNIX_SOCKETS       1

#  define CURL_SA_FAMILY_T      sa_family_t
#  define GETHOSTNAME_TYPE_ARG2 size_t

#  define NTLM_WB_FILE          "/usr/bin/ntlm_auth"
#  define RANDOM_FILE           "/dev/urandom"

#  define CURL_EXTERN_SYMBOL    __attribute__ ((__visibility__ ("default")))

/* Specific for Windows.
 */
#else
#  define HAVE_PROCESS_H           1
#  define USE_WIN32_CRYPTO         1
#  define HAVE_CLOSESOCKET         1
#  define HAVE_IOCTLSOCKET_FIONBIO 1
#  define HAVE_IO_H                1
#  define HAVE_SYS_UTIME_H         1
#  define HAVE_WINDOWS_H           1
#  define HAVE_WINSOCK2_H          1
#  define HAVE_WINSOCK_H           1
#  define USE_WIN32_IDN            1
#  define USE_WIN32_LARGE_FILES    1
#  define USE_WINDOWS_SSPI         1
#  define WANT_IDN_PROTOTYPES      1

#  undef SOCKET
#  undef USE_LWIPSOCK
#  undef USE_WIN32_SMALL_FILES

/* The upstream's logic of defining the macro is quite hairy. Let's not
 * reproduce it here and see how it goes.
 */
#  undef _WIN32_WINNT

/* For these ones sensible defaults are defined in lib/curl_setup.h.
 */
#  undef CURL_SA_FAMILY_T
#  undef GETHOSTNAME_TYPE_ARG2
#  undef USE_WINSOCK

/* Unused on Windows (see include/curl/curl.h for details).
 */
#  undef CURL_EXTERN_SYMBOL
#endif

/* Specific for GNU C Library.
 */
#ifdef __GLIBC__
#  define HAVE_GETHOSTBYNAME_R   1
#  define HAVE_GETHOSTBYNAME_R_6 1
#  undef HAVE_GETHOSTBYNAME_R_3
#  undef HAVE_GETHOSTBYNAME_R_5
#endif

/* Specific for (non-) VC.
 */
#ifndef _MSC_VER
#  define HAVE_BASENAME                1
#  define HAVE_CLOCK_GETTIME_MONOTONIC 1
#  define HAVE_INET_NTOP               1
#  define HAVE_INET_PTON               1
#  define HAVE_LIBGEN_H                1
#  define HAVE_PTHREAD_H               1
#  define HAVE_SETJMP_H                1
#  define HAVE_SIGNAL                  1
#  define HAVE_STRCASECMP              1
#  define HAVE_STRINGS_H               1
#  define HAVE_STRING_H                1
#  define HAVE_STRTOK_R                1
#  define HAVE_SYS_PARAM_H             1
#  define HAVE_SYS_TIME_H              1
#  define HAVE_UNISTD_H                1
#  define HAVE_UTIME_H                 1
#  define HAVE_VARIADIC_MACROS_GCC     1
#  define TIME_WITH_SYS_TIME           1
#  define USE_THREADS_POSIX            1
#  undef  USE_THREADS_WIN32
#else
#  define NEED_MALLOC_H     1
#  define USE_THREADS_WIN32 1
#  undef  USE_THREADS_POSIX
#endif

/* Common for all supported OSes/compilers.
 */
#define HAVE_ASSERT_H                   1
#define HAVE_STDBOOL_H                  1
#define HAVE_BOOL_T                     1
#define HAVE_ERRNO_H                    1
#define HAVE_FCNTL_H                    1
#define HAVE_WS2TCPIP_H                 1
#define HAVE_SIGNAL_H                   1
#define HAVE_LOCALE_H                   1
#define HAVE_SETLOCALE                  1
#define HAVE_GETADDRINFO                1
#define HAVE_FREEADDRINFO               1
#define HAVE_GETADDRINFO_THREADSAFE     1
#define HAVE_FTRUNCATE                  1
#define HAVE_GETHOSTBYNAME              1
#define HAVE_GETHOSTNAME                1
#define HAVE_GETPEERNAME                1
#define HAVE_GETSOCKNAME                1
#define HAVE_LONGLONG                   1
#define HAVE_OPENSSL_VERSION            1
#define HAVE_SOCKET                     1
#define HAVE_SELECT                     1
#define HAVE_SIG_ATOMIC_T               1
#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1
#define HAVE_STRDUP                     1
#define HAVE_STRTOLL                    1
#define HAVE_STRUCT_SOCKADDR_STORAGE    1
#define HAVE_STRUCT_TIMEVAL             1
#define HAVE_SYS_STAT_H                 1
#define HAVE_SYS_TYPES_H                1
#define HAVE_TIME_H                     1
#define HAVE_UTIME                      1
#define HAVE_VARIADIC_MACROS_C99        1
#define STDC_HEADERS                    1

#undef _ALL_SOURCE
#undef _LARGE_FILES
#undef HAVE_LBER_H
#undef HAVE_NETINET_IN6_H
#undef HAVE_GSSAPI_GSSAPI_GENERIC_H
#undef HAVE_GSSAPI_GSSAPI_H
#undef HAVE_IDN2_H
#undef HAVE_LIBIDN2
#undef HAVE_BROTLI
#undef EGD_SOCKET
#undef DEBUGBUILD
#undef HAVE_STRUCT_POLLFD
#undef HAVE_DECL_GETPWUID_R_MISSING
#undef HAVE_GETPASS_R
#undef HAVE_GNUTLS_ALPN_SET_PROTOCOLS
#undef HAVE_GNUTLS_CERTIFICATE_SET_X509_KEY_FILE2
#undef HAVE_GNUTLS_OCSP_REQ_INIT
#undef HAVE_GSSAPI
#undef HAVE_GSSGNU
#undef HAVE_IOCTLSOCKET_CAMEL_FIONBIO
#undef HAVE_OLD_GSSMIT
#undef HAVE_PK11_CREATEMANAGEDGENERICOBJECT
#undef HAVE_PROTO_BSDSOCKET_H
#undef HAVE_RAND_EGD
#undef HAVE_SETSOCKOPT_SO_NONBLOCK
#undef HAVE_SIG_ATOMIC_T_VOLATILE
#undef HAVE_SSLV2_CLIENT_METHOD
#undef HAVE_STRCMPI
#undef HAVE_STROPTS_H
#undef HAVE_TERMIO_H
#undef HAVE_TIME_T_UNSIGNED
#undef HAVE_WOLFSSLV3_CLIENT_METHOD
#undef HAVE_WOLFSSL_GET_PEER_CERTIFICATE
#undef HAVE_WOLFSSL_USEALPN
#undef HAVE_WRITABLE_ARGV
#undef NEED_MEMORY_H
#undef NEED_REENTRANT
#undef NEED_THREAD_SAFE

#undef CURLDEBUG
#undef HAVE_GETNAMEINFO
#undef GETNAMEINFO_QUAL_ARG1
#undef GETNAMEINFO_TYPE_ARG1
#undef GETNAMEINFO_TYPE_ARG2
#undef GETNAMEINFO_TYPE_ARG46
#undef GETNAMEINFO_TYPE_ARG7

#undef HAVE_RECVFROM
#undef RECVFROM_TYPE_ARG1
#undef RECVFROM_TYPE_ARG2
#undef RECVFROM_TYPE_ARG3
#undef RECVFROM_TYPE_ARG4
#undef RECVFROM_TYPE_ARG5
#undef RECVFROM_TYPE_ARG6
#undef RECVFROM_TYPE_RETV

/* While upstream defines the macro for Clang, it fails to build for older
 * version of Clang on Mac OS. Thus, we never define it.
 */
#undef HAVE_BUILTIN_AVAILABLE

/* send()
 */
#define HAVE_SEND        1
#ifndef _WIN32
#  define SEND_TYPE_ARG1 int
#  define SEND_TYPE_ARG2 void *
#  define SEND_TYPE_ARG3 size_t
#  define SEND_TYPE_ARG4 int
#  define SEND_TYPE_RETV ssize_t
#else
#  define SEND_TYPE_ARG1 SOCKET
#  define SEND_TYPE_ARG2 char *
#  define SEND_TYPE_ARG3 int
#  define SEND_TYPE_ARG4 int
#  define SEND_TYPE_RETV int
#endif

/* recv()
 */
#define HAVE_RECV        1
#ifndef _WIN32
#  define RECV_TYPE_ARG1 int
#  define RECV_TYPE_ARG2 void *
#  define RECV_TYPE_ARG3 size_t
#  define RECV_TYPE_ARG4 int
#  define RECV_TYPE_RETV ssize_t
#else
#  define RECV_TYPE_ARG1 SOCKET
#  define RECV_TYPE_ARG2 char *
#  define RECV_TYPE_ARG3 int
#  define RECV_TYPE_ARG4 int
#  define RECV_TYPE_RETV int
#endif

/* Types and type sizes.
 */
#ifndef _WIN32
#  define SIZEOF_SHORT  __SIZEOF_SHORT__
#  define SIZEOF_INT    __SIZEOF_INT__
#  define SIZEOF_LONG   __SIZEOF_LONG__
#  define SIZEOF_SIZE_T __SIZEOF_SIZE_T__

/* There is no way to exactly tell these type sizes at the preprocessing time,
 * so we define them as the most probable ones. We check this assumption at
 * the compile time using _Static_assert() in assert.c.
 */
#  define SIZEOF_OFF_T  __SIZEOF_LONG__
#  define SIZEOF_TIME_T __SIZEOF_LONG__
#else
#  define SIZEOF_SHORT    2
#  define SIZEOF_INT      4
#  define SIZEOF_LONG     4
#  define SIZEOF_OFF_T    4
#  ifdef _WIN64
#    define SIZEOF_TIME_T 8
#    define SIZEOF_SIZE_T 8
#  else
#    define SIZEOF_TIME_T 8
#    define SIZEOF_SIZE_T 4
#  endif
#  define in_addr_t unsigned long

/* Inspired by lib/config-win32.h.
 */
#  if defined(_MSC_VER) && !defined(_SSIZE_T_DEFINED)
#    if defined(_WIN64)
#      define ssize_t __int64
#    else
#      define ssize_t int
#    endif
#    define _SSIZE_T_DEFINED
#  endif
#endif

/* Is always 8 bytes for any platform that provides a 64-bit signed integral
 * data type (see include/curl/system.h for details) and we can parobably
 * assume that's the case for the platforms we build for. We also check this
 * at the compile time using _Static_assert() in assert.c.
 */
#define SIZEOF_CURL_OFF_T 8

#define RETSIGTYPE     void
#define SEND_QUAL_ARG2 const

/* We can probably assume that on platforms we build for, these keywords/types
 * doesn't require definition.

#undef const
#undef inline
#undef size_t
#undef ssize_t

*/

#endif /* LIBCURL_CURL_CONFIG_H */