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