libmicrohttpd2

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

mhd_sys_extentions.m4 (43074B)


      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 Karlson2k (Evgeny Grin) <k2k@narod.ru>
     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   mhd_mse_sys_ext_defines=""
     63   mhd_mse_sys_ext_flags=""
     64 
     65   dnl Check platform-specific extensions.
     66   dnl Use compiler-based test for determinig target.
     67 
     68   dnl Always add _GNU_SOURCE if headers allow.
     69   MHD_CHECK_DEF_AND_ACCEPT([[_GNU_SOURCE]], [],
     70     [[${mhd_mse_sys_ext_defines}]], [mhd_cv_macro_add__gnu_source="no"],
     71     [mhd_cv_macro_add__gnu_source="yes"],
     72     [mhd_cv_macro_add__gnu_source="no"]
     73   )
     74   AS_VAR_IF([mhd_cv_macro_add__gnu_source], ["yes"],
     75     [
     76       _MHD_SYS_EXT_VAR_ADD_FLAG([[mhd_mse_sys_ext_defines]], [[mhd_mse_sys_ext_flags]], [[_GNU_SOURCE]])
     77     ]
     78   )
     79 
     80   dnl __BSD_VISIBLE is actually a small hack for FreeBSD.
     81   dnl Funny that it's used in some Android versions too.
     82   AC_CACHE_CHECK([[whether to try __BSD_VISIBLE macro]],
     83     [[mhd_cv_macro_try___bsd_visible]], [dnl
     84     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
     85 /* Warning: test with inverted logic! */
     86 #ifdef __FreeBSD__
     87 #error Target FreeBSD
     88 choke me now;
     89 #endif /* __FreeBSD__ */
     90 
     91 #ifdef __ANDROID__
     92 #include <android/api-level.h>
     93 #ifndef __ANDROID_API_O__
     94 #error Target is Android NDK before R14
     95 choke me now;
     96 #endif /* ! __ANDROID_API_O__ */
     97 #endif /* __ANDROID__ */
     98         ]],[])],
     99       [[mhd_cv_macro_try___bsd_visible="no"]],
    100       [[mhd_cv_macro_try___bsd_visible="yes"]]
    101     )
    102   ])
    103   AS_VAR_IF([[mhd_cv_macro_try___bsd_visible]], [["yes"]],
    104   [dnl
    105     AC_CACHE_CHECK([[whether __BSD_VISIBLE is already defined]],
    106       [[mhd_cv_macro___bsd_visible_defined]], [dnl
    107       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
    108 ${mhd_mse_sys_ext_defines}
    109 /* Warning: test with inverted logic! */
    110 #ifdef __BSD_VISIBLE
    111 #error __BSD_VISIBLE is defined
    112 choke me now;
    113 #endif
    114           ]],[])
    115       ],
    116         [[mhd_cv_macro___bsd_visible_defined="no"]],
    117         [[mhd_cv_macro___bsd_visible_defined="yes"]]
    118       )
    119     ])
    120     AS_VAR_IF([[mhd_cv_macro___bsd_visible_defined]], [["yes"]], [[:]],
    121     [dnl
    122       MHD_CHECK_ACCEPT_DEFINE(
    123         [[__BSD_VISIBLE]], [], [[${mhd_mse_sys_ext_defines}]],
    124         [
    125           _MHD_SYS_EXT_VAR_ADD_FLAG([[mhd_mse_sys_ext_defines]], [[mhd_mse_sys_ext_flags]], [[__BSD_VISIBLE]])
    126         ]
    127       )dnl
    128     ])
    129   ])
    130 
    131 
    132   dnl _DARWIN_C_SOURCE enables additional functionality on Darwin.
    133   MHD_CHECK_DEFINED_MSG([[__APPLE__]], [[${mhd_mse_sys_ext_defines}]],
    134     [[whether to try _DARWIN_C_SOURCE macro]],
    135   [dnl
    136     MHD_CHECK_DEF_AND_ACCEPT(
    137       [[_DARWIN_C_SOURCE]], [], [[${mhd_mse_sys_ext_defines}]], [],
    138       [
    139         _MHD_SYS_EXT_VAR_ADD_FLAG([[mhd_mse_sys_ext_defines]], [[mhd_mse_sys_ext_flags]], [[_DARWIN_C_SOURCE]])
    140       ]
    141     )dnl
    142   ])
    143 
    144   dnl __EXTENSIONS__ unlocks almost all interfaces on Solaris.
    145   MHD_CHECK_DEFINED_MSG([[__sun]], [[${mhd_mse_sys_ext_defines}]],
    146     [[whether to try __EXTENSIONS__ macro]],
    147   [dnl
    148     MHD_CHECK_DEF_AND_ACCEPT(
    149       [[__EXTENSIONS__]], [], [[${mhd_mse_sys_ext_defines}]], [],
    150       [
    151         _MHD_SYS_EXT_VAR_ADD_FLAG([[mhd_mse_sys_ext_defines]], [[mhd_mse_sys_ext_flags]], [[__EXTENSIONS__]])
    152       ]
    153     )dnl
    154   ])
    155 
    156   dnl _NETBSD_SOURCE switch on almost all headers definitions on NetBSD.
    157   MHD_CHECK_DEFINED_MSG([[__NetBSD__]], [[${mhd_mse_sys_ext_defines}]],
    158     [[whether to try _NETBSD_SOURCE macro]],
    159   [dnl
    160     MHD_CHECK_DEF_AND_ACCEPT(
    161       [[_NETBSD_SOURCE]], [], [[${mhd_mse_sys_ext_defines}]], [],
    162       [
    163         _MHD_SYS_EXT_VAR_ADD_FLAG([[mhd_mse_sys_ext_defines]], [[mhd_mse_sys_ext_flags]], [[_NETBSD_SOURCE]])
    164       ]
    165     )dnl
    166   ])
    167 
    168   dnl _BSD_SOURCE currently used only on OpenBSD to unhide functions.
    169   MHD_CHECK_DEFINED_MSG([[__OpenBSD__]], [[${mhd_mse_sys_ext_defines}]],
    170     [[whether to try _BSD_SOURCE macro]],
    171   [dnl
    172     MHD_CHECK_DEF_AND_ACCEPT(
    173       [[_BSD_SOURCE]], [], [[${mhd_mse_sys_ext_defines}]], [],
    174       [
    175         _MHD_SYS_EXT_VAR_ADD_FLAG([[mhd_mse_sys_ext_defines]], [[mhd_mse_sys_ext_flags]], [[_BSD_SOURCE]])
    176       ]
    177     )dnl
    178   ])
    179 
    180   dnl _TANDEM_SOURCE unhides most functions on NonStop OS
    181   dnl (which comes from Tandem Computers decades ago).
    182   MHD_CHECK_DEFINED_MSG([[__TANDEM]], [[${mhd_mse_sys_ext_defines}]],
    183     [[whether to try _TANDEM_SOURCE macro]],
    184   [dnl
    185     MHD_CHECK_DEF_AND_ACCEPT(
    186       [[_TANDEM_SOURCE]], [], [[${mhd_mse_sys_ext_defines}]], [],
    187       [
    188         _MHD_SYS_EXT_VAR_ADD_FLAG([[mhd_mse_sys_ext_defines]], [[mhd_mse_sys_ext_flags]], [[_TANDEM_SOURCE]])
    189       ]
    190     )dnl
    191   ])
    192 
    193   dnl _ALL_SOURCE makes visible POSIX and non-POSIX symbols
    194   dnl on z/OS, AIX and Interix.
    195   AC_CACHE_CHECK([[whether to try _ALL_SOURCE macro]],
    196     [[mhd_cv_macro_try__all_source]], [dnl
    197     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
    198 #if !defined(__TOS_MVS__) && !defined (__INTERIX)
    199 #error Target is not z/OS, AIX or Interix
    200 choke me now;
    201 #endif
    202         ]],[])],
    203       [[mhd_cv_macro_try__all_source="yes"]],
    204       [[mhd_cv_macro_try__all_source="no"]]
    205     )
    206   ])
    207   AS_VAR_IF([[mhd_cv_macro_try__all_source]], [["yes"]],
    208   [dnl
    209     MHD_CHECK_DEF_AND_ACCEPT(
    210       [[_ALL_SOURCE]], [], [[${mhd_mse_sys_ext_defines}]], [],
    211       [
    212         _MHD_SYS_EXT_VAR_ADD_FLAG([[mhd_mse_sys_ext_defines]], [[mhd_mse_sys_ext_flags]], [[_ALL_SOURCE]])
    213       ]
    214     )dnl
    215   ])
    216 
    217   mhd_mse_xopen_features=""
    218   mhd_mse_xopen_defines=""
    219   mhd_mse_xopen_flags=""
    220 
    221   AC_CACHE_CHECK([[whether _XOPEN_SOURCE is already defined]],
    222     [[mhd_cv_macro__xopen_source_defined]], [
    223       _MHD_CHECK_DEFINED([[_XOPEN_SOURCE]], [[${mhd_mse_sys_ext_defines}]],
    224         [[mhd_cv_macro__xopen_source_defined="yes"]],
    225         [[mhd_cv_macro__xopen_source_defined="no"]]
    226       )
    227     ]
    228   )
    229   AS_VAR_IF([[mhd_cv_macro__xopen_source_defined]], [["no"]],
    230     [
    231       dnl Some platforms (namely: Solaris) use '==' checks instead of '>='
    232       dnl for _XOPEN_SOURCE, resulting that unknown for platform values are
    233       dnl interpreted as oldest and platform expose reduced number of
    234       dnl interfaces. Next checks will ensure that platform recognise
    235       dnl requested mode instead of blindly define high number that can
    236       dnl be simply ignored by platform.
    237       _MHD_CHECK_POSIX2008([[mhd_mse_xopen_defines]],
    238         [[mhd_mse_xopen_flags]],
    239         [[${mhd_mse_sys_ext_defines}]],
    240         [mhd_mse_xopen_features="${mhd_cv_headers_posix2008}"],
    241         [
    242           _MHD_CHECK_POSIX2001([[mhd_mse_xopen_defines]],
    243             [[mhd_mse_xopen_flags]],
    244              [[${mhd_mse_sys_ext_defines}]],
    245             [mhd_mse_xopen_features="${mhd_cv_headers_posix2001}"],
    246             [
    247               _MHD_CHECK_SUSV2([[mhd_mse_xopen_defines]],
    248                 [[mhd_mse_xopen_flags]],
    249                 [[${mhd_mse_sys_ext_defines}]],
    250                 [mhd_mse_xopen_features="${mhd_cv_headers_susv2}"],
    251                 [mhd_mse_xopen_features="${mhd_cv_headers_susv2}"]
    252               )
    253             ]
    254           )
    255         ]
    256       )
    257     ]
    258   )
    259 
    260   AS_IF([[test "x${mhd_cv_macro__xopen_source_defined}" = "xno" && \
    261           test "x${mhd_cv_macro__xopen_source_def_fiveh}" = "xno" || \
    262           test "x${mhd_mse_xopen_features}" = "xnot available" ]],
    263     [
    264       _MHD_XOPEN_VAR_ADD([mhd_mse_xopen_defines], [mhd_mse_xopen_flags], [${mhd_mse_sys_ext_defines}])
    265     ]
    266   )
    267 
    268   mhd_mse_sys_features_src="
    269 #ifdef __APPLE__
    270 #include <sys/socket.h>
    271 #else
    272 #error No useful system features.
    273 choke me now;
    274 #endif
    275 
    276 int main()
    277 {
    278 #ifdef __APPLE__
    279 #ifndef sendfile
    280   (void) sendfile;
    281 #endif
    282 #endif
    283   return 0;
    284 }
    285 "
    286   AC_CACHE_CHECK([[for useful system-specific features]],
    287     [[mhd_cv_headers_useful_features_present]], [
    288     mhd_SYS_EXT_SAVE_CFLAGS="$CFLAGS"
    289     CFLAGS="$CFLAGS $ac_[]_AC_LANG_ABBREV[]_undeclared_builtin_options"
    290     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
    291 ${mhd_mse_sys_ext_defines}
    292 ${mhd_mse_sys_features_src}
    293       ]])],
    294       [[mhd_cv_headers_useful_features_present="yes"]],
    295       [[mhd_cv_headers_useful_features_present="no"]]
    296     )dnl
    297   ])
    298   AS_VAR_IF([[mhd_cv_headers_useful_features_present]], [["yes"]],
    299     [
    300       AS_IF([[test "x${mhd_mse_xopen_flags}" = "x"]], [[:]],
    301         [
    302           AC_CACHE_CHECK([[whether useful system-specific features works with ${mhd_mse_xopen_flags}]],
    303             [[mhd_cv_headers_useful_features_works_xopen]], [dnl
    304             AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
    305 ${mhd_mse_sys_ext_defines}
    306 ${mhd_mse_xopen_defines}
    307 ${mhd_mse_sys_features_src}
    308               ]])],
    309               [[mhd_cv_headers_useful_features_works_xopen="yes"]],
    310               [[mhd_cv_headers_useful_features_works_xopen="no"]]
    311             )dnl
    312           ])dnl
    313         ]
    314       )
    315     CFLAGS="$mhd_SYS_EXT_SAVE_CFLAGS"
    316     AS_UNSET([mhd_SYS_EXT_SAVE_CFLAGS])
    317     ]
    318   )
    319 
    320 
    321   AS_IF([[test "x${mhd_cv_headers_useful_features_present}" = "xyes" && \
    322           test "x${mhd_cv_headers_useful_features_works_xopen}" = "xno" && \
    323           test "x${mhd_mse_xopen_flags}" != "x"]],
    324     [
    325       _MHD_VAR_CONTAIN([[mhd_mse_xopen_features]], [[, activated by _XOPEN_SOURCE]],
    326         [
    327           AC_MSG_WARN([[_XOPEN_SOURCE macro is required to activate all headers symbols, however some useful system-specific features does not work with _XOPEN_SOURCE. ]dnl
    328           [_XOPEN_SOURCE macro will not be used.]])
    329         ]
    330       )
    331       AS_UNSET([[mhd_mse_xopen_defines]])
    332       AS_UNSET([[mhd_mse_xopen_flags]])
    333       AS_UNSET([[mhd_mse_xopen_values]])
    334     ]
    335   )
    336 
    337   dnl Discard temporal source variables
    338   AS_UNSET([[mhd_mse_sys_features_src]])
    339   AS_UNSET([[mhd_mse_xopen_defines]])
    340   AS_UNSET([[mhd_mse_sys_ext_defines]])
    341 
    342   dnl Determined all required defines.
    343   AC_MSG_CHECKING([[for final set of defined symbols]])
    344   m4_ifblank([$1], [dnl
    345     AH_TEMPLATE([[_XOPEN_SOURCE]], [Define to maximum value supported by system headers])dnl
    346     AH_TEMPLATE([[_XOPEN_SOURCE_EXTENDED]], [Define to 1 if _XOPEN_SOURCE is defined to value less than 500 ]dnl
    347       [and system headers require this symbol])dnl
    348     AH_TEMPLATE([[_XOPEN_VERSION]], [Define to maximum value supported by system headers if _XOPEN_SOURCE ]dnl
    349       [is defined to value less than 500 and headers do not support _XOPEN_SOURCE_EXTENDED])dnl
    350     AH_TEMPLATE([[_GNU_SOURCE]], [Define to 1 to enable GNU-related header features])dnl
    351     AH_TEMPLATE([[__BSD_VISIBLE]], [Define to 1 if it is required by headers to expose additional symbols])dnl
    352     AH_TEMPLATE([[_DARWIN_C_SOURCE]], [Define to 1 if it is required by headers to expose additional symbols])dnl
    353     AH_TEMPLATE([[__EXTENSIONS__]], [Define to 1 if it is required by headers to expose additional symbols])dnl
    354     AH_TEMPLATE([[_NETBSD_SOURCE]], [Define to 1 if it is required by headers to expose additional symbols])dnl
    355     AH_TEMPLATE([[_BSD_SOURCE]], [Define to 1 if it is required by headers to expose additional symbols])dnl
    356     AH_TEMPLATE([[_TANDEM_SOURCE]], [Define to 1 if it is required by headers to expose additional symbols])dnl
    357     AH_TEMPLATE([[_ALL_SOURCE]], [Define to 1 if it is required by headers to expose additional symbols])dnl
    358   ])
    359   for mhd_mse_Flag in ${mhd_mse_sys_ext_flags} ${mhd_mse_xopen_flags}
    360   do
    361     m4_ifnblank([$1], [dnl
    362       AS_VAR_APPEND([$1],[[" -D$mhd_mse_Flag"]])
    363     ], [dnl
    364       AS_CASE([[$mhd_mse_Flag]], [[*=*]],
    365       [dnl
    366         AC_DEFINE_UNQUOTED([[`echo $mhd_mse_Flag | cut -f 1 -d =`]],
    367           [[`echo $mhd_mse_Flag | cut -f 2 -d = -s`]])
    368       ], [dnl
    369         AC_DEFINE_UNQUOTED([[$mhd_mse_Flag]])
    370       ])
    371     ])
    372   done
    373   AS_UNSET([[mhd_mse_Flag]])
    374   dnl Trim whitespaces
    375   mhd_mse_result=`echo ${mhd_mse_sys_ext_flags} ${mhd_mse_xopen_flags}`
    376   AC_MSG_RESULT([[${mhd_mse_result}]])
    377   AS_UNSET([[mhd_mse_result]])
    378   AS_UNSET([[mhd_mse_xopen_flags]])
    379   AS_UNSET([[mhd_mse_sys_ext_flags]])
    380 ])
    381 
    382 
    383 #
    384 # _MHD_SYS_EXT_VAR_ADD_FLAG(DEFINES_VAR, FLAGS_VAR,
    385 #                           FLAG, [FLAG-VALUE = 1])
    386 #
    387 # Internal macro, only to be used from MHD_SYS_EXT, _MHD_XOPEN_VAR_ADD
    388 
    389 m4_define([_MHD_SYS_EXT_VAR_ADD_FLAG], [dnl
    390   m4_ifnblank([$4],[dnl
    391     ]m4_normalize([$1])[="[$]{]m4_normalize([$1])[}[#define ]m4_normalize($3) ]m4_normalize([$4])[
    392 "
    393     AS_IF([test "x[$]{]m4_normalize([$2])[}" = "x"],
    394       []m4_normalize([$2])[="]m4_normalize([$3])[=]m4_normalize([$4])["],
    395       []m4_normalize([$2])[="[$]{]m4_normalize([$2])[} ]m4_normalize([$3])[=]m4_normalize([$4])["]
    396     )dnl
    397   ], [dnl
    398     ]m4_normalize([$1])[="[$]{]m4_normalize([$1])[}[#define ]m4_normalize($3) 1
    399 "
    400     AS_IF([test "x[$]{]m4_normalize([$2])[}" = "x"],
    401       []m4_normalize([$2])[="]m4_normalize([$3])["],
    402       []m4_normalize([$2])[="[$]{]m4_normalize([$2])[} ]m4_normalize([$3])["]
    403     )dnl
    404   ])dnl
    405 ])
    406 
    407 #
    408 # _MHD_VAR_IF(VAR, VALUE, [IF-EQ], [IF-NOT-EQ])
    409 #
    410 # Same as AS_VAR_IF, except that it expands to nothing if
    411 # both IF-EQ and IF-NOT-EQ are empty.
    412 
    413 m4_define([_MHD_VAR_IF],[dnl
    414 m4_ifnblank([$3$4],[dnl
    415 AS_VAR_IF([$1],[$2],[$3],[$4])])])
    416 
    417 #
    418 # _MHD_STRING_CONTAIN(VAR, MATCH, [IF-MATCH], [IF-NOT-MATCH])
    419 #
    420 
    421 AC_DEFUN([_MHD_VAR_CONTAIN],[dnl
    422 AC_REQUIRE([AC_PROG_FGREP])dnl
    423 AS_IF([[`echo "${]$1[}" | $FGREP ']$2[' >/dev/null 2>&1`]], [$3], [$4])
    424 ])
    425 
    426 #
    427 # _MHD_STRING_CONTAIN_BRE(VAR, BRE, [IF-MATCH], [IF-NOT-MATCH])
    428 #
    429 
    430 AC_DEFUN([_MHD_VAR_CONTAIN_BRE],[dnl
    431 AC_REQUIRE([AC_PROG_GREP])dnl
    432 AS_IF([[`echo "${]$1[}" | $GREP ']$2[' >/dev/null 2>&1`]], [$3], [$4])
    433 ])
    434 
    435 # SYNOPSIS
    436 #
    437 # _MHD_CHECK_POSIX2008(DEFINES_VAR, FLAGS_VAR,
    438 #                      [EXT_DEFINES],
    439 #                      [ACTION-IF-AVAILABLE],
    440 #                      [ACTION-IF-NOT-AVAILABLE])
    441 #
    442 #
    443 AC_DEFUN([_MHD_CHECK_POSIX2008], [dnl
    444   AC_CACHE_CHECK([headers for POSIX.1-2008/SUSv4 features],
    445     [[mhd_cv_headers_posix2008]], [dnl
    446       _MHD_CHECK_POSIX_FEATURES_SINGLE([
    447 _MHD_BASIC_INCLUDES
    448 [
    449 /* Check will be passed if ALL features are available 
    450  * and failed if ANY feature is not available. */
    451 int main()
    452 {
    453 
    454 #ifndef stpncpy
    455   (void) stpncpy;
    456 #endif
    457 #ifndef strnlen
    458   (void) strnlen;
    459 #endif
    460 
    461 #if !defined(__NetBSD__) && !defined(__OpenBSD__)
    462 /* NetBSD and OpenBSD didn't implement wcsnlen() for some reason. */
    463 #ifndef wcsnlen
    464   (void) wcsnlen;
    465 #endif
    466 #endif
    467 
    468 #ifdef __CYGWIN__
    469 /* The only depend function on Cygwin, but missing on some other platforms */
    470 #ifndef strndup
    471   (void) strndup;
    472 #endif
    473 #endif
    474 
    475 #ifndef __sun
    476 /* illumos forget to uncomment some _XPG7 macros. */
    477 #ifndef renameat
    478   (void) renameat;
    479 #endif
    480 
    481 #ifndef getline
    482   (void) getline;
    483 #endif
    484 #endif /* ! __sun */
    485 
    486 /* gmtime_r() becomes mandatory only in POSIX.1-2008. */
    487 #ifndef gmtime_r
    488   (void) gmtime_r;
    489 #endif
    490 
    491 /* unsetenv() actually defined in POSIX.1-2001 so it
    492  * must be present with _XOPEN_SOURCE == 700 too. */
    493 #ifndef unsetenv
    494   (void) unsetenv;
    495 #endif
    496 
    497   return 0;
    498 }
    499         ]],
    500         [$3], [[700]],
    501         [[mhd_cv_headers_posix2008]]dnl
    502       )
    503     ]
    504   )
    505   _MHD_VAR_CONTAIN_BRE([[mhd_cv_headers_posix2008]], [[^available]],
    506     [
    507       _MHD_VAR_CONTAIN([[mhd_cv_headers_posix2008]], [[does not work with _XOPEN_SOURCE]], [[:]],
    508         [_MHD_SYS_EXT_VAR_ADD_FLAG([$1],[$2],[[_XOPEN_SOURCE]],[[700]])]
    509       )
    510       $4
    511     ],
    512     [$5]
    513   )
    514 ])
    515 
    516 
    517 # SYNOPSIS
    518 #
    519 # _MHD_CHECK_POSIX2001(DEFINES_VAR, FLAGS_VAR,
    520 #                      [EXT_DEFINES],
    521 #                      [ACTION-IF-AVAILABLE],
    522 #                      [ACTION-IF-NOT-AVAILABLE])
    523 #
    524 #
    525 AC_DEFUN([_MHD_CHECK_POSIX2001], [dnl
    526   AC_CACHE_CHECK([headers for POSIX.1-2001/SUSv3 features],
    527     [[mhd_cv_headers_posix2001]], [
    528       _MHD_CHECK_POSIX_FEATURES_SINGLE([
    529 _MHD_BASIC_INCLUDES
    530 [
    531 /* Check will be passed if ALL features are available
    532  * and failed if ANY feature is not available. */
    533 int main()
    534 {
    535 
    536 #ifndef setenv
    537   (void) setenv;
    538 #endif
    539 
    540 #ifndef __NetBSD__
    541 #ifndef vsscanf
    542   (void) vsscanf;
    543 #endif
    544 #endif
    545 
    546 /* Availability of next features varies, but they all must be present
    547  * on platform with support for _XOPEN_SOURCE = 600. */
    548 
    549 /* vsnprintf() should be available with _XOPEN_SOURCE >= 500, but some platforms
    550  * provide it only with _POSIX_C_SOURCE >= 200112 (autodefined when
    551  * _XOPEN_SOURCE >= 600) where specification of vsnprintf() is aligned with
    552  * ISO C99 while others platforms defined it with even earlier standards. */
    553 #ifndef vsnprintf
    554   (void) vsnprintf;
    555 #endif
    556 
    557 /* On platforms that prefer POSIX over X/Open, fseeko() is available
    558  * with _POSIX_C_SOURCE >= 200112 (autodefined when _XOPEN_SOURCE >= 600).
    559  * On other platforms it should be available with _XOPEN_SOURCE >= 500. */
    560 #ifndef fseeko
    561   (void) fseeko;
    562 #endif
    563 
    564 /* F_GETOWN must be defined with _XOPEN_SOURCE >= 600, but some platforms
    565  * define it with _XOPEN_SOURCE >= 500. */
    566 #ifndef F_GETOWN
    567 #error F_GETOWN is not defined
    568 choke me now;
    569 #endif
    570   return 0;
    571 }
    572         ]],
    573         [$3],[[600]],[[mhd_cv_headers_posix2001]]dnl
    574       )
    575     ]
    576   )
    577   _MHD_VAR_CONTAIN_BRE([[mhd_cv_headers_posix2001]], [[^available]],
    578     [
    579       _MHD_VAR_CONTAIN([[mhd_cv_headers_posix2001]], [[does not work with _XOPEN_SOURCE]], [[:]],
    580         [_MHD_SYS_EXT_VAR_ADD_FLAG([$1],[$2],[[_XOPEN_SOURCE]],[[600]])]
    581       )
    582       $4
    583     ],
    584     [$5]
    585   )
    586 ])
    587 
    588 
    589 # SYNOPSIS
    590 #
    591 # _MHD_CHECK_SUSV2(DEFINES_VAR, FLAGS_VAR,
    592 #                  [EXT_DEFINES],
    593 #                  [ACTION-IF-AVAILABLE],
    594 #                  [ACTION-IF-NOT-AVAILABLE])
    595 #
    596 #
    597 AC_DEFUN([_MHD_CHECK_SUSV2], [dnl
    598   AC_CACHE_CHECK([headers for SUSv2/XPG5 features],
    599     [[mhd_cv_headers_susv2]], [
    600       _MHD_CHECK_POSIX_FEATURES_SINGLE([
    601 _MHD_BASIC_INCLUDES
    602 [
    603 /* Check will be passed if ALL features are available
    604  * and failed if ANY feature is not available. */
    605 int main()
    606 {
    607 /* It's not easy to write reliable test for _XOPEN_SOURCE = 500 as
    608  * platforms not always precisely follow this standard and some
    609  * functions are already deprecated in later standards. */
    610 
    611 /* Availability of next features varies, but they all must be present
    612  * on platform with correct support for _XOPEN_SOURCE = 500. */
    613 
    614 /* Mandatory with _XOPEN_SOURCE >= 500 but as XSI extension available
    615  * with much older standards. */
    616 #ifndef ftruncate
    617   (void) ftruncate;
    618 #endif
    619 
    620 /* Added with _XOPEN_SOURCE >= 500 but was available in some standards
    621  * before. XSI extension. */
    622 #ifndef pread
    623   (void) pread;
    624 #endif
    625 
    626 #ifndef __APPLE__
    627 /* Actually comes from XPG4v2 and must be available
    628  * with _XOPEN_SOURCE >= 500 as well. */
    629 #ifndef symlink
    630   (void) symlink;
    631 #endif
    632 
    633 /* Actually comes from XPG4v2 and must be available
    634  * with _XOPEN_SOURCE >= 500 as well. XSI extension. */
    635 #ifndef strdup
    636   (void) strdup;
    637 #endif
    638 #endif /* ! __APPLE__ */
    639   return 0;
    640 }
    641         ]],
    642         [$3],[[500]],[[mhd_cv_headers_susv2]]dnl
    643       )
    644     ]
    645   )
    646   _MHD_VAR_CONTAIN_BRE([[mhd_cv_headers_susv2]], [[^available]],
    647     [
    648       _MHD_VAR_CONTAIN([[mhd_cv_headers_susv2]], [[does not work with _XOPEN_SOURCE]], [[:]],
    649         [_MHD_SYS_EXT_VAR_ADD_FLAG([$1],[$2],[[_XOPEN_SOURCE]],[[500]])]
    650       )
    651       $4
    652     ],
    653     [$5]
    654   )
    655 ])
    656 
    657 
    658 # SYNOPSIS
    659 #
    660 # _MHD_CHECK_POSIX_FEATURES_SINGLE(FEATURES_TEST,
    661 #                                  EXT_DEFINES,
    662 #                                  _XOPEN_SOURCE-VALUE,
    663 #                                  VAR-RESULT)
    664 
    665 AC_DEFUN([_MHD_CHECK_POSIX_FEATURES_SINGLE], [dnl
    666   AS_VAR_PUSHDEF([avail_Var], [mhd_cpsxfs_tmp_features_available])dnl
    667   AS_VAR_PUSHDEF([ext_Var], [mhd_cpsxfs_tmp_extentions_allowed])dnl
    668   AS_VAR_PUSHDEF([xopen_Var], [mhd_cpsxfs_tmp_src_xopen_allowed])dnl
    669   AS_VAR_PUSHDEF([dislb_Var], [mhd_cpsxfs_tmp_features_disableable])dnl
    670   AS_UNSET([avail_Var])
    671   AS_UNSET([ext_Var])
    672   AS_UNSET([xopen_Var])
    673   AS_UNSET([dislb_Var])
    674   _MHD_CHECK_POSIX_FEATURES([$1], [$2], [$3], [avail_Var], [ext_Var], [xopen_Var], [dislb_Var])
    675   AS_VAR_IF([avail_Var], ["yes"],
    676     [
    677       AS_VAR_IF([dislb_Var], ["yes"],
    678         [
    679           AS_VAR_IF([ext_Var], ["required"],
    680             [
    681               AS_VAR_IF([xopen_Var], ["allowed"],
    682                 [
    683                   AS_VAR_SET(m4_normalize([$4]), ["available, activated by extension macro, works with _XOPEN_SOURCE=]m4_normalize([$3])["])
    684                 ],
    685                 [
    686                   AS_VAR_SET(m4_normalize([$4]), ["available, activated by extension macro, does not work with _XOPEN_SOURCE=]m4_normalize([$3])["])
    687                 ]
    688               )
    689             ],
    690             [
    691               AS_VAR_IF([ext_Var], ["allowed"],
    692                 [
    693                   AS_VAR_IF([xopen_Var], ["required"],
    694                     [
    695                       AS_VAR_SET(m4_normalize([$4]), ["available, activated by _XOPEN_SOURCE=]m4_normalize([$3])[, works with extension macro"])
    696                     ],
    697                     [
    698                       AS_VAR_IF([xopen_Var], ["allowed"],
    699                         [
    700                           AS_VAR_SET(m4_normalize([$4]), ["available, works with _XOPEN_SOURCE=]m4_normalize([$3])[, works with extension macro"])
    701                         ],
    702                         [
    703                           AS_VAR_SET(m4_normalize([$4]), ["available, works with extension macro, does not work with _XOPEN_SOURCE=]m4_normalize([$3])["])
    704                         ]
    705                       )
    706                     ]
    707                   )
    708                 ],
    709                 [
    710                   AS_VAR_IF([xopen_Var], ["required"],
    711                     [
    712                       AS_VAR_SET(m4_normalize([$4]), ["available, activated by _XOPEN_SOURCE=]m4_normalize([$3])[, does not work with extension macro"])
    713                     ],
    714                     [
    715                       AS_VAR_IF([xopen_Var], ["allowed"],
    716                         [
    717                           AS_VAR_SET(m4_normalize([$4]), ["available, works with _XOPEN_SOURCE=]m4_normalize([$3])[, does not work with extension macro"])
    718                         ],
    719                         [
    720                           AS_VAR_SET(m4_normalize([$4]), ["available, does not work with _XOPEN_SOURCE=]m4_normalize([$3])[, does not work with extension macro"])
    721                         ]
    722                       )
    723                     ]
    724                   )
    725                 ]
    726               )
    727             ]
    728           )
    729         ],
    730         [
    731           AS_VAR_SET(m4_normalize([$4]), ["available, works always"])
    732         ]
    733       )
    734     ],
    735     [
    736       AS_VAR_SET(m4_normalize([$4]), ["not available"])
    737     ]
    738   )
    739   AS_UNSET([dislb_Var])
    740   AS_UNSET([xopen_Var])
    741   AS_UNSET([ext_Var])
    742   AS_UNSET([avail_Var])
    743   AS_VAR_POPDEF([dislb_Var])dnl
    744   AS_VAR_POPDEF([xopen_Var])dnl
    745   AS_VAR_POPDEF([ext_Var])dnl
    746   AS_VAR_POPDEF([avail_Var])dnl
    747 ])
    748 
    749 # SYNOPSIS
    750 #
    751 # _MHD_CHECK_POSIX_FEATURES(FEATURES_TEST, EXT_DEFINES, _XOPEN_SOURCE-VALUE,
    752 #                           [VAR-FEATURES-AVAILABLE-YES_NO],
    753 #                           [VAR-EXTENSIONS-REQUIRED_NOT-ALLOWED_ALLOWED],
    754 #                           [VAR-XOPEN-REQUIRED_NOT-ALLOWED_ALLOWED],
    755 #                           [VAR-FEATURES-DISABLEABLE-YES_NO])
    756 
    757 AC_DEFUN([_MHD_CHECK_POSIX_FEATURES], [dnl
    758   AS_VAR_PUSHDEF([src_Var], [mhd_cpsxf_tmp_src_variable])dnl
    759   AS_VAR_PUSHDEF([defs_Var], [mhd_cpsxf_tmp_defs_variable])dnl
    760   AS_VAR_SET([src_Var],["
    761 $1
    762 "])
    763   dnl To reduce 'configure' size
    764   AS_VAR_SET([defs_Var],["
    765 $2
    766 "])
    767   dnl To reduce 'configure' size
    768 
    769   dnl Some platforms enable most features when no
    770   dnl specific mode is requested by macro.
    771   dnl Check whether features test works without _XOPEN_SOURCE and
    772   dnl with disabled extensions (undefined most of
    773   dnl predefined macros for specific requested mode).
    774   mhd_SYS_EXT_SAVE_CFLAGS="$CFLAGS"
    775   CFLAGS="$CFLAGS $ac_[]_AC_LANG_ABBREV[]_undeclared_builtin_options"
    776   AC_COMPILE_IFELSE([AC_LANG_SOURCE([
    777 _MHD_UNDEF_ALL_EXT
    778 $src_Var
    779     ])],
    780     [dnl
    781       _AS_ECHO_LOG([[Checked features work with undefined all extensions and without _XOPEN_SOURCE]])
    782       AS_VAR_SET(m4_normalize([$4]),["yes"]) # VAR-FEATURES-AVAILABLE-YES_NO
    783 
    784       dnl Check whether features will work extensions
    785       AC_COMPILE_IFELSE([AC_LANG_SOURCE([
    786 $defs_Var
    787 $src_Var
    788         ])],
    789         [dnl
    790           _AS_ECHO_LOG([[Checked features work with extensions]])
    791           AS_VAR_SET(m4_normalize([$5]),["allowed"]) # VAR-EXTENSIONS-REQUIRED_NOT-ALLOWED_ALLOWED
    792           dnl Check whether features will work with _XOPEN_SOURCE
    793           AC_COMPILE_IFELSE([AC_LANG_SOURCE([
    794 $defs_Var
    795 [#define _XOPEN_SOURCE ]]m4_normalize([$3])[
    796 $src_Var
    797             ])],
    798             [dnl
    799               _AS_ECHO_LOG([Checked features work with extensions and with _XOPEN_SOURCE=]m4_normalize([$3])[])
    800               AS_VAR_SET(m4_normalize([$6]),["allowed"]) # VAR-XOPEN-REQUIRED_NOT-ALLOWED_ALLOWED
    801               dnl Check whether features could be disabled
    802               dnl Request oldest POSIX mode and strict ANSI mode
    803               AC_COMPILE_IFELSE([AC_LANG_SOURCE([
    804 _MHD_UNDEF_ALL_EXT
    805 [#define _POSIX_C_SOURCE 1]
    806 [#define  _ANSI_SOURCE 1]
    807 $src_Var
    808                 ])],
    809                 [dnl
    810                   _AS_ECHO_LOG([[Checked features work with disabled extensions, with _POSIX_C_SOURCE=1 and _ANSI_SOURCE=1]])
    811                   AS_VAR_SET(m4_normalize([$7]),["no"]) # VAR-FEATURES-DISABLEABLE-YES_NO
    812                 ],
    813                 [dnl
    814                   _AS_ECHO_LOG([[Checked features DO NOT work with disabled extensions, with _POSIX_C_SOURCE=1 and _ANSI_SOURCE=1]])
    815                   AS_VAR_SET(m4_normalize([$7]),["yes"]) # VAR-FEATURES-DISABLEABLE-YES_NO
    816                 ]
    817               )
    818             ],
    819             [dnl
    820               _AS_ECHO_LOG([Checked features DO NOT work with extensions and with _XOPEN_SOURCE=]m4_normalize([$3])[])
    821               AS_VAR_SET(m4_normalize([$6]),["not allowed"])  # VAR-XOPEN-REQUIRED_NOT-ALLOWED_ALLOWED
    822               AS_VAR_SET(m4_normalize([$7]),["yes"]) # VAR-FEATURES-DISABLEABLE-YES_NO
    823             ]
    824           )
    825         ],
    826         [dnl
    827           _AS_ECHO_LOG([[Checked features DO NOT work with extensions]])
    828           AS_VAR_SET(m4_normalize([$7]),["yes"]) # VAR-FEATURES-DISABLEABLE-YES_NO
    829           dnl Check whether features work with _XOPEN_SOURCE
    830           AC_COMPILE_IFELSE([AC_LANG_SOURCE([
    831 [#define _XOPEN_SOURCE ]m4_normalize($3)
    832 $src_Var
    833             ])],
    834             [dnl
    835               _AS_ECHO_LOG([Checked features work with _XOPEN_SOURCE=]m4_normalize([$3])[])
    836               dnl Check default state (without enabling/disabling)
    837               AC_COMPILE_IFELSE([AC_LANG_SOURCE([
    838 $src_Var
    839                 ])],
    840                 [dnl
    841                   _AS_ECHO_LOG([[Checked features work by default]])
    842                   AS_VAR_SET(m4_normalize([$6]),["allowed"]) # VAR-XOPEN-REQUIRED_NOT-ALLOWED_ALLOWED
    843                 ],
    844                 [dnl
    845                   _AS_ECHO_LOG([[Checked features DO NOT by default]])
    846                   AS_VAR_SET(m4_normalize([$6]),["required"]) # VAR-XOPEN-REQUIRED_NOT-ALLOWED_ALLOWED
    847                 ]
    848               )
    849               dnl Check whether features work with _XOPEN_SOURCE and extensions
    850               AC_COMPILE_IFELSE([AC_LANG_SOURCE([
    851 $defs_Var
    852 [#define _XOPEN_SOURCE] ]m4_normalize([$3])[
    853 $src_Var
    854                 ])],
    855                 [dnl
    856                   _AS_ECHO_LOG([[Checked features work with _XOPEN_SOURCE and extensions]])
    857                   AS_VAR_SET(m4_normalize([$5]),["allowed"]) # VAR-EXTENSIONS-REQUIRED_NOT-ALLOWED_ALLOWED
    858                 ],
    859                 [dnl
    860                   _AS_ECHO_LOG([[Checked features DO NOT work with _XOPEN_SOURCE and extensions]])
    861                   AS_VAR_SET(m4_normalize([$5]),["not allowed"]) # VAR-EXTENSIONS-REQUIRED_NOT-ALLOWED_ALLOWED
    862                 ]
    863               )
    864             ],
    865             [dnl
    866               _AS_ECHO_LOG([Checked features DO NOT work with _XOPEN_SOURCE=]m4_normalize([$3])[])
    867               AS_VAR_SET(m4_normalize([$5]),["not allowed"]) # VAR-EXTENSIONS-REQUIRED_NOT-ALLOWED_ALLOWED
    868               AS_VAR_SET(m4_normalize([$6]),["not allowed"]) # VAR-XOPEN-REQUIRED_NOT-ALLOWED_ALLOWED
    869             ]
    870           )
    871         ]
    872       )
    873     ],
    874     [dnl
    875       _AS_ECHO_LOG([[Checked features DO NOT work with undefined all extensions and without _XOPEN_SOURCE]])
    876       dnl Let's find the way to enable POSIX features
    877       AC_COMPILE_IFELSE([AC_LANG_SOURCE([
    878 $defs_Var
    879 $src_Var
    880         ])],
    881         [dnl
    882           _AS_ECHO_LOG([[Checked features work with extensions]])
    883           AS_VAR_SET(m4_normalize([$4]),["yes"]) # VAR-FEATURES-AVAILABLE-YES_NO
    884           AS_VAR_SET(m4_normalize([$7]),["yes"]) # VAR-FEATURES-DISABLEABLE-YES_NO
    885           dnl Check default state (without enabling/disabling)
    886           AC_COMPILE_IFELSE([AC_LANG_SOURCE([
    887 $src_Var
    888             ])],
    889             [dnl
    890               _AS_ECHO_LOG([[Checked features work by default]])
    891               AS_VAR_SET(m4_normalize([$5]),["allowed"]) # VAR-EXTENSIONS-REQUIRED_NOT-ALLOWED_ALLOWED
    892             ],
    893             [dnl
    894               _AS_ECHO_LOG([[Checked features DO NOT by default]])
    895               AS_VAR_SET(m4_normalize([$5]),["required"]) # VAR-EXTENSIONS-REQUIRED_NOT-ALLOWED_ALLOWED
    896             ]
    897           )
    898           dnl Check whether features work with extensions and _XOPEN_SOURCE
    899           AC_COMPILE_IFELSE([AC_LANG_SOURCE([
    900 $defs_Var
    901 [#define _XOPEN_SOURCE] ]m4_normalize([$3])[
    902 $src_Var
    903             ])],
    904             [dnl
    905               _AS_ECHO_LOG([Checked features work with extensions and _XOPEN_SOURCE=]m4_normalize([$3])[])
    906               AS_VAR_SET(m4_normalize([$6]),["allowed"]) # VAR-XOPEN-REQUIRED_NOT-ALLOWED_ALLOWED
    907             ],
    908             [dnl
    909               _AS_ECHO_LOG([Checked features DO NOT work with extensions and _XOPEN_SOURCE=]m4_normalize([$3])[])
    910               AS_VAR_SET(m4_normalize([$6]),["not allowed"]) # VAR-XOPEN-REQUIRED_NOT-ALLOWED_ALLOWED
    911             ]
    912           )
    913         ],
    914         [dnl
    915           _AS_ECHO_LOG([[Checked features DO NOT work with extensions]])
    916           dnl Check whether features work with _XOPEN_SOURCE
    917           AC_COMPILE_IFELSE([AC_LANG_SOURCE([
    918 [#define _XOPEN_SOURCE] ]m4_normalize([$3])[
    919 $src_Var
    920             ])],
    921             [dnl
    922               _AS_ECHO_LOG([Checked features work with _XOPEN_SOURCE=]m4_normalize([$3])[])
    923               AS_VAR_SET(m4_normalize([$4]),["yes"]) # VAR-FEATURES-AVAILABLE-YES_NO
    924               dnl Check default state (without enabling/disabling)
    925               AC_COMPILE_IFELSE([AC_LANG_SOURCE([
    926 $src_Var
    927                 ])],
    928                 [dnl
    929                   _AS_ECHO_LOG([[Checked features work by default]])
    930                   AS_VAR_SET(m4_normalize([$6]),["allowed"]) # VAR-XOPEN-REQUIRED_NOT-ALLOWED_ALLOWED
    931                 ],
    932                 [dnl
    933                   _AS_ECHO_LOG([[Checked features DO NOT by default]])
    934                   AS_VAR_SET(m4_normalize([$6]),["required"]) # VAR-XOPEN-REQUIRED_NOT-ALLOWED_ALLOWED
    935                 ]
    936               )
    937               dnl Check whether features work with _XOPEN_SOURCE and extensions
    938               AC_COMPILE_IFELSE([AC_LANG_SOURCE([
    939 $defs_Var
    940 [#define _XOPEN_SOURCE] ]m4_normalize([$3])[
    941 $src_Var
    942                 ])],
    943                 [dnl
    944                   _AS_ECHO_LOG([Checked features work with _XOPEN_SOURCE=]m4_normalize([$3])[ and extensions])
    945                   AS_VAR_SET(m4_normalize([$5]),["allowed"]) # VAR-EXTENSIONS-REQUIRED_NOT-ALLOWED_ALLOWED
    946                 ],
    947                 [dnl
    948                   _AS_ECHO_LOG([Checked features DO NOT work with _XOPEN_SOURCE=]m4_normalize([$3])[ and extensions])
    949                   AS_VAR_SET(m4_normalize([$5]),["not allowed"]) # VAR-EXTENSIONS-REQUIRED_NOT-ALLOWED_ALLOWED
    950                 ]
    951               )
    952             ],
    953             [dnl
    954               _AS_ECHO_LOG([Checked features DO NOT work with _XOPEN_SOURCE=]m4_normalize([$3])[])
    955               AS_VAR_SET(m4_normalize([$4]),["no"]) # VAR-FEATURES-AVAILABLE-YES_NO
    956             ]
    957           )
    958         ]
    959       )
    960     ]
    961   )
    962   CFLAGS="$mhd_SYS_EXT_SAVE_CFLAGS"
    963   AS_UNSET([mhd_SYS_EXT_SAVE_CFLAGS])
    964   AS_UNSET([defs_Var])
    965   AS_UNSET([src_Var])
    966   AS_VAR_POPDEF([defs_Var])dnl
    967   AS_VAR_POPDEF([src_Var])dnl
    968 ])
    969 
    970 
    971 #
    972 # MHD_CHECK_HEADER_PRESENCE(headername.h)
    973 #
    974 # Check only by preprocessor whether header file is present.
    975 
    976 AC_DEFUN([MHD_CHECK_HEADER_PRESENCE], [dnl
    977   AC_PREREQ([2.64])dnl for AS_VAR_PUSHDEF, AS_VAR_SET
    978   AS_VAR_PUSHDEF([mhd_cache_Var],[mhd_cv_header_[]$1[]_present])dnl
    979   AC_CACHE_CHECK([for presence of $1], [mhd_cache_Var], [dnl
    980     dnl Hack autoconf to get pure result of only single header presence
    981     cat > conftest.$ac_ext <<_ACEOF
    982 @%:@include <[]$1[]>
    983 _ACEOF
    984     AC_PREPROC_IFELSE([],
    985       [AS_VAR_SET([mhd_cache_Var],[["yes"]])],
    986       [AS_VAR_SET([mhd_cache_Var],[["no"]])]
    987     )
    988     rm -f conftest.$ac_ext
    989   ])
    990   AS_VAR_POPDEF([mhd_cache_Var])dnl
    991 ])
    992 
    993 
    994 #
    995 # MHD_CHECK_HEADERS_PRESENCE(oneheader.h otherheader.h ...)
    996 #
    997 # Check each specified header in whitespace-separated list for presence.
    998 
    999 AC_DEFUN([MHD_CHECK_HEADERS_PRESENCE], [dnl
   1000   AC_PREREQ([2.60])dnl for m4_foreach_w
   1001   m4_foreach_w([mhd_chk_Header], [$1],
   1002     [MHD_CHECK_HEADER_PRESENCE(m4_defn([mhd_chk_Header]))]
   1003   )dnl
   1004 ])
   1005 
   1006 
   1007 #
   1008 # MHD_CHECK_BASIC_HEADERS_PRESENCE
   1009 #
   1010 # Check basic headers for presence.
   1011 
   1012 AC_DEFUN([MHD_CHECK_BASIC_HEADERS_PRESENCE], [dnl
   1013   MHD_CHECK_HEADERS_PRESENCE([stdio.h wchar.h stdlib.h string.h strings.h stdint.h fcntl.h sys/types.h time.h unistd.h])
   1014 ])
   1015 
   1016 
   1017 #
   1018 # _MHD_SET_BASIC_INCLUDES
   1019 #
   1020 # Internal preparatory macro.
   1021 
   1022 AC_DEFUN([_MHD_SET_BASIC_INCLUDES], [dnl
   1023   AC_REQUIRE([MHD_CHECK_BASIC_HEADERS_PRESENCE])dnl
   1024   AS_IF([[test -z "$mhd_basic_headers_includes"]], [dnl
   1025     AS_VAR_IF([mhd_cv_header_stdio_h_present], [["yes"]],
   1026       [[mhd_basic_headers_includes="\
   1027 #include <stdio.h>
   1028 "     ]],[[mhd_basic_headers_includes=""]]
   1029     )
   1030     AS_VAR_IF([mhd_cv_header_sys_types_h_present], [["yes"]],
   1031       [[mhd_basic_headers_includes="${mhd_basic_headers_includes}\
   1032 #include <sys/types.h>
   1033 "     ]]
   1034     )
   1035     AS_VAR_IF([mhd_cv_header_wchar_h_present], [["yes"]],
   1036       [[mhd_basic_headers_includes="${mhd_basic_headers_includes}\
   1037 #include <wchar.h>
   1038 "     ]]
   1039     )
   1040     AS_VAR_IF([mhd_cv_header_stdlib_h_present], [["yes"]],
   1041       [[mhd_basic_headers_includes="${mhd_basic_headers_includes}\
   1042 #include <stdlib.h>
   1043 "     ]]
   1044     )
   1045     AS_VAR_IF([mhd_cv_header_string_h_present], [["yes"]],
   1046       [[mhd_basic_headers_includes="${mhd_basic_headers_includes}\
   1047 #include <string.h>
   1048 "     ]]
   1049     )
   1050     AS_VAR_IF([mhd_cv_header_strings_h_present], [["yes"]],
   1051       [[mhd_basic_headers_includes="${mhd_basic_headers_includes}\
   1052 #include <strings.h>
   1053 "     ]]
   1054     )
   1055     AS_VAR_IF([mhd_cv_header_stdint_h_present], [["yes"]],
   1056       [[mhd_basic_headers_includes="${mhd_basic_headers_includes}\
   1057 #include <stdint.h>
   1058 "     ]]
   1059     )
   1060     AS_VAR_IF([mhd_cv_header_fcntl_h_present], [["yes"]],
   1061       [[mhd_basic_headers_includes="${mhd_basic_headers_includes}\
   1062 #include <fcntl.h>
   1063 "     ]]
   1064     )
   1065     AS_VAR_IF([mhd_cv_header_time_h_present], [["yes"]],
   1066       [[mhd_basic_headers_includes="${mhd_basic_headers_includes}\
   1067 #include <time.h>
   1068 "     ]]
   1069     )
   1070     AS_VAR_IF([mhd_cv_header_unistd_h_present], [["yes"]],
   1071       [[mhd_basic_headers_includes="${mhd_basic_headers_includes}\
   1072 #include <unistd.h>
   1073 "     ]]
   1074     )
   1075   ])dnl
   1076 ])
   1077 
   1078 
   1079 #
   1080 # _MHD_BASIC_INCLUDES
   1081 #
   1082 # Internal macro. Output set of basic includes.
   1083 
   1084 AC_DEFUN([_MHD_BASIC_INCLUDES], [AC_REQUIRE([_MHD_SET_BASIC_INCLUDES])dnl
   1085 [ /* Start of MHD basic test includes */
   1086 $mhd_basic_headers_includes /* End of MHD basic test includes */
   1087 ]])
   1088 
   1089 
   1090 #
   1091 # MHD_CHECK_BASIC_HEADERS([PROLOG], [ACTION-IF-OK], [ACTION-IF-FAIL])
   1092 #
   1093 # Check whether basic headers can be compiled with specified prolog.
   1094 
   1095 AC_DEFUN([MHD_CHECK_BASIC_HEADERS], [dnl
   1096   AC_COMPILE_IFELSE([dnl
   1097     AC_LANG_PROGRAM([m4_n([$1])dnl
   1098 _MHD_BASIC_INCLUDES
   1099     ], [[int i = 1; i++; if(i) return i]])
   1100   ], [$2], [$3])
   1101 ])
   1102 
   1103 
   1104 #
   1105 # _MHD_SET_UNDEF_ALL_EXT
   1106 #
   1107 # Internal preparatory macro.
   1108 
   1109 AC_DEFUN([_MHD_SET_UNDEF_ALL_EXT], [m4_divert_text([INIT_PREPARE],[dnl
   1110 [mhd_undef_all_extensions="
   1111 #ifdef _GNU_SOURCE
   1112 #undef _GNU_SOURCE
   1113 #endif
   1114 #ifdef _XOPEN_SOURCE
   1115 #undef _XOPEN_SOURCE
   1116 #endif
   1117 #ifdef _XOPEN_SOURCE_EXTENDED
   1118 #undef _XOPEN_SOURCE_EXTENDED
   1119 #endif
   1120 #ifdef _XOPEN_VERSION
   1121 #undef _XOPEN_VERSION
   1122 #endif
   1123 #ifdef _POSIX_C_SOURCE
   1124 #undef _POSIX_C_SOURCE
   1125 #endif
   1126 #ifdef _POSIX_SOURCE
   1127 #undef _POSIX_SOURCE
   1128 #endif
   1129 #ifdef _DEFAULT_SOURCE
   1130 #undef _DEFAULT_SOURCE
   1131 #endif
   1132 #ifdef _BSD_SOURCE
   1133 #undef _BSD_SOURCE
   1134 #endif
   1135 #ifdef _SVID_SOURCE
   1136 #undef _SVID_SOURCE
   1137 #endif
   1138 #ifdef __EXTENSIONS__
   1139 #undef __EXTENSIONS__
   1140 #endif
   1141 #ifdef _ALL_SOURCE
   1142 #undef _ALL_SOURCE
   1143 #endif
   1144 #ifdef _TANDEM_SOURCE
   1145 #undef _TANDEM_SOURCE
   1146 #endif
   1147 #ifdef _DARWIN_C_SOURCE
   1148 #undef _DARWIN_C_SOURCE
   1149 #endif
   1150 #ifdef __BSD_VISIBLE
   1151 #undef __BSD_VISIBLE
   1152 #endif
   1153 #ifdef _NETBSD_SOURCE
   1154 #undef _NETBSD_SOURCE
   1155 #endif
   1156 "
   1157 ]])])
   1158 
   1159 
   1160 #
   1161 # _MHD_UNDEF_ALL_EXT
   1162 #
   1163 # Output prolog that undefine all known extension and visibility macros.
   1164 
   1165 AC_DEFUN([_MHD_UNDEF_ALL_EXT], [dnl
   1166 AC_REQUIRE([_MHD_SET_UNDEF_ALL_EXT])dnl
   1167 $mhd_undef_all_extensions
   1168 ])
   1169 
   1170 
   1171 #
   1172 # _MHD_CHECK_DEFINED(SYMBOL, [PROLOG],
   1173 #                    [ACTION-IF-DEFINED], [ACTION-IF-NOT-DEFINED])
   1174 #
   1175 # Silently checks for defined symbols.
   1176 
   1177 AC_DEFUN([_MHD_CHECK_DEFINED], [dnl
   1178   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
   1179 m4_n([$2])dnl
   1180 [#ifndef ]$1[
   1181 #error ]$1[ is not defined
   1182 choke me now;
   1183 #endif
   1184         ]],[])
   1185     ], [m4_default_nblank([$3])], [m4_default_nblank([$4])]
   1186   )
   1187 ])
   1188 
   1189 
   1190 #
   1191 # MHD_CHECK_DEFINED(SYMBOL, [PROLOG],
   1192 #                   [ACTION-IF-DEFINED], [ACTION-IF-NOT-DEFINED],
   1193 #                   [MESSAGE])
   1194 #
   1195 # Cache-check for defined symbols with printing results.
   1196 
   1197 AC_DEFUN([MHD_CHECK_DEFINED], [dnl
   1198   AS_VAR_PUSHDEF([mhd_cache_Var],[mhd_cv_macro_[]m4_tolower(m4_normalize($1))_defined])dnl
   1199   AC_CACHE_CHECK([dnl
   1200 m4_ifnblank([$5], [$5], [whether ]m4_normalize([$1])[ is already defined])],
   1201     [mhd_cache_Var], [dnl
   1202     _MHD_CHECK_DEFINED(m4_normalize([$1]), [$2],
   1203       [mhd_cache_Var="yes"],
   1204       [mhd_cache_Var="no"]
   1205     )
   1206   ])
   1207   _MHD_VAR_IF([mhd_cache_Var], [["yes"]], [$3], [$4])
   1208   AS_VAR_POPDEF([mhd_cache_Var])dnl
   1209 ])
   1210 
   1211 
   1212 #
   1213 # MHD_CHECK_DEFINED_MSG(SYMBOL, [PROLOG], [MESSAGE]
   1214 #                       [ACTION-IF-DEFINED], [ACTION-IF-NOT-DEFINED])
   1215 #
   1216 # Cache-check for defined symbols with printing results.
   1217 # Reordered arguments for better readability.
   1218 
   1219 AC_DEFUN([MHD_CHECK_DEFINED_MSG],[dnl
   1220 MHD_CHECK_DEFINED([$1],[$2],[$4],[$5],[$3])])
   1221 
   1222 #
   1223 # MHD_CHECK_ACCEPT_DEFINE(DEFINE-SYMBOL, [DEFINE-VALUE = 1], [PROLOG],
   1224 #                         [ACTION-IF-ACCEPTED], [ACTION-IF-NOT-ACCEPTED],
   1225 #                         [MESSAGE])
   1226 #
   1227 # Cache-check whether specific defined symbol do not break basic headers.
   1228 
   1229 AC_DEFUN([MHD_CHECK_ACCEPT_DEFINE], [dnl
   1230   AC_PREREQ([2.64])dnl for AS_VAR_PUSHDEF, AS_VAR_SET, m4_ifnblank
   1231   AS_VAR_PUSHDEF([mhd_cache_Var],
   1232     [mhd_cv_define_[]m4_tolower(m4_normalize($1))[]_accepted[]m4_ifnblank([$2],[_[]$2])])dnl
   1233   AC_CACHE_CHECK([dnl
   1234 m4_ifnblank([$6],[$6],[whether headers accept $1[]m4_ifnblank([$2],[[ with value ]$2])])],
   1235     [mhd_cache_Var], [dnl
   1236     MHD_CHECK_BASIC_HEADERS([
   1237 m4_n([$3])[#define ]$1 m4_default_nblank($2,[[1]])],
   1238       [mhd_cache_Var="yes"], [mhd_cache_Var="no"]
   1239     )
   1240   ])
   1241   _MHD_VAR_IF([mhd_cache_Var], [["yes"]], [$4], [$5])
   1242   AS_VAR_POPDEF([mhd_cache_Var])dnl
   1243 ])
   1244 
   1245 
   1246 #
   1247 # MHD_CHECK_DEF_AND_ACCEPT(DEFINE-SYMBOL, [DEFINE-VALUE = 1], [PROLOG],
   1248 #                         [ACTION-IF-DEFINED],
   1249 #                         [ACTION-IF-ACCEPTED], [ACTION-IF-NOT-ACCEPTED])
   1250 #
   1251 # Combination of MHD_CHECK_DEFINED_ECHO and MHD_CHECK_ACCEPT_DEFINE.
   1252 # First check whether symbol is already defined and, if not defined,
   1253 # checks whether it can be defined.
   1254 
   1255 AC_DEFUN([MHD_CHECK_DEF_AND_ACCEPT], [dnl
   1256   MHD_CHECK_DEFINED([$1], [$3], [$4], [dnl
   1257     MHD_CHECK_ACCEPT_DEFINE([$1], [$2], [$3], [$5], [$6])dnl
   1258   ])dnl
   1259 ])
   1260 
   1261 #
   1262 # _MHD_XOPEN_VAR_ADD(DEFINES_VAR, FLAGS_VAR, [PROLOG])
   1263 #
   1264 # Internal macro. Only to be used in MHD_SYS_EXT.
   1265 
   1266 AC_DEFUN([_MHD_XOPEN_VAR_ADD], [dnl
   1267   MHD_CHECK_DEF_AND_ACCEPT([[_XOPEN_SOURCE]], [[1]], [$3],
   1268     [
   1269       AC_CACHE_CHECK([[whether predefined value of _XOPEN_SOURCE is more or equal 500]],
   1270         [[mhd_cv_macro__xopen_source_def_fiveh]], [dnl
   1271           AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
   1272 m4_n([$3])dnl
   1273 [#if _XOPEN_SOURCE+0 < 500
   1274 #error Value of _XOPEN_SOURCE is less than 500
   1275 choke me now;
   1276 #endif
   1277               ]],[[int i = 0; i++; if(i) return i]])],
   1278             [[mhd_cv_macro__xopen_source_def_fiveh="yes"]],
   1279             [[mhd_cv_macro__xopen_source_def_fiveh="no"]]
   1280           )dnl
   1281         ]
   1282       )dnl
   1283     ],
   1284     [_MHD_SYS_EXT_VAR_ADD_FLAG([$1], [$2], [[_XOPEN_SOURCE]], [[1]])]
   1285   )
   1286   AS_IF([[test "x${mhd_cv_define__xopen_source_accepted_1}" = "xyes" || \
   1287           test "x${mhd_cv_macro__xopen_source_def_fiveh}" = "xno"]],
   1288     [
   1289       MHD_CHECK_DEF_AND_ACCEPT([[_XOPEN_SOURCE_EXTENDED]], [],
   1290         [
   1291 m4_n([$3])], [],
   1292       [dnl
   1293         _MHD_SYS_EXT_VAR_ADD_FLAG([$1],[$2],[[_XOPEN_SOURCE_EXTENDED]])
   1294       ], [dnl
   1295         MHD_CHECK_DEFINED([[_XOPEN_VERSION]],
   1296           [
   1297 m4_n([$3])], [],
   1298         [dnl
   1299           AC_CACHE_CHECK([[for value of _XOPEN_VERSION accepted by headers]],
   1300             [mhd_cv_define__xopen_version_accepted], [dnl
   1301             MHD_CHECK_BASIC_HEADERS([
   1302 m4_n([$3])
   1303 [#define _XOPEN_VERSION 4]],
   1304               [[mhd_cv_define__xopen_version_accepted="4"]],
   1305             [
   1306               MHD_CHECK_BASIC_HEADERS([
   1307 m4_n([$3])
   1308 [#define _XOPEN_VERSION 3]],
   1309                 [[mhd_cv_define__xopen_version_accepted="3"]],
   1310                 [[mhd_cv_define__xopen_version_accepted="no"]]
   1311               )
   1312             ])
   1313           ])
   1314           AS_VAR_IF([mhd_cv_define__xopen_version_accepted], [["no"]],
   1315             [[:]],
   1316           [dnl
   1317             _MHD_SYS_EXT_VAR_ADD_FLAG([$1],[$2],[[_XOPEN_VERSION]],
   1318               [[${mhd_cv_define__xopen_version_accepted}]]dnl
   1319             )
   1320           ])
   1321         ])
   1322       ])
   1323     ]
   1324   )dnl
   1325 ])
   1326