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