1#*************************************************************************** 2# _ _ ____ _ 3# Project ___| | | | _ \| | 4# / __| | | | |_) | | 5# | (__| |_| | _ <| |___ 6# \___|\___/|_| \_\_____| 7# 8# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al. 9# 10# This software is licensed as described in the file COPYING, which 11# you should have received as part of this distribution. The terms 12# are also available at https://curl.haxx.se/docs/copyright.html. 13# 14# You may opt to use, copy, modify, merge, publish, distribute and/or sell 15# copies of the Software, and permit persons to whom the Software is 16# furnished to do so, under the terms of the COPYING file. 17# 18# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 19# KIND, either express or implied. 20# 21#*************************************************************************** 22 23dnl CURL_CHECK_DEF (SYMBOL, [INCLUDES], [SILENT]) 24dnl ------------------------------------------------- 25dnl Use the C preprocessor to find out if the given object-style symbol 26dnl is defined and get its expansion. This macro will not use default 27dnl includes even if no INCLUDES argument is given. This macro will run 28dnl silently when invoked with three arguments. If the expansion would 29dnl result in a set of double-quoted strings the returned expansion will 30dnl actually be a single double-quoted string concatenating all them. 31 32AC_DEFUN([CURL_CHECK_DEF], [ 33 AC_REQUIRE([CURL_CPP_P])dnl 34 OLDCPPFLAGS=$CPPFLAGS 35 # CPPPFLAG comes from CURL_CPP_P 36 CPPFLAGS="$CPPFLAGS $CPPPFLAG" 37 AS_VAR_PUSHDEF([ac_HaveDef], [curl_cv_have_def_$1])dnl 38 AS_VAR_PUSHDEF([ac_Def], [curl_cv_def_$1])dnl 39 if test -z "$SED"; then 40 AC_MSG_ERROR([SED not set. Cannot continue without SED being set.]) 41 fi 42 if test -z "$GREP"; then 43 AC_MSG_ERROR([GREP not set. Cannot continue without GREP being set.]) 44 fi 45 ifelse($3,,[AC_MSG_CHECKING([for preprocessor definition of $1])]) 46 tmp_exp="" 47 AC_PREPROC_IFELSE([ 48 AC_LANG_SOURCE( 49ifelse($2,,,[$2])[[ 50#ifdef $1 51CURL_DEF_TOKEN $1 52#endif 53 ]]) 54 ],[ 55 tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \ 56 "$GREP" CURL_DEF_TOKEN 2>/dev/null | \ 57 "$SED" 's/.*CURL_DEF_TOKEN[[ ]][[ ]]*//' 2>/dev/null | \ 58 "$SED" 's/[["]][[ ]]*[["]]//g' 2>/dev/null` 59 if test -z "$tmp_exp" || test "$tmp_exp" = "$1"; then 60 tmp_exp="" 61 fi 62 ]) 63 if test -z "$tmp_exp"; then 64 AS_VAR_SET(ac_HaveDef, no) 65 ifelse($3,,[AC_MSG_RESULT([no])]) 66 else 67 AS_VAR_SET(ac_HaveDef, yes) 68 AS_VAR_SET(ac_Def, $tmp_exp) 69 ifelse($3,,[AC_MSG_RESULT([$tmp_exp])]) 70 fi 71 AS_VAR_POPDEF([ac_Def])dnl 72 AS_VAR_POPDEF([ac_HaveDef])dnl 73 CPPFLAGS=$OLDCPPFLAGS 74]) 75 76 77dnl CURL_CHECK_DEF_CC (SYMBOL, [INCLUDES], [SILENT]) 78dnl ------------------------------------------------- 79dnl Use the C compiler to find out only if the given symbol is defined 80dnl or not, this can not find out its expansion. This macro will not use 81dnl default includes even if no INCLUDES argument is given. This macro 82dnl will run silently when invoked with three arguments. 83 84AC_DEFUN([CURL_CHECK_DEF_CC], [ 85 AS_VAR_PUSHDEF([ac_HaveDef], [curl_cv_have_def_$1])dnl 86 ifelse($3,,[AC_MSG_CHECKING([for compiler definition of $1])]) 87 AC_COMPILE_IFELSE([ 88 AC_LANG_SOURCE( 89ifelse($2,,,[$2])[[ 90int main (void) 91{ 92#ifdef $1 93 return 0; 94#else 95 force compilation error 96#endif 97} 98 ]]) 99 ],[ 100 tst_symbol_defined="yes" 101 ],[ 102 tst_symbol_defined="no" 103 ]) 104 if test "$tst_symbol_defined" = "yes"; then 105 AS_VAR_SET(ac_HaveDef, yes) 106 ifelse($3,,[AC_MSG_RESULT([yes])]) 107 else 108 AS_VAR_SET(ac_HaveDef, no) 109 ifelse($3,,[AC_MSG_RESULT([no])]) 110 fi 111 AS_VAR_POPDEF([ac_HaveDef])dnl 112]) 113 114 115dnl CURL_CHECK_LIB_XNET 116dnl ------------------------------------------------- 117dnl Verify if X/Open network library is required. 118 119AC_DEFUN([CURL_CHECK_LIB_XNET], [ 120 AC_MSG_CHECKING([if X/Open network library is required]) 121 tst_lib_xnet_required="no" 122 AC_COMPILE_IFELSE([ 123 AC_LANG_SOURCE([[ 124int main (void) 125{ 126#if defined(__hpux) && defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 600) 127 return 0; 128#elif defined(__hpux) && defined(_XOPEN_SOURCE_EXTENDED) 129 return 0; 130#else 131 force compilation error 132#endif 133} 134 ]]) 135 ],[ 136 tst_lib_xnet_required="yes" 137 LIBS="-lxnet $LIBS" 138 ]) 139 AC_MSG_RESULT([$tst_lib_xnet_required]) 140]) 141 142 143dnl CURL_CHECK_AIX_ALL_SOURCE 144dnl ------------------------------------------------- 145dnl Provides a replacement of traditional AC_AIX with 146dnl an uniform behaviour across all autoconf versions, 147dnl and with our own placement rules. 148 149AC_DEFUN([CURL_CHECK_AIX_ALL_SOURCE], [ 150 AH_VERBATIM([_ALL_SOURCE], 151 [/* Define to 1 if OS is AIX. */ 152#ifndef _ALL_SOURCE 153# undef _ALL_SOURCE 154#endif]) 155 AC_BEFORE([$0], [AC_SYS_LARGEFILE])dnl 156 AC_BEFORE([$0], [CURL_CONFIGURE_REENTRANT])dnl 157 AC_BEFORE([$0], [CURL_CONFIGURE_PULL_SYS_POLL])dnl 158 AC_MSG_CHECKING([if OS is AIX (to define _ALL_SOURCE)]) 159 AC_EGREP_CPP([yes_this_is_aix],[ 160#ifdef _AIX 161 yes_this_is_aix 162#endif 163 ],[ 164 AC_MSG_RESULT([yes]) 165 AC_DEFINE(_ALL_SOURCE) 166 ],[ 167 AC_MSG_RESULT([no]) 168 ]) 169]) 170 171 172dnl CURL_CHECK_HEADER_WINDOWS 173dnl ------------------------------------------------- 174dnl Check for compilable and valid windows.h header 175 176AC_DEFUN([CURL_CHECK_HEADER_WINDOWS], [ 177 AC_CACHE_CHECK([for windows.h], [curl_cv_header_windows_h], [ 178 AC_COMPILE_IFELSE([ 179 AC_LANG_PROGRAM([[ 180#undef inline 181#ifndef WIN32_LEAN_AND_MEAN 182#define WIN32_LEAN_AND_MEAN 183#endif 184#include <windows.h> 185 ]],[[ 186#if defined(__CYGWIN__) || defined(__CEGCC__) 187 HAVE_WINDOWS_H shall not be defined. 188#else 189 int dummy=2*WINVER; 190#endif 191 ]]) 192 ],[ 193 curl_cv_header_windows_h="yes" 194 ],[ 195 curl_cv_header_windows_h="no" 196 ]) 197 ]) 198 case "$curl_cv_header_windows_h" in 199 yes) 200 AC_DEFINE_UNQUOTED(HAVE_WINDOWS_H, 1, 201 [Define to 1 if you have the windows.h header file.]) 202 ;; 203 esac 204]) 205 206 207dnl CURL_CHECK_NATIVE_WINDOWS 208dnl ------------------------------------------------- 209dnl Check if building a native Windows target 210 211AC_DEFUN([CURL_CHECK_NATIVE_WINDOWS], [ 212 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl 213 AC_CACHE_CHECK([whether build target is a native Windows one], [curl_cv_native_windows], [ 214 if test "$curl_cv_header_windows_h" = "no"; then 215 curl_cv_native_windows="no" 216 else 217 AC_COMPILE_IFELSE([ 218 AC_LANG_PROGRAM([[ 219 ]],[[ 220#if defined(__MINGW32__) || defined(__MINGW32CE__) || \ 221 (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64))) 222 int dummy=1; 223#else 224 Not a native Windows build target. 225#endif 226 ]]) 227 ],[ 228 curl_cv_native_windows="yes" 229 ],[ 230 curl_cv_native_windows="no" 231 ]) 232 fi 233 ]) 234 AM_CONDITIONAL(DOING_NATIVE_WINDOWS, test "x$curl_cv_native_windows" = xyes) 235]) 236 237 238dnl CURL_CHECK_HEADER_WINSOCK 239dnl ------------------------------------------------- 240dnl Check for compilable and valid winsock.h header 241 242AC_DEFUN([CURL_CHECK_HEADER_WINSOCK], [ 243 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl 244 AC_CACHE_CHECK([for winsock.h], [curl_cv_header_winsock_h], [ 245 AC_COMPILE_IFELSE([ 246 AC_LANG_PROGRAM([[ 247#undef inline 248#ifndef WIN32_LEAN_AND_MEAN 249#define WIN32_LEAN_AND_MEAN 250#endif 251#include <windows.h> 252#include <winsock.h> 253 ]],[[ 254#if defined(__CYGWIN__) || defined(__CEGCC__) 255 HAVE_WINSOCK_H shall not be defined. 256#else 257 int dummy=WSACleanup(); 258#endif 259 ]]) 260 ],[ 261 curl_cv_header_winsock_h="yes" 262 ],[ 263 curl_cv_header_winsock_h="no" 264 ]) 265 ]) 266 case "$curl_cv_header_winsock_h" in 267 yes) 268 AC_DEFINE_UNQUOTED(HAVE_WINSOCK_H, 1, 269 [Define to 1 if you have the winsock.h header file.]) 270 ;; 271 esac 272]) 273 274 275dnl CURL_CHECK_HEADER_WINSOCK2 276dnl ------------------------------------------------- 277dnl Check for compilable and valid winsock2.h header 278 279AC_DEFUN([CURL_CHECK_HEADER_WINSOCK2], [ 280 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl 281 AC_CACHE_CHECK([for winsock2.h], [curl_cv_header_winsock2_h], [ 282 AC_COMPILE_IFELSE([ 283 AC_LANG_PROGRAM([[ 284#undef inline 285#ifndef WIN32_LEAN_AND_MEAN 286#define WIN32_LEAN_AND_MEAN 287#endif 288#include <windows.h> 289#include <winsock2.h> 290 ]],[[ 291#if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__) 292 HAVE_WINSOCK2_H shall not be defined. 293#else 294 int dummy=2*IPPROTO_ESP; 295#endif 296 ]]) 297 ],[ 298 curl_cv_header_winsock2_h="yes" 299 ],[ 300 curl_cv_header_winsock2_h="no" 301 ]) 302 ]) 303 case "$curl_cv_header_winsock2_h" in 304 yes) 305 AC_DEFINE_UNQUOTED(HAVE_WINSOCK2_H, 1, 306 [Define to 1 if you have the winsock2.h header file.]) 307 ;; 308 esac 309]) 310 311 312dnl CURL_CHECK_HEADER_WS2TCPIP 313dnl ------------------------------------------------- 314dnl Check for compilable and valid ws2tcpip.h header 315 316AC_DEFUN([CURL_CHECK_HEADER_WS2TCPIP], [ 317 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl 318 AC_CACHE_CHECK([for ws2tcpip.h], [curl_cv_header_ws2tcpip_h], [ 319 AC_COMPILE_IFELSE([ 320 AC_LANG_PROGRAM([[ 321#undef inline 322#ifndef WIN32_LEAN_AND_MEAN 323#define WIN32_LEAN_AND_MEAN 324#endif 325#include <windows.h> 326#include <winsock2.h> 327#include <ws2tcpip.h> 328 ]],[[ 329#if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__) 330 HAVE_WS2TCPIP_H shall not be defined. 331#else 332 int dummy=2*IP_PKTINFO; 333#endif 334 ]]) 335 ],[ 336 curl_cv_header_ws2tcpip_h="yes" 337 ],[ 338 curl_cv_header_ws2tcpip_h="no" 339 ]) 340 ]) 341 case "$curl_cv_header_ws2tcpip_h" in 342 yes) 343 AC_DEFINE_UNQUOTED(HAVE_WS2TCPIP_H, 1, 344 [Define to 1 if you have the ws2tcpip.h header file.]) 345 ;; 346 esac 347]) 348 349 350dnl CURL_CHECK_HEADER_WINLDAP 351dnl ------------------------------------------------- 352dnl Check for compilable and valid winldap.h header 353 354AC_DEFUN([CURL_CHECK_HEADER_WINLDAP], [ 355 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl 356 AC_CACHE_CHECK([for winldap.h], [curl_cv_header_winldap_h], [ 357 AC_COMPILE_IFELSE([ 358 AC_LANG_PROGRAM([[ 359#undef inline 360#ifdef HAVE_WINDOWS_H 361#ifndef WIN32_LEAN_AND_MEAN 362#define WIN32_LEAN_AND_MEAN 363#endif 364#include <windows.h> 365#endif 366#include <winldap.h> 367 ]],[[ 368#if defined(__CYGWIN__) || defined(__CEGCC__) 369 HAVE_WINLDAP_H shall not be defined. 370#else 371 LDAP *ldp = ldap_init("dummy", LDAP_PORT); 372 ULONG res = ldap_unbind(ldp); 373#endif 374 ]]) 375 ],[ 376 curl_cv_header_winldap_h="yes" 377 ],[ 378 curl_cv_header_winldap_h="no" 379 ]) 380 ]) 381 case "$curl_cv_header_winldap_h" in 382 yes) 383 AC_DEFINE_UNQUOTED(HAVE_WINLDAP_H, 1, 384 [Define to 1 if you have the winldap.h header file.]) 385 ;; 386 esac 387]) 388 389 390dnl CURL_CHECK_HEADER_WINBER 391dnl ------------------------------------------------- 392dnl Check for compilable and valid winber.h header 393 394AC_DEFUN([CURL_CHECK_HEADER_WINBER], [ 395 AC_REQUIRE([CURL_CHECK_HEADER_WINLDAP])dnl 396 AC_CACHE_CHECK([for winber.h], [curl_cv_header_winber_h], [ 397 AC_COMPILE_IFELSE([ 398 AC_LANG_PROGRAM([[ 399#undef inline 400#ifdef HAVE_WINDOWS_H 401#ifndef WIN32_LEAN_AND_MEAN 402#define WIN32_LEAN_AND_MEAN 403#endif 404#include <windows.h> 405#endif 406#include <winldap.h> 407#include <winber.h> 408 ]],[[ 409#if defined(__CYGWIN__) || defined(__CEGCC__) 410 HAVE_WINBER_H shall not be defined. 411#else 412 BERVAL *bvp = NULL; 413 BerElement *bep = ber_init(bvp); 414 ber_free(bep, 1); 415#endif 416 ]]) 417 ],[ 418 curl_cv_header_winber_h="yes" 419 ],[ 420 curl_cv_header_winber_h="no" 421 ]) 422 ]) 423 case "$curl_cv_header_winber_h" in 424 yes) 425 AC_DEFINE_UNQUOTED(HAVE_WINBER_H, 1, 426 [Define to 1 if you have the winber.h header file.]) 427 ;; 428 esac 429]) 430 431 432dnl CURL_CHECK_HEADER_LBER 433dnl ------------------------------------------------- 434dnl Check for compilable and valid lber.h header, 435dnl and check if it is needed even with ldap.h 436 437AC_DEFUN([CURL_CHECK_HEADER_LBER], [ 438 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl 439 AC_CACHE_CHECK([for lber.h], [curl_cv_header_lber_h], [ 440 AC_COMPILE_IFELSE([ 441 AC_LANG_PROGRAM([[ 442#undef inline 443#ifdef HAVE_WINDOWS_H 444#ifndef WIN32_LEAN_AND_MEAN 445#define WIN32_LEAN_AND_MEAN 446#endif 447#include <windows.h> 448#else 449#ifdef HAVE_SYS_TYPES_H 450#include <sys/types.h> 451#endif 452#endif 453#ifndef NULL 454#define NULL (void *)0 455#endif 456#include <lber.h> 457 ]],[[ 458 BerValue *bvp = NULL; 459 BerElement *bep = ber_init(bvp); 460 ber_free(bep, 1); 461 ]]) 462 ],[ 463 curl_cv_header_lber_h="yes" 464 ],[ 465 curl_cv_header_lber_h="no" 466 ]) 467 ]) 468 if test "$curl_cv_header_lber_h" = "yes"; then 469 AC_DEFINE_UNQUOTED(HAVE_LBER_H, 1, 470 [Define to 1 if you have the lber.h header file.]) 471 # 472 AC_COMPILE_IFELSE([ 473 AC_LANG_PROGRAM([[ 474#undef inline 475#ifdef HAVE_WINDOWS_H 476#ifndef WIN32_LEAN_AND_MEAN 477#define WIN32_LEAN_AND_MEAN 478#endif 479#include <windows.h> 480#else 481#ifdef HAVE_SYS_TYPES_H 482#include <sys/types.h> 483#endif 484#endif 485#ifndef NULL 486#define NULL (void *)0 487#endif 488#ifndef LDAP_DEPRECATED 489#define LDAP_DEPRECATED 1 490#endif 491#include <ldap.h> 492 ]],[[ 493 BerValue *bvp = NULL; 494 BerElement *bep = ber_init(bvp); 495 ber_free(bep, 1); 496 ]]) 497 ],[ 498 curl_cv_need_header_lber_h="no" 499 ],[ 500 curl_cv_need_header_lber_h="yes" 501 ]) 502 # 503 case "$curl_cv_need_header_lber_h" in 504 yes) 505 AC_DEFINE_UNQUOTED(NEED_LBER_H, 1, 506 [Define to 1 if you need the lber.h header file even with ldap.h]) 507 ;; 508 esac 509 fi 510]) 511 512 513dnl CURL_CHECK_HEADER_LDAP 514dnl ------------------------------------------------- 515dnl Check for compilable and valid ldap.h header 516 517AC_DEFUN([CURL_CHECK_HEADER_LDAP], [ 518 AC_REQUIRE([CURL_CHECK_HEADER_LBER])dnl 519 AC_CACHE_CHECK([for ldap.h], [curl_cv_header_ldap_h], [ 520 AC_COMPILE_IFELSE([ 521 AC_LANG_PROGRAM([[ 522#undef inline 523#ifdef HAVE_WINDOWS_H 524#ifndef WIN32_LEAN_AND_MEAN 525#define WIN32_LEAN_AND_MEAN 526#endif 527#include <windows.h> 528#else 529#ifdef HAVE_SYS_TYPES_H 530#include <sys/types.h> 531#endif 532#endif 533#ifndef LDAP_DEPRECATED 534#define LDAP_DEPRECATED 1 535#endif 536#ifdef NEED_LBER_H 537#include <lber.h> 538#endif 539#include <ldap.h> 540 ]],[[ 541 LDAP *ldp = ldap_init("dummy", LDAP_PORT); 542 int res = ldap_unbind(ldp); 543 ]]) 544 ],[ 545 curl_cv_header_ldap_h="yes" 546 ],[ 547 curl_cv_header_ldap_h="no" 548 ]) 549 ]) 550 case "$curl_cv_header_ldap_h" in 551 yes) 552 AC_DEFINE_UNQUOTED(HAVE_LDAP_H, 1, 553 [Define to 1 if you have the ldap.h header file.]) 554 ;; 555 esac 556]) 557 558 559dnl CURL_CHECK_HEADER_LDAP_SSL 560dnl ------------------------------------------------- 561dnl Check for compilable and valid ldap_ssl.h header 562 563AC_DEFUN([CURL_CHECK_HEADER_LDAP_SSL], [ 564 AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl 565 AC_CACHE_CHECK([for ldap_ssl.h], [curl_cv_header_ldap_ssl_h], [ 566 AC_COMPILE_IFELSE([ 567 AC_LANG_PROGRAM([[ 568#undef inline 569#ifdef HAVE_WINDOWS_H 570#ifndef WIN32_LEAN_AND_MEAN 571#define WIN32_LEAN_AND_MEAN 572#endif 573#include <windows.h> 574#else 575#ifdef HAVE_SYS_TYPES_H 576#include <sys/types.h> 577#endif 578#endif 579#ifndef LDAP_DEPRECATED 580#define LDAP_DEPRECATED 1 581#endif 582#ifdef NEED_LBER_H 583#include <lber.h> 584#endif 585#ifdef HAVE_LDAP_H 586#include <ldap.h> 587#endif 588#include <ldap_ssl.h> 589 ]],[[ 590 LDAP *ldp = ldapssl_init("dummy", LDAPS_PORT, 1); 591 ]]) 592 ],[ 593 curl_cv_header_ldap_ssl_h="yes" 594 ],[ 595 curl_cv_header_ldap_ssl_h="no" 596 ]) 597 ]) 598 case "$curl_cv_header_ldap_ssl_h" in 599 yes) 600 AC_DEFINE_UNQUOTED(HAVE_LDAP_SSL_H, 1, 601 [Define to 1 if you have the ldap_ssl.h header file.]) 602 ;; 603 esac 604]) 605 606 607dnl CURL_CHECK_HEADER_LDAPSSL 608dnl ------------------------------------------------- 609dnl Check for compilable and valid ldapssl.h header 610 611AC_DEFUN([CURL_CHECK_HEADER_LDAPSSL], [ 612 AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl 613 AC_CACHE_CHECK([for ldapssl.h], [curl_cv_header_ldapssl_h], [ 614 AC_COMPILE_IFELSE([ 615 AC_LANG_PROGRAM([[ 616#undef inline 617#ifdef HAVE_WINDOWS_H 618#ifndef WIN32_LEAN_AND_MEAN 619#define WIN32_LEAN_AND_MEAN 620#endif 621#include <windows.h> 622#else 623#ifdef HAVE_SYS_TYPES_H 624#include <sys/types.h> 625#endif 626#endif 627#ifndef NULL 628#define NULL (void *)0 629#endif 630#ifndef LDAP_DEPRECATED 631#define LDAP_DEPRECATED 1 632#endif 633#ifdef NEED_LBER_H 634#include <lber.h> 635#endif 636#ifdef HAVE_LDAP_H 637#include <ldap.h> 638#endif 639#include <ldapssl.h> 640 ]],[[ 641 char *cert_label = NULL; 642 LDAP *ldp = ldap_ssl_init("dummy", LDAPS_PORT, cert_label); 643 ]]) 644 ],[ 645 curl_cv_header_ldapssl_h="yes" 646 ],[ 647 curl_cv_header_ldapssl_h="no" 648 ]) 649 ]) 650 case "$curl_cv_header_ldapssl_h" in 651 yes) 652 AC_DEFINE_UNQUOTED(HAVE_LDAPSSL_H, 1, 653 [Define to 1 if you have the ldapssl.h header file.]) 654 ;; 655 esac 656]) 657 658 659dnl CURL_CHECK_LIBS_WINLDAP 660dnl ------------------------------------------------- 661dnl Check for libraries needed for WINLDAP support, 662dnl and prepended to LIBS any needed libraries. 663dnl This macro can take an optional parameter with a 664dnl whitespace separated list of libraries to check 665dnl before the WINLDAP default ones. 666 667AC_DEFUN([CURL_CHECK_LIBS_WINLDAP], [ 668 AC_REQUIRE([CURL_CHECK_HEADER_WINBER])dnl 669 # 670 AC_MSG_CHECKING([for WINLDAP libraries]) 671 # 672 u_libs="" 673 # 674 ifelse($1,,,[ 675 for x_lib in $1; do 676 case "$x_lib" in 677 -l*) 678 l_lib="$x_lib" 679 ;; 680 *) 681 l_lib="-l$x_lib" 682 ;; 683 esac 684 if test -z "$u_libs"; then 685 u_libs="$l_lib" 686 else 687 u_libs="$u_libs $l_lib" 688 fi 689 done 690 ]) 691 # 692 curl_cv_save_LIBS="$LIBS" 693 curl_cv_ldap_LIBS="unknown" 694 # 695 for x_nlibs in '' "$u_libs" \ 696 '-lwldap32' ; do 697 if test "$curl_cv_ldap_LIBS" = "unknown"; then 698 if test -z "$x_nlibs"; then 699 LIBS="$curl_cv_save_LIBS" 700 else 701 LIBS="$x_nlibs $curl_cv_save_LIBS" 702 fi 703 AC_LINK_IFELSE([ 704 AC_LANG_PROGRAM([[ 705#undef inline 706#ifdef HAVE_WINDOWS_H 707#ifndef WIN32_LEAN_AND_MEAN 708#define WIN32_LEAN_AND_MEAN 709#endif 710#include <windows.h> 711#ifdef HAVE_WINLDAP_H 712#include <winldap.h> 713#endif 714#ifdef HAVE_WINBER_H 715#include <winber.h> 716#endif 717#endif 718 ]],[[ 719 BERVAL *bvp = NULL; 720 BerElement *bep = ber_init(bvp); 721 LDAP *ldp = ldap_init("dummy", LDAP_PORT); 722 ULONG res = ldap_unbind(ldp); 723 ber_free(bep, 1); 724 ]]) 725 ],[ 726 curl_cv_ldap_LIBS="$x_nlibs" 727 ]) 728 fi 729 done 730 # 731 LIBS="$curl_cv_save_LIBS" 732 # 733 case X-"$curl_cv_ldap_LIBS" in 734 X-unknown) 735 AC_MSG_RESULT([cannot find WINLDAP libraries]) 736 ;; 737 X-) 738 AC_MSG_RESULT([no additional lib required]) 739 ;; 740 *) 741 if test -z "$curl_cv_save_LIBS"; then 742 LIBS="$curl_cv_ldap_LIBS" 743 else 744 LIBS="$curl_cv_ldap_LIBS $curl_cv_save_LIBS" 745 fi 746 AC_MSG_RESULT([$curl_cv_ldap_LIBS]) 747 ;; 748 esac 749 # 750]) 751 752 753dnl CURL_CHECK_LIBS_LDAP 754dnl ------------------------------------------------- 755dnl Check for libraries needed for LDAP support, 756dnl and prepended to LIBS any needed libraries. 757dnl This macro can take an optional parameter with a 758dnl whitespace separated list of libraries to check 759dnl before the default ones. 760 761AC_DEFUN([CURL_CHECK_LIBS_LDAP], [ 762 AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl 763 # 764 AC_MSG_CHECKING([for LDAP libraries]) 765 # 766 u_libs="" 767 # 768 ifelse($1,,,[ 769 for x_lib in $1; do 770 case "$x_lib" in 771 -l*) 772 l_lib="$x_lib" 773 ;; 774 *) 775 l_lib="-l$x_lib" 776 ;; 777 esac 778 if test -z "$u_libs"; then 779 u_libs="$l_lib" 780 else 781 u_libs="$u_libs $l_lib" 782 fi 783 done 784 ]) 785 # 786 curl_cv_save_LIBS="$LIBS" 787 curl_cv_ldap_LIBS="unknown" 788 # 789 for x_nlibs in '' "$u_libs" \ 790 '-lldap' \ 791 '-lldap -llber' \ 792 '-llber -lldap' \ 793 '-lldapssl -lldapx -lldapsdk' \ 794 '-lldapsdk -lldapx -lldapssl' \ 795 '-lldap -llber -lssl -lcrypto' ; do 796 797 if test "$curl_cv_ldap_LIBS" = "unknown"; then 798 if test -z "$x_nlibs"; then 799 LIBS="$curl_cv_save_LIBS" 800 else 801 LIBS="$x_nlibs $curl_cv_save_LIBS" 802 fi 803 AC_LINK_IFELSE([ 804 AC_LANG_PROGRAM([[ 805#undef inline 806#ifdef HAVE_WINDOWS_H 807#ifndef WIN32_LEAN_AND_MEAN 808#define WIN32_LEAN_AND_MEAN 809#endif 810#include <windows.h> 811#else 812#ifdef HAVE_SYS_TYPES_H 813#include <sys/types.h> 814#endif 815#endif 816#ifndef NULL 817#define NULL (void *)0 818#endif 819#ifndef LDAP_DEPRECATED 820#define LDAP_DEPRECATED 1 821#endif 822#ifdef NEED_LBER_H 823#include <lber.h> 824#endif 825#ifdef HAVE_LDAP_H 826#include <ldap.h> 827#endif 828 ]],[[ 829 BerValue *bvp = NULL; 830 BerElement *bep = ber_init(bvp); 831 LDAP *ldp = ldap_init("dummy", LDAP_PORT); 832 int res = ldap_unbind(ldp); 833 ber_free(bep, 1); 834 ]]) 835 ],[ 836 curl_cv_ldap_LIBS="$x_nlibs" 837 ]) 838 fi 839 done 840 # 841 LIBS="$curl_cv_save_LIBS" 842 # 843 case X-"$curl_cv_ldap_LIBS" in 844 X-unknown) 845 AC_MSG_RESULT([cannot find LDAP libraries]) 846 ;; 847 X-) 848 AC_MSG_RESULT([no additional lib required]) 849 ;; 850 *) 851 if test -z "$curl_cv_save_LIBS"; then 852 LIBS="$curl_cv_ldap_LIBS" 853 else 854 LIBS="$curl_cv_ldap_LIBS $curl_cv_save_LIBS" 855 fi 856 AC_MSG_RESULT([$curl_cv_ldap_LIBS]) 857 ;; 858 esac 859 # 860]) 861 862 863dnl CURL_CHECK_HEADER_MALLOC 864dnl ------------------------------------------------- 865dnl Check for compilable and valid malloc.h header, 866dnl and check if it is needed even with stdlib.h 867 868AC_DEFUN([CURL_CHECK_HEADER_MALLOC], [ 869 AC_CACHE_CHECK([for malloc.h], [curl_cv_header_malloc_h], [ 870 AC_COMPILE_IFELSE([ 871 AC_LANG_PROGRAM([[ 872#include <malloc.h> 873 ]],[[ 874 void *p = malloc(10); 875 void *q = calloc(10,10); 876 free(p); 877 free(q); 878 ]]) 879 ],[ 880 curl_cv_header_malloc_h="yes" 881 ],[ 882 curl_cv_header_malloc_h="no" 883 ]) 884 ]) 885 if test "$curl_cv_header_malloc_h" = "yes"; then 886 AC_DEFINE_UNQUOTED(HAVE_MALLOC_H, 1, 887 [Define to 1 if you have the malloc.h header file.]) 888 # 889 AC_COMPILE_IFELSE([ 890 AC_LANG_PROGRAM([[ 891#include <stdlib.h> 892 ]],[[ 893 void *p = malloc(10); 894 void *q = calloc(10,10); 895 free(p); 896 free(q); 897 ]]) 898 ],[ 899 curl_cv_need_header_malloc_h="no" 900 ],[ 901 curl_cv_need_header_malloc_h="yes" 902 ]) 903 # 904 case "$curl_cv_need_header_malloc_h" in 905 yes) 906 AC_DEFINE_UNQUOTED(NEED_MALLOC_H, 1, 907 [Define to 1 if you need the malloc.h header file even with stdlib.h]) 908 ;; 909 esac 910 fi 911]) 912 913 914dnl CURL_CHECK_HEADER_MEMORY 915dnl ------------------------------------------------- 916dnl Check for compilable and valid memory.h header, 917dnl and check if it is needed even with stdlib.h for 918dnl memory related functions. 919 920AC_DEFUN([CURL_CHECK_HEADER_MEMORY], [ 921 AC_CACHE_CHECK([for memory.h], [curl_cv_header_memory_h], [ 922 AC_COMPILE_IFELSE([ 923 AC_LANG_PROGRAM([[ 924#include <memory.h> 925 ]],[[ 926 void *p = malloc(10); 927 void *q = calloc(10,10); 928 free(p); 929 free(q); 930 ]]) 931 ],[ 932 curl_cv_header_memory_h="yes" 933 ],[ 934 curl_cv_header_memory_h="no" 935 ]) 936 ]) 937 if test "$curl_cv_header_memory_h" = "yes"; then 938 AC_DEFINE_UNQUOTED(HAVE_MEMORY_H, 1, 939 [Define to 1 if you have the memory.h header file.]) 940 # 941 AC_COMPILE_IFELSE([ 942 AC_LANG_PROGRAM([[ 943#include <stdlib.h> 944 ]],[[ 945 void *p = malloc(10); 946 void *q = calloc(10,10); 947 free(p); 948 free(q); 949 ]]) 950 ],[ 951 curl_cv_need_header_memory_h="no" 952 ],[ 953 curl_cv_need_header_memory_h="yes" 954 ]) 955 # 956 case "$curl_cv_need_header_memory_h" in 957 yes) 958 AC_DEFINE_UNQUOTED(NEED_MEMORY_H, 1, 959 [Define to 1 if you need the memory.h header file even with stdlib.h]) 960 ;; 961 esac 962 fi 963]) 964 965dnl TYPE_SOCKADDR_STORAGE 966dnl ------------------------------------------------- 967dnl Check for struct sockaddr_storage. Most IPv6-enabled 968dnl hosts have it, but AIX 4.3 is one known exception. 969 970AC_DEFUN([TYPE_SOCKADDR_STORAGE], 971[ 972 AC_CHECK_TYPE([struct sockaddr_storage], 973 AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1, 974 [if struct sockaddr_storage is defined]), , 975 [ 976#undef inline 977#ifdef HAVE_WINDOWS_H 978#ifndef WIN32_LEAN_AND_MEAN 979#define WIN32_LEAN_AND_MEAN 980#endif 981#include <windows.h> 982#ifdef HAVE_WINSOCK2_H 983#include <winsock2.h> 984#endif 985#else 986#ifdef HAVE_SYS_TYPES_H 987#include <sys/types.h> 988#endif 989#ifdef HAVE_SYS_SOCKET_H 990#include <sys/socket.h> 991#endif 992#ifdef HAVE_NETINET_IN_H 993#include <netinet/in.h> 994#endif 995#ifdef HAVE_ARPA_INET_H 996#include <arpa/inet.h> 997#endif 998#endif 999 ]) 1000]) 1001 1002dnl CURL_CHECK_FUNC_RECV 1003dnl ------------------------------------------------- 1004dnl Test if the socket recv() function is available, 1005dnl and check its return type and the types of its 1006dnl arguments. If the function succeeds HAVE_RECV 1007dnl will be defined, defining the types of the arguments 1008dnl in RECV_TYPE_ARG1, RECV_TYPE_ARG2, RECV_TYPE_ARG3 1009dnl and RECV_TYPE_ARG4, defining the type of the function 1010dnl return value in RECV_TYPE_RETV. 1011 1012AC_DEFUN([CURL_CHECK_FUNC_RECV], [ 1013 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl 1014 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl 1015 AC_CHECK_HEADERS(sys/types.h sys/socket.h) 1016 # 1017 AC_MSG_CHECKING([for recv]) 1018 AC_LINK_IFELSE([ 1019 AC_LANG_PROGRAM([[ 1020#undef inline 1021#ifdef HAVE_WINDOWS_H 1022#ifndef WIN32_LEAN_AND_MEAN 1023#define WIN32_LEAN_AND_MEAN 1024#endif 1025#include <windows.h> 1026#ifdef HAVE_WINSOCK2_H 1027#include <winsock2.h> 1028#else 1029#ifdef HAVE_WINSOCK_H 1030#include <winsock.h> 1031#endif 1032#endif 1033#else 1034#ifdef HAVE_PROTO_BSDSOCKET_H 1035#include <proto/bsdsocket.h> 1036struct Library *SocketBase = NULL; 1037#endif 1038#ifdef HAVE_SYS_TYPES_H 1039#include <sys/types.h> 1040#endif 1041#ifdef HAVE_SYS_SOCKET_H 1042#include <sys/socket.h> 1043#endif 1044#endif 1045 ]],[[ 1046 recv(0, 0, 0, 0); 1047 ]]) 1048 ],[ 1049 AC_MSG_RESULT([yes]) 1050 curl_cv_recv="yes" 1051 ],[ 1052 AC_MSG_RESULT([no]) 1053 curl_cv_recv="no" 1054 ]) 1055 # 1056 if test "$curl_cv_recv" = "yes"; then 1057 AC_CACHE_CHECK([types of args and return type for recv], 1058 [curl_cv_func_recv_args], [ 1059 curl_cv_func_recv_args="unknown" 1060 for recv_retv in 'int' 'ssize_t'; do 1061 for recv_arg1 in 'int' 'ssize_t' 'SOCKET'; do 1062 for recv_arg2 in 'char *' 'void *'; do 1063 for recv_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do 1064 for recv_arg4 in 'int' 'unsigned int'; do 1065 if test "$curl_cv_func_recv_args" = "unknown"; then 1066 AC_COMPILE_IFELSE([ 1067 AC_LANG_PROGRAM([[ 1068#undef inline 1069#ifdef HAVE_WINDOWS_H 1070#ifndef WIN32_LEAN_AND_MEAN 1071#define WIN32_LEAN_AND_MEAN 1072#endif 1073#include <windows.h> 1074#ifdef HAVE_WINSOCK2_H 1075#include <winsock2.h> 1076#else 1077#ifdef HAVE_WINSOCK_H 1078#include <winsock.h> 1079#endif 1080#endif 1081#define RECVCALLCONV PASCAL 1082#else 1083#ifdef HAVE_PROTO_BSDSOCKET_H 1084#include <proto/bsdsocket.h> 1085struct Library *SocketBase = NULL; 1086#endif 1087#ifdef HAVE_SYS_TYPES_H 1088#include <sys/types.h> 1089#endif 1090#ifdef HAVE_SYS_SOCKET_H 1091#include <sys/socket.h> 1092#endif 1093#define RECVCALLCONV 1094#endif 1095#ifndef HAVE_PROTO_BSDSOCKET_H 1096 extern $recv_retv RECVCALLCONV 1097 recv($recv_arg1, $recv_arg2, $recv_arg3, $recv_arg4); 1098#endif 1099 ]],[[ 1100 $recv_arg1 s=0; 1101 $recv_arg2 buf=0; 1102 $recv_arg3 len=0; 1103 $recv_arg4 flags=0; 1104 $recv_retv res = recv(s, buf, len, flags); 1105 ]]) 1106 ],[ 1107 curl_cv_func_recv_args="$recv_arg1,$recv_arg2,$recv_arg3,$recv_arg4,$recv_retv" 1108 ]) 1109 fi 1110 done 1111 done 1112 done 1113 done 1114 done 1115 ]) # AC-CACHE-CHECK 1116 if test "$curl_cv_func_recv_args" = "unknown"; then 1117 AC_MSG_ERROR([Cannot find proper types to use for recv args]) 1118 else 1119 recv_prev_IFS=$IFS; IFS=',' 1120 set dummy `echo "$curl_cv_func_recv_args" | sed 's/\*/\*/g'` 1121 IFS=$recv_prev_IFS 1122 shift 1123 # 1124 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG1, $[1], 1125 [Define to the type of arg 1 for recv.]) 1126 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG2, $[2], 1127 [Define to the type of arg 2 for recv.]) 1128 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG3, $[3], 1129 [Define to the type of arg 3 for recv.]) 1130 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG4, $[4], 1131 [Define to the type of arg 4 for recv.]) 1132 AC_DEFINE_UNQUOTED(RECV_TYPE_RETV, $[5], 1133 [Define to the function return type for recv.]) 1134 # 1135 AC_DEFINE_UNQUOTED(HAVE_RECV, 1, 1136 [Define to 1 if you have the recv function.]) 1137 curl_cv_func_recv="yes" 1138 fi 1139 else 1140 AC_MSG_ERROR([Unable to link function recv]) 1141 fi 1142]) 1143 1144 1145dnl CURL_CHECK_FUNC_SEND 1146dnl ------------------------------------------------- 1147dnl Test if the socket send() function is available, 1148dnl and check its return type and the types of its 1149dnl arguments. If the function succeeds HAVE_SEND 1150dnl will be defined, defining the types of the arguments 1151dnl in SEND_TYPE_ARG1, SEND_TYPE_ARG2, SEND_TYPE_ARG3 1152dnl and SEND_TYPE_ARG4, defining the type of the function 1153dnl return value in SEND_TYPE_RETV, and also defining the 1154dnl type qualifier of second argument in SEND_QUAL_ARG2. 1155 1156AC_DEFUN([CURL_CHECK_FUNC_SEND], [ 1157 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl 1158 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl 1159 AC_CHECK_HEADERS(sys/types.h sys/socket.h) 1160 # 1161 AC_MSG_CHECKING([for send]) 1162 AC_LINK_IFELSE([ 1163 AC_LANG_PROGRAM([[ 1164#undef inline 1165#ifdef HAVE_WINDOWS_H 1166#ifndef WIN32_LEAN_AND_MEAN 1167#define WIN32_LEAN_AND_MEAN 1168#endif 1169#include <windows.h> 1170#ifdef HAVE_WINSOCK2_H 1171#include <winsock2.h> 1172#else 1173#ifdef HAVE_WINSOCK_H 1174#include <winsock.h> 1175#endif 1176#endif 1177#else 1178#ifdef HAVE_PROTO_BSDSOCKET_H 1179#include <proto/bsdsocket.h> 1180struct Library *SocketBase = NULL; 1181#endif 1182#ifdef HAVE_SYS_TYPES_H 1183#include <sys/types.h> 1184#endif 1185#ifdef HAVE_SYS_SOCKET_H 1186#include <sys/socket.h> 1187#endif 1188#endif 1189 ]],[[ 1190 send(0, 0, 0, 0); 1191 ]]) 1192 ],[ 1193 AC_MSG_RESULT([yes]) 1194 curl_cv_send="yes" 1195 ],[ 1196 AC_MSG_RESULT([no]) 1197 curl_cv_send="no" 1198 ]) 1199 # 1200 if test "$curl_cv_send" = "yes"; then 1201 AC_CACHE_CHECK([types of args and return type for send], 1202 [curl_cv_func_send_args], [ 1203 curl_cv_func_send_args="unknown" 1204 for send_retv in 'int' 'ssize_t'; do 1205 for send_arg1 in 'int' 'ssize_t' 'SOCKET'; do 1206 for send_arg2 in 'char *' 'void *' 'const char *' 'const void *'; do 1207 for send_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do 1208 for send_arg4 in 'int' 'unsigned int'; do 1209 if test "$curl_cv_func_send_args" = "unknown"; then 1210 AC_COMPILE_IFELSE([ 1211 AC_LANG_PROGRAM([[ 1212#undef inline 1213#ifdef HAVE_WINDOWS_H 1214#ifndef WIN32_LEAN_AND_MEAN 1215#define WIN32_LEAN_AND_MEAN 1216#endif 1217#include <windows.h> 1218#ifdef HAVE_WINSOCK2_H 1219#include <winsock2.h> 1220#else 1221#ifdef HAVE_WINSOCK_H 1222#include <winsock.h> 1223#endif 1224#endif 1225#define SENDCALLCONV PASCAL 1226#else 1227#ifdef HAVE_PROTO_BSDSOCKET_H 1228#include <proto/bsdsocket.h> 1229struct Library *SocketBase = NULL; 1230#endif 1231#ifdef HAVE_SYS_TYPES_H 1232#include <sys/types.h> 1233#endif 1234#ifdef HAVE_SYS_SOCKET_H 1235#include <sys/socket.h> 1236#endif 1237#define SENDCALLCONV 1238#endif 1239#ifndef HAVE_PROTO_BSDSOCKET_H 1240 extern $send_retv SENDCALLCONV 1241 send($send_arg1, $send_arg2, $send_arg3, $send_arg4); 1242#endif 1243 ]],[[ 1244 $send_arg1 s=0; 1245 $send_arg3 len=0; 1246 $send_arg4 flags=0; 1247 $send_retv res = send(s, 0, len, flags); 1248 ]]) 1249 ],[ 1250 curl_cv_func_send_args="$send_arg1,$send_arg2,$send_arg3,$send_arg4,$send_retv" 1251 ]) 1252 fi 1253 done 1254 done 1255 done 1256 done 1257 done 1258 ]) # AC-CACHE-CHECK 1259 if test "$curl_cv_func_send_args" = "unknown"; then 1260 AC_MSG_ERROR([Cannot find proper types to use for send args]) 1261 else 1262 send_prev_IFS=$IFS; IFS=',' 1263 set dummy `echo "$curl_cv_func_send_args" | sed 's/\*/\*/g'` 1264 IFS=$send_prev_IFS 1265 shift 1266 # 1267 send_qual_type_arg2=$[2] 1268 # 1269 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG1, $[1], 1270 [Define to the type of arg 1 for send.]) 1271 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG3, $[3], 1272 [Define to the type of arg 3 for send.]) 1273 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG4, $[4], 1274 [Define to the type of arg 4 for send.]) 1275 AC_DEFINE_UNQUOTED(SEND_TYPE_RETV, $[5], 1276 [Define to the function return type for send.]) 1277 # 1278 prev_sh_opts=$- 1279 # 1280 case $prev_sh_opts in 1281 *f*) 1282 ;; 1283 *) 1284 set -f 1285 ;; 1286 esac 1287 # 1288 case "$send_qual_type_arg2" in 1289 const*) 1290 send_qual_arg2=const 1291 send_type_arg2=`echo $send_qual_type_arg2 | sed 's/^const //'` 1292 ;; 1293 *) 1294 send_qual_arg2= 1295 send_type_arg2=$send_qual_type_arg2 1296 ;; 1297 esac 1298 # 1299 AC_DEFINE_UNQUOTED(SEND_QUAL_ARG2, $send_qual_arg2, 1300 [Define to the type qualifier of arg 2 for send.]) 1301 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG2, $send_type_arg2, 1302 [Define to the type of arg 2 for send.]) 1303 # 1304 case $prev_sh_opts in 1305 *f*) 1306 ;; 1307 *) 1308 set +f 1309 ;; 1310 esac 1311 # 1312 AC_DEFINE_UNQUOTED(HAVE_SEND, 1, 1313 [Define to 1 if you have the send function.]) 1314 curl_cv_func_send="yes" 1315 fi 1316 else 1317 AC_MSG_ERROR([Unable to link function send]) 1318 fi 1319]) 1320 1321dnl CURL_CHECK_MSG_NOSIGNAL 1322dnl ------------------------------------------------- 1323dnl Check for MSG_NOSIGNAL 1324 1325AC_DEFUN([CURL_CHECK_MSG_NOSIGNAL], [ 1326 AC_CHECK_HEADERS(sys/types.h sys/socket.h) 1327 AC_CACHE_CHECK([for MSG_NOSIGNAL], [curl_cv_msg_nosignal], [ 1328 AC_COMPILE_IFELSE([ 1329 AC_LANG_PROGRAM([[ 1330#undef inline 1331#ifdef HAVE_WINDOWS_H 1332#ifndef WIN32_LEAN_AND_MEAN 1333#define WIN32_LEAN_AND_MEAN 1334#endif 1335#include <windows.h> 1336#ifdef HAVE_WINSOCK2_H 1337#include <winsock2.h> 1338#else 1339#ifdef HAVE_WINSOCK_H 1340#include <winsock.h> 1341#endif 1342#endif 1343#else 1344#ifdef HAVE_PROTO_BSDSOCKET_H 1345#include <proto/bsdsocket.h> 1346struct Library *SocketBase = NULL; 1347#endif 1348#ifdef HAVE_SYS_TYPES_H 1349#include <sys/types.h> 1350#endif 1351#ifdef HAVE_SYS_SOCKET_H 1352#include <sys/socket.h> 1353#endif 1354#endif 1355 ]],[[ 1356 int flag=MSG_NOSIGNAL; 1357 ]]) 1358 ],[ 1359 curl_cv_msg_nosignal="yes" 1360 ],[ 1361 curl_cv_msg_nosignal="no" 1362 ]) 1363 ]) 1364 case "$curl_cv_msg_nosignal" in 1365 yes) 1366 AC_DEFINE_UNQUOTED(HAVE_MSG_NOSIGNAL, 1, 1367 [Define to 1 if you have the MSG_NOSIGNAL flag.]) 1368 ;; 1369 esac 1370]) 1371 1372 1373dnl CURL_CHECK_STRUCT_TIMEVAL 1374dnl ------------------------------------------------- 1375dnl Check for timeval struct 1376 1377AC_DEFUN([CURL_CHECK_STRUCT_TIMEVAL], [ 1378 AC_REQUIRE([AC_HEADER_TIME])dnl 1379 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl 1380 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl 1381 AC_CHECK_HEADERS(sys/types.h sys/time.h time.h sys/socket.h) 1382 AC_CACHE_CHECK([for struct timeval], [curl_cv_struct_timeval], [ 1383 AC_COMPILE_IFELSE([ 1384 AC_LANG_PROGRAM([[ 1385#undef inline 1386#ifdef HAVE_WINDOWS_H 1387#ifndef WIN32_LEAN_AND_MEAN 1388#define WIN32_LEAN_AND_MEAN 1389#endif 1390#include <windows.h> 1391#ifdef HAVE_WINSOCK2_H 1392#include <winsock2.h> 1393#else 1394#ifdef HAVE_WINSOCK_H 1395#include <winsock.h> 1396#endif 1397#endif 1398#endif 1399#ifdef HAVE_SYS_TYPES_H 1400#include <sys/types.h> 1401#endif 1402#ifdef HAVE_SYS_TIME_H 1403#include <sys/time.h> 1404#ifdef TIME_WITH_SYS_TIME 1405#include <time.h> 1406#endif 1407#else 1408#ifdef HAVE_TIME_H 1409#include <time.h> 1410#endif 1411#endif 1412#ifdef HAVE_SYS_SOCKET_H 1413#include <sys/socket.h> 1414#endif 1415 ]],[[ 1416 struct timeval ts; 1417 ts.tv_sec = 0; 1418 ts.tv_usec = 0; 1419 ]]) 1420 ],[ 1421 curl_cv_struct_timeval="yes" 1422 ],[ 1423 curl_cv_struct_timeval="no" 1424 ]) 1425 ]) 1426 case "$curl_cv_struct_timeval" in 1427 yes) 1428 AC_DEFINE_UNQUOTED(HAVE_STRUCT_TIMEVAL, 1, 1429 [Define to 1 if you have the timeval struct.]) 1430 ;; 1431 esac 1432]) 1433 1434 1435dnl TYPE_SIG_ATOMIC_T 1436dnl ------------------------------------------------- 1437dnl Check if the sig_atomic_t type is available, and 1438dnl verify if it is already defined as volatile. 1439 1440AC_DEFUN([TYPE_SIG_ATOMIC_T], [ 1441 AC_CHECK_HEADERS(signal.h) 1442 AC_CHECK_TYPE([sig_atomic_t],[ 1443 AC_DEFINE(HAVE_SIG_ATOMIC_T, 1, 1444 [Define to 1 if sig_atomic_t is an available typedef.]) 1445 ], ,[ 1446#ifdef HAVE_SIGNAL_H 1447#include <signal.h> 1448#endif 1449 ]) 1450 case "$ac_cv_type_sig_atomic_t" in 1451 yes) 1452 # 1453 AC_MSG_CHECKING([if sig_atomic_t is already defined as volatile]) 1454 AC_LINK_IFELSE([ 1455 AC_LANG_PROGRAM([[ 1456#ifdef HAVE_SIGNAL_H 1457#include <signal.h> 1458#endif 1459 ]],[[ 1460 static volatile sig_atomic_t dummy = 0; 1461 ]]) 1462 ],[ 1463 AC_MSG_RESULT([no]) 1464 curl_cv_sig_atomic_t_volatile="no" 1465 ],[ 1466 AC_MSG_RESULT([yes]) 1467 curl_cv_sig_atomic_t_volatile="yes" 1468 ]) 1469 # 1470 if test "$curl_cv_sig_atomic_t_volatile" = "yes"; then 1471 AC_DEFINE(HAVE_SIG_ATOMIC_T_VOLATILE, 1, 1472 [Define to 1 if sig_atomic_t is already defined as volatile.]) 1473 fi 1474 ;; 1475 esac 1476]) 1477 1478 1479dnl TYPE_IN_ADDR_T 1480dnl ------------------------------------------------- 1481dnl Check for in_addr_t: it is used to receive the return code of inet_addr() 1482dnl and a few other things. 1483 1484AC_DEFUN([TYPE_IN_ADDR_T], [ 1485 AC_CHECK_TYPE([in_addr_t], ,[ 1486 dnl in_addr_t not available 1487 AC_CACHE_CHECK([for in_addr_t equivalent], 1488 [curl_cv_in_addr_t_equiv], [ 1489 curl_cv_in_addr_t_equiv="unknown" 1490 for t in "unsigned long" int size_t unsigned long; do 1491 if test "$curl_cv_in_addr_t_equiv" = "unknown"; then 1492 AC_LINK_IFELSE([ 1493 AC_LANG_PROGRAM([[ 1494#undef inline 1495#ifdef HAVE_WINDOWS_H 1496#ifndef WIN32_LEAN_AND_MEAN 1497#define WIN32_LEAN_AND_MEAN 1498#endif 1499#include <windows.h> 1500#ifdef HAVE_WINSOCK2_H 1501#include <winsock2.h> 1502#else 1503#ifdef HAVE_WINSOCK_H 1504#include <winsock.h> 1505#endif 1506#endif 1507#else 1508#ifdef HAVE_SYS_TYPES_H 1509#include <sys/types.h> 1510#endif 1511#ifdef HAVE_SYS_SOCKET_H 1512#include <sys/socket.h> 1513#endif 1514#ifdef HAVE_NETINET_IN_H 1515#include <netinet/in.h> 1516#endif 1517#ifdef HAVE_ARPA_INET_H 1518#include <arpa/inet.h> 1519#endif 1520#endif 1521 ]],[[ 1522 $t data = inet_addr ("1.2.3.4"); 1523 ]]) 1524 ],[ 1525 curl_cv_in_addr_t_equiv="$t" 1526 ]) 1527 fi 1528 done 1529 ]) 1530 case "$curl_cv_in_addr_t_equiv" in 1531 unknown) 1532 AC_MSG_ERROR([Cannot find a type to use in place of in_addr_t]) 1533 ;; 1534 *) 1535 AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv, 1536 [Type to use in place of in_addr_t when system does not provide it.]) 1537 ;; 1538 esac 1539 ],[ 1540#undef inline 1541#ifdef HAVE_WINDOWS_H 1542#ifndef WIN32_LEAN_AND_MEAN 1543#define WIN32_LEAN_AND_MEAN 1544#endif 1545#include <windows.h> 1546#ifdef HAVE_WINSOCK2_H 1547#include <winsock2.h> 1548#else 1549#ifdef HAVE_WINSOCK_H 1550#include <winsock.h> 1551#endif 1552#endif 1553#else 1554#ifdef HAVE_SYS_TYPES_H 1555#include <sys/types.h> 1556#endif 1557#ifdef HAVE_SYS_SOCKET_H 1558#include <sys/socket.h> 1559#endif 1560#ifdef HAVE_NETINET_IN_H 1561#include <netinet/in.h> 1562#endif 1563#ifdef HAVE_ARPA_INET_H 1564#include <arpa/inet.h> 1565#endif 1566#endif 1567 ]) 1568]) 1569 1570 1571dnl CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC 1572dnl ------------------------------------------------- 1573dnl Check if monotonic clock_gettime is available. 1574 1575AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [ 1576 AC_REQUIRE([AC_HEADER_TIME])dnl 1577 AC_CHECK_HEADERS(sys/types.h sys/time.h time.h) 1578 AC_MSG_CHECKING([for monotonic clock_gettime]) 1579 # 1580 if test "x$dontwant_rt" = "xno" ; then 1581 AC_COMPILE_IFELSE([ 1582 AC_LANG_PROGRAM([[ 1583#ifdef HAVE_SYS_TYPES_H 1584#include <sys/types.h> 1585#endif 1586#ifdef HAVE_SYS_TIME_H 1587#include <sys/time.h> 1588#ifdef TIME_WITH_SYS_TIME 1589#include <time.h> 1590#endif 1591#else 1592#ifdef HAVE_TIME_H 1593#include <time.h> 1594#endif 1595#endif 1596 ]],[[ 1597 struct timespec ts; 1598 (void)clock_gettime(CLOCK_MONOTONIC, &ts); 1599 ]]) 1600 ],[ 1601 AC_MSG_RESULT([yes]) 1602 curl_func_clock_gettime="yes" 1603 ],[ 1604 AC_MSG_RESULT([no]) 1605 curl_func_clock_gettime="no" 1606 ]) 1607 fi 1608 dnl Definition of HAVE_CLOCK_GETTIME_MONOTONIC is intentionally postponed 1609 dnl until library linking and run-time checks for clock_gettime succeed. 1610]) 1611 1612 1613dnl CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC 1614dnl ------------------------------------------------- 1615dnl If monotonic clock_gettime is available then, 1616dnl check and prepended to LIBS any needed libraries. 1617 1618AC_DEFUN([CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC], [ 1619 AC_REQUIRE([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC])dnl 1620 # 1621 if test "$curl_func_clock_gettime" = "yes"; then 1622 # 1623 AC_MSG_CHECKING([for clock_gettime in libraries]) 1624 # 1625 curl_cv_save_LIBS="$LIBS" 1626 curl_cv_gclk_LIBS="unknown" 1627 # 1628 for x_xlibs in '' '-lrt' '-lposix4' ; do 1629 if test "$curl_cv_gclk_LIBS" = "unknown"; then 1630 if test -z "$x_xlibs"; then 1631 LIBS="$curl_cv_save_LIBS" 1632 else 1633 LIBS="$x_xlibs $curl_cv_save_LIBS" 1634 fi 1635 AC_LINK_IFELSE([ 1636 AC_LANG_PROGRAM([[ 1637#ifdef HAVE_SYS_TYPES_H 1638#include <sys/types.h> 1639#endif 1640#ifdef HAVE_SYS_TIME_H 1641#include <sys/time.h> 1642#ifdef TIME_WITH_SYS_TIME 1643#include <time.h> 1644#endif 1645#else 1646#ifdef HAVE_TIME_H 1647#include <time.h> 1648#endif 1649#endif 1650 ]],[[ 1651 struct timespec ts; 1652 (void)clock_gettime(CLOCK_MONOTONIC, &ts); 1653 ]]) 1654 ],[ 1655 curl_cv_gclk_LIBS="$x_xlibs" 1656 ]) 1657 fi 1658 done 1659 # 1660 LIBS="$curl_cv_save_LIBS" 1661 # 1662 case X-"$curl_cv_gclk_LIBS" in 1663 X-unknown) 1664 AC_MSG_RESULT([cannot find clock_gettime]) 1665 AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined]) 1666 curl_func_clock_gettime="no" 1667 ;; 1668 X-) 1669 AC_MSG_RESULT([no additional lib required]) 1670 curl_func_clock_gettime="yes" 1671 ;; 1672 *) 1673 if test -z "$curl_cv_save_LIBS"; then 1674 LIBS="$curl_cv_gclk_LIBS" 1675 else 1676 LIBS="$curl_cv_gclk_LIBS $curl_cv_save_LIBS" 1677 fi 1678 AC_MSG_RESULT([$curl_cv_gclk_LIBS]) 1679 curl_func_clock_gettime="yes" 1680 ;; 1681 esac 1682 # 1683 dnl only do runtime verification when not cross-compiling 1684 if test "x$cross_compiling" != "xyes" && 1685 test "$curl_func_clock_gettime" = "yes"; then 1686 AC_MSG_CHECKING([if monotonic clock_gettime works]) 1687 CURL_RUN_IFELSE([ 1688 AC_LANG_PROGRAM([[ 1689#ifdef HAVE_STDLIB_H 1690#include <stdlib.h> 1691#endif 1692#ifdef HAVE_SYS_TYPES_H 1693#include <sys/types.h> 1694#endif 1695#ifdef HAVE_SYS_TIME_H 1696#include <sys/time.h> 1697#ifdef TIME_WITH_SYS_TIME 1698#include <time.h> 1699#endif 1700#else 1701#ifdef HAVE_TIME_H 1702#include <time.h> 1703#endif 1704#endif 1705 ]],[[ 1706 struct timespec ts; 1707 if (0 == clock_gettime(CLOCK_MONOTONIC, &ts)) 1708 exit(0); 1709 else 1710 exit(1); 1711 ]]) 1712 ],[ 1713 AC_MSG_RESULT([yes]) 1714 ],[ 1715 AC_MSG_RESULT([no]) 1716 AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined]) 1717 curl_func_clock_gettime="no" 1718 LIBS="$curl_cv_save_LIBS" 1719 ]) 1720 fi 1721 # 1722 case "$curl_func_clock_gettime" in 1723 yes) 1724 AC_DEFINE_UNQUOTED(HAVE_CLOCK_GETTIME_MONOTONIC, 1, 1725 [Define to 1 if you have the clock_gettime function and monotonic timer.]) 1726 ;; 1727 esac 1728 # 1729 fi 1730 # 1731]) 1732 1733 1734dnl CURL_CHECK_LIBS_CONNECT 1735dnl ------------------------------------------------- 1736dnl Verify if network connect function is already available 1737dnl using current libraries or if another one is required. 1738 1739AC_DEFUN([CURL_CHECK_LIBS_CONNECT], [ 1740 AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl 1741 AC_REQUIRE([CURL_INCLUDES_BSDSOCKET])dnl 1742 AC_MSG_CHECKING([for connect in libraries]) 1743 tst_connect_save_LIBS="$LIBS" 1744 tst_connect_need_LIBS="unknown" 1745 for tst_lib in '' '-lsocket' ; do 1746 if test "$tst_connect_need_LIBS" = "unknown"; then 1747 LIBS="$tst_lib $tst_connect_save_LIBS" 1748 AC_LINK_IFELSE([ 1749 AC_LANG_PROGRAM([[ 1750 $curl_includes_winsock2 1751 $curl_includes_bsdsocket 1752 #if !defined(HAVE_WINDOWS_H) && !defined(HAVE_PROTO_BSDSOCKET_H) 1753 int connect(int, void*, int); 1754 #endif 1755 ]],[[ 1756 if(0 != connect(0, 0, 0)) 1757 return 1; 1758 ]]) 1759 ],[ 1760 tst_connect_need_LIBS="$tst_lib" 1761 ]) 1762 fi 1763 done 1764 LIBS="$tst_connect_save_LIBS" 1765 # 1766 case X-"$tst_connect_need_LIBS" in 1767 X-unknown) 1768 AC_MSG_RESULT([cannot find connect]) 1769 AC_MSG_ERROR([cannot find connect function in libraries.]) 1770 ;; 1771 X-) 1772 AC_MSG_RESULT([yes]) 1773 ;; 1774 *) 1775 AC_MSG_RESULT([$tst_connect_need_LIBS]) 1776 LIBS="$tst_connect_need_LIBS $tst_connect_save_LIBS" 1777 ;; 1778 esac 1779]) 1780 1781 1782dnl CURL_DEFINE_UNQUOTED (VARIABLE, [VALUE]) 1783dnl ------------------------------------------------- 1784dnl Like AC_DEFINE_UNQUOTED this macro will define a C preprocessor 1785dnl symbol that can be further used in custom template configuration 1786dnl files. This macro, unlike AC_DEFINE_UNQUOTED, does not use a third 1787dnl argument for the description. Symbol definitions done with this 1788dnl macro are intended to be exclusively used in handcrafted *.h.in 1789dnl template files. Contrary to what AC_DEFINE_UNQUOTED does, this one 1790dnl prevents autoheader generation and insertion of symbol template 1791dnl stub and definition into the first configuration header file. Do 1792dnl not use this macro as a replacement for AC_DEFINE_UNQUOTED, each 1793dnl one serves different functional needs. 1794 1795AC_DEFUN([CURL_DEFINE_UNQUOTED], [ 1796cat >>confdefs.h <<_EOF 1797[@%:@define] $1 ifelse($#, 2, [$2], 1) 1798_EOF 1799]) 1800 1801dnl CURL_CONFIGURE_PULL_SYS_POLL 1802dnl ------------------------------------------------- 1803dnl The need for the sys/poll.h inclusion arises mainly to properly 1804dnl interface AIX systems which define macros 'events' and 'revents'. 1805 1806AC_DEFUN([CURL_CONFIGURE_PULL_SYS_POLL], [ 1807 AC_REQUIRE([CURL_INCLUDES_POLL])dnl 1808 # 1809 tst_poll_events_macro_defined="unknown" 1810 # 1811 AC_COMPILE_IFELSE([ 1812 AC_LANG_PROGRAM([[ 1813 $curl_includes_poll 1814 ]],[[ 1815#if defined(events) || defined(revents) 1816 return 0; 1817#else 1818 force compilation error 1819#endif 1820 ]]) 1821 ],[ 1822 tst_poll_events_macro_defined="yes" 1823 ],[ 1824 tst_poll_events_macro_defined="no" 1825 ]) 1826 # 1827 if test "$tst_poll_events_macro_defined" = "yes"; then 1828 if test "x$ac_cv_header_sys_poll_h" = "xyes"; then 1829 CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_POLL_H]) 1830 fi 1831 fi 1832 # 1833]) 1834 1835 1836dnl CURL_CHECK_FUNC_SELECT 1837dnl ------------------------------------------------- 1838dnl Test if the socket select() function is available, 1839dnl and check its return type and the types of its 1840dnl arguments. If the function succeeds HAVE_SELECT 1841dnl will be defined, defining the types of the 1842dnl arguments in SELECT_TYPE_ARG1, SELECT_TYPE_ARG234 1843dnl and SELECT_TYPE_ARG5, defining the type of the 1844dnl function return value in SELECT_TYPE_RETV, and 1845dnl also defining the type qualifier of fifth argument 1846dnl in SELECT_QUAL_ARG5. 1847 1848AC_DEFUN([CURL_CHECK_FUNC_SELECT], [ 1849 AC_REQUIRE([CURL_CHECK_STRUCT_TIMEVAL])dnl 1850 AC_CHECK_HEADERS(sys/select.h sys/socket.h) 1851 # 1852 AC_MSG_CHECKING([for select]) 1853 AC_LINK_IFELSE([ 1854 AC_LANG_PROGRAM([[ 1855#undef inline 1856#ifdef HAVE_WINDOWS_H 1857#ifndef WIN32_LEAN_AND_MEAN 1858#define WIN32_LEAN_AND_MEAN 1859#endif 1860#include <windows.h> 1861#ifdef HAVE_WINSOCK2_H 1862#include <winsock2.h> 1863#else 1864#ifdef HAVE_WINSOCK_H 1865#include <winsock.h> 1866#endif 1867#endif 1868#endif 1869#ifdef HAVE_SYS_TYPES_H 1870#include <sys/types.h> 1871#endif 1872#ifdef HAVE_SYS_TIME_H 1873#include <sys/time.h> 1874#ifdef TIME_WITH_SYS_TIME 1875#include <time.h> 1876#endif 1877#else 1878#ifdef HAVE_TIME_H 1879#include <time.h> 1880#endif 1881#endif 1882#ifndef HAVE_WINDOWS_H 1883#ifdef HAVE_PROTO_BSDSOCKET_H 1884#include <proto/bsdsocket.h> 1885struct Library *SocketBase = NULL; 1886#define select(a,b,c,d,e) WaitSelect(a,b,c,d,e,0) 1887#endif 1888#ifdef HAVE_SYS_SELECT_H 1889#include <sys/select.h> 1890#elif defined(HAVE_UNISTD_H) 1891#include <unistd.h> 1892#endif 1893#ifdef HAVE_SYS_SOCKET_H 1894#include <sys/socket.h> 1895#endif 1896#endif 1897 ]],[[ 1898 select(0, 0, 0, 0, 0); 1899 ]]) 1900 ],[ 1901 AC_MSG_RESULT([yes]) 1902 curl_cv_select="yes" 1903 ],[ 1904 AC_MSG_RESULT([no]) 1905 curl_cv_select="no" 1906 ]) 1907 # 1908 if test "$curl_cv_select" = "yes"; then 1909 AC_CACHE_CHECK([types of args and return type for select], 1910 [curl_cv_func_select_args], [ 1911 curl_cv_func_select_args="unknown" 1912 for sel_retv in 'int' 'ssize_t'; do 1913 for sel_arg1 in 'int' 'ssize_t' 'size_t' 'unsigned long int' 'unsigned int'; do 1914 for sel_arg234 in 'fd_set *' 'int *' 'void *'; do 1915 for sel_arg5 in 'struct timeval *' 'const struct timeval *'; do 1916 if test "$curl_cv_func_select_args" = "unknown"; then 1917 AC_COMPILE_IFELSE([ 1918 AC_LANG_PROGRAM([[ 1919#undef inline 1920#ifdef HAVE_WINDOWS_H 1921#ifndef WIN32_LEAN_AND_MEAN 1922#define WIN32_LEAN_AND_MEAN 1923#endif 1924#include <windows.h> 1925#ifdef HAVE_WINSOCK2_H 1926#include <winsock2.h> 1927#else 1928#ifdef HAVE_WINSOCK_H 1929#include <winsock.h> 1930#endif 1931#endif 1932#define SELECTCALLCONV PASCAL 1933#endif 1934#ifdef HAVE_SYS_TYPES_H 1935#include <sys/types.h> 1936#endif 1937#ifdef HAVE_SYS_TIME_H 1938#include <sys/time.h> 1939#ifdef TIME_WITH_SYS_TIME 1940#include <time.h> 1941#endif 1942#else 1943#ifdef HAVE_TIME_H 1944#include <time.h> 1945#endif 1946#endif 1947#ifndef HAVE_WINDOWS_H 1948#ifdef HAVE_PROTO_BSDSOCKET_H 1949#include <proto/bsdsocket.h> 1950struct Library *SocketBase = NULL; 1951#define select(a,b,c,d,e) WaitSelect(a,b,c,d,e,0) 1952#endif 1953#ifdef HAVE_SYS_SELECT_H 1954#include <sys/select.h> 1955#elif defined(HAVE_UNISTD_H) 1956#include <unistd.h> 1957#endif 1958#ifdef HAVE_SYS_SOCKET_H 1959#include <sys/socket.h> 1960#endif 1961#define SELECTCALLCONV 1962#endif 1963#ifndef HAVE_STRUCT_TIMEVAL 1964 struct timeval { 1965 long tv_sec; 1966 long tv_usec; 1967 }; 1968#endif 1969#ifndef HAVE_PROTO_BSDSOCKET_H 1970 extern $sel_retv SELECTCALLCONV 1971 select($sel_arg1, 1972 $sel_arg234, 1973 $sel_arg234, 1974 $sel_arg234, 1975 $sel_arg5); 1976#endif 1977 ]],[[ 1978 $sel_arg1 nfds=0; 1979 $sel_arg234 rfds=0; 1980 $sel_arg234 wfds=0; 1981 $sel_arg234 efds=0; 1982 $sel_retv res = select(nfds, rfds, wfds, efds, 0); 1983 ]]) 1984 ],[ 1985 curl_cv_func_select_args="$sel_arg1,$sel_arg234,$sel_arg5,$sel_retv" 1986 ]) 1987 fi 1988 done 1989 done 1990 done 1991 done 1992 ]) # AC-CACHE-CHECK 1993 if test "$curl_cv_func_select_args" = "unknown"; then 1994 AC_MSG_WARN([Cannot find proper types to use for select args]) 1995 AC_MSG_WARN([HAVE_SELECT will not be defined]) 1996 else 1997 select_prev_IFS=$IFS; IFS=',' 1998 set dummy `echo "$curl_cv_func_select_args" | sed 's/\*/\*/g'` 1999 IFS=$select_prev_IFS 2000 shift 2001 # 2002 sel_qual_type_arg5=$[3] 2003 # 2004 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG1, $[1], 2005 [Define to the type of arg 1 for select.]) 2006 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG234, $[2], 2007 [Define to the type of args 2, 3 and 4 for select.]) 2008 AC_DEFINE_UNQUOTED(SELECT_TYPE_RETV, $[4], 2009 [Define to the function return type for select.]) 2010 # 2011 prev_sh_opts=$- 2012 # 2013 case $prev_sh_opts in 2014 *f*) 2015 ;; 2016 *) 2017 set -f 2018 ;; 2019 esac 2020 # 2021 case "$sel_qual_type_arg5" in 2022 const*) 2023 sel_qual_arg5=const 2024 sel_type_arg5=`echo $sel_qual_type_arg5 | sed 's/^const //'` 2025 ;; 2026 *) 2027 sel_qual_arg5= 2028 sel_type_arg5=$sel_qual_type_arg5 2029 ;; 2030 esac 2031 # 2032 AC_DEFINE_UNQUOTED(SELECT_QUAL_ARG5, $sel_qual_arg5, 2033 [Define to the type qualifier of arg 5 for select.]) 2034 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG5, $sel_type_arg5, 2035 [Define to the type of arg 5 for select.]) 2036 # 2037 case $prev_sh_opts in 2038 *f*) 2039 ;; 2040 *) 2041 set +f 2042 ;; 2043 esac 2044 # 2045 AC_DEFINE_UNQUOTED(HAVE_SELECT, 1, 2046 [Define to 1 if you have the select function.]) 2047 curl_cv_func_select="yes" 2048 fi 2049 fi 2050]) 2051 2052 2053dnl CURL_VERIFY_RUNTIMELIBS 2054dnl ------------------------------------------------- 2055dnl Verify that the shared libs found so far can be used when running 2056dnl programs, since otherwise the situation will create odd configure errors 2057dnl that are misleading people. 2058dnl 2059dnl Make sure this test is run BEFORE the first test in the script that 2060dnl runs anything, which at the time of this writing is the AC_CHECK_SIZEOF 2061dnl macro. It must also run AFTER all lib-checking macros are complete. 2062 2063AC_DEFUN([CURL_VERIFY_RUNTIMELIBS], [ 2064 2065 dnl this test is of course not sensible if we are cross-compiling! 2066 if test "x$cross_compiling" != xyes; then 2067 2068 dnl just run a program to verify that the libs checked for previous to this 2069 dnl point also is available run-time! 2070 AC_MSG_CHECKING([run-time libs availability]) 2071 CURL_RUN_IFELSE([ 2072int main() 2073{ 2074 return 0; 2075} 2076], 2077 AC_MSG_RESULT([fine]), 2078 AC_MSG_RESULT([failed]) 2079 AC_MSG_ERROR([one or more libs available at link-time are not available run-time. Libs used at link-time: $LIBS]) 2080 ) 2081 2082 dnl if this test fails, configure has already stopped 2083 fi 2084]) 2085 2086 2087dnl CURL_CHECK_VARIADIC_MACROS 2088dnl ------------------------------------------------- 2089dnl Check compiler support of variadic macros 2090 2091AC_DEFUN([CURL_CHECK_VARIADIC_MACROS], [ 2092 AC_CACHE_CHECK([for compiler support of C99 variadic macro style], 2093 [curl_cv_variadic_macros_c99], [ 2094 AC_COMPILE_IFELSE([ 2095 AC_LANG_PROGRAM([[ 2096#define c99_vmacro3(first, ...) fun3(first, __VA_ARGS__) 2097#define c99_vmacro2(first, ...) fun2(first, __VA_ARGS__) 2098 int fun3(int arg1, int arg2, int arg3); 2099 int fun2(int arg1, int arg2); 2100 int fun3(int arg1, int arg2, int arg3) 2101 { return arg1 + arg2 + arg3; } 2102 int fun2(int arg1, int arg2) 2103 { return arg1 + arg2; } 2104 ]],[[ 2105 int res3 = c99_vmacro3(1, 2, 3); 2106 int res2 = c99_vmacro2(1, 2); 2107 ]]) 2108 ],[ 2109 curl_cv_variadic_macros_c99="yes" 2110 ],[ 2111 curl_cv_variadic_macros_c99="no" 2112 ]) 2113 ]) 2114 case "$curl_cv_variadic_macros_c99" in 2115 yes) 2116 AC_DEFINE_UNQUOTED(HAVE_VARIADIC_MACROS_C99, 1, 2117 [Define to 1 if compiler supports C99 variadic macro style.]) 2118 ;; 2119 esac 2120 AC_CACHE_CHECK([for compiler support of old gcc variadic macro style], 2121 [curl_cv_variadic_macros_gcc], [ 2122 AC_COMPILE_IFELSE([ 2123 AC_LANG_PROGRAM([[ 2124#define gcc_vmacro3(first, args...) fun3(first, args) 2125#define gcc_vmacro2(first, args...) fun2(first, args) 2126 int fun3(int arg1, int arg2, int arg3); 2127 int fun2(int arg1, int arg2); 2128 int fun3(int arg1, int arg2, int arg3) 2129 { return arg1 + arg2 + arg3; } 2130 int fun2(int arg1, int arg2) 2131 { return arg1 + arg2; } 2132 ]],[[ 2133 int res3 = gcc_vmacro3(1, 2, 3); 2134 int res2 = gcc_vmacro2(1, 2); 2135 ]]) 2136 ],[ 2137 curl_cv_variadic_macros_gcc="yes" 2138 ],[ 2139 curl_cv_variadic_macros_gcc="no" 2140 ]) 2141 ]) 2142 case "$curl_cv_variadic_macros_gcc" in 2143 yes) 2144 AC_DEFINE_UNQUOTED(HAVE_VARIADIC_MACROS_GCC, 1, 2145 [Define to 1 if compiler supports old gcc variadic macro style.]) 2146 ;; 2147 esac 2148]) 2149 2150 2151dnl CURL_CHECK_CA_BUNDLE 2152dnl ------------------------------------------------- 2153dnl Check if a default ca-bundle should be used 2154dnl 2155dnl regarding the paths this will scan: 2156dnl /etc/ssl/certs/ca-certificates.crt Debian systems 2157dnl /etc/pki/tls/certs/ca-bundle.crt Redhat and Mandriva 2158dnl /usr/share/ssl/certs/ca-bundle.crt old(er) Redhat 2159dnl /usr/local/share/certs/ca-root-nss.crt FreeBSD 2160dnl /etc/ssl/cert.pem OpenBSD, FreeBSD (symlink) 2161dnl /etc/ssl/certs/ (ca path) SUSE 2162 2163AC_DEFUN([CURL_CHECK_CA_BUNDLE], [ 2164 2165 AC_MSG_CHECKING([default CA cert bundle/path]) 2166 2167 AC_ARG_WITH(ca-bundle, 2168AC_HELP_STRING([--with-ca-bundle=FILE], 2169[Path to a file containing CA certificates (example: /etc/ca-bundle.crt)]) 2170AC_HELP_STRING([--without-ca-bundle], [Don't use a default CA bundle]), 2171 [ 2172 want_ca="$withval" 2173 if test "x$want_ca" = "xyes"; then 2174 AC_MSG_ERROR([--with-ca-bundle=FILE requires a path to the CA bundle]) 2175 fi 2176 ], 2177 [ want_ca="unset" ]) 2178 AC_ARG_WITH(ca-path, 2179AC_HELP_STRING([--with-ca-path=DIRECTORY], 2180[Path to a directory containing CA certificates stored individually, with \ 2181their filenames in a hash format. This option can be used with the OpenSSL, \ 2182GnuTLS and mbedTLS backends. Refer to OpenSSL c_rehash for details. \ 2183(example: /etc/certificates)]) 2184AC_HELP_STRING([--without-ca-path], [Don't use a default CA path]), 2185 [ 2186 want_capath="$withval" 2187 if test "x$want_capath" = "xyes"; then 2188 AC_MSG_ERROR([--with-ca-path=DIRECTORY requires a path to the CA path directory]) 2189 fi 2190 ], 2191 [ want_capath="unset"]) 2192 2193 ca_warning=" (warning: certs not found)" 2194 capath_warning=" (warning: certs not found)" 2195 check_capath="" 2196 2197 if test "x$want_ca" != "xno" -a "x$want_ca" != "xunset" -a \ 2198 "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then 2199 dnl both given 2200 ca="$want_ca" 2201 capath="$want_capath" 2202 elif test "x$want_ca" != "xno" -a "x$want_ca" != "xunset"; then 2203 dnl --with-ca-bundle given 2204 ca="$want_ca" 2205 capath="no" 2206 elif test "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then 2207 dnl --with-ca-path given 2208 if test "x$OPENSSL_ENABLED" != "x1" -a "x$GNUTLS_ENABLED" != "x1" -a "x$MBEDTLS_ENABLED" != "x1"; then 2209 AC_MSG_ERROR([--with-ca-path only works with OpenSSL, GnuTLS or mbedTLS]) 2210 fi 2211 capath="$want_capath" 2212 ca="no" 2213 else 2214 dnl first try autodetecting a CA bundle , then a CA path 2215 dnl both autodetections can be skipped by --without-ca-* 2216 ca="no" 2217 capath="no" 2218 if test "x$cross_compiling" != "xyes"; then 2219 dnl NOT cross-compiling and... 2220 dnl neither of the --with-ca-* options are provided 2221 if test "x$want_ca" = "xunset"; then 2222 dnl the path we previously would have installed the curl ca bundle 2223 dnl to, and thus we now check for an already existing cert in that 2224 dnl place in case we find no other 2225 if test "x$prefix" != xNONE; then 2226 cac="${prefix}/share/curl/curl-ca-bundle.crt" 2227 else 2228 cac="$ac_default_prefix/share/curl/curl-ca-bundle.crt" 2229 fi 2230 2231 for a in /etc/ssl/certs/ca-certificates.crt \ 2232 /etc/pki/tls/certs/ca-bundle.crt \ 2233 /usr/share/ssl/certs/ca-bundle.crt \ 2234 /usr/local/share/certs/ca-root-nss.crt \ 2235 /etc/ssl/cert.pem \ 2236 "$cac"; do 2237 if test -f "$a"; then 2238 ca="$a" 2239 break 2240 fi 2241 done 2242 fi 2243 if test "x$want_capath" = "xunset" -a "x$ca" = "xno" -a \ 2244 "x$OPENSSL_ENABLED" = "x1"; then 2245 check_capath="/etc/ssl/certs/" 2246 fi 2247 else 2248 dnl no option given and cross-compiling 2249 AC_MSG_WARN([skipped the ca-cert path detection when cross-compiling]) 2250 fi 2251 fi 2252 2253 if test "x$ca" = "xno" || test -f "$ca"; then 2254 ca_warning="" 2255 fi 2256 2257 if test "x$capath" != "xno"; then 2258 check_capath="$capath" 2259 fi 2260 2261 if test ! -z "$check_capath"; then 2262 for a in "$check_capath"; do 2263 if test -d "$a" && ls "$a"/[[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]].0 >/dev/null 2>/dev/null; then 2264 if test "x$capath" = "xno"; then 2265 capath="$a" 2266 fi 2267 capath_warning="" 2268 break 2269 fi 2270 done 2271 fi 2272 2273 if test "x$capath" = "xno"; then 2274 capath_warning="" 2275 fi 2276 2277 if test "x$ca" != "xno"; then 2278 CURL_CA_BUNDLE='"'$ca'"' 2279 AC_DEFINE_UNQUOTED(CURL_CA_BUNDLE, "$ca", [Location of default ca bundle]) 2280 AC_SUBST(CURL_CA_BUNDLE) 2281 AC_MSG_RESULT([$ca]) 2282 fi 2283 if test "x$capath" != "xno"; then 2284 CURL_CA_PATH="\"$capath\"" 2285 AC_DEFINE_UNQUOTED(CURL_CA_PATH, "$capath", [Location of default ca path]) 2286 AC_MSG_RESULT([$capath (capath)]) 2287 fi 2288 if test "x$ca" = "xno" && test "x$capath" = "xno"; then 2289 AC_MSG_RESULT([no]) 2290 fi 2291 2292 AC_MSG_CHECKING([whether to use builtin CA store of SSL library]) 2293 AC_ARG_WITH(ca-fallback, 2294AC_HELP_STRING([--with-ca-fallback], [Use the built in CA store of the SSL library]) 2295AC_HELP_STRING([--without-ca-fallback], [Don't use the built in CA store of the SSL library]), 2296 [ 2297 if test "x$with_ca_fallback" != "xyes" -a "x$with_ca_fallback" != "xno"; then 2298 AC_MSG_ERROR([--with-ca-fallback only allows yes or no as parameter]) 2299 fi 2300 ], 2301 [ with_ca_fallback="no"]) 2302 AC_MSG_RESULT([$with_ca_fallback]) 2303 if test "x$with_ca_fallback" = "xyes"; then 2304 if test "x$OPENSSL_ENABLED" != "x1" -a "x$GNUTLS_ENABLED" != "x1"; then 2305 AC_MSG_ERROR([--with-ca-fallback only works with OpenSSL or GnuTLS]) 2306 fi 2307 AC_DEFINE_UNQUOTED(CURL_CA_FALLBACK, 1, [define "1" to use built in CA store of SSL library ]) 2308 fi 2309]) 2310 2311dnl CURL_CHECK_WIN32_LARGEFILE 2312dnl ------------------------------------------------- 2313dnl Check if curl's WIN32 large file will be used 2314 2315AC_DEFUN([CURL_CHECK_WIN32_LARGEFILE], [ 2316 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl 2317 AC_MSG_CHECKING([whether build target supports WIN32 file API]) 2318 curl_win32_file_api="no" 2319 if test "$curl_cv_header_windows_h" = "yes"; then 2320 if test x"$enable_largefile" != "xno"; then 2321 AC_COMPILE_IFELSE([ 2322 AC_LANG_PROGRAM([[ 2323 ]],[[ 2324#if !defined(_WIN32_WCE) && \ 2325 (defined(__MINGW32__) || \ 2326 (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64)))) 2327 int dummy=1; 2328#else 2329 WIN32 large file API not supported. 2330#endif 2331 ]]) 2332 ],[ 2333 curl_win32_file_api="win32_large_files" 2334 ]) 2335 fi 2336 if test "$curl_win32_file_api" = "no"; then 2337 AC_COMPILE_IFELSE([ 2338 AC_LANG_PROGRAM([[ 2339 ]],[[ 2340#if defined(_WIN32_WCE) || defined(__MINGW32__) || defined(_MSC_VER) 2341 int dummy=1; 2342#else 2343 WIN32 small file API not supported. 2344#endif 2345 ]]) 2346 ],[ 2347 curl_win32_file_api="win32_small_files" 2348 ]) 2349 fi 2350 fi 2351 case "$curl_win32_file_api" in 2352 win32_large_files) 2353 AC_MSG_RESULT([yes (large file enabled)]) 2354 AC_DEFINE_UNQUOTED(USE_WIN32_LARGE_FILES, 1, 2355 [Define to 1 if you are building a Windows target with large file support.]) 2356 ;; 2357 win32_small_files) 2358 AC_MSG_RESULT([yes (large file disabled)]) 2359 AC_DEFINE_UNQUOTED(USE_WIN32_SMALL_FILES, 1, 2360 [Define to 1 if you are building a Windows target without large file support.]) 2361 ;; 2362 *) 2363 AC_MSG_RESULT([no]) 2364 ;; 2365 esac 2366]) 2367 2368dnl CURL_EXPORT_PCDIR ($pcdir) 2369dnl ------------------------ 2370dnl if $pcdir is not empty, set PKG_CONFIG_LIBDIR to $pcdir and export 2371dnl 2372dnl we need this macro since pkg-config distinguishes among empty and unset 2373dnl variable while checking PKG_CONFIG_LIBDIR 2374dnl 2375 2376AC_DEFUN([CURL_EXPORT_PCDIR], [ 2377 if test -n "$1"; then 2378 PKG_CONFIG_LIBDIR="$1" 2379 export PKG_CONFIG_LIBDIR 2380 fi 2381]) 2382 2383dnl CURL_CHECK_PKGCONFIG ($module, [$pcdir]) 2384dnl ------------------------ 2385dnl search for the pkg-config tool. Set the PKGCONFIG variable to hold the 2386dnl path to it, or 'no' if not found/present. 2387dnl 2388dnl If pkg-config is present, check that it has info about the $module or 2389dnl return "no" anyway! 2390dnl 2391dnl Optionally PKG_CONFIG_LIBDIR may be given as $pcdir. 2392dnl 2393 2394AC_DEFUN([CURL_CHECK_PKGCONFIG], [ 2395 if test -n "$PKG_CONFIG"; then 2396 PKGCONFIG="$PKG_CONFIG" 2397 else 2398 AC_PATH_TOOL([PKGCONFIG], [pkg-config], [no], 2399 [$PATH:/usr/bin:/usr/local/bin]) 2400 fi 2401 2402 if test "x$PKGCONFIG" != "xno"; then 2403 AC_MSG_CHECKING([for $1 options with pkg-config]) 2404 dnl ask pkg-config about $1 2405 itexists=`CURL_EXPORT_PCDIR([$2]) dnl 2406 $PKGCONFIG --exists $1 >/dev/null 2>&1 && echo 1` 2407 2408 if test -z "$itexists"; then 2409 dnl pkg-config does not have info about the given module! set the 2410 dnl variable to 'no' 2411 PKGCONFIG="no" 2412 AC_MSG_RESULT([no]) 2413 else 2414 AC_MSG_RESULT([found]) 2415 fi 2416 fi 2417]) 2418 2419 2420dnl CURL_GENERATE_CONFIGUREHELP_PM 2421dnl ------------------------------------------------- 2422dnl Generate test harness configurehelp.pm module, defining and 2423dnl initializing some perl variables with values which are known 2424dnl when the configure script runs. For portability reasons, test 2425dnl harness needs information on how to run the C preprocessor. 2426 2427AC_DEFUN([CURL_GENERATE_CONFIGUREHELP_PM], [ 2428 AC_REQUIRE([AC_PROG_CPP])dnl 2429 tmp_cpp=`eval echo "$ac_cpp" 2>/dev/null` 2430 if test -z "$tmp_cpp"; then 2431 tmp_cpp='cpp' 2432 fi 2433 cat >./tests/configurehelp.pm <<_EOF 2434[@%:@] This is a generated file. Do not edit. 2435 2436package configurehelp; 2437 2438use strict; 2439use warnings; 2440use Exporter; 2441 2442use vars qw( 2443 @ISA 2444 @EXPORT_OK 2445 \$Cpreprocessor 2446 ); 2447 2448@ISA = qw(Exporter); 2449 2450@EXPORT_OK = qw( 2451 \$Cpreprocessor 2452 ); 2453 2454\$Cpreprocessor = '$tmp_cpp'; 2455 24561; 2457_EOF 2458]) 2459 2460dnl CURL_CPP_P 2461dnl 2462dnl Check if $cpp -P should be used for extract define values due to gcc 5 2463dnl splitting up strings and defines between line outputs. gcc by default 2464dnl (without -P) will show TEST EINVAL TEST as 2465dnl 2466dnl # 13 "conftest.c" 2467dnl TEST 2468dnl # 13 "conftest.c" 3 4 2469dnl 22 2470dnl # 13 "conftest.c" 2471dnl TEST 2472 2473AC_DEFUN([CURL_CPP_P], [ 2474 AC_MSG_CHECKING([if cpp -P is needed]) 2475 AC_EGREP_CPP([TEST.*TEST], [ 2476 #include <errno.h> 2477TEST EINVAL TEST 2478 ], [cpp=no], [cpp=yes]) 2479 AC_MSG_RESULT([$cpp]) 2480 2481 dnl we need cpp -P so check if it works then 2482 if test "x$cpp" = "xyes"; then 2483 AC_MSG_CHECKING([if cpp -P works]) 2484 OLDCPPFLAGS=$CPPFLAGS 2485 CPPFLAGS="$CPPFLAGS -P" 2486 AC_EGREP_CPP([TEST.*TEST], [ 2487 #include <errno.h> 2488TEST EINVAL TEST 2489 ], [cpp_p=yes], [cpp_p=no]) 2490 AC_MSG_RESULT([$cpp_p]) 2491 2492 if test "x$cpp_p" = "xno"; then 2493 AC_MSG_WARN([failed to figure out cpp -P alternative]) 2494 # without -P 2495 CPPPFLAG="" 2496 else 2497 # with -P 2498 CPPPFLAG="-P" 2499 fi 2500 dnl restore CPPFLAGS 2501 CPPFLAGS=$OLDCPPFLAGS 2502 else 2503 # without -P 2504 CPPPFLAG="" 2505 fi 2506]) 2507 2508 2509dnl CURL_MAC_CFLAGS 2510dnl 2511dnl Check if -mmacosx-version-min, -miphoneos-version-min or any 2512dnl similar are set manually, otherwise do. And set 2513dnl -Werror=partial-availability. 2514dnl 2515 2516AC_DEFUN([CURL_MAC_CFLAGS], [ 2517 2518 tst_cflags="no" 2519 case $host_os in 2520 darwin*) 2521 tst_cflags="yes" 2522 ;; 2523 esac 2524 2525 AC_MSG_CHECKING([for good-to-use Mac CFLAGS]) 2526 AC_MSG_RESULT([$tst_cflags]); 2527 2528 if test "$tst_cflags" = "yes"; then 2529 AC_MSG_CHECKING([for *version-min in CFLAGS]) 2530 min="" 2531 if test -z "$(echo $CFLAGS | grep m.*os.*-version-min)"; then 2532 min="-mmacosx-version-min=10.8" 2533 CFLAGS="$CFLAGS $min" 2534 fi 2535 if test -z "$min"; then 2536 AC_MSG_RESULT([set by user]) 2537 else 2538 AC_MSG_RESULT([$min set]) 2539 fi 2540 2541 old_CFLAGS=$CFLAGS 2542 CFLAGS="$CFLAGS -Werror=partial-availability" 2543 AC_MSG_CHECKING([whether $CC accepts -Werror=partial-availability]) 2544 AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], 2545 [AC_MSG_RESULT([yes])], 2546 [AC_MSG_RESULT([no]) 2547 CFLAGS=$old_CFLAGS]) 2548 fi 2549 2550]) 2551 2552 2553dnl CURL_SUPPORTS_BUILTIN_AVAILABLE 2554dnl 2555dnl Check to see if the compiler supports __builtin_available. This built-in 2556dnl compiler function first appeared in Apple LLVM 9.0.0. It's so new that, at 2557dnl the time this macro was written, the function was not yet documented. Its 2558dnl purpose is to return true if the code is running under a certain OS version 2559dnl or later. 2560 2561AC_DEFUN([CURL_SUPPORTS_BUILTIN_AVAILABLE], [ 2562 AC_MSG_CHECKING([to see if the compiler supports __builtin_available()]) 2563 AC_COMPILE_IFELSE([ 2564 AC_LANG_PROGRAM([[ 2565#include <stdlib.h> 2566 ]],[[ 2567 if (__builtin_available(macOS 10.8, iOS 5.0, *)) {} 2568 ]]) 2569 ],[ 2570 AC_MSG_RESULT([yes]) 2571 AC_DEFINE_UNQUOTED(HAVE_BUILTIN_AVAILABLE, 1, 2572 [Define to 1 if you have the __builtin_available function.]) 2573 ],[ 2574 AC_MSG_RESULT([no]) 2575 ]) 2576]) 2577