1 #*************************************************************************** 2 # _ _ ____ _ 3 # Project ___| | | | _ \| | 4 # / __| | | | |_) | | 5 # | (__| |_| | _ <| |___ 6 # \___|\___/|_| \_\_____| 7 # 8 # Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel (a] 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 23 dnl CURL_CHECK_DEF (SYMBOL, [INCLUDES], [SILENT]) 24 dnl ------------------------------------------------- 25 dnl Use the C preprocessor to find out if the given object-style symbol 26 dnl is defined and get its expansion. This macro will not use default 27 dnl includes even if no INCLUDES argument is given. This macro will run 28 dnl silently when invoked with three arguments. If the expansion would 29 dnl result in a set of double-quoted strings the returned expansion will 30 dnl actually be a single double-quoted string concatenating all them. 31 32 AC_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( 49 ifelse($2,,,[$2])[[ 50 #ifdef $1 51 CURL_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 77 dnl CURL_CHECK_DEF_CC (SYMBOL, [INCLUDES], [SILENT]) 78 dnl ------------------------------------------------- 79 dnl Use the C compiler to find out only if the given symbol is defined 80 dnl or not, this can not find out its expansion. This macro will not use 81 dnl default includes even if no INCLUDES argument is given. This macro 82 dnl will run silently when invoked with three arguments. 83 84 AC_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( 89 ifelse($2,,,[$2])[[ 90 int 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 115 dnl CURL_CHECK_LIB_XNET 116 dnl ------------------------------------------------- 117 dnl Verify if X/Open network library is required. 118 119 AC_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([[ 124 int 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 143 dnl CURL_CHECK_AIX_ALL_SOURCE 144 dnl ------------------------------------------------- 145 dnl Provides a replacement of traditional AC_AIX with 146 dnl an uniform behaviour across all autoconf versions, 147 dnl and with our own placement rules. 148 149 AC_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 172 dnl CURL_CHECK_HEADER_WINDOWS 173 dnl ------------------------------------------------- 174 dnl Check for compilable and valid windows.h header 175 176 AC_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 207 dnl CURL_CHECK_NATIVE_WINDOWS 208 dnl ------------------------------------------------- 209 dnl Check if building a native Windows target 210 211 AC_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 238 dnl CURL_CHECK_HEADER_WINSOCK 239 dnl ------------------------------------------------- 240 dnl Check for compilable and valid winsock.h header 241 242 AC_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 275 dnl CURL_CHECK_HEADER_WINSOCK2 276 dnl ------------------------------------------------- 277 dnl Check for compilable and valid winsock2.h header 278 279 AC_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 312 dnl CURL_CHECK_HEADER_WS2TCPIP 313 dnl ------------------------------------------------- 314 dnl Check for compilable and valid ws2tcpip.h header 315 316 AC_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 350 dnl CURL_CHECK_HEADER_WINLDAP 351 dnl ------------------------------------------------- 352 dnl Check for compilable and valid winldap.h header 353 354 AC_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 390 dnl CURL_CHECK_HEADER_WINBER 391 dnl ------------------------------------------------- 392 dnl Check for compilable and valid winber.h header 393 394 AC_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 432 dnl CURL_CHECK_HEADER_LBER 433 dnl ------------------------------------------------- 434 dnl Check for compilable and valid lber.h header, 435 dnl and check if it is needed even with ldap.h 436 437 AC_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 513 dnl CURL_CHECK_HEADER_LDAP 514 dnl ------------------------------------------------- 515 dnl Check for compilable and valid ldap.h header 516 517 AC_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 559 dnl CURL_CHECK_HEADER_LDAP_SSL 560 dnl ------------------------------------------------- 561 dnl Check for compilable and valid ldap_ssl.h header 562 563 AC_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 607 dnl CURL_CHECK_HEADER_LDAPSSL 608 dnl ------------------------------------------------- 609 dnl Check for compilable and valid ldapssl.h header 610 611 AC_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 659 dnl CURL_CHECK_LIBS_WINLDAP 660 dnl ------------------------------------------------- 661 dnl Check for libraries needed for WINLDAP support, 662 dnl and prepended to LIBS any needed libraries. 663 dnl This macro can take an optional parameter with a 664 dnl white space separated list of libraries to check 665 dnl before the WINLDAP default ones. 666 667 AC_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 753 dnl CURL_CHECK_LIBS_LDAP 754 dnl ------------------------------------------------- 755 dnl Check for libraries needed for LDAP support, 756 dnl and prepended to LIBS any needed libraries. 757 dnl This macro can take an optional parameter with a 758 dnl white space separated list of libraries to check 759 dnl before the default ones. 760 761 AC_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' ; do 795 if test "$curl_cv_ldap_LIBS" = "unknown"; then 796 if test -z "$x_nlibs"; then 797 LIBS="$curl_cv_save_LIBS" 798 else 799 LIBS="$x_nlibs $curl_cv_save_LIBS" 800 fi 801 AC_LINK_IFELSE([ 802 AC_LANG_PROGRAM([[ 803 #undef inline 804 #ifdef HAVE_WINDOWS_H 805 #ifndef WIN32_LEAN_AND_MEAN 806 #define WIN32_LEAN_AND_MEAN 807 #endif 808 #include <windows.h> 809 #else 810 #ifdef HAVE_SYS_TYPES_H 811 #include <sys/types.h> 812 #endif 813 #endif 814 #ifndef NULL 815 #define NULL (void *)0 816 #endif 817 #ifndef LDAP_DEPRECATED 818 #define LDAP_DEPRECATED 1 819 #endif 820 #ifdef NEED_LBER_H 821 #include <lber.h> 822 #endif 823 #ifdef HAVE_LDAP_H 824 #include <ldap.h> 825 #endif 826 ]],[[ 827 BerValue *bvp = NULL; 828 BerElement *bep = ber_init(bvp); 829 LDAP *ldp = ldap_init("dummy", LDAP_PORT); 830 int res = ldap_unbind(ldp); 831 ber_free(bep, 1); 832 ]]) 833 ],[ 834 curl_cv_ldap_LIBS="$x_nlibs" 835 ]) 836 fi 837 done 838 # 839 LIBS="$curl_cv_save_LIBS" 840 # 841 case X-"$curl_cv_ldap_LIBS" in 842 X-unknown) 843 AC_MSG_RESULT([cannot find LDAP libraries]) 844 ;; 845 X-) 846 AC_MSG_RESULT([no additional lib required]) 847 ;; 848 *) 849 if test -z "$curl_cv_save_LIBS"; then 850 LIBS="$curl_cv_ldap_LIBS" 851 else 852 LIBS="$curl_cv_ldap_LIBS $curl_cv_save_LIBS" 853 fi 854 AC_MSG_RESULT([$curl_cv_ldap_LIBS]) 855 ;; 856 esac 857 # 858 ]) 859 860 861 dnl CURL_CHECK_HEADER_MALLOC 862 dnl ------------------------------------------------- 863 dnl Check for compilable and valid malloc.h header, 864 dnl and check if it is needed even with stdlib.h 865 866 AC_DEFUN([CURL_CHECK_HEADER_MALLOC], [ 867 AC_CACHE_CHECK([for malloc.h], [curl_cv_header_malloc_h], [ 868 AC_COMPILE_IFELSE([ 869 AC_LANG_PROGRAM([[ 870 #include <malloc.h> 871 ]],[[ 872 void *p = malloc(10); 873 void *q = calloc(10,10); 874 free(p); 875 free(q); 876 ]]) 877 ],[ 878 curl_cv_header_malloc_h="yes" 879 ],[ 880 curl_cv_header_malloc_h="no" 881 ]) 882 ]) 883 if test "$curl_cv_header_malloc_h" = "yes"; then 884 AC_DEFINE_UNQUOTED(HAVE_MALLOC_H, 1, 885 [Define to 1 if you have the malloc.h header file.]) 886 # 887 AC_COMPILE_IFELSE([ 888 AC_LANG_PROGRAM([[ 889 #include <stdlib.h> 890 ]],[[ 891 void *p = malloc(10); 892 void *q = calloc(10,10); 893 free(p); 894 free(q); 895 ]]) 896 ],[ 897 curl_cv_need_header_malloc_h="no" 898 ],[ 899 curl_cv_need_header_malloc_h="yes" 900 ]) 901 # 902 case "$curl_cv_need_header_malloc_h" in 903 yes) 904 AC_DEFINE_UNQUOTED(NEED_MALLOC_H, 1, 905 [Define to 1 if you need the malloc.h header file even with stdlib.h]) 906 ;; 907 esac 908 fi 909 ]) 910 911 912 dnl CURL_CHECK_HEADER_MEMORY 913 dnl ------------------------------------------------- 914 dnl Check for compilable and valid memory.h header, 915 dnl and check if it is needed even with stdlib.h for 916 dnl memory related functions. 917 918 AC_DEFUN([CURL_CHECK_HEADER_MEMORY], [ 919 AC_CACHE_CHECK([for memory.h], [curl_cv_header_memory_h], [ 920 AC_COMPILE_IFELSE([ 921 AC_LANG_PROGRAM([[ 922 #include <memory.h> 923 ]],[[ 924 void *p = malloc(10); 925 void *q = calloc(10,10); 926 free(p); 927 free(q); 928 ]]) 929 ],[ 930 curl_cv_header_memory_h="yes" 931 ],[ 932 curl_cv_header_memory_h="no" 933 ]) 934 ]) 935 if test "$curl_cv_header_memory_h" = "yes"; then 936 AC_DEFINE_UNQUOTED(HAVE_MEMORY_H, 1, 937 [Define to 1 if you have the memory.h header file.]) 938 # 939 AC_COMPILE_IFELSE([ 940 AC_LANG_PROGRAM([[ 941 #include <stdlib.h> 942 ]],[[ 943 void *p = malloc(10); 944 void *q = calloc(10,10); 945 free(p); 946 free(q); 947 ]]) 948 ],[ 949 curl_cv_need_header_memory_h="no" 950 ],[ 951 curl_cv_need_header_memory_h="yes" 952 ]) 953 # 954 case "$curl_cv_need_header_memory_h" in 955 yes) 956 AC_DEFINE_UNQUOTED(NEED_MEMORY_H, 1, 957 [Define to 1 if you need the memory.h header file even with stdlib.h]) 958 ;; 959 esac 960 fi 961 ]) 962 963 964 dnl CURL_CHECK_FUNC_GETNAMEINFO 965 dnl ------------------------------------------------- 966 dnl Test if the getnameinfo function is available, 967 dnl and check the types of five of its arguments. 968 dnl If the function succeeds HAVE_GETNAMEINFO will be 969 dnl defined, defining the types of the arguments in 970 dnl GETNAMEINFO_TYPE_ARG1, GETNAMEINFO_TYPE_ARG2, 971 dnl GETNAMEINFO_TYPE_ARG46 and GETNAMEINFO_TYPE_ARG7, 972 dnl and also defining the type qualifier of first 973 dnl argument in GETNAMEINFO_QUAL_ARG1. 974 975 AC_DEFUN([CURL_CHECK_FUNC_GETNAMEINFO], [ 976 AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl 977 AC_CHECK_HEADERS(sys/types.h sys/socket.h netdb.h) 978 # 979 AC_MSG_CHECKING([for getnameinfo]) 980 AC_LINK_IFELSE([ 981 AC_LANG_FUNC_LINK_TRY([getnameinfo]) 982 ],[ 983 AC_MSG_RESULT([yes]) 984 curl_cv_getnameinfo="yes" 985 ],[ 986 AC_MSG_RESULT([no]) 987 curl_cv_getnameinfo="no" 988 ]) 989 # 990 if test "$curl_cv_getnameinfo" != "yes"; then 991 AC_MSG_CHECKING([deeper for getnameinfo]) 992 AC_LINK_IFELSE([ 993 AC_LANG_PROGRAM([[ 994 ]],[[ 995 getnameinfo(); 996 ]]) 997 ],[ 998 AC_MSG_RESULT([yes]) 999 curl_cv_getnameinfo="yes" 1000 ],[ 1001 AC_MSG_RESULT([but still no]) 1002 curl_cv_getnameinfo="no" 1003 ]) 1004 fi 1005 # 1006 if test "$curl_cv_getnameinfo" != "yes"; then 1007 AC_MSG_CHECKING([deeper and deeper for getnameinfo]) 1008 AC_LINK_IFELSE([ 1009 AC_LANG_PROGRAM([[ 1010 #undef inline 1011 #ifdef HAVE_WINDOWS_H 1012 #ifndef WIN32_LEAN_AND_MEAN 1013 #define WIN32_LEAN_AND_MEAN 1014 #endif 1015 #include <windows.h> 1016 #ifdef HAVE_WINSOCK2_H 1017 #include <winsock2.h> 1018 #ifdef HAVE_WS2TCPIP_H 1019 #include <ws2tcpip.h> 1020 #endif 1021 #endif 1022 #else 1023 #ifdef HAVE_SYS_TYPES_H 1024 #include <sys/types.h> 1025 #endif 1026 #ifdef HAVE_SYS_SOCKET_H 1027 #include <sys/socket.h> 1028 #endif 1029 #ifdef HAVE_NETDB_H 1030 #include <netdb.h> 1031 #endif 1032 #endif 1033 ]],[[ 1034 getnameinfo(0, 0, 0, 0, 0, 0, 0); 1035 ]]) 1036 ],[ 1037 AC_MSG_RESULT([yes]) 1038 curl_cv_getnameinfo="yes" 1039 ],[ 1040 AC_MSG_RESULT([but still no]) 1041 curl_cv_getnameinfo="no" 1042 ]) 1043 fi 1044 # 1045 if test "$curl_cv_getnameinfo" = "yes"; then 1046 AC_CACHE_CHECK([types of arguments for getnameinfo], 1047 [curl_cv_func_getnameinfo_args], [ 1048 curl_cv_func_getnameinfo_args="unknown" 1049 for gni_arg1 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do 1050 for gni_arg2 in 'socklen_t' 'size_t' 'int'; do 1051 for gni_arg46 in 'size_t' 'int' 'socklen_t' 'unsigned int' 'DWORD'; do 1052 for gni_arg7 in 'int' 'unsigned int'; do 1053 if test "$curl_cv_func_getnameinfo_args" = "unknown"; then 1054 AC_COMPILE_IFELSE([ 1055 AC_LANG_PROGRAM([[ 1056 #undef inline 1057 #ifdef HAVE_WINDOWS_H 1058 #ifndef WIN32_LEAN_AND_MEAN 1059 #define WIN32_LEAN_AND_MEAN 1060 #endif 1061 #if (!defined(_WIN32_WINNT)) || (_WIN32_WINNT < 0x0501) 1062 #undef _WIN32_WINNT 1063 #define _WIN32_WINNT 0x0501 1064 #endif 1065 #include <windows.h> 1066 #ifdef HAVE_WINSOCK2_H 1067 #include <winsock2.h> 1068 #ifdef HAVE_WS2TCPIP_H 1069 #include <ws2tcpip.h> 1070 #endif 1071 #endif 1072 #define GNICALLCONV WSAAPI 1073 #else 1074 #ifdef HAVE_SYS_TYPES_H 1075 #include <sys/types.h> 1076 #endif 1077 #ifdef HAVE_SYS_SOCKET_H 1078 #include <sys/socket.h> 1079 #endif 1080 #ifdef HAVE_NETDB_H 1081 #include <netdb.h> 1082 #endif 1083 #define GNICALLCONV 1084 #endif 1085 extern int GNICALLCONV 1086 #ifdef __ANDROID__ 1087 __attribute__((overloadable)) 1088 #endif 1089 getnameinfo($gni_arg1, $gni_arg2, 1090 char *, $gni_arg46, 1091 char *, $gni_arg46, 1092 $gni_arg7); 1093 ]],[[ 1094 $gni_arg2 salen=0; 1095 $gni_arg46 hostlen=0; 1096 $gni_arg46 servlen=0; 1097 $gni_arg7 flags=0; 1098 int res = getnameinfo(0, salen, 0, hostlen, 0, servlen, flags); 1099 ]]) 1100 ],[ 1101 curl_cv_func_getnameinfo_args="$gni_arg1,$gni_arg2,$gni_arg46,$gni_arg7" 1102 ]) 1103 fi 1104 done 1105 done 1106 done 1107 done 1108 ]) # AC-CACHE-CHECK 1109 if test "$curl_cv_func_getnameinfo_args" = "unknown"; then 1110 AC_MSG_WARN([Cannot find proper types to use for getnameinfo args]) 1111 AC_MSG_WARN([HAVE_GETNAMEINFO will not be defined]) 1112 else 1113 gni_prev_IFS=$IFS; IFS=',' 1114 set dummy `echo "$curl_cv_func_getnameinfo_args" | sed 's/\*/\*/g'` 1115 IFS=$gni_prev_IFS 1116 shift 1117 # 1118 gni_qual_type_arg1=$[1] 1119 # 1120 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG2, $[2], 1121 [Define to the type of arg 2 for getnameinfo.]) 1122 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG46, $[3], 1123 [Define to the type of args 4 and 6 for getnameinfo.]) 1124 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG7, $[4], 1125 [Define to the type of arg 7 for getnameinfo.]) 1126 # 1127 prev_sh_opts=$- 1128 # 1129 case $prev_sh_opts in 1130 *f*) 1131 ;; 1132 *) 1133 set -f 1134 ;; 1135 esac 1136 # 1137 case "$gni_qual_type_arg1" in 1138 const*) 1139 gni_qual_arg1=const 1140 gni_type_arg1=`echo $gni_qual_type_arg1 | sed 's/^const //'` 1141 ;; 1142 *) 1143 gni_qual_arg1= 1144 gni_type_arg1=$gni_qual_type_arg1 1145 ;; 1146 esac 1147 # 1148 AC_DEFINE_UNQUOTED(GETNAMEINFO_QUAL_ARG1, $gni_qual_arg1, 1149 [Define to the type qualifier of arg 1 for getnameinfo.]) 1150 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG1, $gni_type_arg1, 1151 [Define to the type of arg 1 for getnameinfo.]) 1152 # 1153 case $prev_sh_opts in 1154 *f*) 1155 ;; 1156 *) 1157 set +f 1158 ;; 1159 esac 1160 # 1161 AC_DEFINE_UNQUOTED(HAVE_GETNAMEINFO, 1, 1162 [Define to 1 if you have the getnameinfo function.]) 1163 curl_cv_func_getnameinfo="yes" 1164 fi 1165 fi 1166 ]) 1167 1168 1169 dnl TYPE_SOCKADDR_STORAGE 1170 dnl ------------------------------------------------- 1171 dnl Check for struct sockaddr_storage. Most IPv6-enabled 1172 dnl hosts have it, but AIX 4.3 is one known exception. 1173 1174 AC_DEFUN([TYPE_SOCKADDR_STORAGE], 1175 [ 1176 AC_CHECK_TYPE([struct sockaddr_storage], 1177 AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1, 1178 [if struct sockaddr_storage is defined]), , 1179 [ 1180 #undef inline 1181 #ifdef HAVE_WINDOWS_H 1182 #ifndef WIN32_LEAN_AND_MEAN 1183 #define WIN32_LEAN_AND_MEAN 1184 #endif 1185 #include <windows.h> 1186 #ifdef HAVE_WINSOCK2_H 1187 #include <winsock2.h> 1188 #endif 1189 #else 1190 #ifdef HAVE_SYS_TYPES_H 1191 #include <sys/types.h> 1192 #endif 1193 #ifdef HAVE_SYS_SOCKET_H 1194 #include <sys/socket.h> 1195 #endif 1196 #ifdef HAVE_NETINET_IN_H 1197 #include <netinet/in.h> 1198 #endif 1199 #ifdef HAVE_ARPA_INET_H 1200 #include <arpa/inet.h> 1201 #endif 1202 #endif 1203 ]) 1204 ]) 1205 1206 1207 dnl CURL_CHECK_NI_WITHSCOPEID 1208 dnl ------------------------------------------------- 1209 dnl Check for working NI_WITHSCOPEID in getnameinfo() 1210 1211 AC_DEFUN([CURL_CHECK_NI_WITHSCOPEID], [ 1212 AC_REQUIRE([CURL_CHECK_FUNC_GETNAMEINFO])dnl 1213 AC_REQUIRE([TYPE_SOCKADDR_STORAGE])dnl 1214 AC_CHECK_HEADERS(stdio.h sys/types.h sys/socket.h \ 1215 netdb.h netinet/in.h arpa/inet.h) 1216 # 1217 AC_CACHE_CHECK([for working NI_WITHSCOPEID], 1218 [curl_cv_working_ni_withscopeid], [ 1219 AC_RUN_IFELSE([ 1220 AC_LANG_PROGRAM([[ 1221 #ifdef HAVE_STDLIB_H 1222 #include <stdlib.h> 1223 #endif 1224 #ifdef HAVE_STDIO_H 1225 #include <stdio.h> 1226 #endif 1227 #ifdef HAVE_SYS_TYPES_H 1228 #include <sys/types.h> 1229 #endif 1230 #ifdef HAVE_SYS_SOCKET_H 1231 #include <sys/socket.h> 1232 #endif 1233 #ifdef HAVE_NETDB_H 1234 #include <netdb.h> 1235 #endif 1236 #ifdef HAVE_NETINET_IN_H 1237 #include <netinet/in.h> 1238 #endif 1239 #ifdef HAVE_ARPA_INET_H 1240 #include <arpa/inet.h> 1241 #endif 1242 ]],[[ 1243 #if defined(NI_WITHSCOPEID) && defined(HAVE_GETNAMEINFO) 1244 #ifdef HAVE_STRUCT_SOCKADDR_STORAGE 1245 struct sockaddr_storage sa; 1246 #else 1247 unsigned char sa[256]; 1248 #endif 1249 char hostbuf[NI_MAXHOST]; 1250 int rc; 1251 GETNAMEINFO_TYPE_ARG2 salen = (GETNAMEINFO_TYPE_ARG2)sizeof(sa); 1252 GETNAMEINFO_TYPE_ARG46 hostlen = (GETNAMEINFO_TYPE_ARG46)sizeof(hostbuf); 1253 GETNAMEINFO_TYPE_ARG7 flags = NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID; 1254 int fd = socket(AF_INET6, SOCK_STREAM, 0); 1255 if(fd < 0) { 1256 perror("socket()"); 1257 return 1; /* Error creating socket */ 1258 } 1259 rc = getsockname(fd, (GETNAMEINFO_TYPE_ARG1)&sa, &salen); 1260 if(rc) { 1261 perror("getsockname()"); 1262 return 2; /* Error retrieving socket name */ 1263 } 1264 rc = getnameinfo((GETNAMEINFO_TYPE_ARG1)&sa, salen, hostbuf, hostlen, NULL, 0, flags); 1265 if(rc) { 1266 printf("rc = %s\n", gai_strerror(rc)); 1267 return 3; /* Error translating socket address */ 1268 } 1269 return 0; /* Ok, NI_WITHSCOPEID works */ 1270 #else 1271 return 4; /* Error, NI_WITHSCOPEID not defined or no getnameinfo() */ 1272 #endif 1273 ]]) # AC-LANG-PROGRAM 1274 ],[ 1275 # Exit code == 0. Program worked. 1276 curl_cv_working_ni_withscopeid="yes" 1277 ],[ 1278 # Exit code != 0. Program failed. 1279 curl_cv_working_ni_withscopeid="no" 1280 ],[ 1281 # Program is not run when cross-compiling. So we assume 1282 # NI_WITHSCOPEID will work if we are able to compile it. 1283 AC_COMPILE_IFELSE([ 1284 AC_LANG_PROGRAM([[ 1285 #include <sys/types.h> 1286 #include <sys/socket.h> 1287 #include <netdb.h> 1288 ]],[[ 1289 unsigned int dummy= NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID; 1290 ]]) 1291 ],[ 1292 curl_cv_working_ni_withscopeid="yes" 1293 ],[ 1294 curl_cv_working_ni_withscopeid="no" 1295 ]) # AC-COMPILE-IFELSE 1296 ]) # AC-RUN-IFELSE 1297 ]) # AC-CACHE-CHECK 1298 case "$curl_cv_working_ni_withscopeid" in 1299 yes) 1300 AC_DEFINE(HAVE_NI_WITHSCOPEID, 1, 1301 [Define to 1 if NI_WITHSCOPEID exists and works.]) 1302 ;; 1303 esac 1304 ]) 1305 1306 1307 dnl CURL_CHECK_FUNC_RECV 1308 dnl ------------------------------------------------- 1309 dnl Test if the socket recv() function is available, 1310 dnl and check its return type and the types of its 1311 dnl arguments. If the function succeeds HAVE_RECV 1312 dnl will be defined, defining the types of the arguments 1313 dnl in RECV_TYPE_ARG1, RECV_TYPE_ARG2, RECV_TYPE_ARG3 1314 dnl and RECV_TYPE_ARG4, defining the type of the function 1315 dnl return value in RECV_TYPE_RETV. 1316 1317 AC_DEFUN([CURL_CHECK_FUNC_RECV], [ 1318 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl 1319 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl 1320 AC_CHECK_HEADERS(sys/types.h sys/socket.h) 1321 # 1322 AC_MSG_CHECKING([for recv]) 1323 AC_LINK_IFELSE([ 1324 AC_LANG_PROGRAM([[ 1325 #undef inline 1326 #ifdef HAVE_WINDOWS_H 1327 #ifndef WIN32_LEAN_AND_MEAN 1328 #define WIN32_LEAN_AND_MEAN 1329 #endif 1330 #include <windows.h> 1331 #ifdef HAVE_WINSOCK2_H 1332 #include <winsock2.h> 1333 #else 1334 #ifdef HAVE_WINSOCK_H 1335 #include <winsock.h> 1336 #endif 1337 #endif 1338 #else 1339 #ifdef HAVE_SYS_TYPES_H 1340 #include <sys/types.h> 1341 #endif 1342 #ifdef HAVE_SYS_SOCKET_H 1343 #include <sys/socket.h> 1344 #endif 1345 #endif 1346 ]],[[ 1347 recv(0, 0, 0, 0); 1348 ]]) 1349 ],[ 1350 AC_MSG_RESULT([yes]) 1351 curl_cv_recv="yes" 1352 ],[ 1353 AC_MSG_RESULT([no]) 1354 curl_cv_recv="no" 1355 ]) 1356 # 1357 if test "$curl_cv_recv" = "yes"; then 1358 AC_CACHE_CHECK([types of args and return type for recv], 1359 [curl_cv_func_recv_args], [ 1360 curl_cv_func_recv_args="unknown" 1361 for recv_retv in 'int' 'ssize_t'; do 1362 for recv_arg1 in 'int' 'ssize_t' 'SOCKET'; do 1363 for recv_arg2 in 'char *' 'void *'; do 1364 for recv_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do 1365 for recv_arg4 in 'int' 'unsigned int'; do 1366 if test "$curl_cv_func_recv_args" = "unknown"; then 1367 AC_COMPILE_IFELSE([ 1368 AC_LANG_PROGRAM([[ 1369 #undef inline 1370 #ifdef HAVE_WINDOWS_H 1371 #ifndef WIN32_LEAN_AND_MEAN 1372 #define WIN32_LEAN_AND_MEAN 1373 #endif 1374 #include <windows.h> 1375 #ifdef HAVE_WINSOCK2_H 1376 #include <winsock2.h> 1377 #else 1378 #ifdef HAVE_WINSOCK_H 1379 #include <winsock.h> 1380 #endif 1381 #endif 1382 #define RECVCALLCONV PASCAL 1383 #else 1384 #ifdef HAVE_SYS_TYPES_H 1385 #include <sys/types.h> 1386 #endif 1387 #ifdef HAVE_SYS_SOCKET_H 1388 #include <sys/socket.h> 1389 #endif 1390 #define RECVCALLCONV 1391 #endif 1392 extern $recv_retv RECVCALLCONV 1393 #ifdef __ANDROID__ 1394 __attribute__((overloadable)) 1395 #endif 1396 recv($recv_arg1, $recv_arg2, $recv_arg3, $recv_arg4); 1397 ]],[[ 1398 $recv_arg1 s=0; 1399 $recv_arg2 buf=0; 1400 $recv_arg3 len=0; 1401 $recv_arg4 flags=0; 1402 $recv_retv res = recv(s, buf, len, flags); 1403 ]]) 1404 ],[ 1405 curl_cv_func_recv_args="$recv_arg1,$recv_arg2,$recv_arg3,$recv_arg4,$recv_retv" 1406 ]) 1407 fi 1408 done 1409 done 1410 done 1411 done 1412 done 1413 ]) # AC-CACHE-CHECK 1414 if test "$curl_cv_func_recv_args" = "unknown"; then 1415 AC_MSG_ERROR([Cannot find proper types to use for recv args]) 1416 else 1417 recv_prev_IFS=$IFS; IFS=',' 1418 set dummy `echo "$curl_cv_func_recv_args" | sed 's/\*/\*/g'` 1419 IFS=$recv_prev_IFS 1420 shift 1421 # 1422 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG1, $[1], 1423 [Define to the type of arg 1 for recv.]) 1424 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG2, $[2], 1425 [Define to the type of arg 2 for recv.]) 1426 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG3, $[3], 1427 [Define to the type of arg 3 for recv.]) 1428 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG4, $[4], 1429 [Define to the type of arg 4 for recv.]) 1430 AC_DEFINE_UNQUOTED(RECV_TYPE_RETV, $[5], 1431 [Define to the function return type for recv.]) 1432 # 1433 AC_DEFINE_UNQUOTED(HAVE_RECV, 1, 1434 [Define to 1 if you have the recv function.]) 1435 curl_cv_func_recv="yes" 1436 fi 1437 else 1438 AC_MSG_ERROR([Unable to link function recv]) 1439 fi 1440 ]) 1441 1442 1443 dnl CURL_CHECK_FUNC_SEND 1444 dnl ------------------------------------------------- 1445 dnl Test if the socket send() function is available, 1446 dnl and check its return type and the types of its 1447 dnl arguments. If the function succeeds HAVE_SEND 1448 dnl will be defined, defining the types of the arguments 1449 dnl in SEND_TYPE_ARG1, SEND_TYPE_ARG2, SEND_TYPE_ARG3 1450 dnl and SEND_TYPE_ARG4, defining the type of the function 1451 dnl return value in SEND_TYPE_RETV, and also defining the 1452 dnl type qualifier of second argument in SEND_QUAL_ARG2. 1453 1454 AC_DEFUN([CURL_CHECK_FUNC_SEND], [ 1455 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl 1456 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl 1457 AC_CHECK_HEADERS(sys/types.h sys/socket.h) 1458 # 1459 AC_MSG_CHECKING([for send]) 1460 AC_LINK_IFELSE([ 1461 AC_LANG_PROGRAM([[ 1462 #undef inline 1463 #ifdef HAVE_WINDOWS_H 1464 #ifndef WIN32_LEAN_AND_MEAN 1465 #define WIN32_LEAN_AND_MEAN 1466 #endif 1467 #include <windows.h> 1468 #ifdef HAVE_WINSOCK2_H 1469 #include <winsock2.h> 1470 #else 1471 #ifdef HAVE_WINSOCK_H 1472 #include <winsock.h> 1473 #endif 1474 #endif 1475 #else 1476 #ifdef HAVE_SYS_TYPES_H 1477 #include <sys/types.h> 1478 #endif 1479 #ifdef HAVE_SYS_SOCKET_H 1480 #include <sys/socket.h> 1481 #endif 1482 #endif 1483 ]],[[ 1484 send(0, 0, 0, 0); 1485 ]]) 1486 ],[ 1487 AC_MSG_RESULT([yes]) 1488 curl_cv_send="yes" 1489 ],[ 1490 AC_MSG_RESULT([no]) 1491 curl_cv_send="no" 1492 ]) 1493 # 1494 if test "$curl_cv_send" = "yes"; then 1495 AC_CACHE_CHECK([types of args and return type for send], 1496 [curl_cv_func_send_args], [ 1497 curl_cv_func_send_args="unknown" 1498 for send_retv in 'int' 'ssize_t'; do 1499 for send_arg1 in 'int' 'ssize_t' 'SOCKET'; do 1500 for send_arg2 in 'char *' 'void *' 'const char *' 'const void *'; do 1501 for send_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do 1502 for send_arg4 in 'int' 'unsigned int'; do 1503 if test "$curl_cv_func_send_args" = "unknown"; then 1504 AC_COMPILE_IFELSE([ 1505 AC_LANG_PROGRAM([[ 1506 #undef inline 1507 #ifdef HAVE_WINDOWS_H 1508 #ifndef WIN32_LEAN_AND_MEAN 1509 #define WIN32_LEAN_AND_MEAN 1510 #endif 1511 #include <windows.h> 1512 #ifdef HAVE_WINSOCK2_H 1513 #include <winsock2.h> 1514 #else 1515 #ifdef HAVE_WINSOCK_H 1516 #include <winsock.h> 1517 #endif 1518 #endif 1519 #define SENDCALLCONV PASCAL 1520 #else 1521 #ifdef HAVE_SYS_TYPES_H 1522 #include <sys/types.h> 1523 #endif 1524 #ifdef HAVE_SYS_SOCKET_H 1525 #include <sys/socket.h> 1526 #endif 1527 #define SENDCALLCONV 1528 #endif 1529 extern $send_retv SENDCALLCONV 1530 #ifdef __ANDROID__ 1531 __attribute__((overloadable)) 1532 #endif 1533 send($send_arg1, $send_arg2, $send_arg3, $send_arg4); 1534 ]],[[ 1535 $send_arg1 s=0; 1536 $send_arg3 len=0; 1537 $send_arg4 flags=0; 1538 $send_retv res = send(s, 0, len, flags); 1539 ]]) 1540 ],[ 1541 curl_cv_func_send_args="$send_arg1,$send_arg2,$send_arg3,$send_arg4,$send_retv" 1542 ]) 1543 fi 1544 done 1545 done 1546 done 1547 done 1548 done 1549 ]) # AC-CACHE-CHECK 1550 if test "$curl_cv_func_send_args" = "unknown"; then 1551 AC_MSG_ERROR([Cannot find proper types to use for send args]) 1552 else 1553 send_prev_IFS=$IFS; IFS=',' 1554 set dummy `echo "$curl_cv_func_send_args" | sed 's/\*/\*/g'` 1555 IFS=$send_prev_IFS 1556 shift 1557 # 1558 send_qual_type_arg2=$[2] 1559 # 1560 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG1, $[1], 1561 [Define to the type of arg 1 for send.]) 1562 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG3, $[3], 1563 [Define to the type of arg 3 for send.]) 1564 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG4, $[4], 1565 [Define to the type of arg 4 for send.]) 1566 AC_DEFINE_UNQUOTED(SEND_TYPE_RETV, $[5], 1567 [Define to the function return type for send.]) 1568 # 1569 prev_sh_opts=$- 1570 # 1571 case $prev_sh_opts in 1572 *f*) 1573 ;; 1574 *) 1575 set -f 1576 ;; 1577 esac 1578 # 1579 case "$send_qual_type_arg2" in 1580 const*) 1581 send_qual_arg2=const 1582 send_type_arg2=`echo $send_qual_type_arg2 | sed 's/^const //'` 1583 ;; 1584 *) 1585 send_qual_arg2= 1586 send_type_arg2=$send_qual_type_arg2 1587 ;; 1588 esac 1589 # 1590 AC_DEFINE_UNQUOTED(SEND_QUAL_ARG2, $send_qual_arg2, 1591 [Define to the type qualifier of arg 2 for send.]) 1592 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG2, $send_type_arg2, 1593 [Define to the type of arg 2 for send.]) 1594 # 1595 case $prev_sh_opts in 1596 *f*) 1597 ;; 1598 *) 1599 set +f 1600 ;; 1601 esac 1602 # 1603 AC_DEFINE_UNQUOTED(HAVE_SEND, 1, 1604 [Define to 1 if you have the send function.]) 1605 curl_cv_func_send="yes" 1606 fi 1607 else 1608 AC_MSG_ERROR([Unable to link function send]) 1609 fi 1610 ]) 1611 1612 dnl CURL_CHECK_MSG_NOSIGNAL 1613 dnl ------------------------------------------------- 1614 dnl Check for MSG_NOSIGNAL 1615 1616 AC_DEFUN([CURL_CHECK_MSG_NOSIGNAL], [ 1617 AC_CHECK_HEADERS(sys/types.h sys/socket.h) 1618 AC_CACHE_CHECK([for MSG_NOSIGNAL], [curl_cv_msg_nosignal], [ 1619 AC_COMPILE_IFELSE([ 1620 AC_LANG_PROGRAM([[ 1621 #undef inline 1622 #ifdef HAVE_WINDOWS_H 1623 #ifndef WIN32_LEAN_AND_MEAN 1624 #define WIN32_LEAN_AND_MEAN 1625 #endif 1626 #include <windows.h> 1627 #ifdef HAVE_WINSOCK2_H 1628 #include <winsock2.h> 1629 #else 1630 #ifdef HAVE_WINSOCK_H 1631 #include <winsock.h> 1632 #endif 1633 #endif 1634 #else 1635 #ifdef HAVE_SYS_TYPES_H 1636 #include <sys/types.h> 1637 #endif 1638 #ifdef HAVE_SYS_SOCKET_H 1639 #include <sys/socket.h> 1640 #endif 1641 #endif 1642 ]],[[ 1643 int flag=MSG_NOSIGNAL; 1644 ]]) 1645 ],[ 1646 curl_cv_msg_nosignal="yes" 1647 ],[ 1648 curl_cv_msg_nosignal="no" 1649 ]) 1650 ]) 1651 case "$curl_cv_msg_nosignal" in 1652 yes) 1653 AC_DEFINE_UNQUOTED(HAVE_MSG_NOSIGNAL, 1, 1654 [Define to 1 if you have the MSG_NOSIGNAL flag.]) 1655 ;; 1656 esac 1657 ]) 1658 1659 1660 dnl CURL_CHECK_STRUCT_TIMEVAL 1661 dnl ------------------------------------------------- 1662 dnl Check for timeval struct 1663 1664 AC_DEFUN([CURL_CHECK_STRUCT_TIMEVAL], [ 1665 AC_REQUIRE([AC_HEADER_TIME])dnl 1666 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl 1667 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl 1668 AC_CHECK_HEADERS(sys/types.h sys/time.h time.h sys/socket.h) 1669 AC_CACHE_CHECK([for struct timeval], [curl_cv_struct_timeval], [ 1670 AC_COMPILE_IFELSE([ 1671 AC_LANG_PROGRAM([[ 1672 #undef inline 1673 #ifdef HAVE_WINDOWS_H 1674 #ifndef WIN32_LEAN_AND_MEAN 1675 #define WIN32_LEAN_AND_MEAN 1676 #endif 1677 #include <windows.h> 1678 #ifdef HAVE_WINSOCK2_H 1679 #include <winsock2.h> 1680 #else 1681 #ifdef HAVE_WINSOCK_H 1682 #include <winsock.h> 1683 #endif 1684 #endif 1685 #endif 1686 #ifdef HAVE_SYS_TYPES_H 1687 #include <sys/types.h> 1688 #endif 1689 #ifdef HAVE_SYS_TIME_H 1690 #include <sys/time.h> 1691 #ifdef TIME_WITH_SYS_TIME 1692 #include <time.h> 1693 #endif 1694 #else 1695 #ifdef HAVE_TIME_H 1696 #include <time.h> 1697 #endif 1698 #endif 1699 #ifdef HAVE_SYS_SOCKET_H 1700 #include <sys/socket.h> 1701 #endif 1702 ]],[[ 1703 struct timeval ts; 1704 ts.tv_sec = 0; 1705 ts.tv_usec = 0; 1706 ]]) 1707 ],[ 1708 curl_cv_struct_timeval="yes" 1709 ],[ 1710 curl_cv_struct_timeval="no" 1711 ]) 1712 ]) 1713 case "$curl_cv_struct_timeval" in 1714 yes) 1715 AC_DEFINE_UNQUOTED(HAVE_STRUCT_TIMEVAL, 1, 1716 [Define to 1 if you have the timeval struct.]) 1717 ;; 1718 esac 1719 ]) 1720 1721 1722 dnl TYPE_SIG_ATOMIC_T 1723 dnl ------------------------------------------------- 1724 dnl Check if the sig_atomic_t type is available, and 1725 dnl verify if it is already defined as volatile. 1726 1727 AC_DEFUN([TYPE_SIG_ATOMIC_T], [ 1728 AC_CHECK_HEADERS(signal.h) 1729 AC_CHECK_TYPE([sig_atomic_t],[ 1730 AC_DEFINE(HAVE_SIG_ATOMIC_T, 1, 1731 [Define to 1 if sig_atomic_t is an available typedef.]) 1732 ], ,[ 1733 #ifdef HAVE_SIGNAL_H 1734 #include <signal.h> 1735 #endif 1736 ]) 1737 case "$ac_cv_type_sig_atomic_t" in 1738 yes) 1739 # 1740 AC_MSG_CHECKING([if sig_atomic_t is already defined as volatile]) 1741 AC_LINK_IFELSE([ 1742 AC_LANG_PROGRAM([[ 1743 #ifdef HAVE_SIGNAL_H 1744 #include <signal.h> 1745 #endif 1746 ]],[[ 1747 static volatile sig_atomic_t dummy = 0; 1748 ]]) 1749 ],[ 1750 AC_MSG_RESULT([no]) 1751 curl_cv_sig_atomic_t_volatile="no" 1752 ],[ 1753 AC_MSG_RESULT([yes]) 1754 curl_cv_sig_atomic_t_volatile="yes" 1755 ]) 1756 # 1757 if test "$curl_cv_sig_atomic_t_volatile" = "yes"; then 1758 AC_DEFINE(HAVE_SIG_ATOMIC_T_VOLATILE, 1, 1759 [Define to 1 if sig_atomic_t is already defined as volatile.]) 1760 fi 1761 ;; 1762 esac 1763 ]) 1764 1765 1766 dnl TYPE_IN_ADDR_T 1767 dnl ------------------------------------------------- 1768 dnl Check for in_addr_t: it is used to receive the return code of inet_addr() 1769 dnl and a few other things. 1770 1771 AC_DEFUN([TYPE_IN_ADDR_T], [ 1772 AC_CHECK_TYPE([in_addr_t], ,[ 1773 dnl in_addr_t not available 1774 AC_CACHE_CHECK([for in_addr_t equivalent], 1775 [curl_cv_in_addr_t_equiv], [ 1776 curl_cv_in_addr_t_equiv="unknown" 1777 for t in "unsigned long" int size_t unsigned long; do 1778 if test "$curl_cv_in_addr_t_equiv" = "unknown"; then 1779 AC_LINK_IFELSE([ 1780 AC_LANG_PROGRAM([[ 1781 #undef inline 1782 #ifdef HAVE_WINDOWS_H 1783 #ifndef WIN32_LEAN_AND_MEAN 1784 #define WIN32_LEAN_AND_MEAN 1785 #endif 1786 #include <windows.h> 1787 #ifdef HAVE_WINSOCK2_H 1788 #include <winsock2.h> 1789 #else 1790 #ifdef HAVE_WINSOCK_H 1791 #include <winsock.h> 1792 #endif 1793 #endif 1794 #else 1795 #ifdef HAVE_SYS_TYPES_H 1796 #include <sys/types.h> 1797 #endif 1798 #ifdef HAVE_SYS_SOCKET_H 1799 #include <sys/socket.h> 1800 #endif 1801 #ifdef HAVE_NETINET_IN_H 1802 #include <netinet/in.h> 1803 #endif 1804 #ifdef HAVE_ARPA_INET_H 1805 #include <arpa/inet.h> 1806 #endif 1807 #endif 1808 ]],[[ 1809 $t data = inet_addr ("1.2.3.4"); 1810 ]]) 1811 ],[ 1812 curl_cv_in_addr_t_equiv="$t" 1813 ]) 1814 fi 1815 done 1816 ]) 1817 case "$curl_cv_in_addr_t_equiv" in 1818 unknown) 1819 AC_MSG_ERROR([Cannot find a type to use in place of in_addr_t]) 1820 ;; 1821 *) 1822 AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv, 1823 [Type to use in place of in_addr_t when system does not provide it.]) 1824 ;; 1825 esac 1826 ],[ 1827 #undef inline 1828 #ifdef HAVE_WINDOWS_H 1829 #ifndef WIN32_LEAN_AND_MEAN 1830 #define WIN32_LEAN_AND_MEAN 1831 #endif 1832 #include <windows.h> 1833 #ifdef HAVE_WINSOCK2_H 1834 #include <winsock2.h> 1835 #else 1836 #ifdef HAVE_WINSOCK_H 1837 #include <winsock.h> 1838 #endif 1839 #endif 1840 #else 1841 #ifdef HAVE_SYS_TYPES_H 1842 #include <sys/types.h> 1843 #endif 1844 #ifdef HAVE_SYS_SOCKET_H 1845 #include <sys/socket.h> 1846 #endif 1847 #ifdef HAVE_NETINET_IN_H 1848 #include <netinet/in.h> 1849 #endif 1850 #ifdef HAVE_ARPA_INET_H 1851 #include <arpa/inet.h> 1852 #endif 1853 #endif 1854 ]) 1855 ]) 1856 1857 1858 dnl CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC 1859 dnl ------------------------------------------------- 1860 dnl Check if monotonic clock_gettime is available. 1861 1862 AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [ 1863 AC_REQUIRE([AC_HEADER_TIME])dnl 1864 AC_CHECK_HEADERS(sys/types.h sys/time.h time.h) 1865 AC_MSG_CHECKING([for monotonic clock_gettime]) 1866 # 1867 if test "x$dontwant_rt" = "xno" ; then 1868 AC_COMPILE_IFELSE([ 1869 AC_LANG_PROGRAM([[ 1870 #ifdef HAVE_SYS_TYPES_H 1871 #include <sys/types.h> 1872 #endif 1873 #ifdef HAVE_SYS_TIME_H 1874 #include <sys/time.h> 1875 #ifdef TIME_WITH_SYS_TIME 1876 #include <time.h> 1877 #endif 1878 #else 1879 #ifdef HAVE_TIME_H 1880 #include <time.h> 1881 #endif 1882 #endif 1883 ]],[[ 1884 struct timespec ts; 1885 (void)clock_gettime(CLOCK_MONOTONIC, &ts); 1886 ]]) 1887 ],[ 1888 AC_MSG_RESULT([yes]) 1889 curl_func_clock_gettime="yes" 1890 ],[ 1891 AC_MSG_RESULT([no]) 1892 curl_func_clock_gettime="no" 1893 ]) 1894 fi 1895 dnl Definition of HAVE_CLOCK_GETTIME_MONOTONIC is intentionally postponed 1896 dnl until library linking and run-time checks for clock_gettime succeed. 1897 ]) 1898 1899 1900 dnl CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC 1901 dnl ------------------------------------------------- 1902 dnl If monotonic clock_gettime is available then, 1903 dnl check and prepended to LIBS any needed libraries. 1904 1905 AC_DEFUN([CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC], [ 1906 AC_REQUIRE([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC])dnl 1907 # 1908 if test "$curl_func_clock_gettime" = "yes"; then 1909 # 1910 AC_MSG_CHECKING([for clock_gettime in libraries]) 1911 # 1912 curl_cv_save_LIBS="$LIBS" 1913 curl_cv_gclk_LIBS="unknown" 1914 # 1915 for x_xlibs in '' '-lrt' '-lposix4' ; do 1916 if test "$curl_cv_gclk_LIBS" = "unknown"; then 1917 if test -z "$x_xlibs"; then 1918 LIBS="$curl_cv_save_LIBS" 1919 else 1920 LIBS="$x_xlibs $curl_cv_save_LIBS" 1921 fi 1922 AC_LINK_IFELSE([ 1923 AC_LANG_PROGRAM([[ 1924 #ifdef HAVE_SYS_TYPES_H 1925 #include <sys/types.h> 1926 #endif 1927 #ifdef HAVE_SYS_TIME_H 1928 #include <sys/time.h> 1929 #ifdef TIME_WITH_SYS_TIME 1930 #include <time.h> 1931 #endif 1932 #else 1933 #ifdef HAVE_TIME_H 1934 #include <time.h> 1935 #endif 1936 #endif 1937 ]],[[ 1938 struct timespec ts; 1939 (void)clock_gettime(CLOCK_MONOTONIC, &ts); 1940 ]]) 1941 ],[ 1942 curl_cv_gclk_LIBS="$x_xlibs" 1943 ]) 1944 fi 1945 done 1946 # 1947 LIBS="$curl_cv_save_LIBS" 1948 # 1949 case X-"$curl_cv_gclk_LIBS" in 1950 X-unknown) 1951 AC_MSG_RESULT([cannot find clock_gettime]) 1952 AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined]) 1953 curl_func_clock_gettime="no" 1954 ;; 1955 X-) 1956 AC_MSG_RESULT([no additional lib required]) 1957 curl_func_clock_gettime="yes" 1958 ;; 1959 *) 1960 if test -z "$curl_cv_save_LIBS"; then 1961 LIBS="$curl_cv_gclk_LIBS" 1962 else 1963 LIBS="$curl_cv_gclk_LIBS $curl_cv_save_LIBS" 1964 fi 1965 AC_MSG_RESULT([$curl_cv_gclk_LIBS]) 1966 curl_func_clock_gettime="yes" 1967 ;; 1968 esac 1969 # 1970 dnl only do runtime verification when not cross-compiling 1971 if test "x$cross_compiling" != "xyes" && 1972 test "$curl_func_clock_gettime" = "yes"; then 1973 AC_MSG_CHECKING([if monotonic clock_gettime works]) 1974 AC_RUN_IFELSE([ 1975 AC_LANG_PROGRAM([[ 1976 #ifdef HAVE_STDLIB_H 1977 #include <stdlib.h> 1978 #endif 1979 #ifdef HAVE_SYS_TYPES_H 1980 #include <sys/types.h> 1981 #endif 1982 #ifdef HAVE_SYS_TIME_H 1983 #include <sys/time.h> 1984 #ifdef TIME_WITH_SYS_TIME 1985 #include <time.h> 1986 #endif 1987 #else 1988 #ifdef HAVE_TIME_H 1989 #include <time.h> 1990 #endif 1991 #endif 1992 ]],[[ 1993 struct timespec ts; 1994 if (0 == clock_gettime(CLOCK_MONOTONIC, &ts)) 1995 exit(0); 1996 else 1997 exit(1); 1998 ]]) 1999 ],[ 2000 AC_MSG_RESULT([yes]) 2001 ],[ 2002 AC_MSG_RESULT([no]) 2003 AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined]) 2004 curl_func_clock_gettime="no" 2005 LIBS="$curl_cv_save_LIBS" 2006 ]) 2007 fi 2008 # 2009 case "$curl_func_clock_gettime" in 2010 yes) 2011 AC_DEFINE_UNQUOTED(HAVE_CLOCK_GETTIME_MONOTONIC, 1, 2012 [Define to 1 if you have the clock_gettime function and monotonic timer.]) 2013 ;; 2014 esac 2015 # 2016 fi 2017 # 2018 ]) 2019 2020 2021 dnl CURL_CHECK_LIBS_CONNECT 2022 dnl ------------------------------------------------- 2023 dnl Verify if network connect function is already available 2024 dnl using current libraries or if another one is required. 2025 2026 AC_DEFUN([CURL_CHECK_LIBS_CONNECT], [ 2027 AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl 2028 AC_MSG_CHECKING([for connect in libraries]) 2029 tst_connect_save_LIBS="$LIBS" 2030 tst_connect_need_LIBS="unknown" 2031 for tst_lib in '' '-lsocket' ; do 2032 if test "$tst_connect_need_LIBS" = "unknown"; then 2033 LIBS="$tst_lib $tst_connect_save_LIBS" 2034 AC_LINK_IFELSE([ 2035 AC_LANG_PROGRAM([[ 2036 $curl_includes_winsock2 2037 #ifndef HAVE_WINDOWS_H 2038 int connect(int, void*, int); 2039 #endif 2040 ]],[[ 2041 if(0 != connect(0, 0, 0)) 2042 return 1; 2043 ]]) 2044 ],[ 2045 tst_connect_need_LIBS="$tst_lib" 2046 ]) 2047 fi 2048 done 2049 LIBS="$tst_connect_save_LIBS" 2050 # 2051 case X-"$tst_connect_need_LIBS" in 2052 X-unknown) 2053 AC_MSG_RESULT([cannot find connect]) 2054 AC_MSG_ERROR([cannot find connect function in libraries.]) 2055 ;; 2056 X-) 2057 AC_MSG_RESULT([yes]) 2058 ;; 2059 *) 2060 AC_MSG_RESULT([$tst_connect_need_LIBS]) 2061 LIBS="$tst_connect_need_LIBS $tst_connect_save_LIBS" 2062 ;; 2063 esac 2064 ]) 2065 2066 2067 dnl CURL_DEFINE_UNQUOTED (VARIABLE, [VALUE]) 2068 dnl ------------------------------------------------- 2069 dnl Like AC_DEFINE_UNQUOTED this macro will define a C preprocessor 2070 dnl symbol that can be further used in custom template configuration 2071 dnl files. This macro, unlike AC_DEFINE_UNQUOTED, does not use a third 2072 dnl argument for the description. Symbol definitions done with this 2073 dnl macro are intended to be exclusively used in handcrafted *.h.in 2074 dnl template files. Contrary to what AC_DEFINE_UNQUOTED does, this one 2075 dnl prevents autoheader generation and insertion of symbol template 2076 dnl stub and definition into the first configuration header file. Do 2077 dnl not use this macro as a replacement for AC_DEFINE_UNQUOTED, each 2078 dnl one serves different functional needs. 2079 2080 AC_DEFUN([CURL_DEFINE_UNQUOTED], [ 2081 cat >>confdefs.h <<_EOF 2082 [@%:@define] $1 ifelse($#, 2, [$2], 1) 2083 _EOF 2084 ]) 2085 2086 2087 dnl CURL_CONFIGURE_CURL_SOCKLEN_T 2088 dnl ------------------------------------------------- 2089 dnl The need for the curl_socklen_t definition arises mainly to properly 2090 dnl interface HP-UX systems which on one hand have a typedef'ed socklen_t 2091 dnl data type which is 32 or 64-Bit wide depending on the data model being 2092 dnl used, and that on the other hand is only actually used when interfacing 2093 dnl the X/Open sockets provided in the xnet library. 2094 2095 AC_DEFUN([CURL_CONFIGURE_CURL_SOCKLEN_T], [ 2096 AC_REQUIRE([CURL_INCLUDES_WS2TCPIP])dnl 2097 AC_REQUIRE([CURL_INCLUDES_SYS_SOCKET])dnl 2098 AC_REQUIRE([CURL_PREPROCESS_CALLCONV])dnl 2099 # 2100 AC_BEFORE([$0], [CURL_CONFIGURE_PULL_SYS_POLL])dnl 2101 # 2102 AC_MSG_CHECKING([for curl_socklen_t data type]) 2103 curl_typeof_curl_socklen_t="unknown" 2104 for arg1 in int SOCKET; do 2105 for arg2 in 'struct sockaddr' void; do 2106 for t in socklen_t int size_t 'unsigned int' long 'unsigned long' void; do 2107 if test "$curl_typeof_curl_socklen_t" = "unknown"; then 2108 AC_COMPILE_IFELSE([ 2109 AC_LANG_PROGRAM([[ 2110 $curl_includes_ws2tcpip 2111 $curl_includes_sys_socket 2112 $curl_preprocess_callconv 2113 extern int FUNCALLCONV getpeername($arg1, $arg2 *, $t *); 2114 ]],[[ 2115 $t *lenptr = 0; 2116 if(0 != getpeername(0, 0, lenptr)) 2117 return 1; 2118 ]]) 2119 ],[ 2120 curl_typeof_curl_socklen_t="$t" 2121 ]) 2122 fi 2123 done 2124 done 2125 done 2126 for t in socklen_t int; do 2127 if test "$curl_typeof_curl_socklen_t" = "void"; then 2128 AC_COMPILE_IFELSE([ 2129 AC_LANG_PROGRAM([[ 2130 $curl_includes_sys_socket 2131 typedef $t curl_socklen_t; 2132 ]],[[ 2133 curl_socklen_t dummy; 2134 ]]) 2135 ],[ 2136 curl_typeof_curl_socklen_t="$t" 2137 ]) 2138 fi 2139 done 2140 AC_MSG_RESULT([$curl_typeof_curl_socklen_t]) 2141 if test "$curl_typeof_curl_socklen_t" = "void" || 2142 test "$curl_typeof_curl_socklen_t" = "unknown"; then 2143 AC_MSG_ERROR([cannot find data type for curl_socklen_t.]) 2144 fi 2145 # 2146 AC_MSG_CHECKING([size of curl_socklen_t]) 2147 curl_sizeof_curl_socklen_t="unknown" 2148 curl_pull_headers_socklen_t="unknown" 2149 if test "$curl_cv_header_ws2tcpip_h" = "yes"; then 2150 tst_pull_header_checks='none ws2tcpip' 2151 tst_size_checks='4' 2152 else 2153 tst_pull_header_checks='none systypes syssocket' 2154 tst_size_checks='4 8 2' 2155 fi 2156 for tst_size in $tst_size_checks; do 2157 for tst_pull_headers in $tst_pull_header_checks; do 2158 if test "$curl_sizeof_curl_socklen_t" = "unknown"; then 2159 case $tst_pull_headers in 2160 ws2tcpip) 2161 tmp_includes="$curl_includes_ws2tcpip" 2162 ;; 2163 systypes) 2164 tmp_includes="$curl_includes_sys_types" 2165 ;; 2166 syssocket) 2167 tmp_includes="$curl_includes_sys_socket" 2168 ;; 2169 *) 2170 tmp_includes="" 2171 ;; 2172 esac 2173 AC_COMPILE_IFELSE([ 2174 AC_LANG_PROGRAM([[ 2175 $tmp_includes 2176 typedef $curl_typeof_curl_socklen_t curl_socklen_t; 2177 typedef char dummy_arr[sizeof(curl_socklen_t) == $tst_size ? 1 : -1]; 2178 ]],[[ 2179 curl_socklen_t dummy; 2180 ]]) 2181 ],[ 2182 curl_sizeof_curl_socklen_t="$tst_size" 2183 curl_pull_headers_socklen_t="$tst_pull_headers" 2184 ]) 2185 fi 2186 done 2187 done 2188 AC_MSG_RESULT([$curl_sizeof_curl_socklen_t]) 2189 if test "$curl_sizeof_curl_socklen_t" = "unknown"; then 2190 AC_MSG_ERROR([cannot find out size of curl_socklen_t.]) 2191 fi 2192 # 2193 case $curl_pull_headers_socklen_t in 2194 ws2tcpip) 2195 CURL_DEFINE_UNQUOTED([CURL_PULL_WS2TCPIP_H]) 2196 ;; 2197 systypes) 2198 CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_TYPES_H]) 2199 ;; 2200 syssocket) 2201 CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_TYPES_H]) 2202 CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_SOCKET_H]) 2203 ;; 2204 esac 2205 CURL_DEFINE_UNQUOTED([CURL_TYPEOF_CURL_SOCKLEN_T], [$curl_typeof_curl_socklen_t]) 2206 CURL_DEFINE_UNQUOTED([CURL_SIZEOF_CURL_SOCKLEN_T], [$curl_sizeof_curl_socklen_t]) 2207 ]) 2208 2209 2210 dnl CURL_CONFIGURE_PULL_SYS_POLL 2211 dnl ------------------------------------------------- 2212 dnl The need for the sys/poll.h inclusion arises mainly to properly 2213 dnl interface AIX systems which define macros 'events' and 'revents'. 2214 2215 AC_DEFUN([CURL_CONFIGURE_PULL_SYS_POLL], [ 2216 AC_REQUIRE([CURL_INCLUDES_POLL])dnl 2217 # 2218 tst_poll_events_macro_defined="unknown" 2219 # 2220 AC_COMPILE_IFELSE([ 2221 AC_LANG_PROGRAM([[ 2222 $curl_includes_poll 2223 ]],[[ 2224 #if defined(events) || defined(revents) 2225 return 0; 2226 #else 2227 force compilation error 2228 #endif 2229 ]]) 2230 ],[ 2231 tst_poll_events_macro_defined="yes" 2232 ],[ 2233 tst_poll_events_macro_defined="no" 2234 ]) 2235 # 2236 if test "$tst_poll_events_macro_defined" = "yes"; then 2237 if test "x$ac_cv_header_sys_poll_h" = "xyes"; then 2238 CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_POLL_H]) 2239 fi 2240 fi 2241 # 2242 ]) 2243 2244 2245 dnl CURL_CHECK_FUNC_SELECT 2246 dnl ------------------------------------------------- 2247 dnl Test if the socket select() function is available, 2248 dnl and check its return type and the types of its 2249 dnl arguments. If the function succeeds HAVE_SELECT 2250 dnl will be defined, defining the types of the 2251 dnl arguments in SELECT_TYPE_ARG1, SELECT_TYPE_ARG234 2252 dnl and SELECT_TYPE_ARG5, defining the type of the 2253 dnl function return value in SELECT_TYPE_RETV, and 2254 dnl also defining the type qualifier of fifth argument 2255 dnl in SELECT_QUAL_ARG5. 2256 2257 AC_DEFUN([CURL_CHECK_FUNC_SELECT], [ 2258 AC_REQUIRE([CURL_CHECK_STRUCT_TIMEVAL])dnl 2259 AC_CHECK_HEADERS(sys/select.h sys/socket.h) 2260 # 2261 AC_MSG_CHECKING([for select]) 2262 AC_LINK_IFELSE([ 2263 AC_LANG_PROGRAM([[ 2264 #undef inline 2265 #ifdef HAVE_WINDOWS_H 2266 #ifndef WIN32_LEAN_AND_MEAN 2267 #define WIN32_LEAN_AND_MEAN 2268 #endif 2269 #include <windows.h> 2270 #ifdef HAVE_WINSOCK2_H 2271 #include <winsock2.h> 2272 #else 2273 #ifdef HAVE_WINSOCK_H 2274 #include <winsock.h> 2275 #endif 2276 #endif 2277 #endif 2278 #ifdef HAVE_SYS_TYPES_H 2279 #include <sys/types.h> 2280 #endif 2281 #ifdef HAVE_SYS_TIME_H 2282 #include <sys/time.h> 2283 #ifdef TIME_WITH_SYS_TIME 2284 #include <time.h> 2285 #endif 2286 #else 2287 #ifdef HAVE_TIME_H 2288 #include <time.h> 2289 #endif 2290 #endif 2291 #ifndef HAVE_WINDOWS_H 2292 #ifdef HAVE_SYS_SELECT_H 2293 #include <sys/select.h> 2294 #endif 2295 #ifdef HAVE_SYS_SOCKET_H 2296 #include <sys/socket.h> 2297 #endif 2298 #endif 2299 ]],[[ 2300 select(0, 0, 0, 0, 0); 2301 ]]) 2302 ],[ 2303 AC_MSG_RESULT([yes]) 2304 curl_cv_select="yes" 2305 ],[ 2306 AC_MSG_RESULT([no]) 2307 curl_cv_select="no" 2308 ]) 2309 # 2310 if test "$curl_cv_select" = "yes"; then 2311 AC_CACHE_CHECK([types of args and return type for select], 2312 [curl_cv_func_select_args], [ 2313 curl_cv_func_select_args="unknown" 2314 for sel_retv in 'int' 'ssize_t'; do 2315 for sel_arg1 in 'int' 'ssize_t' 'size_t' 'unsigned long int' 'unsigned int'; do 2316 for sel_arg234 in 'fd_set *' 'int *' 'void *'; do 2317 for sel_arg5 in 'struct timeval *' 'const struct timeval *'; do 2318 if test "$curl_cv_func_select_args" = "unknown"; then 2319 AC_COMPILE_IFELSE([ 2320 AC_LANG_PROGRAM([[ 2321 #undef inline 2322 #ifdef HAVE_WINDOWS_H 2323 #ifndef WIN32_LEAN_AND_MEAN 2324 #define WIN32_LEAN_AND_MEAN 2325 #endif 2326 #include <windows.h> 2327 #ifdef HAVE_WINSOCK2_H 2328 #include <winsock2.h> 2329 #else 2330 #ifdef HAVE_WINSOCK_H 2331 #include <winsock.h> 2332 #endif 2333 #endif 2334 #define SELECTCALLCONV PASCAL 2335 #endif 2336 #ifdef HAVE_SYS_TYPES_H 2337 #include <sys/types.h> 2338 #endif 2339 #ifdef HAVE_SYS_TIME_H 2340 #include <sys/time.h> 2341 #ifdef TIME_WITH_SYS_TIME 2342 #include <time.h> 2343 #endif 2344 #else 2345 #ifdef HAVE_TIME_H 2346 #include <time.h> 2347 #endif 2348 #endif 2349 #ifndef HAVE_WINDOWS_H 2350 #ifdef HAVE_SYS_SELECT_H 2351 #include <sys/select.h> 2352 #endif 2353 #ifdef HAVE_SYS_SOCKET_H 2354 #include <sys/socket.h> 2355 #endif 2356 #define SELECTCALLCONV 2357 #endif 2358 #ifndef HAVE_STRUCT_TIMEVAL 2359 struct timeval { 2360 long tv_sec; 2361 long tv_usec; 2362 }; 2363 #endif 2364 extern $sel_retv SELECTCALLCONV 2365 #ifdef __ANDROID__ 2366 __attribute__((overloadable)) 2367 #endif 2368 select($sel_arg1, 2369 $sel_arg234, 2370 $sel_arg234, 2371 $sel_arg234, 2372 $sel_arg5); 2373 ]],[[ 2374 $sel_arg1 nfds=0; 2375 $sel_arg234 rfds=0; 2376 $sel_arg234 wfds=0; 2377 $sel_arg234 efds=0; 2378 $sel_retv res = select(nfds, rfds, wfds, efds, 0); 2379 ]]) 2380 ],[ 2381 curl_cv_func_select_args="$sel_arg1,$sel_arg234,$sel_arg5,$sel_retv" 2382 ]) 2383 fi 2384 done 2385 done 2386 done 2387 done 2388 ]) # AC-CACHE-CHECK 2389 if test "$curl_cv_func_select_args" = "unknown"; then 2390 AC_MSG_WARN([Cannot find proper types to use for select args]) 2391 AC_MSG_WARN([HAVE_SELECT will not be defined]) 2392 else 2393 select_prev_IFS=$IFS; IFS=',' 2394 set dummy `echo "$curl_cv_func_select_args" | sed 's/\*/\*/g'` 2395 IFS=$select_prev_IFS 2396 shift 2397 # 2398 sel_qual_type_arg5=$[3] 2399 # 2400 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG1, $[1], 2401 [Define to the type of arg 1 for select.]) 2402 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG234, $[2], 2403 [Define to the type of args 2, 3 and 4 for select.]) 2404 AC_DEFINE_UNQUOTED(SELECT_TYPE_RETV, $[4], 2405 [Define to the function return type for select.]) 2406 # 2407 prev_sh_opts=$- 2408 # 2409 case $prev_sh_opts in 2410 *f*) 2411 ;; 2412 *) 2413 set -f 2414 ;; 2415 esac 2416 # 2417 case "$sel_qual_type_arg5" in 2418 const*) 2419 sel_qual_arg5=const 2420 sel_type_arg5=`echo $sel_qual_type_arg5 | sed 's/^const //'` 2421 ;; 2422 *) 2423 sel_qual_arg5= 2424 sel_type_arg5=$sel_qual_type_arg5 2425 ;; 2426 esac 2427 # 2428 AC_DEFINE_UNQUOTED(SELECT_QUAL_ARG5, $sel_qual_arg5, 2429 [Define to the type qualifier of arg 5 for select.]) 2430 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG5, $sel_type_arg5, 2431 [Define to the type of arg 5 for select.]) 2432 # 2433 case $prev_sh_opts in 2434 *f*) 2435 ;; 2436 *) 2437 set +f 2438 ;; 2439 esac 2440 # 2441 AC_DEFINE_UNQUOTED(HAVE_SELECT, 1, 2442 [Define to 1 if you have the select function.]) 2443 curl_cv_func_select="yes" 2444 fi 2445 fi 2446 ]) 2447 2448 2449 dnl CURL_VERIFY_RUNTIMELIBS 2450 dnl ------------------------------------------------- 2451 dnl Verify that the shared libs found so far can be used when running 2452 dnl programs, since otherwise the situation will create odd configure errors 2453 dnl that are misleading people. 2454 dnl 2455 dnl Make sure this test is run BEFORE the first test in the script that 2456 dnl runs anything, which at the time of this writing is the AC_CHECK_SIZEOF 2457 dnl macro. It must also run AFTER all lib-checking macros are complete. 2458 2459 AC_DEFUN([CURL_VERIFY_RUNTIMELIBS], [ 2460 2461 dnl this test is of course not sensible if we are cross-compiling! 2462 if test "x$cross_compiling" != xyes; then 2463 2464 dnl just run a program to verify that the libs checked for previous to this 2465 dnl point also is available run-time! 2466 AC_MSG_CHECKING([run-time libs availability]) 2467 AC_TRY_RUN([ 2468 main() 2469 { 2470 return 0; 2471 } 2472 ], 2473 AC_MSG_RESULT([fine]), 2474 AC_MSG_RESULT([failed]) 2475 AC_MSG_ERROR([one or more libs available at link-time are not available run-time. Libs used at link-time: $LIBS]) 2476 ) 2477 2478 dnl if this test fails, configure has already stopped 2479 fi 2480 ]) 2481 2482 2483 dnl CURL_CHECK_VARIADIC_MACROS 2484 dnl ------------------------------------------------- 2485 dnl Check compiler support of variadic macros 2486 2487 AC_DEFUN([CURL_CHECK_VARIADIC_MACROS], [ 2488 AC_CACHE_CHECK([for compiler support of C99 variadic macro style], 2489 [curl_cv_variadic_macros_c99], [ 2490 AC_COMPILE_IFELSE([ 2491 AC_LANG_PROGRAM([[ 2492 #define c99_vmacro3(first, ...) fun3(first, __VA_ARGS__) 2493 #define c99_vmacro2(first, ...) fun2(first, __VA_ARGS__) 2494 int fun3(int arg1, int arg2, int arg3); 2495 int fun2(int arg1, int arg2); 2496 int fun3(int arg1, int arg2, int arg3) 2497 { return arg1 + arg2 + arg3; } 2498 int fun2(int arg1, int arg2) 2499 { return arg1 + arg2; } 2500 ]],[[ 2501 int res3 = c99_vmacro3(1, 2, 3); 2502 int res2 = c99_vmacro2(1, 2); 2503 ]]) 2504 ],[ 2505 curl_cv_variadic_macros_c99="yes" 2506 ],[ 2507 curl_cv_variadic_macros_c99="no" 2508 ]) 2509 ]) 2510 case "$curl_cv_variadic_macros_c99" in 2511 yes) 2512 AC_DEFINE_UNQUOTED(HAVE_VARIADIC_MACROS_C99, 1, 2513 [Define to 1 if compiler supports C99 variadic macro style.]) 2514 ;; 2515 esac 2516 AC_CACHE_CHECK([for compiler support of old gcc variadic macro style], 2517 [curl_cv_variadic_macros_gcc], [ 2518 AC_COMPILE_IFELSE([ 2519 AC_LANG_PROGRAM([[ 2520 #define gcc_vmacro3(first, args...) fun3(first, args) 2521 #define gcc_vmacro2(first, args...) fun2(first, args) 2522 int fun3(int arg1, int arg2, int arg3); 2523 int fun2(int arg1, int arg2); 2524 int fun3(int arg1, int arg2, int arg3) 2525 { return arg1 + arg2 + arg3; } 2526 int fun2(int arg1, int arg2) 2527 { return arg1 + arg2; } 2528 ]],[[ 2529 int res3 = gcc_vmacro3(1, 2, 3); 2530 int res2 = gcc_vmacro2(1, 2); 2531 ]]) 2532 ],[ 2533 curl_cv_variadic_macros_gcc="yes" 2534 ],[ 2535 curl_cv_variadic_macros_gcc="no" 2536 ]) 2537 ]) 2538 case "$curl_cv_variadic_macros_gcc" in 2539 yes) 2540 AC_DEFINE_UNQUOTED(HAVE_VARIADIC_MACROS_GCC, 1, 2541 [Define to 1 if compiler supports old gcc variadic macro style.]) 2542 ;; 2543 esac 2544 ]) 2545 2546 2547 dnl CURL_CHECK_CA_BUNDLE 2548 dnl ------------------------------------------------- 2549 dnl Check if a default ca-bundle should be used 2550 dnl 2551 dnl regarding the paths this will scan: 2552 dnl /etc/ssl/certs/ca-certificates.crt Debian systems 2553 dnl /etc/pki/tls/certs/ca-bundle.crt Redhat and Mandriva 2554 dnl /usr/share/ssl/certs/ca-bundle.crt old(er) Redhat 2555 dnl /usr/local/share/certs/ca-root-nss.crt FreeBSD 2556 dnl /etc/ssl/cert.pem OpenBSD, FreeBSD (symlink) 2557 dnl /etc/ssl/certs/ (ca path) SUSE 2558 2559 AC_DEFUN([CURL_CHECK_CA_BUNDLE], [ 2560 2561 AC_MSG_CHECKING([default CA cert bundle/path]) 2562 2563 AC_ARG_WITH(ca-bundle, 2564 AC_HELP_STRING([--with-ca-bundle=FILE], 2565 [Path to a file containing CA certificates (example: /etc/ca-bundle.crt)]) 2566 AC_HELP_STRING([--without-ca-bundle], [Don't use a default CA bundle]), 2567 [ 2568 want_ca="$withval" 2569 if test "x$want_ca" = "xyes"; then 2570 AC_MSG_ERROR([--with-ca-bundle=FILE requires a path to the CA bundle]) 2571 fi 2572 ], 2573 [ want_ca="unset" ]) 2574 AC_ARG_WITH(ca-path, 2575 AC_HELP_STRING([--with-ca-path=DIRECTORY], 2576 [Path to a directory containing CA certificates stored individually, with \ 2577 their filenames in a hash format. This option can be used with OpenSSL, \ 2578 GnuTLS and PolarSSL backends. Refer to OpenSSL c_rehash for details. \ 2579 (example: /etc/certificates)]) 2580 AC_HELP_STRING([--without-ca-path], [Don't use a default CA path]), 2581 [ 2582 want_capath="$withval" 2583 if test "x$want_capath" = "xyes"; then 2584 AC_MSG_ERROR([--with-ca-path=DIRECTORY requires a path to the CA path directory]) 2585 fi 2586 ], 2587 [ want_capath="unset"]) 2588 2589 ca_warning=" (warning: certs not found)" 2590 capath_warning=" (warning: certs not found)" 2591 check_capath="" 2592 2593 if test "x$want_ca" != "xno" -a "x$want_ca" != "xunset" -a \ 2594 "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then 2595 dnl both given 2596 ca="$want_ca" 2597 capath="$want_capath" 2598 elif test "x$want_ca" != "xno" -a "x$want_ca" != "xunset"; then 2599 dnl --with-ca-bundle given 2600 ca="$want_ca" 2601 capath="no" 2602 elif test "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then 2603 dnl --with-ca-path given 2604 if test "x$OPENSSL_ENABLED" != "x1" -a "x$GNUTLS_ENABLED" != "x1" -a "x$POLARSSL_ENABLED" != "x1"; then 2605 AC_MSG_ERROR([--with-ca-path only works with OpenSSL, GnuTLS or PolarSSL]) 2606 fi 2607 capath="$want_capath" 2608 ca="no" 2609 else 2610 dnl first try autodetecting a CA bundle , then a CA path 2611 dnl both autodetections can be skipped by --without-ca-* 2612 ca="no" 2613 capath="no" 2614 if test "x$cross_compiling" != "xyes"; then 2615 dnl NOT cross-compiling and... 2616 dnl neither of the --with-ca-* options are provided 2617 if test "x$want_ca" = "xunset"; then 2618 dnl the path we previously would have installed the curl ca bundle 2619 dnl to, and thus we now check for an already existing cert in that 2620 dnl place in case we find no other 2621 if test "x$prefix" != xNONE; then 2622 cac="${prefix}/share/curl/curl-ca-bundle.crt" 2623 else 2624 cac="$ac_default_prefix/share/curl/curl-ca-bundle.crt" 2625 fi 2626 2627 for a in /etc/ssl/certs/ca-certificates.crt \ 2628 /etc/pki/tls/certs/ca-bundle.crt \ 2629 /usr/share/ssl/certs/ca-bundle.crt \ 2630 /usr/local/share/certs/ca-root-nss.crt \ 2631 /etc/ssl/cert.pem \ 2632 "$cac"; do 2633 if test -f "$a"; then 2634 ca="$a" 2635 break 2636 fi 2637 done 2638 fi 2639 if test "x$want_capath" = "xunset" -a "x$ca" = "xno" -a \ 2640 "x$OPENSSL_ENABLED" = "x1"; then 2641 check_capath="/etc/ssl/certs/" 2642 fi 2643 else 2644 dnl no option given and cross-compiling 2645 AC_MSG_WARN([skipped the ca-cert path detection when cross-compiling]) 2646 fi 2647 fi 2648 2649 if test "x$ca" = "xno" || test -f "$ca"; then 2650 ca_warning="" 2651 fi 2652 2653 if test "x$capath" != "xno"; then 2654 check_capath="$capath" 2655 fi 2656 2657 if test ! -z "$check_capath"; then 2658 for a in "$check_capath"; do 2659 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 2660 if test "x$capath" = "xno"; then 2661 capath="$a" 2662 fi 2663 capath_warning="" 2664 break 2665 fi 2666 done 2667 fi 2668 2669 if test "x$capath" = "xno"; then 2670 capath_warning="" 2671 fi 2672 2673 if test "x$ca" != "xno"; then 2674 CURL_CA_BUNDLE='"'$ca'"' 2675 AC_DEFINE_UNQUOTED(CURL_CA_BUNDLE, "$ca", [Location of default ca bundle]) 2676 AC_SUBST(CURL_CA_BUNDLE) 2677 AC_MSG_RESULT([$ca]) 2678 fi 2679 if test "x$capath" != "xno"; then 2680 CURL_CA_PATH="\"$capath\"" 2681 AC_DEFINE_UNQUOTED(CURL_CA_PATH, "$capath", [Location of default ca path]) 2682 AC_MSG_RESULT([$capath (capath)]) 2683 fi 2684 if test "x$ca" = "xno" && test "x$capath" = "xno"; then 2685 AC_MSG_RESULT([no]) 2686 fi 2687 2688 AC_MSG_CHECKING([whether to use builtin CA store of SSL library]) 2689 AC_ARG_WITH(ca-fallback, 2690 AC_HELP_STRING([--with-ca-fallback], [Use the built in CA store of the SSL library]) 2691 AC_HELP_STRING([--without-ca-fallback], [Don't use the built in CA store of the SSL library]), 2692 [ 2693 if test "x$with_ca_fallback" != "xyes" -a "x$with_ca_fallback" != "xno"; then 2694 AC_MSG_ERROR([--with-ca-fallback only allows yes or no as parameter]) 2695 fi 2696 ], 2697 [ with_ca_fallback="no"]) 2698 AC_MSG_RESULT([$with_ca_fallback]) 2699 if test "x$with_ca_fallback" = "xyes"; then 2700 if test "x$OPENSSL_ENABLED" != "x1" -a "x$GNUTLS_ENABLED" != "x1"; then 2701 AC_MSG_ERROR([--with-ca-fallback only works with OpenSSL or GnuTLS]) 2702 fi 2703 AC_DEFINE_UNQUOTED(CURL_CA_FALLBACK, 1, [define "1" to use built in CA store of SSL library ]) 2704 fi 2705 ]) 2706 2707 dnl CURL_CHECK_WIN32_LARGEFILE 2708 dnl ------------------------------------------------- 2709 dnl Check if curl's WIN32 large file will be used 2710 2711 AC_DEFUN([CURL_CHECK_WIN32_LARGEFILE], [ 2712 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl 2713 AC_MSG_CHECKING([whether build target supports WIN32 file API]) 2714 curl_win32_file_api="no" 2715 if test "$curl_cv_header_windows_h" = "yes"; then 2716 if test x"$enable_largefile" != "xno"; then 2717 AC_COMPILE_IFELSE([ 2718 AC_LANG_PROGRAM([[ 2719 ]],[[ 2720 #if !defined(_WIN32_WCE) && \ 2721 (defined(__MINGW32__) || \ 2722 (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64)))) 2723 int dummy=1; 2724 #else 2725 WIN32 large file API not supported. 2726 #endif 2727 ]]) 2728 ],[ 2729 curl_win32_file_api="win32_large_files" 2730 ]) 2731 fi 2732 if test "$curl_win32_file_api" = "no"; then 2733 AC_COMPILE_IFELSE([ 2734 AC_LANG_PROGRAM([[ 2735 ]],[[ 2736 #if defined(_WIN32_WCE) || defined(__MINGW32__) || defined(_MSC_VER) 2737 int dummy=1; 2738 #else 2739 WIN32 small file API not supported. 2740 #endif 2741 ]]) 2742 ],[ 2743 curl_win32_file_api="win32_small_files" 2744 ]) 2745 fi 2746 fi 2747 case "$curl_win32_file_api" in 2748 win32_large_files) 2749 AC_MSG_RESULT([yes (large file enabled)]) 2750 AC_DEFINE_UNQUOTED(USE_WIN32_LARGE_FILES, 1, 2751 [Define to 1 if you are building a Windows target with large file support.]) 2752 ;; 2753 win32_small_files) 2754 AC_MSG_RESULT([yes (large file disabled)]) 2755 AC_DEFINE_UNQUOTED(USE_WIN32_SMALL_FILES, 1, 2756 [Define to 1 if you are building a Windows target without large file support.]) 2757 ;; 2758 *) 2759 AC_MSG_RESULT([no]) 2760 ;; 2761 esac 2762 ]) 2763 2764 dnl CURL_EXPORT_PCDIR ($pcdir) 2765 dnl ------------------------ 2766 dnl if $pcdir is not empty, set PKG_CONFIG_LIBDIR to $pcdir and export 2767 dnl 2768 dnl we need this macro since pkg-config distinguishes among empty and unset 2769 dnl variable while checking PKG_CONFIG_LIBDIR 2770 dnl 2771 2772 AC_DEFUN([CURL_EXPORT_PCDIR], [ 2773 if test -n "$1"; then 2774 PKG_CONFIG_LIBDIR="$1" 2775 export PKG_CONFIG_LIBDIR 2776 fi 2777 ]) 2778 2779 dnl CURL_CHECK_PKGCONFIG ($module, [$pcdir]) 2780 dnl ------------------------ 2781 dnl search for the pkg-config tool. Set the PKGCONFIG variable to hold the 2782 dnl path to it, or 'no' if not found/present. 2783 dnl 2784 dnl If pkg-config is present, check that it has info about the $module or 2785 dnl return "no" anyway! 2786 dnl 2787 dnl Optionally PKG_CONFIG_LIBDIR may be given as $pcdir. 2788 dnl 2789 2790 AC_DEFUN([CURL_CHECK_PKGCONFIG], [ 2791 if test -n "$PKG_CONFIG"; then 2792 PKGCONFIG="$PKG_CONFIG" 2793 else 2794 AC_PATH_TOOL([PKGCONFIG], [pkg-config], [no], 2795 [$PATH:/usr/bin:/usr/local/bin]) 2796 fi 2797 2798 if test "x$PKGCONFIG" != "xno"; then 2799 AC_MSG_CHECKING([for $1 options with pkg-config]) 2800 dnl ask pkg-config about $1 2801 itexists=`CURL_EXPORT_PCDIR([$2]) dnl 2802 $PKGCONFIG --exists $1 >/dev/null 2>&1 && echo 1` 2803 2804 if test -z "$itexists"; then 2805 dnl pkg-config does not have info about the given module! set the 2806 dnl variable to 'no' 2807 PKGCONFIG="no" 2808 AC_MSG_RESULT([no]) 2809 else 2810 AC_MSG_RESULT([found]) 2811 fi 2812 fi 2813 ]) 2814 2815 2816 dnl CURL_GENERATE_CONFIGUREHELP_PM 2817 dnl ------------------------------------------------- 2818 dnl Generate test harness configurehelp.pm module, defining and 2819 dnl initializing some perl variables with values which are known 2820 dnl when the configure script runs. For portability reasons, test 2821 dnl harness needs information on how to run the C preprocessor. 2822 2823 AC_DEFUN([CURL_GENERATE_CONFIGUREHELP_PM], [ 2824 AC_REQUIRE([AC_PROG_CPP])dnl 2825 tmp_cpp=`eval echo "$ac_cpp" 2>/dev/null` 2826 if test -z "$tmp_cpp"; then 2827 tmp_cpp='cpp' 2828 fi 2829 cat >./tests/configurehelp.pm <<_EOF 2830 [@%:@] This is a generated file. Do not edit. 2831 2832 package configurehelp; 2833 2834 use strict; 2835 use warnings; 2836 use Exporter; 2837 2838 use vars qw( 2839 @ISA 2840 @EXPORT_OK 2841 \$Cpreprocessor 2842 ); 2843 2844 @ISA = qw(Exporter); 2845 2846 @EXPORT_OK = qw( 2847 \$Cpreprocessor 2848 ); 2849 2850 \$Cpreprocessor = '$tmp_cpp'; 2851 2852 1; 2853 _EOF 2854 ]) 2855 2856 dnl CURL_CPP_P 2857 dnl 2858 dnl Check if $cpp -P should be used for extract define values due to gcc 5 2859 dnl splitting up strings and defines between line outputs. gcc by default 2860 dnl (without -P) will show TEST EINVAL TEST as 2861 dnl 2862 dnl # 13 "conftest.c" 2863 dnl TEST 2864 dnl # 13 "conftest.c" 3 4 2865 dnl 22 2866 dnl # 13 "conftest.c" 2867 dnl TEST 2868 2869 AC_DEFUN([CURL_CPP_P], [ 2870 AC_MSG_CHECKING([if cpp -P is needed]) 2871 AC_EGREP_CPP([TEST.*TEST], [ 2872 #include <errno.h> 2873 TEST EINVAL TEST 2874 ], [cpp=no], [cpp=yes]) 2875 AC_MSG_RESULT([$cpp]) 2876 2877 dnl we need cpp -P so check if it works then 2878 if test "x$cpp" = "xyes"; then 2879 AC_MSG_CHECKING([if cpp -P works]) 2880 OLDCPPFLAGS=$CPPFLAGS 2881 CPPFLAGS="$CPPFLAGS -P" 2882 AC_EGREP_CPP([TEST.*TEST], [ 2883 #include <errno.h> 2884 TEST EINVAL TEST 2885 ], [cpp_p=yes], [cpp_p=no]) 2886 AC_MSG_RESULT([$cpp_p]) 2887 2888 if test "x$cpp_p" = "xno"; then 2889 AC_MSG_WARN([failed to figure out cpp -P alternative]) 2890 # without -P 2891 CPPPFLAG="" 2892 else 2893 # with -P 2894 CPPPFLAG="-P" 2895 fi 2896 dnl restore CPPFLAGS 2897 CPPFLAGS=$OLDCPPFLAGS 2898 else 2899 # without -P 2900 CPPPFLAG="" 2901 fi 2902 ]) 2903 2904 2905 dnl CURL_MAC_CFLAGS 2906 dnl 2907 dnl Check if -mmacosx-version-min, -miphoneos-version-min or any 2908 dnl similar are set manually, otherwise do. And set 2909 dnl -Werror=partial-availability. 2910 dnl 2911 2912 AC_DEFUN([CURL_MAC_CFLAGS], [ 2913 2914 tst_cflags="no" 2915 case $host_os in 2916 darwin*) 2917 tst_cflags="yes" 2918 ;; 2919 esac 2920 2921 AC_MSG_CHECKING([for good-to-use Mac CFLAGS]) 2922 AC_MSG_RESULT([$tst_cflags]); 2923 2924 if test "$tst_cflags" = "yes"; then 2925 AC_MSG_CHECKING([for *version-min in CFLAGS]) 2926 min="" 2927 if test -z "$(echo $CFLAGS | grep m.*os.*-version-min)"; then 2928 min="-mmacosx-version-min=10.8" 2929 CFLAGS="$CFLAGS $min" 2930 fi 2931 if test -z "$min"; then 2932 AC_MSG_RESULT([set by user]) 2933 else 2934 AC_MSG_RESULT([$min set]) 2935 fi 2936 2937 old_CFLAGS=$CFLAGS 2938 CFLAGS="$CFLAGS -Werror=partial-availability" 2939 AC_MSG_CHECKING([whether $CC accepts -Werror=partial-availability]) 2940 AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], 2941 [AC_MSG_RESULT([yes])], 2942 [AC_MSG_RESULT([no]) 2943 CFLAGS=$old_CFLAGS]) 2944 fi 2945 2946 ]) 2947 2948 2949 dnl CURL_SUPPORTS_BUILTIN_AVAILABLE 2950 dnl 2951 dnl Check to see if the compiler supports __builtin_available. This built-in 2952 dnl compiler function first appeared in Apple LLVM 9.0.0. It's so new that, at 2953 dnl the time this macro was written, the function was not yet documented. Its 2954 dnl purpose is to return true if the code is running under a certain OS version 2955 dnl or later. 2956 2957 AC_DEFUN([CURL_SUPPORTS_BUILTIN_AVAILABLE], [ 2958 AC_MSG_CHECKING([to see if the compiler supports __builtin_available()]) 2959 AC_COMPILE_IFELSE([ 2960 AC_LANG_PROGRAM([[ 2961 #include <stdlib.h> 2962 ]],[[ 2963 if (__builtin_available(macOS 10.8, iOS 5.0, *)) {} 2964 ]]) 2965 ],[ 2966 AC_MSG_RESULT([yes]) 2967 AC_DEFINE_UNQUOTED(HAVE_BUILTIN_AVAILABLE, 1, 2968 [Define to 1 if you have the __builtin_available function.]) 2969 ],[ 2970 AC_MSG_RESULT([no]) 2971 ]) 2972 ]) 2973