mhd_options.h (10407B)
1 /* 2 This file is part of libmicrohttpd 3 Copyright (C) 2016-2021 Karlson2k (Evgeny Grin) 4 5 This library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License as published by the Free Software Foundation; either 8 version 2.1 of the License, or (at your option) any later version. 9 10 This library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with this library; if not, write to the Free Software 17 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 */ 19 20 /** 21 * @file include/mhd_options.h 22 * @brief additional automatic macros for MHD_config.h 23 * @author Karlson2k (Evgeny Grin) 24 * 25 * This file includes MHD_config.h and adds automatic macros based on values 26 * in MHD_config.h, compiler built-in macros and commandline-defined macros 27 * (but not based on values defined in other headers). Works also as a guard 28 * to prevent double inclusion of MHD_config.h 29 */ 30 31 #ifndef MHD_OPTIONS_H 32 #define MHD_OPTIONS_H 1 33 34 #include "MHD_config.h" 35 36 /** 37 * Macro to make it easy to mark text for translation. Note that 38 * we do not actually call gettext() in MHD, but we do make it 39 * easy to create a ".po" file so that applications that do want 40 * to translate error messages can do so. 41 */ 42 #define _(String) (String) 43 44 #if defined(_MHD_EXTERN) && ! defined(BUILDING_MHD_LIB) 45 #undef _MHD_EXTERN 46 #endif /* _MHD_EXTERN && ! BUILDING_MHD_LIB */ 47 48 #ifndef _MHD_EXTERN 49 #if defined(BUILDING_MHD_LIB) && defined(_WIN32) && \ 50 (defined(DLL_EXPORT) || defined(MHD_W32DLL)) 51 #define _MHD_EXTERN __declspec(dllexport) extern 52 #else /* !BUILDING_MHD_LIB || !_WIN32 || (!DLL_EXPORT && !MHD_W32DLL) */ 53 #define _MHD_EXTERN extern 54 #endif /* !BUILDING_MHD_LIB || !_WIN32 || (!DLL_EXPORT && !MHD_W32DLL) */ 55 #endif /* ! _MHD_EXTERN */ 56 57 /* Some platforms (FreeBSD, Solaris, W32) allow to override 58 default FD_SETSIZE by defining it before including 59 headers. */ 60 #ifdef FD_SETSIZE 61 /* FD_SETSIZE defined in command line or in MHD_config.h */ 62 #elif defined(_WIN32) || defined(__CYGWIN__) 63 /* Platform with WinSock and without overridden FD_SETSIZE */ 64 #define FD_SETSIZE 2048 /* Override default small value (64) */ 65 #else /* !FD_SETSIZE && !W32 */ 66 /* System default value of FD_SETSIZE is used */ 67 #define _MHD_FD_SETSIZE_IS_DEFAULT 1 68 #endif /* !FD_SETSIZE && !W32 */ 69 70 #if defined(HAVE_LINUX_SENDFILE) || defined(HAVE_FREEBSD_SENDFILE) || \ 71 defined(HAVE_DARWIN_SENDFILE) || defined(HAVE_SOLARIS_SENDFILE) 72 /* Have any supported sendfile() function. */ 73 #define _MHD_HAVE_SENDFILE 74 #endif /* HAVE_LINUX_SENDFILE || HAVE_FREEBSD_SENDFILE || 75 HAVE_DARWIN_SENDFILE || HAVE_SOLARIS_SENDFILE */ 76 #if defined(HAVE_LINUX_SENDFILE) || defined(HAVE_SOLARIS_SENDFILE) 77 #define MHD_LINUX_SOLARIS_SENDFILE 1 78 #endif /* HAVE_LINUX_SENDFILE || HAVE_SOLARIS_SENDFILE */ 79 80 #if defined(MHD_USE_POSIX_THREADS) || defined(MHD_USE_W32_THREADS) 81 # ifndef MHD_USE_THREADS 82 # define MHD_USE_THREADS 1 83 # endif 84 #endif /* MHD_USE_POSIX_THREADS || MHD_USE_W32_THREADS */ 85 86 #if defined(OS390) 87 #define _OPEN_THREADS 88 #define _OPEN_SYS_SOCK_IPV6 89 #define _OPEN_MSGQ_EXT 90 #define _LP64 91 #endif 92 93 #if defined(_WIN32) && ! defined(__CYGWIN__) 94 /* Declare POSIX-compatible names */ 95 #define _CRT_DECLARE_NONSTDC_NAMES 1 96 /* Do not warn about POSIX name usage */ 97 #define _CRT_NONSTDC_NO_WARNINGS 1 98 #ifndef _WIN32_WINNT 99 #define _WIN32_WINNT 0x0600 100 #else /* _WIN32_WINNT */ 101 #if _WIN32_WINNT < 0x0501 102 #error "Headers for Windows XP or later are required" 103 #endif /* _WIN32_WINNT < 0x0501 */ 104 #endif /* _WIN32_WINNT */ 105 #ifndef WIN32_LEAN_AND_MEAN 106 /* Do not include unneeded parts of W32 headers. */ 107 #define WIN32_LEAN_AND_MEAN 1 108 #endif /* !WIN32_LEAN_AND_MEAN */ 109 #endif /* _WIN32 && ! __CYGWIN__ */ 110 111 #if defined(__VXWORKS__) || defined(__vxworks) || defined(OS_VXWORKS) 112 #define RESTRICT __restrict__ 113 #endif /* __VXWORKS__ || __vxworks || OS_VXWORKS */ 114 115 #if defined(LINUX) && (defined(HAVE_SENDFILE64) || defined(HAVE_LSEEK64)) && \ 116 ! defined(_LARGEFILE64_SOURCE) 117 /* On Linux, special macro is required to enable definitions of some xxx64 functions */ 118 #define _LARGEFILE64_SOURCE 1 119 #endif 120 121 #ifdef HAVE_C11_GMTIME_S 122 /* Special macro is required to enable C11 definition of gmtime_s() function */ 123 #define __STDC_WANT_LIB_EXT1__ 1 124 #endif /* HAVE_C11_GMTIME_S */ 125 126 #if defined(MHD_FAVOR_FAST_CODE) && defined(MHD_FAVOR_SMALL_CODE) 127 #error \ 128 MHD_FAVOR_FAST_CODE and MHD_FAVOR_SMALL_CODE are both defined. Cannot favor speed and size at the same time. 129 #endif /* MHD_FAVOR_FAST_CODE && MHD_FAVOR_SMALL_CODE */ 130 131 /* Define MHD_FAVOR_FAST_CODE to force fast code path or 132 define MHD_FAVOR_SMALL_CODE to choose compact code path */ 133 #if ! defined(MHD_FAVOR_FAST_CODE) && ! defined(MHD_FAVOR_SMALL_CODE) 134 /* Try to detect user preferences */ 135 /* Defined by GCC and many compatible compilers */ 136 #if defined(__OPTIMIZE_SIZE__) 137 #define MHD_FAVOR_SMALL_CODE 1 138 #elif defined(__OPTIMIZE__) 139 #define MHD_FAVOR_FAST_CODE 1 140 #endif /* __OPTIMIZE__ */ 141 #endif /* !MHD_FAVOR_FAST_CODE && !MHD_FAVOR_SMALL_CODE */ 142 143 #if ! defined(MHD_FAVOR_FAST_CODE) && ! defined(MHD_FAVOR_SMALL_CODE) 144 /* Use faster code by default */ 145 #define MHD_FAVOR_FAST_CODE 1 146 #endif /* !MHD_FAVOR_FAST_CODE && !MHD_FAVOR_SMALL_CODE */ 147 148 #ifndef MHD_ASAN_ACTIVE 149 #if (defined(__GNUC__) || defined(_MSC_VER)) && defined(__SANITIZE_ADDRESS__) 150 #define MHD_ASAN_ACTIVE 1 151 #elif defined(__has_feature) 152 #if __has_feature (address_sanitizer) 153 #define MHD_ASAN_ACTIVE 1 154 #endif /* __has_feature(address_sanitizer) */ 155 #endif /* __has_feature */ 156 #endif /* MHD_ASAN_ACTIVE */ 157 158 #if defined(MHD_ASAN_ACTIVE) && defined(HAVE_SANITIZER_ASAN_INTERFACE_H) && \ 159 (defined(FUNC_PTRCOMPARE_CAST_WORKAROUND_WORKS) || \ 160 (defined(FUNC_ATTR_PTRCOMPARE_WORKS) && \ 161 defined(FUNC_ATTR_PTRSUBTRACT_WORKS)) || \ 162 defined(FUNC_ATTR_NOSANITIZE_WORKS)) 163 #ifndef MHD_ASAN_POISON_ACTIVE 164 /* User ASAN poisoning could be used */ 165 #warning User memory poisoning is not active 166 #endif /* ! MHD_ASAN_POISON_ACTIVE */ 167 #else /* ! (MHD_ASAN_ACTIVE && HAVE_SANITIZER_ASAN_INTERFACE_H && 168 (FUNC_ATTR_PTRCOMPARE_WORKS || FUNC_ATTR_NOSANITIZE_WORKS)) */ 169 #ifdef MHD_ASAN_POISON_ACTIVE 170 #error User memory poisoning is active, but conditions are not suitable 171 #endif /* MHD_ASAN_POISON_ACTIVE */ 172 #endif /* ! (MHD_ASAN_ACTIVE && HAVE_SANITIZER_ASAN_INTERFACE_H && 173 (FUNC_ATTR_PTRCOMPARE_WORKS || FUNC_ATTR_NOSANITIZE_WORKS)) */ 174 175 #ifndef _MSC_FULL_VER 176 # define MHD_DATA_TRUNCATION_RUNTIME_CHECK_DISABLE_ /* empty */ 177 # define MHD_DATA_TRUNCATION_RUNTIME_CHECK_RESTORE_ /* empty */ 178 #else /* _MSC_FULL_VER */ 179 # define MHD_DATA_TRUNCATION_RUNTIME_CHECK_DISABLE_ \ 180 __pragma(runtime_checks("c", off)) 181 # define MHD_DATA_TRUNCATION_RUNTIME_CHECK_RESTORE_ \ 182 __pragma(runtime_checks("c", restore)) 183 #endif /* _MSC_FULL_VER */ 184 185 /** 186 * Automatic string with the name of the current function 187 */ 188 #if defined(HAVE___FUNC__) 189 #define MHD_FUNC_ __func__ 190 #define MHD_HAVE_MHD_FUNC_ 1 191 #elif defined(HAVE___FUNCTION__) 192 #define MHD_FUNC_ __FUNCTION__ 193 #define MHD_HAVE_MHD_FUNC_ 1 194 #elif defined(HAVE___PRETTY_FUNCTION__) 195 #define MHD_FUNC_ __PRETTY_FUNCTION__ 196 #define MHD_HAVE_MHD_FUNC_ 1 197 #else 198 #define MHD_FUNC_ "**name unavailable**" 199 #ifdef MHD_HAVE_MHD_FUNC_ 200 #undef MHD_HAVE_MHD_FUNC_ 201 #endif /* MHD_HAVE_MHD_FUNC_ */ 202 #endif 203 204 /* Un-define some HAVE_DECL_* macro if they equal zero. 205 This should allow safely use #ifdef in the code. 206 Define HAS_DECL_* macros only if matching HAVE_DECL_* macro 207 has non-zero value. Unlike HAVE_DECL_*, macros HAS_DECL_* 208 cannot have zero value. */ 209 #ifdef HAVE_DECL__SC_NPROCESSORS_ONLN 210 # if 0 == HAVE_DECL__SC_NPROCESSORS_ONLN 211 # undef HAVE_DECL__SC_NPROCESSORS_ONLN 212 # else /* 0 != HAVE_DECL__SC_NPROCESSORS_ONLN */ 213 # define HAS_DECL__SC_NPROCESSORS_ONLN 1 214 # endif /* 0 != HAVE_DECL__SC_NPROCESSORS_ONLN */ 215 #endif /* HAVE_DECL__SC_NPROCESSORS_ONLN */ 216 217 #ifdef HAVE_DECL__SC_NPROCESSORS_CONF 218 # if 0 == HAVE_DECL__SC_NPROCESSORS_CONF 219 # undef HAVE_DECL__SC_NPROCESSORS_CONF 220 # else /* 0 != HAVE_DECL__SC_NPROCESSORS_CONF */ 221 # define HAS_DECL__SC_NPROCESSORS_CONF 1 222 # endif /* 0 != HAVE_DECL__SC_NPROCESSORS_CONF */ 223 #endif /* HAVE_DECL__SC_NPROCESSORS_CONF */ 224 225 #ifdef HAVE_DECL__SC_NPROC_ONLN 226 # if 0 == HAVE_DECL__SC_NPROC_ONLN 227 # undef HAVE_DECL__SC_NPROC_ONLN 228 # else /* 0 != HAVE_DECL__SC_NPROC_ONLN */ 229 # define HAS_DECL__SC_NPROC_ONLN 1 230 # endif /* 0 != HAVE_DECL__SC_NPROC_ONLN */ 231 #endif /* HAVE_DECL__SC_NPROC_ONLN */ 232 233 #ifdef HAVE_DECL__SC_CRAY_NCPU 234 # if 0 == HAVE_DECL__SC_CRAY_NCPU 235 # undef HAVE_DECL__SC_CRAY_NCPU 236 # else /* 0 != HAVE_DECL__SC_CRAY_NCPU */ 237 # define HAS_DECL__SC_CRAY_NCPU 1 238 # endif /* 0 != HAVE_DECL__SC_CRAY_NCPU */ 239 #endif /* HAVE_DECL__SC_CRAY_NCPU */ 240 241 #ifdef HAVE_DECL_CTL_HW 242 # if 0 == HAVE_DECL_CTL_HW 243 # undef HAVE_DECL_CTL_HW 244 # else /* 0 != HAVE_DECL_CTL_HW */ 245 # define HAS_DECL_CTL_HW 1 246 # endif /* 0 != HAVE_DECL_CTL_HW */ 247 #endif /* HAVE_DECL_CTL_HW */ 248 249 #ifdef HAVE_DECL_HW_NCPUONLINE 250 # if 0 == HAVE_DECL_HW_NCPUONLINE 251 # undef HAVE_DECL_HW_NCPUONLINE 252 # else /* 0 != HAVE_DECL_HW_NCPUONLINE */ 253 # define HAS_DECL_HW_NCPUONLINE 1 254 # endif /* 0 != HAVE_DECL_HW_NCPUONLINE */ 255 #endif /* HAVE_DECL_HW_NCPUONLINE */ 256 257 #ifdef HAVE_DECL_HW_AVAILCPU 258 # if 0 == HAVE_DECL_HW_AVAILCPU 259 # undef HAVE_DECL_HW_AVAILCPU 260 # else /* 0 != HAVE_DECL_HW_AVAILCPU */ 261 # define HAS_DECL_HW_AVAILCPU 1 262 # endif /* 0 != HAVE_DECL_HW_AVAILCPU */ 263 #endif /* HAVE_DECL_HW_AVAILCPU */ 264 265 #ifdef HAVE_DECL_HW_NCPU 266 # if 0 == HAVE_DECL_HW_NCPU 267 # undef HAVE_DECL_HW_NCPU 268 # else /* 0 != HAVE_DECL_HW_NCPU */ 269 # define HAS_DECL_HW_NCPU 1 270 # endif /* 0 != HAVE_DECL_HW_NCPU */ 271 #endif /* HAVE_DECL_HW_NCPU */ 272 273 #ifdef HAVE_DECL_CPU_SETSIZE 274 # if 0 == HAVE_DECL_CPU_SETSIZE 275 # undef HAVE_DECL_CPU_SETSIZE 276 # else /* 0 != HAVE_DECL_CPU_SETSIZE */ 277 # define HAS_DECL_CPU_SETSIZE 1 278 # endif /* 0 != HAVE_DECL_CPU_SETSIZE */ 279 #endif /* HAVE_DECL_CPU_SETSIZE */ 280 281 #ifndef MHD_DAUTH_DEF_TIMEOUT_ 282 # define MHD_DAUTH_DEF_TIMEOUT_ 90 283 #endif /* ! MHD_DAUTH_DEF_TIMEOUT_ */ 284 #ifndef MHD_DAUTH_DEF_MAX_NC_ 285 # define MHD_DAUTH_DEF_MAX_NC_ 1000 286 #endif /* ! MHD_DAUTH_DEF_MAX_NC_ */ 287 288 #endif /* MHD_OPTIONS_H */