libmicrohttpd2

HTTP server C library (MHD 2.x, alpha)
Log | Files | Refs | README | LICENSE

mhd_sys_extentions.m4 (51082B)


      1 # SPDX-License-Identifier: FSFAP
      2 #
      3 # SYNOPSIS
      4 #
      5 #   MHD_SYS_EXT([VAR-ADD-CPPFLAGS])
      6 #
      7 # DESCRIPTION
      8 #
      9 #   This macro checks system headers and add defines that enable maximum
     10 #   number of exposed system interfaces. Macro verifies that added defines
     11 #   will not break basic headers, some defines are also checked against
     12 #   real recognition by headers.
     13 #   If VAR-ADD-CPPFLAGS is specified, defines will be added to this variable
     14 #   in form suitable for CPPFLAGS. Otherwise defines will be added to
     15 #   configuration header (usually 'config.h').
     16 #
     17 #   Example usage:
     18 #
     19 #     MHD_SYS_EXT
     20 #
     21 #   or
     22 #
     23 #     MHD_SYS_EXT([CPPFLAGS])
     24 #
     25 #   Macro is not enforced to be called before AC_COMPILE_IFELSE, but it
     26 #   advisable to call macro before any compile and header tests since
     27 #   additional defines can change results of those tests.
     28 #
     29 #   Defined in command line macros are always honored and cache variables
     30 #   used in all checks so if any test will not work correctly on some
     31 #   platform, user may simply fix it by giving correct defines in CPPFLAGS
     32 #   or by giving cache variable in configure parameters, for example:
     33 #
     34 #     ./configure CPPFLAGS='-D_XOPEN_SOURCE=1 -D_XOPEN_SOURCE_EXTENDED'
     35 #
     36 #   or
     37 #
     38 #     ./configure mhd_cv_define__xopen_source_sevenh_works=no
     39 #
     40 #   This simplify building from source on exotic platforms as patching
     41 #   of configure.ac is not required to change results of tests.
     42 #
     43 # LICENSE
     44 #
     45 #   Copyright (c) 2016, 2017, 2024, 2026 Karlson2k (Evgeny Grin)
     46 #
     47 #   Copying and distribution of this file, with or without modification, are
     48 #   permitted in any medium without royalty provided the copyright notice
     49 #   and this notice are preserved. This file is offered as-is, without any
     50 #   warranty.
     51 
     52 #serial 5
     53 
     54 AC_DEFUN([MHD_SYS_EXT],[dnl
     55   AC_PREREQ([2.64])dnl for AS_VAR_IF, AS_VAR_SET_IF, m4_ifnblank
     56   AC_LANG_ASSERT([C])dnl Only C is supported
     57 m4_ifdef([_AC_UNDECLARED_BUILTIN],
     58 [AC_DEFUN_ONCE([_AC_UNDECLARED_BUILTIN_]_AC_LANG_ABBREV,
     59                [_AC_UNDECLARED_BUILTIN])]dnl
     60 [AC_REQUIRE([_AC_UNDECLARED_BUILTIN_]_AC_LANG_ABBREV)]dnl
     61 )dnl m4_ifdef _AC_UNDECLARED_BUILTIN
     62   AC_REQUIRE([_MHD_SET_BASIC_INCLUDES])
     63   mhd_mse_sys_ext_defines=""
     64   mhd_mse_sys_ext_flags=""
     65 
     66 
     67   AC_CACHE_CHECK([[whether _XOPEN_SOURCE is already defined]],
     68     [[mhd_cv_macro__xopen_source_defined]], [
     69       _MHD_CHECK_DEFINED([[_XOPEN_SOURCE]], [[${mhd_mse_sys_ext_defines}]],
     70         [[mhd_cv_macro__xopen_source_defined="yes"]],
     71         [[mhd_cv_macro__xopen_source_defined="no"]]
     72       )
     73     ]
     74   )
     75 
     76   AS_VAR_IF([mhd_cv_macro__xopen_source_defined],["no"],
     77     [
     78       _MHD_SYS_EXT_CHECK_XOPEN_SOURCE_NEEDED([_MHD_SYS_EXT_CHECK_XOPEN_VAL_MAPPED])
     79     ]
     80   )
     81 
     82   _MHD_SYS_EXT_PLATFORM_VISIBILITY
     83 
     84   mhd_mse_xopen_features=""
     85   mhd_mse_xopen_defines=""
     86   mhd_mse_xopen_flags=""
     87 
     88   AS_IF([[test "X${mhd_cv_macro__xopen_source_defined}" = "Xno" && test "X${mhd_cv_hdrs_need__xopen_source}" != "Xno"]],
     89     [
     90       AS_CASE([${mhd_cv__xopen_source_mapped}],
     91         [?00],
     92         [
     93           _MHD_SYS_EXT_VAR_ADD_FLAG([mhd_mse_xopen_defines],[mhd_mse_xopen_flags],[_XOPEN_SOURCE],[${mhd_cv__xopen_source_mapped}])
     94         ],
     95         
     96         [
     97           # Some platforms (NetBSD, illumos, Solaris) use '==' checks instead of '>='
     98           # for _XOPEN_SOURCE, resulting that unknown for the platform values are
     99           # interpreted as the oldest and the platform exposes reduced number of
    100           # interfaces. Next checks will ensure that the platform recognises
    101           # requested mode instead of blindly defining high number that can
    102           # be simply ignored by the platform.
    103           _MHD_CHECK_POSIX2024([[mhd_mse_xopen_defines]],
    104             [[mhd_mse_xopen_flags]],
    105             [[${mhd_mse_sys_ext_defines}]],
    106             [mhd_mse_xopen_features="${mhd_cv_headers_posix2024}"],
    107             [
    108               _MHD_CHECK_POSIX2008([[mhd_mse_xopen_defines]],
    109                 [[mhd_mse_xopen_flags]],
    110                 [[${mhd_mse_sys_ext_defines}]],
    111                 [mhd_mse_xopen_features="${mhd_cv_headers_posix2008}"],
    112                 [
    113                   _MHD_CHECK_POSIX2001([[mhd_mse_xopen_defines]],
    114                     [[mhd_mse_xopen_flags]],
    115                      [[${mhd_mse_sys_ext_defines}]],
    116                     [mhd_mse_xopen_features="${mhd_cv_headers_posix2001}"],
    117                     [
    118                       _MHD_CHECK_SUSV2([[mhd_mse_xopen_defines]],
    119                         [[mhd_mse_xopen_flags]],
    120                         [[${mhd_mse_sys_ext_defines}]],
    121                         [mhd_mse_xopen_features="${mhd_cv_headers_susv2}"],
    122                         [
    123                          mhd_mse_xopen_features="${mhd_cv_headers_susv2}"
    124                          # Try basic fallback values
    125                          _MHD_XOPEN_VAR_ADD([mhd_mse_xopen_defines], [mhd_mse_xopen_flags], [${mhd_mse_sys_ext_defines}])
    126                         ]
    127                       )
    128                     ]
    129                   )
    130                 ]
    131               )
    132             ]
    133           )
    134         ]
    135       )
    136     ]
    137   )
    138 
    139   dnl Discard temporal source variables
    140   AS_UNSET([[mhd_mse_sys_features_src]])
    141   AS_UNSET([[mhd_mse_xopen_defines]])
    142   AS_UNSET([[mhd_mse_sys_ext_defines]])
    143 
    144   dnl Determined all required defines.
    145   AC_MSG_CHECKING([[for the final set of defined symbols]])
    146   m4_ifblank([$1], [dnl
    147     AH_TEMPLATE([[_XOPEN_SOURCE]], [Define to maximum value supported by system headers])dnl
    148     AH_TEMPLATE([[_XOPEN_SOURCE_EXTENDED]], [Define to 1 if _XOPEN_SOURCE is defined to value less than 500 ]dnl
    149       [and system headers require this symbol])dnl
    150     AH_TEMPLATE([[_XOPEN_VERSION]], [Define to maximum value supported by system headers if _XOPEN_SOURCE ]dnl
    151       [is defined to value less than 500 and headers do not support _XOPEN_SOURCE_EXTENDED])dnl
    152     AH_TEMPLATE([[_GNU_SOURCE]], [Define to 1 to enable GNU-related header features])dnl
    153     AH_TEMPLATE([[__BSD_VISIBLE]], [Define to 1 if it is required by headers to expose additional symbols])dnl
    154     AH_TEMPLATE([[_DARWIN_C_SOURCE]], [Define to 1 if it is required by headers to expose additional symbols])dnl
    155     AH_TEMPLATE([[__EXTENSIONS__]], [Define to 1 if it is required by headers to expose additional symbols])dnl
    156     AH_TEMPLATE([[_NETBSD_SOURCE]], [Define to 1 if it is required by headers to expose additional symbols])dnl
    157     AH_TEMPLATE([[_BSD_SOURCE]], [Define to 1 if it is required by headers to expose additional symbols])dnl
    158     AH_TEMPLATE([[_TANDEM_SOURCE]], [Define to 1 if it is required by headers to expose additional symbols])dnl
    159     AH_TEMPLATE([[_ALL_SOURCE]], [Define to 1 if it is required by headers to expose additional symbols])dnl
    160     AH_TEMPLATE([[_QNX_SOURCE]], [Define to 1 if it is required by headers to expose additional symbols])dnl
    161   ])
    162   mhd_mse_result=""
    163   for mhd_mse_Flag in ${mhd_mse_sys_ext_flags} ${mhd_mse_xopen_flags}
    164   do
    165     mhd_mse_result="${mhd_mse_result}${mhd_mse_Flag} "
    166     m4_ifnblank([$1], [dnl
    167       AS_VAR_APPEND([$1],[[" -D$mhd_mse_Flag"]])
    168     ], [dnl
    169       AS_CASE([[$mhd_mse_Flag]], [[*=*]],
    170       [dnl
    171         AC_DEFINE_UNQUOTED([[`expr "X$mhd_mse_Flag" : 'X\([^=]*\)'`]],
    172           [[`expr "X$mhd_mse_Flag" : 'X[^=]*=\(.*\)'`]])
    173       ], [dnl
    174         AC_DEFINE_UNQUOTED([[$mhd_mse_Flag]])
    175       ])
    176     ])
    177   done
    178   AS_UNSET([[mhd_mse_Flag]])
    179   AC_MSG_RESULT([[${mhd_mse_result}]])
    180   AS_UNSET([[mhd_mse_result]])
    181   AS_UNSET([[mhd_mse_xopen_flags]])
    182   AS_UNSET([[mhd_mse_sys_ext_flags]])
    183 ])
    184 
    185 # _MHD_SYS_EXT_CHECK_XOPEN_SOURCE_NEEDED([ACTION_IF_YES],
    186 #                                        [ACTION_IF_NO])
    187 #
    188 # Set mhd_cv_hdrs_need__xopen_source to "yes", "no" or "unknown, assuming yes"
    189 #
    190 m4_define([_MHD_SYS_EXT_CHECK_XOPEN_SOURCE_NEEDED], [dnl
    191   AC_CACHE_CHECK([[whether the proper platform API/ABI is switched by _XOPEN_SOURCE]],
    192     [[mhd_cv_hdrs_need__xopen_source]],
    193     [
    194       mhd_cv_hdrs_need__xopen_source=""
    195       AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
    196 /* Warning: test with inverted logic! */
    197 #ifdef __NetBSD__
    198 #error NetBSD reqires _XOPEN_SOURCE or _POSIX_C_SOURCE for modern API 
    199 fail test here %%%@<:@-1@:>@
    200 #endif
    201 
    202 #ifdef __illumos__
    203 #error illumos reqires _XOPEN_SOURCE or _POSIX_C_SOURCE to switch to POSIX API 
    204 fail test here %%%@<:@-1@:>@
    205 #elif defined(__sun)
    206 #error Solaris reqires _XOPEN_SOURCE or _POSIX_C_SOURCE to switch to POSIX API 
    207 fail test here %%%@<:@-1@:>@
    208 #endif
    209 
    210 void dummy_func(void);
    211 void dummy_func(void) {return;}
    212           ]])
    213         ],[],[mhd_cv_hdrs_need__xopen_source="yes"]
    214       )
    215       AS_IF([test -z "$mhd_cv_hdrs_need__xopen_source"],
    216         [
    217           AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
    218 ${mhd_basic_headers_includes}
    219 /* Warning: test with inverted logic! */
    220 #ifdef __linux__
    221 #if defined(__GNU_LIBRARY__) || defined(__GLIBC__)
    222 #ifndef __UCLIBC__
    223 #error GNU libc does not require _XOPEN_SOURCE
    224 fail test here %%%@<:@-1@:>@
    225 #else
    226 #error uClibc does not require _XOPEN_SOURCE
    227 fail test here %%%@<:@-1@:>@
    228 #endif
    229 /* Note: musl is undetectable by design */
    230 #endif
    231 #endif
    232 
    233 #ifdef __BIONIC__
    234 #error Bionic libc does not require _XOPEN_SOURCE
    235 fail test here %%%@<:@-1@:>@
    236 #endif
    237 
    238 void dummy_func(void);
    239 void dummy_func(void) {return;}
    240               ]])
    241             ],[],[mhd_cv_hdrs_need__xopen_source="no"]
    242           )
    243         ]
    244       )
    245       AS_IF([test -z "$mhd_cv_hdrs_need__xopen_source"],
    246         [
    247           AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
    248 /* Warning: test with inverted logic! */
    249 #ifdef __FreeBSD__
    250 #error FreeBSD does not require _XOPEN_SOURCE
    251 fail test here %%%@<:@-1@:>@
    252 #endif
    253 
    254 #ifdef __OpenBSD__
    255 #error OpenBSD does not require _XOPEN_SOURCE
    256 fail test here %%%@<:@-1@:>@
    257 #endif
    258 
    259 #ifdef __APPLE__
    260 #error Darwin does not require _XOPEN_SOURCE
    261 fail test here %%%@<:@-1@:>@
    262 #endif
    263 
    264 #ifdef __HAIKU__
    265 #error Haiku does not require _XOPEN_SOURCE
    266 fail test here %%%@<:@-1@:>@
    267 #endif
    268 
    269 #ifdef __DragonFly__
    270 #error DragonFlyBSD does not require _XOPEN_SOURCE
    271 fail test here %%%@<:@-1@:>@
    272 #endif /* __DragonFly__ */
    273 
    274 #ifdef __CYGWIN__
    275 #error Cygwin's newlib does not require _XOPEN_SOURCE
    276 fail test here %%%@<:@-1@:>@
    277 #endif /* __CYGWIN__ */
    278 
    279 #if defined(__QNX__) || defined(__QNXNTO__)
    280 #error QNX RTOS does not require _XOPEN_SOURCE
    281 fail test here %%%@<:@-1@:>@
    282 #endif /* __QNX__ || __QNXNTO__ */
    283 
    284 void dummy_func(void);
    285 void dummy_func(void) {return;}
    286               ]])
    287             ],[],[mhd_cv_hdrs_need__xopen_source="no"]
    288           )
    289         ]
    290       )
    291       AS_IF([test -z "$mhd_cv_hdrs_need__xopen_source"],
    292         [mhd_cv_hdrs_need__xopen_source="unknown, assuming yes"]
    293       )
    294     ]
    295   )
    296   m4_ifnblank([$1$2],[AS_VAR_IF([mhd_cv_hdrs_need__xopen_source],["no"],[$2],[$1])])
    297 ])dnl m4_define _MHD_SYS_EXT_CHECK_XOPEN_SOURCE_NEEDED
    298 
    299 #
    300 # Set mhd_cv__xopen_source_mapped to 800, 700, 600, 500 or none
    301 
    302 m4_define([_MHD_SYS_EXT_CHECK_XOPEN_VAL_MAPPED], [dnl
    303   AC_REQUIRE([_MHD_SET_BASIC_INCLUDES])
    304   # Note: _XOPEN_SOURCE cannot be blindy set to some high or the latest value.
    305   #       Some platforms (NetBSD, illumos, Solaris) use '==' when checking its
    306   #       value; mismatched value is interpreted as lowest value and results
    307   #       in symbols hiding.
    308   AC_CACHE_CHECK([fo][r correctly mapped _XOPEN_SOURCE value],
    309     [mhd_cv__xopen_source_mapped],
    310     [
    311       AC_COMPILE_IFELSE([AC_LANG_SOURCE([
    312 _MHD_UNDEF_ALL_EXT[
    313 #define _XOPEN_SOURCE 800
    314 ${mhd_basic_headers_includes}
    315 
    316 #ifndef _POSIX_C_SOURCE
    317 #error _POSIX_C_SOURCE is not defined by headers
    318 fail test here %%%@<:@-1@:>@
    319 #elif (_POSIX_C_SOURCE + 0) < 202405
    320 #error _POSIX_C_SOURCE is defined to value lower than expected
    321 fail test here %%%@<:@-1@:>@
    322 #elif (_POSIX_C_SOURCE + 0) > 202405
    323 #error _POSIX_C_SOURCE is defined to value higher than expected
    324 fail test here %%%@<:@-1@:>@
    325 #elif (_POSIX_C_SOURCE + 0) == 202405
    326 #else
    327 #error weird preprocessor math
    328 fail test here %%%@<:@-1@:>@
    329 #endif
    330 void dummy_func(void);
    331 void dummy_func(void) {return;}
    332           ]])
    333         ],[mhd_cv__xopen_source_mapped="800"]
    334       )
    335 
    336       AS_IF([test -z "$mhd_cv__xopen_source_mapped"],
    337         [
    338           AC_COMPILE_IFELSE([AC_LANG_SOURCE([
    339 _MHD_UNDEF_ALL_EXT[
    340 #define _XOPEN_SOURCE 700
    341 ${mhd_basic_headers_includes}
    342 
    343 #ifndef _POSIX_C_SOURCE
    344 #error _POSIX_C_SOURCE is not defined by headers
    345 fail test here %%%@<:@-1@:>@
    346 #elif (_POSIX_C_SOURCE + 0) < 200809
    347 #error _POSIX_C_SOURCE is defined to value lower than expected
    348 fail test here %%%@<:@-1@:>@
    349 #elif (_POSIX_C_SOURCE + 0) > 200809
    350 #error _POSIX_C_SOURCE is defined to value higher than expected
    351 fail test here %%%@<:@-1@:>@
    352 #elif (_POSIX_C_SOURCE + 0) == 200809
    353 #else
    354 #error weird preprocessor math
    355 fail test here %%%@<:@-1@:>@
    356 #endif
    357 void dummy_func(void);
    358 void dummy_func(void) {return;}
    359               ]])
    360             ],[mhd_cv__xopen_source_mapped="700"]
    361           )
    362         ]
    363       )
    364 
    365       AS_IF([test -z "$mhd_cv__xopen_source_mapped"],
    366         [
    367           AC_COMPILE_IFELSE([AC_LANG_SOURCE([
    368 _MHD_UNDEF_ALL_EXT[
    369 #define _XOPEN_SOURCE 600
    370 ${mhd_basic_headers_includes}
    371 
    372 #ifndef _POSIX_C_SOURCE
    373 #error _POSIX_C_SOURCE is not defined by headers
    374 fail test here %%%@<:@-1@:>@
    375 #elif (_POSIX_C_SOURCE + 0) < 200112
    376 #error _POSIX_C_SOURCE is defined to value lower than expected
    377 fail test here %%%@<:@-1@:>@
    378 #elif (_POSIX_C_SOURCE + 0) > 200112
    379 #error _POSIX_C_SOURCE is defined to value higher than expected
    380 fail test here %%%@<:@-1@:>@
    381 #elif (_POSIX_C_SOURCE + 0) == 200112
    382 #else
    383 #error weird preprocessor math
    384 fail test here %%%@<:@-1@:>@
    385 #endif
    386 void dummy_func(void);
    387 void dummy_func(void) {return;}
    388               ]])
    389             ],[mhd_cv__xopen_source_mapped="600"]
    390           )
    391         ]
    392       )
    393 
    394       AS_IF([test -z "$mhd_cv__xopen_source_mapped"],
    395         [
    396           AC_COMPILE_IFELSE([AC_LANG_SOURCE([
    397 _MHD_UNDEF_ALL_EXT[
    398 #define _XOPEN_SOURCE 500
    399 ${mhd_basic_headers_includes}
    400 
    401 #ifndef _POSIX_C_SOURCE
    402 #error _POSIX_C_SOURCE is not defined by headers
    403 fail test here %%%@<:@-1@:>@
    404 #elif (_POSIX_C_SOURCE + 0) > 199506
    405 #error _POSIX_C_SOURCE is defined to value higher than expected
    406 fail test here %%%@<:@-1@:>@
    407 #elif (_POSIX_C_SOURCE + 0) == 0
    408 #error _POSIX_C_SOURCE is defined to zero value
    409 fail test here %%%@<:@-1@:>@
    410 #elif (_POSIX_C_SOURCE + 0) <= 199506
    411 #else
    412 #error weird preprocessor math
    413 fail test here %%%@<:@-1@:>@
    414 #endif
    415 void dummy_func(void);
    416 void dummy_func(void) {return;}
    417               ]])
    418             ],[mhd_cv__xopen_source_mapped="500"]
    419           )
    420         ]
    421       )
    422 
    423     test -n "${mhd_cv__xopen_source_mapped}" || mhd_cv__xopen_source_mapped="none"
    424     ]
    425   )
    426 ])dnl m4_define _MHD_SYS_EXT_CHECK_XOPEN_MAPPED
    427 
    428 
    429 #
    430 # Set mhd_mse_sys_ext_defines and mhd_mse_sys_ext_flags
    431 #
    432 m4_define([_MHD_SYS_EXT_PLATFORM_VISIBILITY], [dnl
    433   dnl Check platform-specific visibility macros.
    434   dnl Use compiler-based test for determinig target.
    435 
    436   dnl Always add _GNU_SOURCE if headers allow.
    437   MHD_CHECK_DEF_AND_ACCEPT([[_GNU_SOURCE]], [],
    438     [[${mhd_mse_sys_ext_defines}]], [mhd_cv_macro_add__gnu_source="no"],
    439     [mhd_cv_macro_add__gnu_source="yes"],
    440     [mhd_cv_macro_add__gnu_source="no"]
    441   )
    442   AS_VAR_IF([mhd_cv_macro_add__gnu_source], ["yes"],
    443     [
    444       _MHD_SYS_EXT_VAR_ADD_FLAG([[mhd_mse_sys_ext_defines]], [[mhd_mse_sys_ext_flags]], [[_GNU_SOURCE]])
    445     ]
    446   )
    447 
    448   dnl __BSD_VISIBLE is actually a small hack for FreeBSD.
    449   dnl Funny that it's used in some Android versions too.
    450   AC_CACHE_CHECK([[whether to try __BSD_VISIBLE macro]],
    451     [[mhd_cv_macro_try___bsd_visible]], [dnl
    452     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
    453 /* Warning: test with inverted logic! */
    454 #ifdef __FreeBSD__
    455 #error Target is FreeBSD
    456 fail test here %%%@<:@-1@:>@
    457 #endif /* __FreeBSD__ */
    458 
    459 #ifdef __DragonFly__
    460 #error Target is DragonFlyBSD
    461 fail test here %%%@<:@-1@:>@
    462 #endif /* __DragonFly__ */
    463 
    464 #ifdef __ANDROID__
    465 #include <android/api-level.h>
    466 #ifndef __ANDROID_API_O__
    467 #error Target is Android NDK before R14
    468 fail test here %%%@<:@-1@:>@
    469 #endif /* ! __ANDROID_API_O__ */
    470 #endif /* __ANDROID__ */
    471         ]],[])],
    472       [[mhd_cv_macro_try___bsd_visible="no"]],
    473       [[mhd_cv_macro_try___bsd_visible="yes"]]
    474     )
    475   ])
    476   AS_VAR_IF([[mhd_cv_macro_try___bsd_visible]], [["yes"]],
    477   [dnl
    478     AC_CACHE_CHECK([[whether __BSD_VISIBLE is already defined]],
    479       [[mhd_cv_macro___bsd_visible_defined]], [dnl
    480       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
    481 ${mhd_mse_sys_ext_defines}
    482 /* Warning: test with inverted logic! */
    483 #ifdef __BSD_VISIBLE
    484 #error __BSD_VISIBLE is defined
    485 fail test here %%%@<:@-1@:>@
    486 #endif
    487           ]],[])
    488       ],
    489         [[mhd_cv_macro___bsd_visible_defined="no"]],
    490         [[mhd_cv_macro___bsd_visible_defined="yes"]]
    491       )
    492     ])
    493     AS_VAR_IF([[mhd_cv_macro___bsd_visible_defined]], [["yes"]], [[:]],
    494     [dnl
    495       MHD_CHECK_ACCEPT_DEFINE(
    496         [[__BSD_VISIBLE]], [], [[${mhd_mse_sys_ext_defines}]],
    497         [
    498           _MHD_SYS_EXT_VAR_ADD_FLAG([[mhd_mse_sys_ext_defines]], [[mhd_mse_sys_ext_flags]], [[__BSD_VISIBLE]])
    499         ]
    500       )dnl
    501     ])
    502   ])
    503 
    504   dnl _DARWIN_C_SOURCE enables additional functionality on Darwin.
    505   MHD_CHECK_DEFINED_MSG([[__APPLE__]], [[${mhd_mse_sys_ext_defines}]],
    506     [[whether to try _DARWIN_C_SOURCE macro]],
    507   [dnl
    508     MHD_CHECK_DEF_AND_ACCEPT(
    509       [[_DARWIN_C_SOURCE]], [], [[${mhd_mse_sys_ext_defines}]], [],
    510       [
    511         _MHD_SYS_EXT_VAR_ADD_FLAG([[mhd_mse_sys_ext_defines]], [[mhd_mse_sys_ext_flags]], [[_DARWIN_C_SOURCE]])
    512       ]
    513     )dnl
    514   ])
    515 
    516   dnl __EXTENSIONS__ unlocks almost all interfaces on Solaris.
    517   MHD_CHECK_DEFINED_MSG([[__sun]], [[${mhd_mse_sys_ext_defines}]],
    518     [[whether to try __EXTENSIONS__ macro]],
    519   [dnl
    520     MHD_CHECK_DEF_AND_ACCEPT(
    521       [[__EXTENSIONS__]], [], [[${mhd_mse_sys_ext_defines}]], [],
    522       [
    523         _MHD_SYS_EXT_VAR_ADD_FLAG([[mhd_mse_sys_ext_defines]], [[mhd_mse_sys_ext_flags]], [[__EXTENSIONS__]])
    524       ]
    525     )dnl
    526   ])
    527 
    528   dnl _NETBSD_SOURCE switch on almost all headers definitions on NetBSD.
    529   MHD_CHECK_DEFINED_MSG([[__NetBSD__]], [[${mhd_mse_sys_ext_defines}]],
    530     [[whether to try _NETBSD_SOURCE macro]],
    531   [dnl
    532     MHD_CHECK_DEF_AND_ACCEPT(
    533       [[_NETBSD_SOURCE]], [], [[${mhd_mse_sys_ext_defines}]], [],
    534       [
    535         _MHD_SYS_EXT_VAR_ADD_FLAG([[mhd_mse_sys_ext_defines]], [[mhd_mse_sys_ext_flags]], [[_NETBSD_SOURCE]])
    536       ]
    537     )dnl
    538   ])
    539 
    540   dnl _BSD_SOURCE currently used only on OpenBSD to unhide functions.
    541   MHD_CHECK_DEFINED_MSG([[__OpenBSD__]], [[${mhd_mse_sys_ext_defines}]],
    542     [[whether to try _BSD_SOURCE macro]],
    543   [dnl
    544     MHD_CHECK_DEF_AND_ACCEPT(
    545       [[_BSD_SOURCE]], [], [[${mhd_mse_sys_ext_defines}]], [],
    546       [
    547         _MHD_SYS_EXT_VAR_ADD_FLAG([[mhd_mse_sys_ext_defines]], [[mhd_mse_sys_ext_flags]], [[_BSD_SOURCE]])
    548       ]
    549     )dnl
    550   ])
    551 
    552   dnl _TANDEM_SOURCE unhides most functions on NonStop OS
    553   dnl (which comes from Tandem Computers decades ago).
    554   MHD_CHECK_DEFINED_MSG([[__TANDEM]], [[${mhd_mse_sys_ext_defines}]],
    555     [[whether to try _TANDEM_SOURCE macro]],
    556   [dnl
    557     MHD_CHECK_DEF_AND_ACCEPT(
    558       [[_TANDEM_SOURCE]], [], [[${mhd_mse_sys_ext_defines}]], [],
    559       [
    560         _MHD_SYS_EXT_VAR_ADD_FLAG([[mhd_mse_sys_ext_defines]], [[mhd_mse_sys_ext_flags]], [[_TANDEM_SOURCE]])
    561       ]
    562     )dnl
    563   ])
    564 
    565   dnl _ALL_SOURCE makes visible POSIX and non-POSIX symbols
    566   dnl on z/OS, AIX and Interix.
    567   AC_CACHE_CHECK([[whether to try _ALL_SOURCE macro]],
    568     [[mhd_cv_macro_try__all_source]], [dnl
    569     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
    570 #if !defined(__TOS_MVS__) && !defined (__INTERIX)
    571 #error Target is not z/OS, AIX or Interix
    572 fail test here %%%@<:@-1@:>@
    573 #endif
    574         ]],[])],
    575       [[mhd_cv_macro_try__all_source="yes"]],
    576       [[mhd_cv_macro_try__all_source="no"]]
    577     )
    578   ])
    579   AS_VAR_IF([[mhd_cv_macro_try__all_source]], [["yes"]],
    580   [dnl
    581     MHD_CHECK_DEF_AND_ACCEPT(
    582       [[_ALL_SOURCE]], [], [[${mhd_mse_sys_ext_defines}]], [],
    583       [
    584         _MHD_SYS_EXT_VAR_ADD_FLAG([[mhd_mse_sys_ext_defines]], [[mhd_mse_sys_ext_flags]], [[_ALL_SOURCE]])
    585       ]
    586     )dnl
    587   ])
    588 
    589   dnl _QNX_SOURCE enabled all available symbols in QNX RTOS.
    590   AC_CACHE_CHECK([[whether to try _QNX_SOURCE macro]],
    591     [[mhd_cv_macro_try__qnx_source]], [dnl
    592     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
    593 #if !defined(__QNX__) && !defined (__QNXNTO__)
    594 #error Target is not QNX RTOS
    595 fail test here %%%@<:@-1@:>@
    596 #endif
    597         ]],[])],
    598       [[mhd_cv_macro_try__qnx_source="yes"]],
    599       [[mhd_cv_macro_try__qnx_source="no"]]
    600     )
    601   ])
    602   AS_VAR_IF([[mhd_cv_macro_try__qnx_source]], [["yes"]],
    603   [dnl
    604     MHD_CHECK_DEF_AND_ACCEPT(
    605       [[_QNX_SOURCE]], [], [[${mhd_mse_sys_ext_defines}]], [],
    606       [
    607         _MHD_SYS_EXT_VAR_ADD_FLAG([[mhd_mse_sys_ext_defines]], [[mhd_mse_sys_ext_flags]], [[_QNX_SOURCE]])
    608       ]
    609     )dnl
    610   ])
    611 
    612 ])dnl m4_define _MHD_SYS_EXT_PLATFORM_VISIBILITY
    613 
    614 
    615 #
    616 # _MHD_SYS_EXT_VAR_ADD_FLAG(DEFINES_VAR, FLAGS_VAR,
    617 #                           FLAG, [FLAG-VALUE = 1])
    618 #
    619 # Internal macro, only to be used from MHD_SYS_EXT, _MHD_XOPEN_VAR_ADD
    620 
    621 m4_define([_MHD_SYS_EXT_VAR_ADD_FLAG], [dnl
    622   m4_ifnblank([$4],[dnl
    623     ]m4_normalize([$1])[="[$]{]m4_normalize([$1])[}[#define ]m4_normalize($3) ]m4_normalize([$4])[
    624 "
    625     AS_IF([test "x[$]{]m4_normalize([$2])[}" = "x"],
    626       []m4_normalize([$2])[="]m4_normalize([$3])[=]m4_normalize([$4])["],
    627       []m4_normalize([$2])[="[$]{]m4_normalize([$2])[} ]m4_normalize([$3])[=]m4_normalize([$4])["]
    628     )dnl
    629   ], [dnl
    630     ]m4_normalize([$1])[="[$]{]m4_normalize([$1])[}[#define ]m4_normalize($3) 1
    631 "
    632     AS_IF([test "x[$]{]m4_normalize([$2])[}" = "x"],
    633       []m4_normalize([$2])[="]m4_normalize([$3])["],
    634       []m4_normalize([$2])[="[$]{]m4_normalize([$2])[} ]m4_normalize([$3])["]
    635     )dnl
    636   ])dnl
    637 ])
    638 
    639 #
    640 # _MHD_VAR_IF(VAR, VALUE, [IF-EQ], [IF-NOT-EQ])
    641 #
    642 # Same as AS_VAR_IF, except that it expands to nothing if
    643 # both IF-EQ and IF-NOT-EQ are empty.
    644 
    645 m4_define([_MHD_VAR_IF],[dnl
    646 m4_ifnblank([$3$4],[dnl
    647 AS_VAR_IF([$1],[$2],[$3],[$4])])])
    648 
    649 
    650 # SYNOPSIS
    651 #
    652 # _MHD_CHECK_POSIX2024(DEFINES_VAR, FLAGS_VAR,
    653 #                      [EXT_DEFINES],
    654 #                      [ACTION-IF-AVAILABLE],
    655 #                      [ACTION-IF-NOT-AVAILABLE])
    656 #
    657 #
    658 AC_DEFUN([_MHD_CHECK_POSIX2024], [dnl
    659   AC_CACHE_CHECK([headers for POSIX.1-2024/SUSv5 features],
    660     [[mhd_cv_headers_posix2024]], [dnl
    661       _MHD_CHECK_POSIX_FEATURES_SINGLE([
    662 _MHD_BASIC_INCLUDES
    663 [
    664 /* Check will be passed if ALL features are available 
    665  * and failed if ANY feature is not available. */
    666 int main()
    667 {
    668 
    669 #if !defined(__linux__) && !defined(__apple__) && !defined(__CYGWIN__)
    670 #ifndef FD_CLOFORK
    671 #error FD_CLOFORK must be defined with POSIX.1-2024
    672 fail test here %%%@<:@-1@:>@
    673 #endif
    674 #endif
    675 
    676 #ifndef memmem
    677   (void) memmem;
    678 #endif
    679 
    680 #ifndef strlcpy
    681   (void) strlcpy;
    682 #endif
    683 
    684 #ifndef strlcat 
    685   (void) strlcat;
    686 #endif
    687 
    688 #if !defined(__applce__)
    689 #ifndef pipe2 
    690   (void) pipe2;
    691 #endif
    692 #endif
    693 
    694 #if !defined(__applce__)
    695 #ifndef getentropy 
    696   (void) getentropy;
    697 #endif
    698 #endif
    699 
    700 /* gmtime_r() becomes mandatory in POSIX.1-2008. */
    701 #ifndef gmtime_r
    702   (void) gmtime_r;
    703 #endif
    704 
    705   return 0;
    706 }
    707         ]],
    708         [$3], [[800]],
    709         [[mhd_cv_headers_posix2024]]dnl
    710       )
    711     ]
    712   )
    713   AS_CASE([${mhd_cv_headers_posix2024}],
    714     [[available*]],
    715     [
    716       AS_CASE([[${mhd_cv_headers_posix2024}]], [[*"does not work with _XOPEN_SOURCE"*]], [[:]],
    717         [_MHD_SYS_EXT_VAR_ADD_FLAG([$1],[$2],[[_XOPEN_SOURCE]],[[800]])]
    718       )
    719       $4
    720     ],
    721     [$5]
    722   )
    723 ])
    724 
    725 
    726 # SYNOPSIS
    727 #
    728 # _MHD_CHECK_POSIX2008(DEFINES_VAR, FLAGS_VAR,
    729 #                      [EXT_DEFINES],
    730 #                      [ACTION-IF-AVAILABLE],
    731 #                      [ACTION-IF-NOT-AVAILABLE])
    732 #
    733 #
    734 AC_DEFUN([_MHD_CHECK_POSIX2008], [dnl
    735   AC_CACHE_CHECK([headers for POSIX.1-2008/SUSv4 features],
    736     [[mhd_cv_headers_posix2008]], [dnl
    737       _MHD_CHECK_POSIX_FEATURES_SINGLE([
    738 _MHD_BASIC_INCLUDES
    739 [
    740 /* Check will be passed if ALL features are available 
    741  * and failed if ANY feature is not available. */
    742 int main()
    743 {
    744 
    745 #ifndef stpncpy
    746   (void) stpncpy;
    747 #endif
    748 #ifndef strnlen
    749   (void) strnlen;
    750 #endif
    751 
    752 #if !defined(__NetBSD__) && !defined(__OpenBSD__)
    753 /* NetBSD and OpenBSD didn't implement wcsnlen() for some reason. */
    754 #ifndef wcsnlen
    755   (void) wcsnlen;
    756 #endif
    757 #endif
    758 
    759 #ifdef __CYGWIN__
    760 /* The only depend function on Cygwin, but missing on some other platforms */
    761 #ifndef strndup
    762   (void) strndup;
    763 #endif
    764 #endif
    765 
    766 #ifndef __sun
    767 /* illumos forget to uncomment some _XPG7 macros. */
    768 #ifndef renameat
    769   (void) renameat;
    770 #endif
    771 
    772 #ifndef getline
    773   (void) getline;
    774 #endif
    775 #endif /* ! __sun */
    776 
    777 /* gmtime_r() becomes mandatory only in POSIX.1-2008. */
    778 #ifndef gmtime_r
    779   (void) gmtime_r;
    780 #endif
    781 
    782 /* unsetenv() actually defined in POSIX.1-2001 so it
    783  * must be present with _XOPEN_SOURCE == 700 too. */
    784 #ifndef unsetenv
    785   (void) unsetenv;
    786 #endif
    787 
    788   return 0;
    789 }
    790         ]],
    791         [$3], [[700]],
    792         [[mhd_cv_headers_posix2008]]dnl
    793       )
    794     ]
    795   )
    796   AS_CASE([${mhd_cv_headers_posix2008}],
    797     [[available*]],
    798     [
    799       AS_CASE([[${mhd_cv_headers_posix2008}]], [[*"does not work with _XOPEN_SOURCE"*]], [[:]],
    800         [_MHD_SYS_EXT_VAR_ADD_FLAG([$1],[$2],[[_XOPEN_SOURCE]],[[700]])]
    801       )
    802       $4
    803     ],
    804     [$5]
    805   )
    806 ])
    807 
    808 
    809 # SYNOPSIS
    810 #
    811 # _MHD_CHECK_POSIX2001(DEFINES_VAR, FLAGS_VAR,
    812 #                      [EXT_DEFINES],
    813 #                      [ACTION-IF-AVAILABLE],
    814 #                      [ACTION-IF-NOT-AVAILABLE])
    815 #
    816 #
    817 AC_DEFUN([_MHD_CHECK_POSIX2001], [dnl
    818   AC_CACHE_CHECK([headers for POSIX.1-2001/SUSv3 features],
    819     [[mhd_cv_headers_posix2001]], [
    820       _MHD_CHECK_POSIX_FEATURES_SINGLE([
    821 _MHD_BASIC_INCLUDES
    822 [
    823 /* Check will be passed if ALL features are available
    824  * and failed if ANY feature is not available. */
    825 int main()
    826 {
    827 
    828 #ifndef setenv
    829   (void) setenv;
    830 #endif
    831 
    832 #ifndef __NetBSD__
    833 #ifndef vsscanf
    834   (void) vsscanf;
    835 #endif
    836 #endif
    837 
    838 /* Availability of next features varies, but they all must be present
    839  * on platform with support for _XOPEN_SOURCE = 600. */
    840 
    841 /* vsnprintf() should be available with _XOPEN_SOURCE >= 500, but some platforms
    842  * provide it only with _POSIX_C_SOURCE >= 200112 (autodefined when
    843  * _XOPEN_SOURCE >= 600) where specification of vsnprintf() is aligned with
    844  * ISO C99 while others platforms defined it with even earlier standards. */
    845 #ifndef vsnprintf
    846   (void) vsnprintf;
    847 #endif
    848 
    849 /* On platforms that prefer POSIX over X/Open, fseeko() is available
    850  * with _POSIX_C_SOURCE >= 200112 (autodefined when _XOPEN_SOURCE >= 600).
    851  * On other platforms it should be available with _XOPEN_SOURCE >= 500. */
    852 #ifndef fseeko
    853   (void) fseeko;
    854 #endif
    855 
    856 /* F_GETOWN must be defined with _XOPEN_SOURCE >= 600, but some platforms
    857  * define it with _XOPEN_SOURCE >= 500. */
    858 #ifndef F_GETOWN
    859 #error F_GETOWN is not defined
    860 fail test here %%%@<:@-1@:>@
    861 #endif
    862   return 0;
    863 }
    864         ]],
    865         [$3],[[600]],[[mhd_cv_headers_posix2001]]dnl
    866       )
    867     ]
    868   )
    869   AS_CASE([${mhd_cv_headers_posix2001}],
    870     [[available*]],
    871     [
    872       AS_CASE([[${mhd_cv_headers_posix2001}]], [[*"does not work with _XOPEN_SOURCE"*]], [[:]],
    873         [_MHD_SYS_EXT_VAR_ADD_FLAG([$1],[$2],[[_XOPEN_SOURCE]],[[600]])]
    874       )
    875       $4
    876     ],
    877     [$5]
    878   )
    879 ])
    880 
    881 
    882 # SYNOPSIS
    883 #
    884 # _MHD_CHECK_SUSV2(DEFINES_VAR, FLAGS_VAR,
    885 #                  [EXT_DEFINES],
    886 #                  [ACTION-IF-AVAILABLE],
    887 #                  [ACTION-IF-NOT-AVAILABLE])
    888 #
    889 #
    890 AC_DEFUN([_MHD_CHECK_SUSV2], [dnl
    891   AC_CACHE_CHECK([headers for SUSv2/XPG5 features],
    892     [[mhd_cv_headers_susv2]], [
    893       _MHD_CHECK_POSIX_FEATURES_SINGLE([
    894 _MHD_BASIC_INCLUDES
    895 [
    896 /* Check will be passed if ALL features are available
    897  * and failed if ANY feature is not available. */
    898 int main()
    899 {
    900 /* It's not easy to write reliable test for _XOPEN_SOURCE = 500 as
    901  * platforms not always precisely follow this standard and some
    902  * functions are already deprecated in later standards. */
    903 
    904 /* Availability of next features varies, but they all must be present
    905  * on platform with correct support for _XOPEN_SOURCE = 500. */
    906 
    907 /* Mandatory with _XOPEN_SOURCE >= 500 but as XSI extension available
    908  * with much older standards. */
    909 #ifndef ftruncate
    910   (void) ftruncate;
    911 #endif
    912 
    913 /* Added with _XOPEN_SOURCE >= 500 but was available in some standards
    914  * before. XSI extension. */
    915 #ifndef pread
    916   (void) pread;
    917 #endif
    918 
    919 #ifndef __APPLE__
    920 /* Actually comes from XPG4v2 and must be available
    921  * with _XOPEN_SOURCE >= 500 as well. */
    922 #ifndef symlink
    923   (void) symlink;
    924 #endif
    925 
    926 /* Actually comes from XPG4v2 and must be available
    927  * with _XOPEN_SOURCE >= 500 as well. XSI extension. */
    928 #ifndef strdup
    929   (void) strdup;
    930 #endif
    931 #endif /* ! __APPLE__ */
    932   return 0;
    933 }
    934         ]],
    935         [$3],[[500]],[[mhd_cv_headers_susv2]]dnl
    936       )
    937     ]
    938   )
    939   AS_CASE([${mhd_cv_headers_susv2}],
    940     [[available*]],
    941     [
    942       AS_CASE([[${mhd_cv_headers_susv2}]], [[*"does not work with _XOPEN_SOURCE"*]], [[:]],
    943         [_MHD_SYS_EXT_VAR_ADD_FLAG([$1],[$2],[[_XOPEN_SOURCE]],[[500]])]
    944       )
    945       $4
    946     ],
    947     [$5]
    948   )
    949 ])
    950 
    951 
    952 # SYNOPSIS
    953 #
    954 # _MHD_CHECK_POSIX_FEATURES_SINGLE(FEATURES_TEST,
    955 #                                  EXT_DEFINES,
    956 #                                  _XOPEN_SOURCE-VALUE,
    957 #                                  VAR-RESULT)
    958 
    959 AC_DEFUN([_MHD_CHECK_POSIX_FEATURES_SINGLE], [dnl
    960   AS_VAR_PUSHDEF([avail_Var], [mhd_cpsxfs_tmp_features_available])dnl
    961   AS_VAR_PUSHDEF([ext_Var], [mhd_cpsxfs_tmp_extentions_allowed])dnl
    962   AS_VAR_PUSHDEF([xopen_Var], [mhd_cpsxfs_tmp_src_xopen_allowed])dnl
    963   AS_VAR_PUSHDEF([dislb_Var], [mhd_cpsxfs_tmp_features_disableable])dnl
    964   AS_UNSET([avail_Var])
    965   AS_UNSET([ext_Var])
    966   AS_UNSET([xopen_Var])
    967   AS_UNSET([dislb_Var])
    968   _MHD_CHECK_POSIX_FEATURES([$1], [$2], [$3], [avail_Var], [ext_Var], [xopen_Var], [dislb_Var])
    969   AS_VAR_IF([avail_Var], ["yes"],
    970     [
    971       AS_VAR_IF([dislb_Var], ["yes"],
    972         [
    973           AS_VAR_IF([ext_Var], ["required"],
    974             [
    975               AS_VAR_IF([xopen_Var], ["allowed"],
    976                 [
    977                   AS_VAR_SET(m4_normalize([$4]), ["available, activated by extension macro, works with _XOPEN_SOURCE=]m4_normalize([$3])["])
    978                 ],
    979                 [
    980                   AS_VAR_SET(m4_normalize([$4]), ["available, activated by extension macro, does not work with _XOPEN_SOURCE=]m4_normalize([$3])["])
    981                 ]
    982               )
    983             ],
    984             [
    985               AS_VAR_IF([ext_Var], ["allowed"],
    986                 [
    987                   AS_VAR_IF([xopen_Var], ["required"],
    988                     [
    989                       AS_VAR_SET(m4_normalize([$4]), ["available, activated by _XOPEN_SOURCE=]m4_normalize([$3])[, works with extension macro"])
    990                     ],
    991                     [
    992                       AS_VAR_IF([xopen_Var], ["allowed"],
    993                         [
    994                           AS_VAR_SET(m4_normalize([$4]), ["available, works with _XOPEN_SOURCE=]m4_normalize([$3])[, works with extension macro"])
    995                         ],
    996                         [
    997                           AS_VAR_SET(m4_normalize([$4]), ["available, works with extension macro, does not work with _XOPEN_SOURCE=]m4_normalize([$3])["])
    998                         ]
    999                       )
   1000                     ]
   1001                   )
   1002                 ],
   1003                 [
   1004                   AS_VAR_IF([xopen_Var], ["required"],
   1005                     [
   1006                       AS_VAR_SET(m4_normalize([$4]), ["available, activated by _XOPEN_SOURCE=]m4_normalize([$3])[, does not work with extension macro"])
   1007                     ],
   1008                     [
   1009                       AS_VAR_IF([xopen_Var], ["allowed"],
   1010                         [
   1011                           AS_VAR_SET(m4_normalize([$4]), ["available, works with _XOPEN_SOURCE=]m4_normalize([$3])[, does not work with extension macro"])
   1012                         ],
   1013                         [
   1014                           AS_VAR_SET(m4_normalize([$4]), ["available, does not work with _XOPEN_SOURCE=]m4_normalize([$3])[, does not work with extension macro"])
   1015                         ]
   1016                       )
   1017                     ]
   1018                   )
   1019                 ]
   1020               )
   1021             ]
   1022           )
   1023         ],
   1024         [
   1025           AS_VAR_SET(m4_normalize([$4]), ["available, works always"])
   1026         ]
   1027       )
   1028     ],
   1029     [
   1030       AS_VAR_SET(m4_normalize([$4]), ["not available"])
   1031     ]
   1032   )
   1033   AS_UNSET([dislb_Var])
   1034   AS_UNSET([xopen_Var])
   1035   AS_UNSET([ext_Var])
   1036   AS_UNSET([avail_Var])
   1037   AS_VAR_POPDEF([dislb_Var])dnl
   1038   AS_VAR_POPDEF([xopen_Var])dnl
   1039   AS_VAR_POPDEF([ext_Var])dnl
   1040   AS_VAR_POPDEF([avail_Var])dnl
   1041 ])
   1042 
   1043 # SYNOPSIS
   1044 #
   1045 # _MHD_CHECK_POSIX_FEATURES(FEATURES_TEST, EXT_DEFINES, _XOPEN_SOURCE-VALUE,
   1046 #                           [VAR-FEATURES-AVAILABLE-YES_NO],
   1047 #                           [VAR-EXTENSIONS-REQUIRED_NOT-ALLOWED_ALLOWED],
   1048 #                           [VAR-XOPEN-REQUIRED_NOT-ALLOWED_ALLOWED],
   1049 #                           [VAR-FEATURES-DISABLEABLE-YES_NO])
   1050 
   1051 AC_DEFUN([_MHD_CHECK_POSIX_FEATURES], [dnl
   1052   AS_VAR_PUSHDEF([src_Var], [mhd_cpsxf_tmp_src_variable])dnl
   1053   AS_VAR_PUSHDEF([defs_Var], [mhd_cpsxf_tmp_defs_variable])dnl
   1054   AS_VAR_SET([src_Var],["
   1055 $1
   1056 "])
   1057   dnl To reduce 'configure' size
   1058   AS_VAR_SET([defs_Var],["
   1059 $2
   1060 "])
   1061   dnl To reduce 'configure' size
   1062 
   1063   dnl Some platforms enable most features when no
   1064   dnl specific mode is requested by macro.
   1065   dnl Check whether features test works without _XOPEN_SOURCE and
   1066   dnl with disabled extensions (undefined most of
   1067   dnl predefined macros for specific requested mode).
   1068   mhd_SYS_EXT_SAVE_CFLAGS="$CFLAGS"
   1069   CFLAGS="$CFLAGS $ac_[]_AC_LANG_ABBREV[]_undeclared_builtin_options"
   1070   AC_COMPILE_IFELSE([AC_LANG_SOURCE([
   1071 _MHD_UNDEF_ALL_EXT
   1072 $src_Var
   1073     ])],
   1074     [dnl
   1075       _AS_ECHO_LOG([[Checked features work with undefined all extensions and without _XOPEN_SOURCE]])
   1076       AS_VAR_SET(m4_normalize([$4]),["yes"]) # VAR-FEATURES-AVAILABLE-YES_NO
   1077 
   1078       dnl Check whether features will work extensions
   1079       AC_COMPILE_IFELSE([AC_LANG_SOURCE([
   1080 $defs_Var
   1081 $src_Var
   1082         ])],
   1083         [dnl
   1084           _AS_ECHO_LOG([[Checked features work with extensions]])
   1085           AS_VAR_SET(m4_normalize([$5]),["allowed"]) # VAR-EXTENSIONS-REQUIRED_NOT-ALLOWED_ALLOWED
   1086           dnl Check whether features will work with _XOPEN_SOURCE
   1087           AC_COMPILE_IFELSE([AC_LANG_SOURCE([
   1088 $defs_Var
   1089 [#define _XOPEN_SOURCE ]]m4_normalize([$3])[
   1090 $src_Var
   1091             ])],
   1092             [dnl
   1093               _AS_ECHO_LOG([Checked features work with extensions and with _XOPEN_SOURCE=]m4_normalize([$3])[])
   1094               AS_VAR_SET(m4_normalize([$6]),["allowed"]) # VAR-XOPEN-REQUIRED_NOT-ALLOWED_ALLOWED
   1095               dnl Check whether features could be disabled
   1096               dnl Request oldest POSIX mode and strict ANSI mode
   1097               AC_COMPILE_IFELSE([AC_LANG_SOURCE([
   1098 _MHD_UNDEF_ALL_EXT
   1099 [#define _POSIX_C_SOURCE 1]
   1100 [#define  _ANSI_SOURCE 1]
   1101 $src_Var
   1102                 ])],
   1103                 [dnl
   1104                   _AS_ECHO_LOG([[Checked features work with disabled extensions, with _POSIX_C_SOURCE=1 and _ANSI_SOURCE=1]])
   1105                   AS_VAR_SET(m4_normalize([$7]),["no"]) # VAR-FEATURES-DISABLEABLE-YES_NO
   1106                 ],
   1107                 [dnl
   1108                   _AS_ECHO_LOG([[Checked features DO NOT work with disabled extensions, with _POSIX_C_SOURCE=1 and _ANSI_SOURCE=1]])
   1109                   AS_VAR_SET(m4_normalize([$7]),["yes"]) # VAR-FEATURES-DISABLEABLE-YES_NO
   1110                 ]
   1111               )
   1112             ],
   1113             [dnl
   1114               _AS_ECHO_LOG([Checked features DO NOT work with extensions and with _XOPEN_SOURCE=]m4_normalize([$3])[])
   1115               AS_VAR_SET(m4_normalize([$6]),["not allowed"])  # VAR-XOPEN-REQUIRED_NOT-ALLOWED_ALLOWED
   1116               AS_VAR_SET(m4_normalize([$7]),["yes"]) # VAR-FEATURES-DISABLEABLE-YES_NO
   1117             ]
   1118           )
   1119         ],
   1120         [dnl
   1121           _AS_ECHO_LOG([[Checked features DO NOT work with extensions]])
   1122           AS_VAR_SET(m4_normalize([$7]),["yes"]) # VAR-FEATURES-DISABLEABLE-YES_NO
   1123           dnl Check whether features work with _XOPEN_SOURCE
   1124           AC_COMPILE_IFELSE([AC_LANG_SOURCE([
   1125 [#define _XOPEN_SOURCE ]m4_normalize($3)
   1126 $src_Var
   1127             ])],
   1128             [dnl
   1129               _AS_ECHO_LOG([Checked features work with _XOPEN_SOURCE=]m4_normalize([$3])[])
   1130               dnl Check default state (without enabling/disabling)
   1131               AC_COMPILE_IFELSE([AC_LANG_SOURCE([
   1132 $src_Var
   1133                 ])],
   1134                 [dnl
   1135                   _AS_ECHO_LOG([[Checked features work by default]])
   1136                   AS_VAR_SET(m4_normalize([$6]),["allowed"]) # VAR-XOPEN-REQUIRED_NOT-ALLOWED_ALLOWED
   1137                 ],
   1138                 [dnl
   1139                   _AS_ECHO_LOG([[Checked features DO NOT by default]])
   1140                   AS_VAR_SET(m4_normalize([$6]),["required"]) # VAR-XOPEN-REQUIRED_NOT-ALLOWED_ALLOWED
   1141                 ]
   1142               )
   1143               dnl Check whether features work with _XOPEN_SOURCE and extensions
   1144               AC_COMPILE_IFELSE([AC_LANG_SOURCE([
   1145 $defs_Var
   1146 [#define _XOPEN_SOURCE] ]m4_normalize([$3])[
   1147 $src_Var
   1148                 ])],
   1149                 [dnl
   1150                   _AS_ECHO_LOG([[Checked features work with _XOPEN_SOURCE and extensions]])
   1151                   AS_VAR_SET(m4_normalize([$5]),["allowed"]) # VAR-EXTENSIONS-REQUIRED_NOT-ALLOWED_ALLOWED
   1152                 ],
   1153                 [dnl
   1154                   _AS_ECHO_LOG([[Checked features DO NOT work with _XOPEN_SOURCE and extensions]])
   1155                   AS_VAR_SET(m4_normalize([$5]),["not allowed"]) # VAR-EXTENSIONS-REQUIRED_NOT-ALLOWED_ALLOWED
   1156                 ]
   1157               )
   1158             ],
   1159             [dnl
   1160               _AS_ECHO_LOG([Checked features DO NOT work with _XOPEN_SOURCE=]m4_normalize([$3])[])
   1161               AS_VAR_SET(m4_normalize([$5]),["not allowed"]) # VAR-EXTENSIONS-REQUIRED_NOT-ALLOWED_ALLOWED
   1162               AS_VAR_SET(m4_normalize([$6]),["not allowed"]) # VAR-XOPEN-REQUIRED_NOT-ALLOWED_ALLOWED
   1163             ]
   1164           )
   1165         ]
   1166       )
   1167     ],
   1168     [dnl
   1169       _AS_ECHO_LOG([[Checked features DO NOT work with undefined all extensions and without _XOPEN_SOURCE]])
   1170       dnl Let's find the way to enable POSIX features
   1171       AC_COMPILE_IFELSE([AC_LANG_SOURCE([
   1172 $defs_Var
   1173 $src_Var
   1174         ])],
   1175         [dnl
   1176           _AS_ECHO_LOG([[Checked features work with extensions]])
   1177           AS_VAR_SET(m4_normalize([$4]),["yes"]) # VAR-FEATURES-AVAILABLE-YES_NO
   1178           AS_VAR_SET(m4_normalize([$7]),["yes"]) # VAR-FEATURES-DISABLEABLE-YES_NO
   1179           dnl Check default state (without enabling/disabling)
   1180           AC_COMPILE_IFELSE([AC_LANG_SOURCE([
   1181 $src_Var
   1182             ])],
   1183             [dnl
   1184               _AS_ECHO_LOG([[Checked features work by default]])
   1185               AS_VAR_SET(m4_normalize([$5]),["allowed"]) # VAR-EXTENSIONS-REQUIRED_NOT-ALLOWED_ALLOWED
   1186             ],
   1187             [dnl
   1188               _AS_ECHO_LOG([[Checked features DO NOT by default]])
   1189               AS_VAR_SET(m4_normalize([$5]),["required"]) # VAR-EXTENSIONS-REQUIRED_NOT-ALLOWED_ALLOWED
   1190             ]
   1191           )
   1192           dnl Check whether features work with extensions and _XOPEN_SOURCE
   1193           AC_COMPILE_IFELSE([AC_LANG_SOURCE([
   1194 $defs_Var
   1195 [#define _XOPEN_SOURCE] ]m4_normalize([$3])[
   1196 $src_Var
   1197             ])],
   1198             [dnl
   1199               _AS_ECHO_LOG([Checked features work with extensions and _XOPEN_SOURCE=]m4_normalize([$3])[])
   1200               AS_VAR_SET(m4_normalize([$6]),["allowed"]) # VAR-XOPEN-REQUIRED_NOT-ALLOWED_ALLOWED
   1201             ],
   1202             [dnl
   1203               _AS_ECHO_LOG([Checked features DO NOT work with extensions and _XOPEN_SOURCE=]m4_normalize([$3])[])
   1204               AS_VAR_SET(m4_normalize([$6]),["not allowed"]) # VAR-XOPEN-REQUIRED_NOT-ALLOWED_ALLOWED
   1205             ]
   1206           )
   1207         ],
   1208         [dnl
   1209           _AS_ECHO_LOG([[Checked features DO NOT work with extensions]])
   1210           dnl Check whether features work with _XOPEN_SOURCE
   1211           AC_COMPILE_IFELSE([AC_LANG_SOURCE([
   1212 [#define _XOPEN_SOURCE] ]m4_normalize([$3])[
   1213 $src_Var
   1214             ])],
   1215             [dnl
   1216               _AS_ECHO_LOG([Checked features work with _XOPEN_SOURCE=]m4_normalize([$3])[])
   1217               AS_VAR_SET(m4_normalize([$4]),["yes"]) # VAR-FEATURES-AVAILABLE-YES_NO
   1218               dnl Check default state (without enabling/disabling)
   1219               AC_COMPILE_IFELSE([AC_LANG_SOURCE([
   1220 $src_Var
   1221                 ])],
   1222                 [dnl
   1223                   _AS_ECHO_LOG([[Checked features work by default]])
   1224                   AS_VAR_SET(m4_normalize([$6]),["allowed"]) # VAR-XOPEN-REQUIRED_NOT-ALLOWED_ALLOWED
   1225                 ],
   1226                 [dnl
   1227                   _AS_ECHO_LOG([[Checked features DO NOT by default]])
   1228                   AS_VAR_SET(m4_normalize([$6]),["required"]) # VAR-XOPEN-REQUIRED_NOT-ALLOWED_ALLOWED
   1229                 ]
   1230               )
   1231               dnl Check whether features work with _XOPEN_SOURCE and extensions
   1232               AC_COMPILE_IFELSE([AC_LANG_SOURCE([
   1233 $defs_Var
   1234 [#define _XOPEN_SOURCE] ]m4_normalize([$3])[
   1235 $src_Var
   1236                 ])],
   1237                 [dnl
   1238                   _AS_ECHO_LOG([Checked features work with _XOPEN_SOURCE=]m4_normalize([$3])[ and extensions])
   1239                   AS_VAR_SET(m4_normalize([$5]),["allowed"]) # VAR-EXTENSIONS-REQUIRED_NOT-ALLOWED_ALLOWED
   1240                 ],
   1241                 [dnl
   1242                   _AS_ECHO_LOG([Checked features DO NOT work with _XOPEN_SOURCE=]m4_normalize([$3])[ and extensions])
   1243                   AS_VAR_SET(m4_normalize([$5]),["not allowed"]) # VAR-EXTENSIONS-REQUIRED_NOT-ALLOWED_ALLOWED
   1244                 ]
   1245               )
   1246             ],
   1247             [dnl
   1248               _AS_ECHO_LOG([Checked features DO NOT work with _XOPEN_SOURCE=]m4_normalize([$3])[])
   1249               AS_VAR_SET(m4_normalize([$4]),["no"]) # VAR-FEATURES-AVAILABLE-YES_NO
   1250             ]
   1251           )
   1252         ]
   1253       )
   1254     ]
   1255   )
   1256   CFLAGS="$mhd_SYS_EXT_SAVE_CFLAGS"
   1257   AS_UNSET([mhd_SYS_EXT_SAVE_CFLAGS])
   1258   AS_UNSET([defs_Var])
   1259   AS_UNSET([src_Var])
   1260   AS_VAR_POPDEF([defs_Var])dnl
   1261   AS_VAR_POPDEF([src_Var])dnl
   1262 ])
   1263 
   1264 
   1265 #
   1266 # MHD_CHECK_HEADER_PRESENCE(headername.h)
   1267 #
   1268 # Check only by preprocessor whether header file is present.
   1269 
   1270 AC_DEFUN([MHD_CHECK_HEADER_PRESENCE], [dnl
   1271   AC_PREREQ([2.64])dnl for AS_VAR_PUSHDEF, AS_VAR_SET
   1272   AS_VAR_PUSHDEF([mhd_cache_Var],[mhd_cv_header_[]$1[]_present])dnl
   1273   AC_CACHE_CHECK([for presence of $1], [mhd_cache_Var], [dnl
   1274     dnl Hack autoconf to get pure result of only single header presence
   1275     cat > conftest.$ac_ext <<_ACEOF
   1276 @%:@include <[]$1[]>
   1277 _ACEOF
   1278     AC_PREPROC_IFELSE([],
   1279       [AS_VAR_SET([mhd_cache_Var],[["yes"]])],
   1280       [AS_VAR_SET([mhd_cache_Var],[["no"]])]
   1281     )
   1282     rm -f conftest.$ac_ext
   1283   ])
   1284   AS_VAR_POPDEF([mhd_cache_Var])dnl
   1285 ])
   1286 
   1287 
   1288 #
   1289 # MHD_CHECK_HEADERS_PRESENCE(oneheader.h otherheader.h ...)
   1290 #
   1291 # Check each specified header in whitespace-separated list for presence.
   1292 
   1293 AC_DEFUN([MHD_CHECK_HEADERS_PRESENCE], [dnl
   1294   AC_PREREQ([2.60])dnl for m4_foreach_w
   1295   m4_foreach_w([mhd_chk_Header], [$1],
   1296     [MHD_CHECK_HEADER_PRESENCE(m4_defn([mhd_chk_Header]))]
   1297   )dnl
   1298 ])
   1299 
   1300 
   1301 #
   1302 # MHD_CHECK_BASIC_HEADERS_PRESENCE
   1303 #
   1304 # Check basic headers for presence.
   1305 
   1306 AC_DEFUN([MHD_CHECK_BASIC_HEADERS_PRESENCE], [dnl
   1307   MHD_CHECK_HEADERS_PRESENCE([sys/types.h stdint.h stdio.h stdlib.h wchar.h string.h strings.h time.h fcntl.h unistd.h])
   1308 ])
   1309 
   1310 
   1311 #
   1312 # _MHD_SET_BASIC_INCLUDES
   1313 #
   1314 # Internal preparatory macro.
   1315 
   1316 AC_DEFUN([_MHD_SET_BASIC_INCLUDES], [dnl
   1317   AC_REQUIRE([MHD_CHECK_BASIC_HEADERS_PRESENCE])dnl
   1318   AS_IF([[test -z "$mhd_basic_headers_includes"]], [dnl
   1319     AS_VAR_IF([mhd_cv_header_sys_types_h_present], [["yes"]],
   1320       [[mhd_basic_headers_includes="${mhd_basic_headers_includes}
   1321 #include <sys/types.h>
   1322 "     ]]
   1323     )
   1324     AS_VAR_IF([mhd_cv_header_stdint_h_present], [["yes"]],
   1325       [[mhd_basic_headers_includes="${mhd_basic_headers_includes}
   1326 #include <stdint.h>
   1327 "     ]]
   1328     )
   1329     AS_VAR_IF([mhd_cv_header_stdio_h_present], [["yes"]],
   1330       [[mhd_basic_headers_includes="
   1331 #include <stdio.h>
   1332 "     ]],[[mhd_basic_headers_includes=""]]
   1333     )
   1334     AS_VAR_IF([mhd_cv_header_stdlib_h_present], [["yes"]],
   1335       [[mhd_basic_headers_includes="${mhd_basic_headers_includes}
   1336 #include <stdlib.h>
   1337 "     ]]
   1338     )
   1339     AS_VAR_IF([mhd_cv_header_wchar_h_present], [["yes"]],
   1340       [[mhd_basic_headers_includes="${mhd_basic_headers_includes}
   1341 #include <wchar.h>
   1342 "     ]]
   1343     )
   1344     AS_VAR_IF([mhd_cv_header_string_h_present], [["yes"]],
   1345       [[mhd_basic_headers_includes="${mhd_basic_headers_includes}
   1346 #include <string.h>
   1347 "     ]]
   1348     )
   1349     AS_VAR_IF([mhd_cv_header_strings_h_present], [["yes"]],
   1350       [[mhd_basic_headers_includes="${mhd_basic_headers_includes}
   1351 #include <strings.h>
   1352 "     ]]
   1353     )
   1354     AS_VAR_IF([mhd_cv_header_time_h_present], [["yes"]],
   1355       [[mhd_basic_headers_includes="${mhd_basic_headers_includes}
   1356 #include <time.h>
   1357 "     ]]
   1358     )
   1359     AS_VAR_IF([mhd_cv_header_fcntl_h_present], [["yes"]],
   1360       [[mhd_basic_headers_includes="${mhd_basic_headers_includes}
   1361 #include <fcntl.h>
   1362 "     ]]
   1363     )
   1364     AS_VAR_IF([mhd_cv_header_unistd_h_present], [["yes"]],
   1365       [[mhd_basic_headers_includes="${mhd_basic_headers_includes}
   1366 #include <unistd.h>
   1367 "     ]]
   1368     )
   1369   ])dnl
   1370 ])
   1371 
   1372 
   1373 #
   1374 # _MHD_BASIC_INCLUDES
   1375 #
   1376 # Internal macro. Output set of basic includes.
   1377 
   1378 AC_DEFUN([_MHD_BASIC_INCLUDES], [AC_REQUIRE([_MHD_SET_BASIC_INCLUDES])dnl
   1379 [ /* Start of MHD basic test includes */
   1380 $mhd_basic_headers_includes /* End of MHD basic test includes */
   1381 ]])
   1382 
   1383 
   1384 #
   1385 # MHD_CHECK_BASIC_HEADERS([PROLOG], [ACTION-IF-OK], [ACTION-IF-FAIL])
   1386 #
   1387 # Check whether basic headers can be compiled with specified prolog.
   1388 
   1389 AC_DEFUN([MHD_CHECK_BASIC_HEADERS], [dnl
   1390   AC_COMPILE_IFELSE([dnl
   1391     AC_LANG_PROGRAM([m4_n([$1])dnl
   1392 _MHD_BASIC_INCLUDES
   1393     ], [[int i = 1; i++; if(i) return i]])
   1394   ], [$2], [$3])
   1395 ])
   1396 
   1397 
   1398 #
   1399 # _MHD_SET_UNDEF_ALL_EXT
   1400 #
   1401 # Internal preparatory macro.
   1402 
   1403 AC_DEFUN([_MHD_SET_UNDEF_ALL_EXT], [m4_divert_text([INIT_PREPARE],[dnl
   1404 [mhd_undef_all_extensions="
   1405 #ifdef _GNU_SOURCE
   1406 #undef _GNU_SOURCE
   1407 #endif
   1408 #ifdef _XOPEN_SOURCE
   1409 #undef _XOPEN_SOURCE
   1410 #endif
   1411 #ifdef _XOPEN_SOURCE_EXTENDED
   1412 #undef _XOPEN_SOURCE_EXTENDED
   1413 #endif
   1414 #ifdef _XOPEN_VERSION
   1415 #undef _XOPEN_VERSION
   1416 #endif
   1417 #ifdef _POSIX_C_SOURCE
   1418 #undef _POSIX_C_SOURCE
   1419 #endif
   1420 #ifdef _POSIX_SOURCE
   1421 #undef _POSIX_SOURCE
   1422 #endif
   1423 #ifdef _DEFAULT_SOURCE
   1424 #undef _DEFAULT_SOURCE
   1425 #endif
   1426 #ifdef _BSD_SOURCE
   1427 #undef _BSD_SOURCE
   1428 #endif
   1429 #ifdef _SVID_SOURCE
   1430 #undef _SVID_SOURCE
   1431 #endif
   1432 #ifdef __EXTENSIONS__
   1433 #undef __EXTENSIONS__
   1434 #endif
   1435 #ifdef _ALL_SOURCE
   1436 #undef _ALL_SOURCE
   1437 #endif
   1438 #ifdef _TANDEM_SOURCE
   1439 #undef _TANDEM_SOURCE
   1440 #endif
   1441 #ifdef _DARWIN_C_SOURCE
   1442 #undef _DARWIN_C_SOURCE
   1443 #endif
   1444 #ifdef __BSD_VISIBLE
   1445 #undef __BSD_VISIBLE
   1446 #endif
   1447 #ifdef _NETBSD_SOURCE
   1448 #undef _NETBSD_SOURCE
   1449 #endif
   1450 "
   1451 ]])])
   1452 
   1453 
   1454 #
   1455 # _MHD_UNDEF_ALL_EXT
   1456 #
   1457 # Output prolog that undefine all known extension and visibility macros.
   1458 
   1459 AC_DEFUN([_MHD_UNDEF_ALL_EXT], [dnl
   1460 AC_REQUIRE([_MHD_SET_UNDEF_ALL_EXT])dnl
   1461 $mhd_undef_all_extensions
   1462 ])
   1463 
   1464 
   1465 #
   1466 # _MHD_CHECK_DEFINED(SYMBOL, [PROLOG],
   1467 #                    [ACTION-IF-DEFINED], [ACTION-IF-NOT-DEFINED])
   1468 #
   1469 # Silently checks for defined symbols.
   1470 
   1471 AC_DEFUN([_MHD_CHECK_DEFINED], [dnl
   1472   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
   1473 m4_n([$2])dnl
   1474 [#ifndef ]$1[
   1475 #error ]$1[ is not defined
   1476 fail test here %%%@<:@-1@:>@
   1477 #endif
   1478         ]],[])
   1479     ], [m4_default_nblank([$3])], [m4_default_nblank([$4])]
   1480   )
   1481 ])
   1482 
   1483 
   1484 #
   1485 # MHD_CHECK_DEFINED(SYMBOL, [PROLOG],
   1486 #                   [ACTION-IF-DEFINED], [ACTION-IF-NOT-DEFINED],
   1487 #                   [MESSAGE])
   1488 #
   1489 # Cache-check for defined symbols with printing results.
   1490 
   1491 AC_DEFUN([MHD_CHECK_DEFINED], [dnl
   1492   AS_VAR_PUSHDEF([mhd_cache_Var],[mhd_cv_macro_[]m4_tolower(m4_normalize($1))_defined])dnl
   1493   AC_CACHE_CHECK([dnl
   1494 m4_ifnblank([$5], [$5], [whether ]m4_normalize([$1])[ is already defined])],
   1495     [mhd_cache_Var], [dnl
   1496     _MHD_CHECK_DEFINED(m4_normalize([$1]), [$2],
   1497       [mhd_cache_Var="yes"],
   1498       [mhd_cache_Var="no"]
   1499     )
   1500   ])
   1501   _MHD_VAR_IF([mhd_cache_Var], [["yes"]], [$3], [$4])
   1502   AS_VAR_POPDEF([mhd_cache_Var])dnl
   1503 ])
   1504 
   1505 
   1506 #
   1507 # MHD_CHECK_DEFINED_MSG(SYMBOL, [PROLOG], [MESSAGE]
   1508 #                       [ACTION-IF-DEFINED], [ACTION-IF-NOT-DEFINED])
   1509 #
   1510 # Cache-check for defined symbols with printing results.
   1511 # Reordered arguments for better readability.
   1512 
   1513 AC_DEFUN([MHD_CHECK_DEFINED_MSG],[dnl
   1514 MHD_CHECK_DEFINED([$1],[$2],[$4],[$5],[$3])])
   1515 
   1516 #
   1517 # MHD_CHECK_ACCEPT_DEFINE(DEFINE-SYMBOL, [DEFINE-VALUE = 1], [PROLOG],
   1518 #                         [ACTION-IF-ACCEPTED], [ACTION-IF-NOT-ACCEPTED],
   1519 #                         [MESSAGE])
   1520 #
   1521 # Cache-check whether specific defined symbol do not break basic headers.
   1522 
   1523 AC_DEFUN([MHD_CHECK_ACCEPT_DEFINE], [dnl
   1524   AC_PREREQ([2.64])dnl for AS_VAR_PUSHDEF, AS_VAR_SET, m4_ifnblank
   1525   AS_VAR_PUSHDEF([mhd_cache_Var],
   1526     [mhd_cv_define_[]m4_tolower(m4_normalize($1))[]_accepted[]m4_ifnblank([$2],[_[]$2])])dnl
   1527   AC_CACHE_CHECK([dnl
   1528 m4_ifnblank([$6],[$6],[whether headers accept $1[]m4_ifnblank([$2],[[ with value ]$2])])],
   1529     [mhd_cache_Var], [dnl
   1530     MHD_CHECK_BASIC_HEADERS([
   1531 m4_n([$3])[#define ]$1 m4_default_nblank($2,[[1]])],
   1532       [mhd_cache_Var="yes"], [mhd_cache_Var="no"]
   1533     )
   1534   ])
   1535   _MHD_VAR_IF([mhd_cache_Var], [["yes"]], [$4], [$5])
   1536   AS_VAR_POPDEF([mhd_cache_Var])dnl
   1537 ])
   1538 
   1539 
   1540 #
   1541 # MHD_CHECK_DEF_AND_ACCEPT(DEFINE-SYMBOL, [DEFINE-VALUE = 1], [PROLOG],
   1542 #                         [ACTION-IF-DEFINED],
   1543 #                         [ACTION-IF-ACCEPTED], [ACTION-IF-NOT-ACCEPTED])
   1544 #
   1545 # Combination of MHD_CHECK_DEFINED_ECHO and MHD_CHECK_ACCEPT_DEFINE.
   1546 # First check whether symbol is already defined and, if not defined,
   1547 # checks whether it can be defined.
   1548 
   1549 AC_DEFUN([MHD_CHECK_DEF_AND_ACCEPT], [dnl
   1550   MHD_CHECK_DEFINED([$1], [$3], [$4], [dnl
   1551     MHD_CHECK_ACCEPT_DEFINE([$1], [$2], [$3], [$5], [$6])dnl
   1552   ])dnl
   1553 ])
   1554 
   1555 #
   1556 # _MHD_XOPEN_VAR_ADD(DEFINES_VAR, FLAGS_VAR, [PROLOG])
   1557 #
   1558 # Internal macro. Only to be used in MHD_SYS_EXT.
   1559 
   1560 AC_DEFUN([_MHD_XOPEN_VAR_ADD], [dnl
   1561   MHD_CHECK_DEF_AND_ACCEPT([[_XOPEN_SOURCE]], [[1]], [$3],
   1562     [
   1563       AC_CACHE_CHECK([[whether predefined value of _XOPEN_SOURCE is more or equal 500]],
   1564         [[mhd_cv_macro__xopen_source_def_fiveh]], [dnl
   1565           AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
   1566 m4_n([$3])dnl
   1567 [#if _XOPEN_SOURCE+0 < 500
   1568 #error Value of _XOPEN_SOURCE is less than 500
   1569 fail test here %%%@<:@-1@:>@
   1570 #endif
   1571               ]],[[int i = 0; i++; if(i) return i]])],
   1572             [[mhd_cv_macro__xopen_source_def_fiveh="yes"]],
   1573             [[mhd_cv_macro__xopen_source_def_fiveh="no"]]
   1574           )dnl
   1575         ]
   1576       )dnl
   1577     ],
   1578     [_MHD_SYS_EXT_VAR_ADD_FLAG([$1], [$2], [[_XOPEN_SOURCE]], [[1]])]
   1579   )
   1580   AS_IF([[test "x${mhd_cv_define__xopen_source_accepted_1}" = "xyes" || \
   1581           test "x${mhd_cv_macro__xopen_source_def_fiveh}" = "xno"]],
   1582     [
   1583       MHD_CHECK_DEF_AND_ACCEPT([[_XOPEN_SOURCE_EXTENDED]], [],
   1584         [
   1585 m4_n([$3])], [],
   1586       [dnl
   1587         _MHD_SYS_EXT_VAR_ADD_FLAG([$1],[$2],[[_XOPEN_SOURCE_EXTENDED]])
   1588       ], [dnl
   1589         MHD_CHECK_DEFINED([[_XOPEN_VERSION]],
   1590           [
   1591 m4_n([$3])], [],
   1592         [dnl
   1593           AC_CACHE_CHECK([[for value of _XOPEN_VERSION accepted by headers]],
   1594             [mhd_cv_define__xopen_version_accepted], [dnl
   1595             MHD_CHECK_BASIC_HEADERS([
   1596 m4_n([$3])
   1597 [#define _XOPEN_VERSION 4]],
   1598               [[mhd_cv_define__xopen_version_accepted="4"]],
   1599             [
   1600               MHD_CHECK_BASIC_HEADERS([
   1601 m4_n([$3])
   1602 [#define _XOPEN_VERSION 3]],
   1603                 [[mhd_cv_define__xopen_version_accepted="3"]],
   1604                 [[mhd_cv_define__xopen_version_accepted="no"]]
   1605               )
   1606             ])
   1607           ])
   1608           AS_VAR_IF([mhd_cv_define__xopen_version_accepted], [["no"]],
   1609             [[:]],
   1610           [dnl
   1611             _MHD_SYS_EXT_VAR_ADD_FLAG([$1],[$2],[[_XOPEN_VERSION]],
   1612               [[${mhd_cv_define__xopen_version_accepted}]]dnl
   1613             )
   1614           ])
   1615         ])
   1616       ])
   1617     ]
   1618   )dnl
   1619 ])
   1620