1#*************************************************************************** 2# _ _ ____ _ 3# Project ___| | | | _ \| | 4# / __| | | | |_) | | 5# | (__| |_| | _ <| |___ 6# \___|\___/|_| \_\_____| 7# 8# Copyright (C) 1998 - 2016, 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 AC_DEFINE_UNQUOTED(WIN32_LEAN_AND_MEAN, 1, 203 [Define to avoid automatic inclusion of winsock.h]) 204 ;; 205 esac 206]) 207 208 209dnl CURL_CHECK_NATIVE_WINDOWS 210dnl ------------------------------------------------- 211dnl Check if building a native Windows target 212 213AC_DEFUN([CURL_CHECK_NATIVE_WINDOWS], [ 214 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl 215 AC_CACHE_CHECK([whether build target is a native Windows one], [curl_cv_native_windows], [ 216 if test "$curl_cv_header_windows_h" = "no"; then 217 curl_cv_native_windows="no" 218 else 219 AC_COMPILE_IFELSE([ 220 AC_LANG_PROGRAM([[ 221 ]],[[ 222#if defined(__MINGW32__) || defined(__MINGW32CE__) || \ 223 (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64))) 224 int dummy=1; 225#else 226 Not a native Windows build target. 227#endif 228 ]]) 229 ],[ 230 curl_cv_native_windows="yes" 231 ],[ 232 curl_cv_native_windows="no" 233 ]) 234 fi 235 ]) 236 AM_CONDITIONAL(DOING_NATIVE_WINDOWS, test "x$curl_cv_native_windows" = xyes) 237]) 238 239 240dnl CURL_CHECK_HEADER_WINSOCK 241dnl ------------------------------------------------- 242dnl Check for compilable and valid winsock.h header 243 244AC_DEFUN([CURL_CHECK_HEADER_WINSOCK], [ 245 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl 246 AC_CACHE_CHECK([for winsock.h], [curl_cv_header_winsock_h], [ 247 AC_COMPILE_IFELSE([ 248 AC_LANG_PROGRAM([[ 249#undef inline 250#ifndef WIN32_LEAN_AND_MEAN 251#define WIN32_LEAN_AND_MEAN 252#endif 253#include <windows.h> 254#include <winsock.h> 255 ]],[[ 256#if defined(__CYGWIN__) || defined(__CEGCC__) 257 HAVE_WINSOCK_H shall not be defined. 258#else 259 int dummy=WSACleanup(); 260#endif 261 ]]) 262 ],[ 263 curl_cv_header_winsock_h="yes" 264 ],[ 265 curl_cv_header_winsock_h="no" 266 ]) 267 ]) 268 case "$curl_cv_header_winsock_h" in 269 yes) 270 AC_DEFINE_UNQUOTED(HAVE_WINSOCK_H, 1, 271 [Define to 1 if you have the winsock.h header file.]) 272 ;; 273 esac 274]) 275 276 277dnl CURL_CHECK_HEADER_WINSOCK2 278dnl ------------------------------------------------- 279dnl Check for compilable and valid winsock2.h header 280 281AC_DEFUN([CURL_CHECK_HEADER_WINSOCK2], [ 282 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl 283 AC_CACHE_CHECK([for winsock2.h], [curl_cv_header_winsock2_h], [ 284 AC_COMPILE_IFELSE([ 285 AC_LANG_PROGRAM([[ 286#undef inline 287#ifndef WIN32_LEAN_AND_MEAN 288#define WIN32_LEAN_AND_MEAN 289#endif 290#include <windows.h> 291#include <winsock2.h> 292 ]],[[ 293#if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__) 294 HAVE_WINSOCK2_H shall not be defined. 295#else 296 int dummy=2*IPPROTO_ESP; 297#endif 298 ]]) 299 ],[ 300 curl_cv_header_winsock2_h="yes" 301 ],[ 302 curl_cv_header_winsock2_h="no" 303 ]) 304 ]) 305 case "$curl_cv_header_winsock2_h" in 306 yes) 307 AC_DEFINE_UNQUOTED(HAVE_WINSOCK2_H, 1, 308 [Define to 1 if you have the winsock2.h header file.]) 309 ;; 310 esac 311]) 312 313 314dnl CURL_CHECK_HEADER_WS2TCPIP 315dnl ------------------------------------------------- 316dnl Check for compilable and valid ws2tcpip.h header 317 318AC_DEFUN([CURL_CHECK_HEADER_WS2TCPIP], [ 319 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl 320 AC_CACHE_CHECK([for ws2tcpip.h], [curl_cv_header_ws2tcpip_h], [ 321 AC_COMPILE_IFELSE([ 322 AC_LANG_PROGRAM([[ 323#undef inline 324#ifndef WIN32_LEAN_AND_MEAN 325#define WIN32_LEAN_AND_MEAN 326#endif 327#include <windows.h> 328#include <winsock2.h> 329#include <ws2tcpip.h> 330 ]],[[ 331#if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__) 332 HAVE_WS2TCPIP_H shall not be defined. 333#else 334 int dummy=2*IP_PKTINFO; 335#endif 336 ]]) 337 ],[ 338 curl_cv_header_ws2tcpip_h="yes" 339 ],[ 340 curl_cv_header_ws2tcpip_h="no" 341 ]) 342 ]) 343 case "$curl_cv_header_ws2tcpip_h" in 344 yes) 345 AC_DEFINE_UNQUOTED(HAVE_WS2TCPIP_H, 1, 346 [Define to 1 if you have the ws2tcpip.h header file.]) 347 ;; 348 esac 349]) 350 351 352dnl CURL_CHECK_HEADER_WINLDAP 353dnl ------------------------------------------------- 354dnl Check for compilable and valid winldap.h header 355 356AC_DEFUN([CURL_CHECK_HEADER_WINLDAP], [ 357 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl 358 AC_CACHE_CHECK([for winldap.h], [curl_cv_header_winldap_h], [ 359 AC_COMPILE_IFELSE([ 360 AC_LANG_PROGRAM([[ 361#undef inline 362#ifdef HAVE_WINDOWS_H 363#ifndef WIN32_LEAN_AND_MEAN 364#define WIN32_LEAN_AND_MEAN 365#endif 366#include <windows.h> 367#endif 368#include <winldap.h> 369 ]],[[ 370#if defined(__CYGWIN__) || defined(__CEGCC__) 371 HAVE_WINLDAP_H shall not be defined. 372#else 373 LDAP *ldp = ldap_init("dummy", LDAP_PORT); 374 ULONG res = ldap_unbind(ldp); 375#endif 376 ]]) 377 ],[ 378 curl_cv_header_winldap_h="yes" 379 ],[ 380 curl_cv_header_winldap_h="no" 381 ]) 382 ]) 383 case "$curl_cv_header_winldap_h" in 384 yes) 385 AC_DEFINE_UNQUOTED(HAVE_WINLDAP_H, 1, 386 [Define to 1 if you have the winldap.h header file.]) 387 ;; 388 esac 389]) 390 391 392dnl CURL_CHECK_HEADER_WINBER 393dnl ------------------------------------------------- 394dnl Check for compilable and valid winber.h header 395 396AC_DEFUN([CURL_CHECK_HEADER_WINBER], [ 397 AC_REQUIRE([CURL_CHECK_HEADER_WINLDAP])dnl 398 AC_CACHE_CHECK([for winber.h], [curl_cv_header_winber_h], [ 399 AC_COMPILE_IFELSE([ 400 AC_LANG_PROGRAM([[ 401#undef inline 402#ifdef HAVE_WINDOWS_H 403#ifndef WIN32_LEAN_AND_MEAN 404#define WIN32_LEAN_AND_MEAN 405#endif 406#include <windows.h> 407#endif 408#include <winldap.h> 409#include <winber.h> 410 ]],[[ 411#if defined(__CYGWIN__) || defined(__CEGCC__) 412 HAVE_WINBER_H shall not be defined. 413#else 414 BERVAL *bvp = NULL; 415 BerElement *bep = ber_init(bvp); 416 ber_free(bep, 1); 417#endif 418 ]]) 419 ],[ 420 curl_cv_header_winber_h="yes" 421 ],[ 422 curl_cv_header_winber_h="no" 423 ]) 424 ]) 425 case "$curl_cv_header_winber_h" in 426 yes) 427 AC_DEFINE_UNQUOTED(HAVE_WINBER_H, 1, 428 [Define to 1 if you have the winber.h header file.]) 429 ;; 430 esac 431]) 432 433 434dnl CURL_CHECK_HEADER_LBER 435dnl ------------------------------------------------- 436dnl Check for compilable and valid lber.h header, 437dnl and check if it is needed even with ldap.h 438 439AC_DEFUN([CURL_CHECK_HEADER_LBER], [ 440 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl 441 AC_CACHE_CHECK([for lber.h], [curl_cv_header_lber_h], [ 442 AC_COMPILE_IFELSE([ 443 AC_LANG_PROGRAM([[ 444#undef inline 445#ifdef HAVE_WINDOWS_H 446#ifndef WIN32_LEAN_AND_MEAN 447#define WIN32_LEAN_AND_MEAN 448#endif 449#include <windows.h> 450#else 451#ifdef HAVE_SYS_TYPES_H 452#include <sys/types.h> 453#endif 454#endif 455#ifndef NULL 456#define NULL (void *)0 457#endif 458#include <lber.h> 459 ]],[[ 460 BerValue *bvp = NULL; 461 BerElement *bep = ber_init(bvp); 462 ber_free(bep, 1); 463 ]]) 464 ],[ 465 curl_cv_header_lber_h="yes" 466 ],[ 467 curl_cv_header_lber_h="no" 468 ]) 469 ]) 470 if test "$curl_cv_header_lber_h" = "yes"; then 471 AC_DEFINE_UNQUOTED(HAVE_LBER_H, 1, 472 [Define to 1 if you have the lber.h header file.]) 473 # 474 AC_COMPILE_IFELSE([ 475 AC_LANG_PROGRAM([[ 476#undef inline 477#ifdef HAVE_WINDOWS_H 478#ifndef WIN32_LEAN_AND_MEAN 479#define WIN32_LEAN_AND_MEAN 480#endif 481#include <windows.h> 482#else 483#ifdef HAVE_SYS_TYPES_H 484#include <sys/types.h> 485#endif 486#endif 487#ifndef NULL 488#define NULL (void *)0 489#endif 490#ifndef LDAP_DEPRECATED 491#define LDAP_DEPRECATED 1 492#endif 493#include <ldap.h> 494 ]],[[ 495 BerValue *bvp = NULL; 496 BerElement *bep = ber_init(bvp); 497 ber_free(bep, 1); 498 ]]) 499 ],[ 500 curl_cv_need_header_lber_h="no" 501 ],[ 502 curl_cv_need_header_lber_h="yes" 503 ]) 504 # 505 case "$curl_cv_need_header_lber_h" in 506 yes) 507 AC_DEFINE_UNQUOTED(NEED_LBER_H, 1, 508 [Define to 1 if you need the lber.h header file even with ldap.h]) 509 ;; 510 esac 511 fi 512]) 513 514 515dnl CURL_CHECK_HEADER_LDAP 516dnl ------------------------------------------------- 517dnl Check for compilable and valid ldap.h header 518 519AC_DEFUN([CURL_CHECK_HEADER_LDAP], [ 520 AC_REQUIRE([CURL_CHECK_HEADER_LBER])dnl 521 AC_CACHE_CHECK([for ldap.h], [curl_cv_header_ldap_h], [ 522 AC_COMPILE_IFELSE([ 523 AC_LANG_PROGRAM([[ 524#undef inline 525#ifdef HAVE_WINDOWS_H 526#ifndef WIN32_LEAN_AND_MEAN 527#define WIN32_LEAN_AND_MEAN 528#endif 529#include <windows.h> 530#else 531#ifdef HAVE_SYS_TYPES_H 532#include <sys/types.h> 533#endif 534#endif 535#ifndef LDAP_DEPRECATED 536#define LDAP_DEPRECATED 1 537#endif 538#ifdef NEED_LBER_H 539#include <lber.h> 540#endif 541#include <ldap.h> 542 ]],[[ 543 LDAP *ldp = ldap_init("dummy", LDAP_PORT); 544 int res = ldap_unbind(ldp); 545 ]]) 546 ],[ 547 curl_cv_header_ldap_h="yes" 548 ],[ 549 curl_cv_header_ldap_h="no" 550 ]) 551 ]) 552 case "$curl_cv_header_ldap_h" in 553 yes) 554 AC_DEFINE_UNQUOTED(HAVE_LDAP_H, 1, 555 [Define to 1 if you have the ldap.h header file.]) 556 ;; 557 esac 558]) 559 560 561dnl CURL_CHECK_HEADER_LDAP_SSL 562dnl ------------------------------------------------- 563dnl Check for compilable and valid ldap_ssl.h header 564 565AC_DEFUN([CURL_CHECK_HEADER_LDAP_SSL], [ 566 AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl 567 AC_CACHE_CHECK([for ldap_ssl.h], [curl_cv_header_ldap_ssl_h], [ 568 AC_COMPILE_IFELSE([ 569 AC_LANG_PROGRAM([[ 570#undef inline 571#ifdef HAVE_WINDOWS_H 572#ifndef WIN32_LEAN_AND_MEAN 573#define WIN32_LEAN_AND_MEAN 574#endif 575#include <windows.h> 576#else 577#ifdef HAVE_SYS_TYPES_H 578#include <sys/types.h> 579#endif 580#endif 581#ifndef LDAP_DEPRECATED 582#define LDAP_DEPRECATED 1 583#endif 584#ifdef NEED_LBER_H 585#include <lber.h> 586#endif 587#ifdef HAVE_LDAP_H 588#include <ldap.h> 589#endif 590#include <ldap_ssl.h> 591 ]],[[ 592 LDAP *ldp = ldapssl_init("dummy", LDAPS_PORT, 1); 593 ]]) 594 ],[ 595 curl_cv_header_ldap_ssl_h="yes" 596 ],[ 597 curl_cv_header_ldap_ssl_h="no" 598 ]) 599 ]) 600 case "$curl_cv_header_ldap_ssl_h" in 601 yes) 602 AC_DEFINE_UNQUOTED(HAVE_LDAP_SSL_H, 1, 603 [Define to 1 if you have the ldap_ssl.h header file.]) 604 ;; 605 esac 606]) 607 608 609dnl CURL_CHECK_HEADER_LDAPSSL 610dnl ------------------------------------------------- 611dnl Check for compilable and valid ldapssl.h header 612 613AC_DEFUN([CURL_CHECK_HEADER_LDAPSSL], [ 614 AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl 615 AC_CACHE_CHECK([for ldapssl.h], [curl_cv_header_ldapssl_h], [ 616 AC_COMPILE_IFELSE([ 617 AC_LANG_PROGRAM([[ 618#undef inline 619#ifdef HAVE_WINDOWS_H 620#ifndef WIN32_LEAN_AND_MEAN 621#define WIN32_LEAN_AND_MEAN 622#endif 623#include <windows.h> 624#else 625#ifdef HAVE_SYS_TYPES_H 626#include <sys/types.h> 627#endif 628#endif 629#ifndef NULL 630#define NULL (void *)0 631#endif 632#ifndef LDAP_DEPRECATED 633#define LDAP_DEPRECATED 1 634#endif 635#ifdef NEED_LBER_H 636#include <lber.h> 637#endif 638#ifdef HAVE_LDAP_H 639#include <ldap.h> 640#endif 641#include <ldapssl.h> 642 ]],[[ 643 char *cert_label = NULL; 644 LDAP *ldp = ldap_ssl_init("dummy", LDAPS_PORT, cert_label); 645 ]]) 646 ],[ 647 curl_cv_header_ldapssl_h="yes" 648 ],[ 649 curl_cv_header_ldapssl_h="no" 650 ]) 651 ]) 652 case "$curl_cv_header_ldapssl_h" in 653 yes) 654 AC_DEFINE_UNQUOTED(HAVE_LDAPSSL_H, 1, 655 [Define to 1 if you have the ldapssl.h header file.]) 656 ;; 657 esac 658]) 659 660 661dnl CURL_CHECK_LIBS_WINLDAP 662dnl ------------------------------------------------- 663dnl Check for libraries needed for WINLDAP support, 664dnl and prepended to LIBS any needed libraries. 665dnl This macro can take an optional parameter with a 666dnl white space separated list of libraries to check 667dnl before the WINLDAP default ones. 668 669AC_DEFUN([CURL_CHECK_LIBS_WINLDAP], [ 670 AC_REQUIRE([CURL_CHECK_HEADER_WINBER])dnl 671 # 672 AC_MSG_CHECKING([for WINLDAP libraries]) 673 # 674 u_libs="" 675 # 676 ifelse($1,,,[ 677 for x_lib in $1; do 678 case "$x_lib" in 679 -l*) 680 l_lib="$x_lib" 681 ;; 682 *) 683 l_lib="-l$x_lib" 684 ;; 685 esac 686 if test -z "$u_libs"; then 687 u_libs="$l_lib" 688 else 689 u_libs="$u_libs $l_lib" 690 fi 691 done 692 ]) 693 # 694 curl_cv_save_LIBS="$LIBS" 695 curl_cv_ldap_LIBS="unknown" 696 # 697 for x_nlibs in '' "$u_libs" \ 698 '-lwldap32' ; do 699 if test "$curl_cv_ldap_LIBS" = "unknown"; then 700 if test -z "$x_nlibs"; then 701 LIBS="$curl_cv_save_LIBS" 702 else 703 LIBS="$x_nlibs $curl_cv_save_LIBS" 704 fi 705 AC_LINK_IFELSE([ 706 AC_LANG_PROGRAM([[ 707#undef inline 708#ifdef HAVE_WINDOWS_H 709#ifndef WIN32_LEAN_AND_MEAN 710#define WIN32_LEAN_AND_MEAN 711#endif 712#include <windows.h> 713#ifdef HAVE_WINLDAP_H 714#include <winldap.h> 715#endif 716#ifdef HAVE_WINBER_H 717#include <winber.h> 718#endif 719#endif 720 ]],[[ 721 BERVAL *bvp = NULL; 722 BerElement *bep = ber_init(bvp); 723 LDAP *ldp = ldap_init("dummy", LDAP_PORT); 724 ULONG res = ldap_unbind(ldp); 725 ber_free(bep, 1); 726 ]]) 727 ],[ 728 curl_cv_ldap_LIBS="$x_nlibs" 729 ]) 730 fi 731 done 732 # 733 LIBS="$curl_cv_save_LIBS" 734 # 735 case X-"$curl_cv_ldap_LIBS" in 736 X-unknown) 737 AC_MSG_RESULT([cannot find WINLDAP libraries]) 738 ;; 739 X-) 740 AC_MSG_RESULT([no additional lib required]) 741 ;; 742 *) 743 if test -z "$curl_cv_save_LIBS"; then 744 LIBS="$curl_cv_ldap_LIBS" 745 else 746 LIBS="$curl_cv_ldap_LIBS $curl_cv_save_LIBS" 747 fi 748 AC_MSG_RESULT([$curl_cv_ldap_LIBS]) 749 ;; 750 esac 751 # 752]) 753 754 755dnl CURL_CHECK_LIBS_LDAP 756dnl ------------------------------------------------- 757dnl Check for libraries needed for LDAP support, 758dnl and prepended to LIBS any needed libraries. 759dnl This macro can take an optional parameter with a 760dnl white space separated list of libraries to check 761dnl before the default ones. 762 763AC_DEFUN([CURL_CHECK_LIBS_LDAP], [ 764 AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl 765 # 766 AC_MSG_CHECKING([for LDAP libraries]) 767 # 768 u_libs="" 769 # 770 ifelse($1,,,[ 771 for x_lib in $1; do 772 case "$x_lib" in 773 -l*) 774 l_lib="$x_lib" 775 ;; 776 *) 777 l_lib="-l$x_lib" 778 ;; 779 esac 780 if test -z "$u_libs"; then 781 u_libs="$l_lib" 782 else 783 u_libs="$u_libs $l_lib" 784 fi 785 done 786 ]) 787 # 788 curl_cv_save_LIBS="$LIBS" 789 curl_cv_ldap_LIBS="unknown" 790 # 791 for x_nlibs in '' "$u_libs" \ 792 '-lldap' \ 793 '-llber -lldap' \ 794 '-lldap -llber' \ 795 '-lldapssl -lldapx -lldapsdk' \ 796 '-lldapsdk -lldapx -lldapssl' ; do 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 965 966dnl CURL_CHECK_FUNC_GETNAMEINFO 967dnl ------------------------------------------------- 968dnl Test if the getnameinfo function is available, 969dnl and check the types of five of its arguments. 970dnl If the function succeeds HAVE_GETNAMEINFO will be 971dnl defined, defining the types of the arguments in 972dnl GETNAMEINFO_TYPE_ARG1, GETNAMEINFO_TYPE_ARG2, 973dnl GETNAMEINFO_TYPE_ARG46 and GETNAMEINFO_TYPE_ARG7, 974dnl and also defining the type qualifier of first 975dnl argument in GETNAMEINFO_QUAL_ARG1. 976 977AC_DEFUN([CURL_CHECK_FUNC_GETNAMEINFO], [ 978 AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl 979 AC_CHECK_HEADERS(sys/types.h sys/socket.h netdb.h) 980 # 981 AC_MSG_CHECKING([for getnameinfo]) 982 AC_LINK_IFELSE([ 983 AC_LANG_FUNC_LINK_TRY([getnameinfo]) 984 ],[ 985 AC_MSG_RESULT([yes]) 986 curl_cv_getnameinfo="yes" 987 ],[ 988 AC_MSG_RESULT([no]) 989 curl_cv_getnameinfo="no" 990 ]) 991 # 992 if test "$curl_cv_getnameinfo" != "yes"; then 993 AC_MSG_CHECKING([deeper for getnameinfo]) 994 AC_LINK_IFELSE([ 995 AC_LANG_PROGRAM([[ 996 ]],[[ 997 getnameinfo(); 998 ]]) 999 ],[ 1000 AC_MSG_RESULT([yes]) 1001 curl_cv_getnameinfo="yes" 1002 ],[ 1003 AC_MSG_RESULT([but still no]) 1004 curl_cv_getnameinfo="no" 1005 ]) 1006 fi 1007 # 1008 if test "$curl_cv_getnameinfo" != "yes"; then 1009 AC_MSG_CHECKING([deeper and deeper for getnameinfo]) 1010 AC_LINK_IFELSE([ 1011 AC_LANG_PROGRAM([[ 1012#undef inline 1013#ifdef HAVE_WINDOWS_H 1014#ifndef WIN32_LEAN_AND_MEAN 1015#define WIN32_LEAN_AND_MEAN 1016#endif 1017#include <windows.h> 1018#ifdef HAVE_WINSOCK2_H 1019#include <winsock2.h> 1020#ifdef HAVE_WS2TCPIP_H 1021#include <ws2tcpip.h> 1022#endif 1023#endif 1024#else 1025#ifdef HAVE_SYS_TYPES_H 1026#include <sys/types.h> 1027#endif 1028#ifdef HAVE_SYS_SOCKET_H 1029#include <sys/socket.h> 1030#endif 1031#ifdef HAVE_NETDB_H 1032#include <netdb.h> 1033#endif 1034#endif 1035 ]],[[ 1036 getnameinfo(0, 0, 0, 0, 0, 0, 0); 1037 ]]) 1038 ],[ 1039 AC_MSG_RESULT([yes]) 1040 curl_cv_getnameinfo="yes" 1041 ],[ 1042 AC_MSG_RESULT([but still no]) 1043 curl_cv_getnameinfo="no" 1044 ]) 1045 fi 1046 # 1047 if test "$curl_cv_getnameinfo" = "yes"; then 1048 AC_CACHE_CHECK([types of arguments for getnameinfo], 1049 [curl_cv_func_getnameinfo_args], [ 1050 curl_cv_func_getnameinfo_args="unknown" 1051 for gni_arg1 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do 1052 for gni_arg2 in 'socklen_t' 'size_t' 'int'; do 1053 for gni_arg46 in 'size_t' 'int' 'socklen_t' 'unsigned int' 'DWORD'; do 1054 for gni_arg7 in 'int' 'unsigned int'; do 1055 if test "$curl_cv_func_getnameinfo_args" = "unknown"; then 1056 AC_COMPILE_IFELSE([ 1057 AC_LANG_PROGRAM([[ 1058#undef inline 1059#ifdef HAVE_WINDOWS_H 1060#ifndef WIN32_LEAN_AND_MEAN 1061#define WIN32_LEAN_AND_MEAN 1062#endif 1063#if (!defined(_WIN32_WINNT)) || (_WIN32_WINNT < 0x0501) 1064#undef _WIN32_WINNT 1065#define _WIN32_WINNT 0x0501 1066#endif 1067#include <windows.h> 1068#ifdef HAVE_WINSOCK2_H 1069#include <winsock2.h> 1070#ifdef HAVE_WS2TCPIP_H 1071#include <ws2tcpip.h> 1072#endif 1073#endif 1074#define GNICALLCONV WSAAPI 1075#else 1076#ifdef HAVE_SYS_TYPES_H 1077#include <sys/types.h> 1078#endif 1079#ifdef HAVE_SYS_SOCKET_H 1080#include <sys/socket.h> 1081#endif 1082#ifdef HAVE_NETDB_H 1083#include <netdb.h> 1084#endif 1085#define GNICALLCONV 1086#endif 1087 extern int GNICALLCONV getnameinfo($gni_arg1, $gni_arg2, 1088 char *, $gni_arg46, 1089 char *, $gni_arg46, 1090 $gni_arg7); 1091 ]],[[ 1092 $gni_arg2 salen=0; 1093 $gni_arg46 hostlen=0; 1094 $gni_arg46 servlen=0; 1095 $gni_arg7 flags=0; 1096 int res = getnameinfo(0, salen, 0, hostlen, 0, servlen, flags); 1097 ]]) 1098 ],[ 1099 curl_cv_func_getnameinfo_args="$gni_arg1,$gni_arg2,$gni_arg46,$gni_arg7" 1100 ]) 1101 fi 1102 done 1103 done 1104 done 1105 done 1106 ]) # AC-CACHE-CHECK 1107 if test "$curl_cv_func_getnameinfo_args" = "unknown"; then 1108 AC_MSG_WARN([Cannot find proper types to use for getnameinfo args]) 1109 AC_MSG_WARN([HAVE_GETNAMEINFO will not be defined]) 1110 else 1111 gni_prev_IFS=$IFS; IFS=',' 1112 set dummy `echo "$curl_cv_func_getnameinfo_args" | sed 's/\*/\*/g'` 1113 IFS=$gni_prev_IFS 1114 shift 1115 # 1116 gni_qual_type_arg1=$[1] 1117 # 1118 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG2, $[2], 1119 [Define to the type of arg 2 for getnameinfo.]) 1120 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG46, $[3], 1121 [Define to the type of args 4 and 6 for getnameinfo.]) 1122 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG7, $[4], 1123 [Define to the type of arg 7 for getnameinfo.]) 1124 # 1125 prev_sh_opts=$- 1126 # 1127 case $prev_sh_opts in 1128 *f*) 1129 ;; 1130 *) 1131 set -f 1132 ;; 1133 esac 1134 # 1135 case "$gni_qual_type_arg1" in 1136 const*) 1137 gni_qual_arg1=const 1138 gni_type_arg1=`echo $gni_qual_type_arg1 | sed 's/^const //'` 1139 ;; 1140 *) 1141 gni_qual_arg1= 1142 gni_type_arg1=$gni_qual_type_arg1 1143 ;; 1144 esac 1145 # 1146 AC_DEFINE_UNQUOTED(GETNAMEINFO_QUAL_ARG1, $gni_qual_arg1, 1147 [Define to the type qualifier of arg 1 for getnameinfo.]) 1148 AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG1, $gni_type_arg1, 1149 [Define to the type of arg 1 for getnameinfo.]) 1150 # 1151 case $prev_sh_opts in 1152 *f*) 1153 ;; 1154 *) 1155 set +f 1156 ;; 1157 esac 1158 # 1159 AC_DEFINE_UNQUOTED(HAVE_GETNAMEINFO, 1, 1160 [Define to 1 if you have the getnameinfo function.]) 1161 curl_cv_func_getnameinfo="yes" 1162 fi 1163 fi 1164]) 1165 1166 1167dnl TYPE_SOCKADDR_STORAGE 1168dnl ------------------------------------------------- 1169dnl Check for struct sockaddr_storage. Most IPv6-enabled 1170dnl hosts have it, but AIX 4.3 is one known exception. 1171 1172AC_DEFUN([TYPE_SOCKADDR_STORAGE], 1173[ 1174 AC_CHECK_TYPE([struct sockaddr_storage], 1175 AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1, 1176 [if struct sockaddr_storage is defined]), , 1177 [ 1178#undef inline 1179#ifdef HAVE_WINDOWS_H 1180#ifndef WIN32_LEAN_AND_MEAN 1181#define WIN32_LEAN_AND_MEAN 1182#endif 1183#include <windows.h> 1184#ifdef HAVE_WINSOCK2_H 1185#include <winsock2.h> 1186#endif 1187#else 1188#ifdef HAVE_SYS_TYPES_H 1189#include <sys/types.h> 1190#endif 1191#ifdef HAVE_SYS_SOCKET_H 1192#include <sys/socket.h> 1193#endif 1194#ifdef HAVE_NETINET_IN_H 1195#include <netinet/in.h> 1196#endif 1197#ifdef HAVE_ARPA_INET_H 1198#include <arpa/inet.h> 1199#endif 1200#endif 1201 ]) 1202]) 1203 1204 1205dnl CURL_CHECK_NI_WITHSCOPEID 1206dnl ------------------------------------------------- 1207dnl Check for working NI_WITHSCOPEID in getnameinfo() 1208 1209AC_DEFUN([CURL_CHECK_NI_WITHSCOPEID], [ 1210 AC_REQUIRE([CURL_CHECK_FUNC_GETNAMEINFO])dnl 1211 AC_REQUIRE([TYPE_SOCKADDR_STORAGE])dnl 1212 AC_CHECK_HEADERS(stdio.h sys/types.h sys/socket.h \ 1213 netdb.h netinet/in.h arpa/inet.h) 1214 # 1215 AC_CACHE_CHECK([for working NI_WITHSCOPEID], 1216 [curl_cv_working_ni_withscopeid], [ 1217 AC_RUN_IFELSE([ 1218 AC_LANG_PROGRAM([[ 1219#ifdef HAVE_STDLIB_H 1220#include <stdlib.h> 1221#endif 1222#ifdef HAVE_STDIO_H 1223#include <stdio.h> 1224#endif 1225#ifdef HAVE_SYS_TYPES_H 1226#include <sys/types.h> 1227#endif 1228#ifdef HAVE_SYS_SOCKET_H 1229#include <sys/socket.h> 1230#endif 1231#ifdef HAVE_NETDB_H 1232#include <netdb.h> 1233#endif 1234#ifdef HAVE_NETINET_IN_H 1235#include <netinet/in.h> 1236#endif 1237#ifdef HAVE_ARPA_INET_H 1238#include <arpa/inet.h> 1239#endif 1240 ]],[[ 1241#if defined(NI_WITHSCOPEID) && defined(HAVE_GETNAMEINFO) 1242#ifdef HAVE_STRUCT_SOCKADDR_STORAGE 1243 struct sockaddr_storage sa; 1244#else 1245 unsigned char sa[256]; 1246#endif 1247 char hostbuf[NI_MAXHOST]; 1248 int rc; 1249 GETNAMEINFO_TYPE_ARG2 salen = (GETNAMEINFO_TYPE_ARG2)sizeof(sa); 1250 GETNAMEINFO_TYPE_ARG46 hostlen = (GETNAMEINFO_TYPE_ARG46)sizeof(hostbuf); 1251 GETNAMEINFO_TYPE_ARG7 flags = NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID; 1252 int fd = socket(AF_INET6, SOCK_STREAM, 0); 1253 if(fd < 0) { 1254 perror("socket()"); 1255 return 1; /* Error creating socket */ 1256 } 1257 rc = getsockname(fd, (GETNAMEINFO_TYPE_ARG1)&sa, &salen); 1258 if(rc) { 1259 perror("getsockname()"); 1260 return 2; /* Error retrieving socket name */ 1261 } 1262 rc = getnameinfo((GETNAMEINFO_TYPE_ARG1)&sa, salen, hostbuf, hostlen, NULL, 0, flags); 1263 if(rc) { 1264 printf("rc = %s\n", gai_strerror(rc)); 1265 return 3; /* Error translating socket address */ 1266 } 1267 return 0; /* Ok, NI_WITHSCOPEID works */ 1268#else 1269 return 4; /* Error, NI_WITHSCOPEID not defined or no getnameinfo() */ 1270#endif 1271 ]]) # AC-LANG-PROGRAM 1272 ],[ 1273 # Exit code == 0. Program worked. 1274 curl_cv_working_ni_withscopeid="yes" 1275 ],[ 1276 # Exit code != 0. Program failed. 1277 curl_cv_working_ni_withscopeid="no" 1278 ],[ 1279 # Program is not run when cross-compiling. So we assume 1280 # NI_WITHSCOPEID will work if we are able to compile it. 1281 AC_COMPILE_IFELSE([ 1282 AC_LANG_PROGRAM([[ 1283#include <sys/types.h> 1284#include <sys/socket.h> 1285#include <netdb.h> 1286 ]],[[ 1287 unsigned int dummy= NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID; 1288 ]]) 1289 ],[ 1290 curl_cv_working_ni_withscopeid="yes" 1291 ],[ 1292 curl_cv_working_ni_withscopeid="no" 1293 ]) # AC-COMPILE-IFELSE 1294 ]) # AC-RUN-IFELSE 1295 ]) # AC-CACHE-CHECK 1296 case "$curl_cv_working_ni_withscopeid" in 1297 yes) 1298 AC_DEFINE(HAVE_NI_WITHSCOPEID, 1, 1299 [Define to 1 if NI_WITHSCOPEID exists and works.]) 1300 ;; 1301 esac 1302]) 1303 1304 1305dnl CURL_CHECK_FUNC_RECV 1306dnl ------------------------------------------------- 1307dnl Test if the socket recv() function is available, 1308dnl and check its return type and the types of its 1309dnl arguments. If the function succeeds HAVE_RECV 1310dnl will be defined, defining the types of the arguments 1311dnl in RECV_TYPE_ARG1, RECV_TYPE_ARG2, RECV_TYPE_ARG3 1312dnl and RECV_TYPE_ARG4, defining the type of the function 1313dnl return value in RECV_TYPE_RETV. 1314 1315AC_DEFUN([CURL_CHECK_FUNC_RECV], [ 1316 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl 1317 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl 1318 AC_CHECK_HEADERS(sys/types.h sys/socket.h) 1319 # 1320 AC_MSG_CHECKING([for recv]) 1321 AC_LINK_IFELSE([ 1322 AC_LANG_PROGRAM([[ 1323#undef inline 1324#ifdef HAVE_WINDOWS_H 1325#ifndef WIN32_LEAN_AND_MEAN 1326#define WIN32_LEAN_AND_MEAN 1327#endif 1328#include <windows.h> 1329#ifdef HAVE_WINSOCK2_H 1330#include <winsock2.h> 1331#else 1332#ifdef HAVE_WINSOCK_H 1333#include <winsock.h> 1334#endif 1335#endif 1336#else 1337#ifdef HAVE_SYS_TYPES_H 1338#include <sys/types.h> 1339#endif 1340#ifdef HAVE_SYS_SOCKET_H 1341#include <sys/socket.h> 1342#endif 1343#endif 1344 ]],[[ 1345 recv(0, 0, 0, 0); 1346 ]]) 1347 ],[ 1348 AC_MSG_RESULT([yes]) 1349 curl_cv_recv="yes" 1350 ],[ 1351 AC_MSG_RESULT([no]) 1352 curl_cv_recv="no" 1353 ]) 1354 # 1355 if test "$curl_cv_recv" = "yes"; then 1356 AC_CACHE_CHECK([types of args and return type for recv], 1357 [curl_cv_func_recv_args], [ 1358 curl_cv_func_recv_args="unknown" 1359 for recv_retv in 'int' 'ssize_t'; do 1360 for recv_arg1 in 'int' 'ssize_t' 'SOCKET'; do 1361 for recv_arg2 in 'char *' 'void *'; do 1362 for recv_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do 1363 for recv_arg4 in 'int' 'unsigned int'; do 1364 if test "$curl_cv_func_recv_args" = "unknown"; then 1365 AC_COMPILE_IFELSE([ 1366 AC_LANG_PROGRAM([[ 1367#undef inline 1368#ifdef HAVE_WINDOWS_H 1369#ifndef WIN32_LEAN_AND_MEAN 1370#define WIN32_LEAN_AND_MEAN 1371#endif 1372#include <windows.h> 1373#ifdef HAVE_WINSOCK2_H 1374#include <winsock2.h> 1375#else 1376#ifdef HAVE_WINSOCK_H 1377#include <winsock.h> 1378#endif 1379#endif 1380#define RECVCALLCONV PASCAL 1381#else 1382#ifdef HAVE_SYS_TYPES_H 1383#include <sys/types.h> 1384#endif 1385#ifdef HAVE_SYS_SOCKET_H 1386#include <sys/socket.h> 1387#endif 1388#define RECVCALLCONV 1389#endif 1390 extern $recv_retv RECVCALLCONV 1391 recv($recv_arg1, $recv_arg2, $recv_arg3, $recv_arg4); 1392 ]],[[ 1393 $recv_arg1 s=0; 1394 $recv_arg2 buf=0; 1395 $recv_arg3 len=0; 1396 $recv_arg4 flags=0; 1397 $recv_retv res = recv(s, buf, len, flags); 1398 ]]) 1399 ],[ 1400 curl_cv_func_recv_args="$recv_arg1,$recv_arg2,$recv_arg3,$recv_arg4,$recv_retv" 1401 ]) 1402 fi 1403 done 1404 done 1405 done 1406 done 1407 done 1408 ]) # AC-CACHE-CHECK 1409 if test "$curl_cv_func_recv_args" = "unknown"; then 1410 AC_MSG_ERROR([Cannot find proper types to use for recv args]) 1411 else 1412 recv_prev_IFS=$IFS; IFS=',' 1413 set dummy `echo "$curl_cv_func_recv_args" | sed 's/\*/\*/g'` 1414 IFS=$recv_prev_IFS 1415 shift 1416 # 1417 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG1, $[1], 1418 [Define to the type of arg 1 for recv.]) 1419 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG2, $[2], 1420 [Define to the type of arg 2 for recv.]) 1421 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG3, $[3], 1422 [Define to the type of arg 3 for recv.]) 1423 AC_DEFINE_UNQUOTED(RECV_TYPE_ARG4, $[4], 1424 [Define to the type of arg 4 for recv.]) 1425 AC_DEFINE_UNQUOTED(RECV_TYPE_RETV, $[5], 1426 [Define to the function return type for recv.]) 1427 # 1428 AC_DEFINE_UNQUOTED(HAVE_RECV, 1, 1429 [Define to 1 if you have the recv function.]) 1430 curl_cv_func_recv="yes" 1431 fi 1432 else 1433 AC_MSG_ERROR([Unable to link function recv]) 1434 fi 1435]) 1436 1437 1438dnl CURL_CHECK_FUNC_SEND 1439dnl ------------------------------------------------- 1440dnl Test if the socket send() function is available, 1441dnl and check its return type and the types of its 1442dnl arguments. If the function succeeds HAVE_SEND 1443dnl will be defined, defining the types of the arguments 1444dnl in SEND_TYPE_ARG1, SEND_TYPE_ARG2, SEND_TYPE_ARG3 1445dnl and SEND_TYPE_ARG4, defining the type of the function 1446dnl return value in SEND_TYPE_RETV, and also defining the 1447dnl type qualifier of second argument in SEND_QUAL_ARG2. 1448 1449AC_DEFUN([CURL_CHECK_FUNC_SEND], [ 1450 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl 1451 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl 1452 AC_CHECK_HEADERS(sys/types.h sys/socket.h) 1453 # 1454 AC_MSG_CHECKING([for send]) 1455 AC_LINK_IFELSE([ 1456 AC_LANG_PROGRAM([[ 1457#undef inline 1458#ifdef HAVE_WINDOWS_H 1459#ifndef WIN32_LEAN_AND_MEAN 1460#define WIN32_LEAN_AND_MEAN 1461#endif 1462#include <windows.h> 1463#ifdef HAVE_WINSOCK2_H 1464#include <winsock2.h> 1465#else 1466#ifdef HAVE_WINSOCK_H 1467#include <winsock.h> 1468#endif 1469#endif 1470#else 1471#ifdef HAVE_SYS_TYPES_H 1472#include <sys/types.h> 1473#endif 1474#ifdef HAVE_SYS_SOCKET_H 1475#include <sys/socket.h> 1476#endif 1477#endif 1478 ]],[[ 1479 send(0, 0, 0, 0); 1480 ]]) 1481 ],[ 1482 AC_MSG_RESULT([yes]) 1483 curl_cv_send="yes" 1484 ],[ 1485 AC_MSG_RESULT([no]) 1486 curl_cv_send="no" 1487 ]) 1488 # 1489 if test "$curl_cv_send" = "yes"; then 1490 AC_CACHE_CHECK([types of args and return type for send], 1491 [curl_cv_func_send_args], [ 1492 curl_cv_func_send_args="unknown" 1493 for send_retv in 'int' 'ssize_t'; do 1494 for send_arg1 in 'int' 'ssize_t' 'SOCKET'; do 1495 for send_arg2 in 'char *' 'void *' 'const char *' 'const void *'; do 1496 for send_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do 1497 for send_arg4 in 'int' 'unsigned int'; do 1498 if test "$curl_cv_func_send_args" = "unknown"; then 1499 AC_COMPILE_IFELSE([ 1500 AC_LANG_PROGRAM([[ 1501#undef inline 1502#ifdef HAVE_WINDOWS_H 1503#ifndef WIN32_LEAN_AND_MEAN 1504#define WIN32_LEAN_AND_MEAN 1505#endif 1506#include <windows.h> 1507#ifdef HAVE_WINSOCK2_H 1508#include <winsock2.h> 1509#else 1510#ifdef HAVE_WINSOCK_H 1511#include <winsock.h> 1512#endif 1513#endif 1514#define SENDCALLCONV PASCAL 1515#else 1516#ifdef HAVE_SYS_TYPES_H 1517#include <sys/types.h> 1518#endif 1519#ifdef HAVE_SYS_SOCKET_H 1520#include <sys/socket.h> 1521#endif 1522#define SENDCALLCONV 1523#endif 1524 extern $send_retv SENDCALLCONV 1525 send($send_arg1, $send_arg2, $send_arg3, $send_arg4); 1526 ]],[[ 1527 $send_arg1 s=0; 1528 $send_arg3 len=0; 1529 $send_arg4 flags=0; 1530 $send_retv res = send(s, 0, len, flags); 1531 ]]) 1532 ],[ 1533 curl_cv_func_send_args="$send_arg1,$send_arg2,$send_arg3,$send_arg4,$send_retv" 1534 ]) 1535 fi 1536 done 1537 done 1538 done 1539 done 1540 done 1541 ]) # AC-CACHE-CHECK 1542 if test "$curl_cv_func_send_args" = "unknown"; then 1543 AC_MSG_ERROR([Cannot find proper types to use for send args]) 1544 else 1545 send_prev_IFS=$IFS; IFS=',' 1546 set dummy `echo "$curl_cv_func_send_args" | sed 's/\*/\*/g'` 1547 IFS=$send_prev_IFS 1548 shift 1549 # 1550 send_qual_type_arg2=$[2] 1551 # 1552 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG1, $[1], 1553 [Define to the type of arg 1 for send.]) 1554 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG3, $[3], 1555 [Define to the type of arg 3 for send.]) 1556 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG4, $[4], 1557 [Define to the type of arg 4 for send.]) 1558 AC_DEFINE_UNQUOTED(SEND_TYPE_RETV, $[5], 1559 [Define to the function return type for send.]) 1560 # 1561 prev_sh_opts=$- 1562 # 1563 case $prev_sh_opts in 1564 *f*) 1565 ;; 1566 *) 1567 set -f 1568 ;; 1569 esac 1570 # 1571 case "$send_qual_type_arg2" in 1572 const*) 1573 send_qual_arg2=const 1574 send_type_arg2=`echo $send_qual_type_arg2 | sed 's/^const //'` 1575 ;; 1576 *) 1577 send_qual_arg2= 1578 send_type_arg2=$send_qual_type_arg2 1579 ;; 1580 esac 1581 # 1582 AC_DEFINE_UNQUOTED(SEND_QUAL_ARG2, $send_qual_arg2, 1583 [Define to the type qualifier of arg 2 for send.]) 1584 AC_DEFINE_UNQUOTED(SEND_TYPE_ARG2, $send_type_arg2, 1585 [Define to the type of arg 2 for send.]) 1586 # 1587 case $prev_sh_opts in 1588 *f*) 1589 ;; 1590 *) 1591 set +f 1592 ;; 1593 esac 1594 # 1595 AC_DEFINE_UNQUOTED(HAVE_SEND, 1, 1596 [Define to 1 if you have the send function.]) 1597 curl_cv_func_send="yes" 1598 fi 1599 else 1600 AC_MSG_ERROR([Unable to link function send]) 1601 fi 1602]) 1603 1604dnl CURL_CHECK_MSG_NOSIGNAL 1605dnl ------------------------------------------------- 1606dnl Check for MSG_NOSIGNAL 1607 1608AC_DEFUN([CURL_CHECK_MSG_NOSIGNAL], [ 1609 AC_CHECK_HEADERS(sys/types.h sys/socket.h) 1610 AC_CACHE_CHECK([for MSG_NOSIGNAL], [curl_cv_msg_nosignal], [ 1611 AC_COMPILE_IFELSE([ 1612 AC_LANG_PROGRAM([[ 1613#undef inline 1614#ifdef HAVE_WINDOWS_H 1615#ifndef WIN32_LEAN_AND_MEAN 1616#define WIN32_LEAN_AND_MEAN 1617#endif 1618#include <windows.h> 1619#ifdef HAVE_WINSOCK2_H 1620#include <winsock2.h> 1621#else 1622#ifdef HAVE_WINSOCK_H 1623#include <winsock.h> 1624#endif 1625#endif 1626#else 1627#ifdef HAVE_SYS_TYPES_H 1628#include <sys/types.h> 1629#endif 1630#ifdef HAVE_SYS_SOCKET_H 1631#include <sys/socket.h> 1632#endif 1633#endif 1634 ]],[[ 1635 int flag=MSG_NOSIGNAL; 1636 ]]) 1637 ],[ 1638 curl_cv_msg_nosignal="yes" 1639 ],[ 1640 curl_cv_msg_nosignal="no" 1641 ]) 1642 ]) 1643 case "$curl_cv_msg_nosignal" in 1644 yes) 1645 AC_DEFINE_UNQUOTED(HAVE_MSG_NOSIGNAL, 1, 1646 [Define to 1 if you have the MSG_NOSIGNAL flag.]) 1647 ;; 1648 esac 1649]) 1650 1651 1652dnl CURL_CHECK_STRUCT_TIMEVAL 1653dnl ------------------------------------------------- 1654dnl Check for timeval struct 1655 1656AC_DEFUN([CURL_CHECK_STRUCT_TIMEVAL], [ 1657 AC_REQUIRE([AC_HEADER_TIME])dnl 1658 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl 1659 AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl 1660 AC_CHECK_HEADERS(sys/types.h sys/time.h time.h sys/socket.h) 1661 AC_CACHE_CHECK([for struct timeval], [curl_cv_struct_timeval], [ 1662 AC_COMPILE_IFELSE([ 1663 AC_LANG_PROGRAM([[ 1664#undef inline 1665#ifdef HAVE_WINDOWS_H 1666#ifndef WIN32_LEAN_AND_MEAN 1667#define WIN32_LEAN_AND_MEAN 1668#endif 1669#include <windows.h> 1670#ifdef HAVE_WINSOCK2_H 1671#include <winsock2.h> 1672#else 1673#ifdef HAVE_WINSOCK_H 1674#include <winsock.h> 1675#endif 1676#endif 1677#endif 1678#ifdef HAVE_SYS_TYPES_H 1679#include <sys/types.h> 1680#endif 1681#ifdef HAVE_SYS_TIME_H 1682#include <sys/time.h> 1683#ifdef TIME_WITH_SYS_TIME 1684#include <time.h> 1685#endif 1686#else 1687#ifdef HAVE_TIME_H 1688#include <time.h> 1689#endif 1690#endif 1691#ifdef HAVE_SYS_SOCKET_H 1692#include <sys/socket.h> 1693#endif 1694 ]],[[ 1695 struct timeval ts; 1696 ts.tv_sec = 0; 1697 ts.tv_usec = 0; 1698 ]]) 1699 ],[ 1700 curl_cv_struct_timeval="yes" 1701 ],[ 1702 curl_cv_struct_timeval="no" 1703 ]) 1704 ]) 1705 case "$curl_cv_struct_timeval" in 1706 yes) 1707 AC_DEFINE_UNQUOTED(HAVE_STRUCT_TIMEVAL, 1, 1708 [Define to 1 if you have the timeval struct.]) 1709 ;; 1710 esac 1711]) 1712 1713 1714dnl TYPE_SIG_ATOMIC_T 1715dnl ------------------------------------------------- 1716dnl Check if the sig_atomic_t type is available, and 1717dnl verify if it is already defined as volatile. 1718 1719AC_DEFUN([TYPE_SIG_ATOMIC_T], [ 1720 AC_CHECK_HEADERS(signal.h) 1721 AC_CHECK_TYPE([sig_atomic_t],[ 1722 AC_DEFINE(HAVE_SIG_ATOMIC_T, 1, 1723 [Define to 1 if sig_atomic_t is an available typedef.]) 1724 ], ,[ 1725#ifdef HAVE_SIGNAL_H 1726#include <signal.h> 1727#endif 1728 ]) 1729 case "$ac_cv_type_sig_atomic_t" in 1730 yes) 1731 # 1732 AC_MSG_CHECKING([if sig_atomic_t is already defined as volatile]) 1733 AC_LINK_IFELSE([ 1734 AC_LANG_PROGRAM([[ 1735#ifdef HAVE_SIGNAL_H 1736#include <signal.h> 1737#endif 1738 ]],[[ 1739 static volatile sig_atomic_t dummy = 0; 1740 ]]) 1741 ],[ 1742 AC_MSG_RESULT([no]) 1743 curl_cv_sig_atomic_t_volatile="no" 1744 ],[ 1745 AC_MSG_RESULT([yes]) 1746 curl_cv_sig_atomic_t_volatile="yes" 1747 ]) 1748 # 1749 if test "$curl_cv_sig_atomic_t_volatile" = "yes"; then 1750 AC_DEFINE(HAVE_SIG_ATOMIC_T_VOLATILE, 1, 1751 [Define to 1 if sig_atomic_t is already defined as volatile.]) 1752 fi 1753 ;; 1754 esac 1755]) 1756 1757 1758dnl TYPE_IN_ADDR_T 1759dnl ------------------------------------------------- 1760dnl Check for in_addr_t: it is used to receive the return code of inet_addr() 1761dnl and a few other things. 1762 1763AC_DEFUN([TYPE_IN_ADDR_T], [ 1764 AC_CHECK_TYPE([in_addr_t], ,[ 1765 dnl in_addr_t not available 1766 AC_CACHE_CHECK([for in_addr_t equivalent], 1767 [curl_cv_in_addr_t_equiv], [ 1768 curl_cv_in_addr_t_equiv="unknown" 1769 for t in "unsigned long" int size_t unsigned long; do 1770 if test "$curl_cv_in_addr_t_equiv" = "unknown"; then 1771 AC_LINK_IFELSE([ 1772 AC_LANG_PROGRAM([[ 1773#undef inline 1774#ifdef HAVE_WINDOWS_H 1775#ifndef WIN32_LEAN_AND_MEAN 1776#define WIN32_LEAN_AND_MEAN 1777#endif 1778#include <windows.h> 1779#ifdef HAVE_WINSOCK2_H 1780#include <winsock2.h> 1781#else 1782#ifdef HAVE_WINSOCK_H 1783#include <winsock.h> 1784#endif 1785#endif 1786#else 1787#ifdef HAVE_SYS_TYPES_H 1788#include <sys/types.h> 1789#endif 1790#ifdef HAVE_SYS_SOCKET_H 1791#include <sys/socket.h> 1792#endif 1793#ifdef HAVE_NETINET_IN_H 1794#include <netinet/in.h> 1795#endif 1796#ifdef HAVE_ARPA_INET_H 1797#include <arpa/inet.h> 1798#endif 1799#endif 1800 ]],[[ 1801 $t data = inet_addr ("1.2.3.4"); 1802 ]]) 1803 ],[ 1804 curl_cv_in_addr_t_equiv="$t" 1805 ]) 1806 fi 1807 done 1808 ]) 1809 case "$curl_cv_in_addr_t_equiv" in 1810 unknown) 1811 AC_MSG_ERROR([Cannot find a type to use in place of in_addr_t]) 1812 ;; 1813 *) 1814 AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv, 1815 [Type to use in place of in_addr_t when system does not provide it.]) 1816 ;; 1817 esac 1818 ],[ 1819#undef inline 1820#ifdef HAVE_WINDOWS_H 1821#ifndef WIN32_LEAN_AND_MEAN 1822#define WIN32_LEAN_AND_MEAN 1823#endif 1824#include <windows.h> 1825#ifdef HAVE_WINSOCK2_H 1826#include <winsock2.h> 1827#else 1828#ifdef HAVE_WINSOCK_H 1829#include <winsock.h> 1830#endif 1831#endif 1832#else 1833#ifdef HAVE_SYS_TYPES_H 1834#include <sys/types.h> 1835#endif 1836#ifdef HAVE_SYS_SOCKET_H 1837#include <sys/socket.h> 1838#endif 1839#ifdef HAVE_NETINET_IN_H 1840#include <netinet/in.h> 1841#endif 1842#ifdef HAVE_ARPA_INET_H 1843#include <arpa/inet.h> 1844#endif 1845#endif 1846 ]) 1847]) 1848 1849 1850dnl CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC 1851dnl ------------------------------------------------- 1852dnl Check if monotonic clock_gettime is available. 1853 1854AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [ 1855 AC_REQUIRE([AC_HEADER_TIME])dnl 1856 AC_CHECK_HEADERS(sys/types.h sys/time.h time.h) 1857 AC_MSG_CHECKING([for monotonic clock_gettime]) 1858 # 1859 if test "x$dontwant_rt" = "xno" ; then 1860 AC_COMPILE_IFELSE([ 1861 AC_LANG_PROGRAM([[ 1862#ifdef HAVE_SYS_TYPES_H 1863#include <sys/types.h> 1864#endif 1865#ifdef HAVE_SYS_TIME_H 1866#include <sys/time.h> 1867#ifdef TIME_WITH_SYS_TIME 1868#include <time.h> 1869#endif 1870#else 1871#ifdef HAVE_TIME_H 1872#include <time.h> 1873#endif 1874#endif 1875 ]],[[ 1876 struct timespec ts; 1877 (void)clock_gettime(CLOCK_MONOTONIC, &ts); 1878 ]]) 1879 ],[ 1880 AC_MSG_RESULT([yes]) 1881 curl_func_clock_gettime="yes" 1882 ],[ 1883 AC_MSG_RESULT([no]) 1884 curl_func_clock_gettime="no" 1885 ]) 1886 fi 1887 dnl Definition of HAVE_CLOCK_GETTIME_MONOTONIC is intentionally postponed 1888 dnl until library linking and run-time checks for clock_gettime succeed. 1889]) 1890 1891 1892dnl CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC 1893dnl ------------------------------------------------- 1894dnl If monotonic clock_gettime is available then, 1895dnl check and prepended to LIBS any needed libraries. 1896 1897AC_DEFUN([CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC], [ 1898 AC_REQUIRE([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC])dnl 1899 # 1900 if test "$curl_func_clock_gettime" = "yes"; then 1901 # 1902 AC_MSG_CHECKING([for clock_gettime in libraries]) 1903 # 1904 curl_cv_save_LIBS="$LIBS" 1905 curl_cv_gclk_LIBS="unknown" 1906 # 1907 for x_xlibs in '' '-lrt' '-lposix4' ; do 1908 if test "$curl_cv_gclk_LIBS" = "unknown"; then 1909 if test -z "$x_xlibs"; then 1910 LIBS="$curl_cv_save_LIBS" 1911 else 1912 LIBS="$x_xlibs $curl_cv_save_LIBS" 1913 fi 1914 AC_LINK_IFELSE([ 1915 AC_LANG_PROGRAM([[ 1916#ifdef HAVE_SYS_TYPES_H 1917#include <sys/types.h> 1918#endif 1919#ifdef HAVE_SYS_TIME_H 1920#include <sys/time.h> 1921#ifdef TIME_WITH_SYS_TIME 1922#include <time.h> 1923#endif 1924#else 1925#ifdef HAVE_TIME_H 1926#include <time.h> 1927#endif 1928#endif 1929 ]],[[ 1930 struct timespec ts; 1931 (void)clock_gettime(CLOCK_MONOTONIC, &ts); 1932 ]]) 1933 ],[ 1934 curl_cv_gclk_LIBS="$x_xlibs" 1935 ]) 1936 fi 1937 done 1938 # 1939 LIBS="$curl_cv_save_LIBS" 1940 # 1941 case X-"$curl_cv_gclk_LIBS" in 1942 X-unknown) 1943 AC_MSG_RESULT([cannot find clock_gettime]) 1944 AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined]) 1945 curl_func_clock_gettime="no" 1946 ;; 1947 X-) 1948 AC_MSG_RESULT([no additional lib required]) 1949 curl_func_clock_gettime="yes" 1950 ;; 1951 *) 1952 if test -z "$curl_cv_save_LIBS"; then 1953 LIBS="$curl_cv_gclk_LIBS" 1954 else 1955 LIBS="$curl_cv_gclk_LIBS $curl_cv_save_LIBS" 1956 fi 1957 AC_MSG_RESULT([$curl_cv_gclk_LIBS]) 1958 curl_func_clock_gettime="yes" 1959 ;; 1960 esac 1961 # 1962 dnl only do runtime verification when not cross-compiling 1963 if test "x$cross_compiling" != "xyes" && 1964 test "$curl_func_clock_gettime" = "yes"; then 1965 AC_MSG_CHECKING([if monotonic clock_gettime works]) 1966 AC_RUN_IFELSE([ 1967 AC_LANG_PROGRAM([[ 1968#ifdef HAVE_STDLIB_H 1969#include <stdlib.h> 1970#endif 1971#ifdef HAVE_SYS_TYPES_H 1972#include <sys/types.h> 1973#endif 1974#ifdef HAVE_SYS_TIME_H 1975#include <sys/time.h> 1976#ifdef TIME_WITH_SYS_TIME 1977#include <time.h> 1978#endif 1979#else 1980#ifdef HAVE_TIME_H 1981#include <time.h> 1982#endif 1983#endif 1984 ]],[[ 1985 struct timespec ts; 1986 if (0 == clock_gettime(CLOCK_MONOTONIC, &ts)) 1987 exit(0); 1988 else 1989 exit(1); 1990 ]]) 1991 ],[ 1992 AC_MSG_RESULT([yes]) 1993 ],[ 1994 AC_MSG_RESULT([no]) 1995 AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined]) 1996 curl_func_clock_gettime="no" 1997 LIBS="$curl_cv_save_LIBS" 1998 ]) 1999 fi 2000 # 2001 case "$curl_func_clock_gettime" in 2002 yes) 2003 AC_DEFINE_UNQUOTED(HAVE_CLOCK_GETTIME_MONOTONIC, 1, 2004 [Define to 1 if you have the clock_gettime function and monotonic timer.]) 2005 ;; 2006 esac 2007 # 2008 fi 2009 # 2010]) 2011 2012 2013dnl CURL_CHECK_LIBS_CONNECT 2014dnl ------------------------------------------------- 2015dnl Verify if network connect function is already available 2016dnl using current libraries or if another one is required. 2017 2018AC_DEFUN([CURL_CHECK_LIBS_CONNECT], [ 2019 AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl 2020 AC_MSG_CHECKING([for connect in libraries]) 2021 tst_connect_save_LIBS="$LIBS" 2022 tst_connect_need_LIBS="unknown" 2023 for tst_lib in '' '-lsocket' ; do 2024 if test "$tst_connect_need_LIBS" = "unknown"; then 2025 LIBS="$tst_lib $tst_connect_save_LIBS" 2026 AC_LINK_IFELSE([ 2027 AC_LANG_PROGRAM([[ 2028 $curl_includes_winsock2 2029 #ifndef HAVE_WINDOWS_H 2030 int connect(int, void*, int); 2031 #endif 2032 ]],[[ 2033 if(0 != connect(0, 0, 0)) 2034 return 1; 2035 ]]) 2036 ],[ 2037 tst_connect_need_LIBS="$tst_lib" 2038 ]) 2039 fi 2040 done 2041 LIBS="$tst_connect_save_LIBS" 2042 # 2043 case X-"$tst_connect_need_LIBS" in 2044 X-unknown) 2045 AC_MSG_RESULT([cannot find connect]) 2046 AC_MSG_ERROR([cannot find connect function in libraries.]) 2047 ;; 2048 X-) 2049 AC_MSG_RESULT([yes]) 2050 ;; 2051 *) 2052 AC_MSG_RESULT([$tst_connect_need_LIBS]) 2053 LIBS="$tst_connect_need_LIBS $tst_connect_save_LIBS" 2054 ;; 2055 esac 2056]) 2057 2058 2059dnl CURL_DEFINE_UNQUOTED (VARIABLE, [VALUE]) 2060dnl ------------------------------------------------- 2061dnl Like AC_DEFINE_UNQUOTED this macro will define a C preprocessor 2062dnl symbol that can be further used in custom template configuration 2063dnl files. This macro, unlike AC_DEFINE_UNQUOTED, does not use a third 2064dnl argument for the description. Symbol definitions done with this 2065dnl macro are intended to be exclusively used in handcrafted *.h.in 2066dnl template files. Contrary to what AC_DEFINE_UNQUOTED does, this one 2067dnl prevents autoheader generation and insertion of symbol template 2068dnl stub and definition into the first configuration header file. Do 2069dnl not use this macro as a replacement for AC_DEFINE_UNQUOTED, each 2070dnl one serves different functional needs. 2071 2072AC_DEFUN([CURL_DEFINE_UNQUOTED], [ 2073cat >>confdefs.h <<_EOF 2074[@%:@define] $1 ifelse($#, 2, [$2], 1) 2075_EOF 2076]) 2077 2078 2079dnl CURL_CONFIGURE_LONG 2080dnl ------------------------------------------------- 2081dnl Find out the size of long as reported by sizeof() and define 2082dnl CURL_SIZEOF_LONG as appropriate to be used in template file 2083dnl include/curl/curlbuild.h.in to properly configure the library. 2084dnl The size of long is a build time characteristic and as such 2085dnl must be recorded in curlbuild.h 2086 2087AC_DEFUN([CURL_CONFIGURE_LONG], [ 2088 if test -z "$ac_cv_sizeof_long" || 2089 test "$ac_cv_sizeof_long" -eq "0"; then 2090 AC_MSG_ERROR([cannot find out size of long.]) 2091 fi 2092 CURL_DEFINE_UNQUOTED([CURL_SIZEOF_LONG], [$ac_cv_sizeof_long]) 2093]) 2094 2095 2096dnl CURL_CONFIGURE_CURL_SOCKLEN_T 2097dnl ------------------------------------------------- 2098dnl Find out suitable curl_socklen_t data type definition and size, making 2099dnl appropriate definitions for template file include/curl/curlbuild.h.in 2100dnl to properly configure and use the library. 2101dnl 2102dnl The need for the curl_socklen_t definition arises mainly to properly 2103dnl interface HP-UX systems which on one hand have a typedef'ed socklen_t 2104dnl data type which is 32 or 64-Bit wide depending on the data model being 2105dnl used, and that on the other hand is only actually used when interfacing 2106dnl the X/Open sockets provided in the xnet library. 2107 2108AC_DEFUN([CURL_CONFIGURE_CURL_SOCKLEN_T], [ 2109 AC_REQUIRE([CURL_INCLUDES_WS2TCPIP])dnl 2110 AC_REQUIRE([CURL_INCLUDES_SYS_SOCKET])dnl 2111 AC_REQUIRE([CURL_PREPROCESS_CALLCONV])dnl 2112 # 2113 AC_BEFORE([$0], [CURL_CONFIGURE_PULL_SYS_POLL])dnl 2114 # 2115 AC_MSG_CHECKING([for curl_socklen_t data type]) 2116 curl_typeof_curl_socklen_t="unknown" 2117 for arg1 in int SOCKET; do 2118 for arg2 in 'struct sockaddr' void; do 2119 for t in socklen_t int size_t 'unsigned int' long 'unsigned long' void; do 2120 if test "$curl_typeof_curl_socklen_t" = "unknown"; then 2121 AC_COMPILE_IFELSE([ 2122 AC_LANG_PROGRAM([[ 2123 $curl_includes_ws2tcpip 2124 $curl_includes_sys_socket 2125 $curl_preprocess_callconv 2126 extern int FUNCALLCONV getpeername($arg1, $arg2 *, $t *); 2127 ]],[[ 2128 $t *lenptr = 0; 2129 if(0 != getpeername(0, 0, lenptr)) 2130 return 1; 2131 ]]) 2132 ],[ 2133 curl_typeof_curl_socklen_t="$t" 2134 ]) 2135 fi 2136 done 2137 done 2138 done 2139 for t in socklen_t int; do 2140 if test "$curl_typeof_curl_socklen_t" = "void"; then 2141 AC_COMPILE_IFELSE([ 2142 AC_LANG_PROGRAM([[ 2143 $curl_includes_sys_socket 2144 typedef $t curl_socklen_t; 2145 ]],[[ 2146 curl_socklen_t dummy; 2147 ]]) 2148 ],[ 2149 curl_typeof_curl_socklen_t="$t" 2150 ]) 2151 fi 2152 done 2153 AC_MSG_RESULT([$curl_typeof_curl_socklen_t]) 2154 if test "$curl_typeof_curl_socklen_t" = "void" || 2155 test "$curl_typeof_curl_socklen_t" = "unknown"; then 2156 AC_MSG_ERROR([cannot find data type for curl_socklen_t.]) 2157 fi 2158 # 2159 AC_MSG_CHECKING([size of curl_socklen_t]) 2160 curl_sizeof_curl_socklen_t="unknown" 2161 curl_pull_headers_socklen_t="unknown" 2162 if test "$curl_cv_header_ws2tcpip_h" = "yes"; then 2163 tst_pull_header_checks='none ws2tcpip' 2164 tst_size_checks='4' 2165 else 2166 tst_pull_header_checks='none systypes syssocket' 2167 tst_size_checks='4 8 2' 2168 fi 2169 for tst_size in $tst_size_checks; do 2170 for tst_pull_headers in $tst_pull_header_checks; do 2171 if test "$curl_sizeof_curl_socklen_t" = "unknown"; then 2172 case $tst_pull_headers in 2173 ws2tcpip) 2174 tmp_includes="$curl_includes_ws2tcpip" 2175 ;; 2176 systypes) 2177 tmp_includes="$curl_includes_sys_types" 2178 ;; 2179 syssocket) 2180 tmp_includes="$curl_includes_sys_socket" 2181 ;; 2182 *) 2183 tmp_includes="" 2184 ;; 2185 esac 2186 AC_COMPILE_IFELSE([ 2187 AC_LANG_PROGRAM([[ 2188 $tmp_includes 2189 typedef $curl_typeof_curl_socklen_t curl_socklen_t; 2190 typedef char dummy_arr[sizeof(curl_socklen_t) == $tst_size ? 1 : -1]; 2191 ]],[[ 2192 curl_socklen_t dummy; 2193 ]]) 2194 ],[ 2195 curl_sizeof_curl_socklen_t="$tst_size" 2196 curl_pull_headers_socklen_t="$tst_pull_headers" 2197 ]) 2198 fi 2199 done 2200 done 2201 AC_MSG_RESULT([$curl_sizeof_curl_socklen_t]) 2202 if test "$curl_sizeof_curl_socklen_t" = "unknown"; then 2203 AC_MSG_ERROR([cannot find out size of curl_socklen_t.]) 2204 fi 2205 # 2206 case $curl_pull_headers_socklen_t in 2207 ws2tcpip) 2208 CURL_DEFINE_UNQUOTED([CURL_PULL_WS2TCPIP_H]) 2209 ;; 2210 systypes) 2211 CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_TYPES_H]) 2212 ;; 2213 syssocket) 2214 CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_TYPES_H]) 2215 CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_SOCKET_H]) 2216 ;; 2217 esac 2218 CURL_DEFINE_UNQUOTED([CURL_TYPEOF_CURL_SOCKLEN_T], [$curl_typeof_curl_socklen_t]) 2219 CURL_DEFINE_UNQUOTED([CURL_SIZEOF_CURL_SOCKLEN_T], [$curl_sizeof_curl_socklen_t]) 2220]) 2221 2222 2223dnl CURL_CONFIGURE_PULL_SYS_POLL 2224dnl ------------------------------------------------- 2225dnl Find out if system header file sys/poll.h must be included by the 2226dnl external interface, making appropriate definitions for template file 2227dnl include/curl/curlbuild.h.in to properly configure and use the library. 2228dnl 2229dnl The need for the sys/poll.h inclusion arises mainly to properly 2230dnl interface AIX systems which define macros 'events' and 'revents'. 2231 2232AC_DEFUN([CURL_CONFIGURE_PULL_SYS_POLL], [ 2233 AC_REQUIRE([CURL_INCLUDES_POLL])dnl 2234 # 2235 tst_poll_events_macro_defined="unknown" 2236 # 2237 AC_COMPILE_IFELSE([ 2238 AC_LANG_PROGRAM([[ 2239 $curl_includes_poll 2240 ]],[[ 2241#if defined(events) || defined(revents) 2242 return 0; 2243#else 2244 force compilation error 2245#endif 2246 ]]) 2247 ],[ 2248 tst_poll_events_macro_defined="yes" 2249 ],[ 2250 tst_poll_events_macro_defined="no" 2251 ]) 2252 # 2253 if test "$tst_poll_events_macro_defined" = "yes"; then 2254 if test "x$ac_cv_header_sys_poll_h" = "xyes"; then 2255 CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_POLL_H]) 2256 fi 2257 fi 2258 # 2259]) 2260 2261 2262dnl CURL_CHECK_FUNC_SELECT 2263dnl ------------------------------------------------- 2264dnl Test if the socket select() function is available, 2265dnl and check its return type and the types of its 2266dnl arguments. If the function succeeds HAVE_SELECT 2267dnl will be defined, defining the types of the 2268dnl arguments in SELECT_TYPE_ARG1, SELECT_TYPE_ARG234 2269dnl and SELECT_TYPE_ARG5, defining the type of the 2270dnl function return value in SELECT_TYPE_RETV, and 2271dnl also defining the type qualifier of fifth argument 2272dnl in SELECT_QUAL_ARG5. 2273 2274AC_DEFUN([CURL_CHECK_FUNC_SELECT], [ 2275 AC_REQUIRE([CURL_CHECK_STRUCT_TIMEVAL])dnl 2276 AC_CHECK_HEADERS(sys/select.h sys/socket.h) 2277 # 2278 AC_MSG_CHECKING([for select]) 2279 AC_LINK_IFELSE([ 2280 AC_LANG_PROGRAM([[ 2281#undef inline 2282#ifdef HAVE_WINDOWS_H 2283#ifndef WIN32_LEAN_AND_MEAN 2284#define WIN32_LEAN_AND_MEAN 2285#endif 2286#include <windows.h> 2287#ifdef HAVE_WINSOCK2_H 2288#include <winsock2.h> 2289#else 2290#ifdef HAVE_WINSOCK_H 2291#include <winsock.h> 2292#endif 2293#endif 2294#endif 2295#ifdef HAVE_SYS_TYPES_H 2296#include <sys/types.h> 2297#endif 2298#ifdef HAVE_SYS_TIME_H 2299#include <sys/time.h> 2300#ifdef TIME_WITH_SYS_TIME 2301#include <time.h> 2302#endif 2303#else 2304#ifdef HAVE_TIME_H 2305#include <time.h> 2306#endif 2307#endif 2308#ifndef HAVE_WINDOWS_H 2309#ifdef HAVE_SYS_SELECT_H 2310#include <sys/select.h> 2311#endif 2312#ifdef HAVE_SYS_SOCKET_H 2313#include <sys/socket.h> 2314#endif 2315#endif 2316 ]],[[ 2317 select(0, 0, 0, 0, 0); 2318 ]]) 2319 ],[ 2320 AC_MSG_RESULT([yes]) 2321 curl_cv_select="yes" 2322 ],[ 2323 AC_MSG_RESULT([no]) 2324 curl_cv_select="no" 2325 ]) 2326 # 2327 if test "$curl_cv_select" = "yes"; then 2328 AC_CACHE_CHECK([types of args and return type for select], 2329 [curl_cv_func_select_args], [ 2330 curl_cv_func_select_args="unknown" 2331 for sel_retv in 'int' 'ssize_t'; do 2332 for sel_arg1 in 'int' 'ssize_t' 'size_t' 'unsigned long int' 'unsigned int'; do 2333 for sel_arg234 in 'fd_set *' 'int *' 'void *'; do 2334 for sel_arg5 in 'struct timeval *' 'const struct timeval *'; do 2335 if test "$curl_cv_func_select_args" = "unknown"; then 2336 AC_COMPILE_IFELSE([ 2337 AC_LANG_PROGRAM([[ 2338#undef inline 2339#ifdef HAVE_WINDOWS_H 2340#ifndef WIN32_LEAN_AND_MEAN 2341#define WIN32_LEAN_AND_MEAN 2342#endif 2343#include <windows.h> 2344#ifdef HAVE_WINSOCK2_H 2345#include <winsock2.h> 2346#else 2347#ifdef HAVE_WINSOCK_H 2348#include <winsock.h> 2349#endif 2350#endif 2351#define SELECTCALLCONV PASCAL 2352#endif 2353#ifdef HAVE_SYS_TYPES_H 2354#include <sys/types.h> 2355#endif 2356#ifdef HAVE_SYS_TIME_H 2357#include <sys/time.h> 2358#ifdef TIME_WITH_SYS_TIME 2359#include <time.h> 2360#endif 2361#else 2362#ifdef HAVE_TIME_H 2363#include <time.h> 2364#endif 2365#endif 2366#ifndef HAVE_WINDOWS_H 2367#ifdef HAVE_SYS_SELECT_H 2368#include <sys/select.h> 2369#endif 2370#ifdef HAVE_SYS_SOCKET_H 2371#include <sys/socket.h> 2372#endif 2373#define SELECTCALLCONV 2374#endif 2375#ifndef HAVE_STRUCT_TIMEVAL 2376 struct timeval { 2377 long tv_sec; 2378 long tv_usec; 2379 }; 2380#endif 2381 extern $sel_retv SELECTCALLCONV select($sel_arg1, 2382 $sel_arg234, 2383 $sel_arg234, 2384 $sel_arg234, 2385 $sel_arg5); 2386 ]],[[ 2387 $sel_arg1 nfds=0; 2388 $sel_arg234 rfds=0; 2389 $sel_arg234 wfds=0; 2390 $sel_arg234 efds=0; 2391 $sel_retv res = select(nfds, rfds, wfds, efds, 0); 2392 ]]) 2393 ],[ 2394 curl_cv_func_select_args="$sel_arg1,$sel_arg234,$sel_arg5,$sel_retv" 2395 ]) 2396 fi 2397 done 2398 done 2399 done 2400 done 2401 ]) # AC-CACHE-CHECK 2402 if test "$curl_cv_func_select_args" = "unknown"; then 2403 AC_MSG_WARN([Cannot find proper types to use for select args]) 2404 AC_MSG_WARN([HAVE_SELECT will not be defined]) 2405 else 2406 select_prev_IFS=$IFS; IFS=',' 2407 set dummy `echo "$curl_cv_func_select_args" | sed 's/\*/\*/g'` 2408 IFS=$select_prev_IFS 2409 shift 2410 # 2411 sel_qual_type_arg5=$[3] 2412 # 2413 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG1, $[1], 2414 [Define to the type of arg 1 for select.]) 2415 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG234, $[2], 2416 [Define to the type of args 2, 3 and 4 for select.]) 2417 AC_DEFINE_UNQUOTED(SELECT_TYPE_RETV, $[4], 2418 [Define to the function return type for select.]) 2419 # 2420 prev_sh_opts=$- 2421 # 2422 case $prev_sh_opts in 2423 *f*) 2424 ;; 2425 *) 2426 set -f 2427 ;; 2428 esac 2429 # 2430 case "$sel_qual_type_arg5" in 2431 const*) 2432 sel_qual_arg5=const 2433 sel_type_arg5=`echo $sel_qual_type_arg5 | sed 's/^const //'` 2434 ;; 2435 *) 2436 sel_qual_arg5= 2437 sel_type_arg5=$sel_qual_type_arg5 2438 ;; 2439 esac 2440 # 2441 AC_DEFINE_UNQUOTED(SELECT_QUAL_ARG5, $sel_qual_arg5, 2442 [Define to the type qualifier of arg 5 for select.]) 2443 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG5, $sel_type_arg5, 2444 [Define to the type of arg 5 for select.]) 2445 # 2446 case $prev_sh_opts in 2447 *f*) 2448 ;; 2449 *) 2450 set +f 2451 ;; 2452 esac 2453 # 2454 AC_DEFINE_UNQUOTED(HAVE_SELECT, 1, 2455 [Define to 1 if you have the select function.]) 2456 curl_cv_func_select="yes" 2457 fi 2458 fi 2459]) 2460 2461 2462dnl CURL_VERIFY_RUNTIMELIBS 2463dnl ------------------------------------------------- 2464dnl Verify that the shared libs found so far can be used when running 2465dnl programs, since otherwise the situation will create odd configure errors 2466dnl that are misleading people. 2467dnl 2468dnl Make sure this test is run BEFORE the first test in the script that 2469dnl runs anything, which at the time of this writing is the AC_CHECK_SIZEOF 2470dnl macro. It must also run AFTER all lib-checking macros are complete. 2471 2472AC_DEFUN([CURL_VERIFY_RUNTIMELIBS], [ 2473 2474 dnl this test is of course not sensible if we are cross-compiling! 2475 if test "x$cross_compiling" != xyes; then 2476 2477 dnl just run a program to verify that the libs checked for previous to this 2478 dnl point also is available run-time! 2479 AC_MSG_CHECKING([run-time libs availability]) 2480 AC_TRY_RUN([ 2481main() 2482{ 2483 return 0; 2484} 2485], 2486 AC_MSG_RESULT([fine]), 2487 AC_MSG_RESULT([failed]) 2488 AC_MSG_ERROR([one or more libs available at link-time are not available run-time. Libs used at link-time: $LIBS]) 2489 ) 2490 2491 dnl if this test fails, configure has already stopped 2492 fi 2493]) 2494 2495 2496dnl CURL_CHECK_VARIADIC_MACROS 2497dnl ------------------------------------------------- 2498dnl Check compiler support of variadic macros 2499 2500AC_DEFUN([CURL_CHECK_VARIADIC_MACROS], [ 2501 AC_CACHE_CHECK([for compiler support of C99 variadic macro style], 2502 [curl_cv_variadic_macros_c99], [ 2503 AC_COMPILE_IFELSE([ 2504 AC_LANG_PROGRAM([[ 2505#define c99_vmacro3(first, ...) fun3(first, __VA_ARGS__) 2506#define c99_vmacro2(first, ...) fun2(first, __VA_ARGS__) 2507 int fun3(int arg1, int arg2, int arg3); 2508 int fun2(int arg1, int arg2); 2509 int fun3(int arg1, int arg2, int arg3) 2510 { return arg1 + arg2 + arg3; } 2511 int fun2(int arg1, int arg2) 2512 { return arg1 + arg2; } 2513 ]],[[ 2514 int res3 = c99_vmacro3(1, 2, 3); 2515 int res2 = c99_vmacro2(1, 2); 2516 ]]) 2517 ],[ 2518 curl_cv_variadic_macros_c99="yes" 2519 ],[ 2520 curl_cv_variadic_macros_c99="no" 2521 ]) 2522 ]) 2523 case "$curl_cv_variadic_macros_c99" in 2524 yes) 2525 AC_DEFINE_UNQUOTED(HAVE_VARIADIC_MACROS_C99, 1, 2526 [Define to 1 if compiler supports C99 variadic macro style.]) 2527 ;; 2528 esac 2529 AC_CACHE_CHECK([for compiler support of old gcc variadic macro style], 2530 [curl_cv_variadic_macros_gcc], [ 2531 AC_COMPILE_IFELSE([ 2532 AC_LANG_PROGRAM([[ 2533#define gcc_vmacro3(first, args...) fun3(first, args) 2534#define gcc_vmacro2(first, args...) fun2(first, args) 2535 int fun3(int arg1, int arg2, int arg3); 2536 int fun2(int arg1, int arg2); 2537 int fun3(int arg1, int arg2, int arg3) 2538 { return arg1 + arg2 + arg3; } 2539 int fun2(int arg1, int arg2) 2540 { return arg1 + arg2; } 2541 ]],[[ 2542 int res3 = gcc_vmacro3(1, 2, 3); 2543 int res2 = gcc_vmacro2(1, 2); 2544 ]]) 2545 ],[ 2546 curl_cv_variadic_macros_gcc="yes" 2547 ],[ 2548 curl_cv_variadic_macros_gcc="no" 2549 ]) 2550 ]) 2551 case "$curl_cv_variadic_macros_gcc" in 2552 yes) 2553 AC_DEFINE_UNQUOTED(HAVE_VARIADIC_MACROS_GCC, 1, 2554 [Define to 1 if compiler supports old gcc variadic macro style.]) 2555 ;; 2556 esac 2557]) 2558 2559 2560dnl CURL_CHECK_CA_BUNDLE 2561dnl ------------------------------------------------- 2562dnl Check if a default ca-bundle should be used 2563dnl 2564dnl regarding the paths this will scan: 2565dnl /etc/ssl/certs/ca-certificates.crt Debian systems 2566dnl /etc/pki/tls/certs/ca-bundle.crt Redhat and Mandriva 2567dnl /usr/share/ssl/certs/ca-bundle.crt old(er) Redhat 2568dnl /usr/local/share/certs/ca-root-nss.crt FreeBSD 2569dnl /etc/ssl/cert.pem OpenBSD, FreeBSD (symlink) 2570dnl /etc/ssl/certs/ (ca path) SUSE 2571 2572AC_DEFUN([CURL_CHECK_CA_BUNDLE], [ 2573 2574 AC_MSG_CHECKING([default CA cert bundle/path]) 2575 2576 AC_ARG_WITH(ca-bundle, 2577AC_HELP_STRING([--with-ca-bundle=FILE], 2578[Path to a file containing CA certificates (example: /etc/ca-bundle.crt)]) 2579AC_HELP_STRING([--without-ca-bundle], [Don't use a default CA bundle]), 2580 [ 2581 want_ca="$withval" 2582 if test "x$want_ca" = "xyes"; then 2583 AC_MSG_ERROR([--with-ca-bundle=FILE requires a path to the CA bundle]) 2584 fi 2585 ], 2586 [ want_ca="unset" ]) 2587 AC_ARG_WITH(ca-path, 2588AC_HELP_STRING([--with-ca-path=DIRECTORY], 2589[Path to a directory containing CA certificates stored individually, with \ 2590their filenames in a hash format. This option can be used with OpenSSL, \ 2591GnuTLS and PolarSSL backends. Refer to OpenSSL c_rehash for details. \ 2592(example: /etc/certificates)]) 2593AC_HELP_STRING([--without-ca-path], [Don't use a default CA path]), 2594 [ 2595 want_capath="$withval" 2596 if test "x$want_capath" = "xyes"; then 2597 AC_MSG_ERROR([--with-ca-path=DIRECTORY requires a path to the CA path directory]) 2598 fi 2599 ], 2600 [ want_capath="unset"]) 2601 2602 ca_warning=" (warning: certs not found)" 2603 capath_warning=" (warning: certs not found)" 2604 check_capath="" 2605 2606 if test "x$want_ca" != "xno" -a "x$want_ca" != "xunset" -a \ 2607 "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then 2608 dnl both given 2609 ca="$want_ca" 2610 capath="$want_capath" 2611 elif test "x$want_ca" != "xno" -a "x$want_ca" != "xunset"; then 2612 dnl --with-ca-bundle given 2613 ca="$want_ca" 2614 capath="no" 2615 elif test "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then 2616 dnl --with-ca-path given 2617 if test "x$OPENSSL_ENABLED" != "x1" -a "x$GNUTLS_ENABLED" != "x1" -a "x$POLARSSL_ENABLED" != "x1"; then 2618 AC_MSG_ERROR([--with-ca-path only works with OpenSSL, GnuTLS or PolarSSL]) 2619 fi 2620 capath="$want_capath" 2621 ca="no" 2622 else 2623 dnl first try autodetecting a CA bundle , then a CA path 2624 dnl both autodetections can be skipped by --without-ca-* 2625 ca="no" 2626 capath="no" 2627 if test "x$cross_compiling" != "xyes"; then 2628 dnl NOT cross-compiling and... 2629 dnl neither of the --with-ca-* options are provided 2630 if test "x$want_ca" = "xunset"; then 2631 dnl the path we previously would have installed the curl ca bundle 2632 dnl to, and thus we now check for an already existing cert in that 2633 dnl place in case we find no other 2634 if test "x$prefix" != xNONE; then 2635 cac="${prefix}/share/curl/curl-ca-bundle.crt" 2636 else 2637 cac="$ac_default_prefix/share/curl/curl-ca-bundle.crt" 2638 fi 2639 2640 for a in /etc/ssl/certs/ca-certificates.crt \ 2641 /etc/pki/tls/certs/ca-bundle.crt \ 2642 /usr/share/ssl/certs/ca-bundle.crt \ 2643 /usr/local/share/certs/ca-root-nss.crt \ 2644 /etc/ssl/cert.pem \ 2645 "$cac"; do 2646 if test -f "$a"; then 2647 ca="$a" 2648 break 2649 fi 2650 done 2651 fi 2652 if test "x$want_capath" = "xunset" -a "x$ca" = "xno" -a \ 2653 "x$OPENSSL_ENABLED" = "x1"; then 2654 check_capath="/etc/ssl/certs/" 2655 fi 2656 else 2657 dnl no option given and cross-compiling 2658 AC_MSG_WARN([skipped the ca-cert path detection when cross-compiling]) 2659 fi 2660 fi 2661 2662 if test "x$ca" = "xno" || test -f "$ca"; then 2663 ca_warning="" 2664 fi 2665 2666 if test "x$capath" != "xno"; then 2667 check_capath="$capath" 2668 fi 2669 2670 if test ! -z "$check_capath"; then 2671 for a in "$check_capath"; do 2672 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 2673 if test "x$capath" = "xno"; then 2674 capath="$a" 2675 fi 2676 capath_warning="" 2677 break 2678 fi 2679 done 2680 fi 2681 2682 if test "x$capath" = "xno"; then 2683 capath_warning="" 2684 fi 2685 2686 if test "x$ca" != "xno"; then 2687 CURL_CA_BUNDLE='"'$ca'"' 2688 AC_DEFINE_UNQUOTED(CURL_CA_BUNDLE, "$ca", [Location of default ca bundle]) 2689 AC_SUBST(CURL_CA_BUNDLE) 2690 AC_MSG_RESULT([$ca]) 2691 fi 2692 if test "x$capath" != "xno"; then 2693 CURL_CA_PATH="\"$capath\"" 2694 AC_DEFINE_UNQUOTED(CURL_CA_PATH, "$capath", [Location of default ca path]) 2695 AC_MSG_RESULT([$capath (capath)]) 2696 fi 2697 if test "x$ca" = "xno" && test "x$capath" = "xno"; then 2698 AC_MSG_RESULT([no]) 2699 fi 2700 2701 AC_MSG_CHECKING([whether to use builtin CA store of SSL library]) 2702 AC_ARG_WITH(ca-fallback, 2703AC_HELP_STRING([--with-ca-fallback], [Use the built in CA store of the SSL library]) 2704AC_HELP_STRING([--without-ca-fallback], [Don't use the built in CA store of the SSL library]), 2705 [ 2706 if test "x$with_ca_fallback" != "xyes" -a "x$with_ca_fallback" != "xno"; then 2707 AC_MSG_ERROR([--with-ca-fallback only allows yes or no as parameter]) 2708 fi 2709 ], 2710 [ with_ca_fallback="no"]) 2711 AC_MSG_RESULT([$with_ca_fallback]) 2712 if test "x$with_ca_fallback" = "xyes"; then 2713 if test "x$OPENSSL_ENABLED" != "x1" -a "x$GNUTLS_ENABLED" != "x1"; then 2714 AC_MSG_ERROR([--with-ca-fallback only works with OpenSSL or GnuTLS]) 2715 fi 2716 AC_DEFINE_UNQUOTED(CURL_CA_FALLBACK, 1, [define "1" to use built in CA store of SSL library ]) 2717 fi 2718]) 2719 2720 2721dnl DO_CURL_OFF_T_CHECK (TYPE, SIZE) 2722dnl ------------------------------------------------- 2723dnl Internal macro for CURL_CONFIGURE_CURL_OFF_T 2724 2725AC_DEFUN([DO_CURL_OFF_T_CHECK], [ 2726 AC_REQUIRE([CURL_INCLUDES_INTTYPES])dnl 2727 if test "$curl_typeof_curl_off_t" = "unknown" && test ! -z "$1"; then 2728 tmp_includes="" 2729 tmp_source="" 2730 tmp_fmt="" 2731 case XC_SH_TR_SH([$1]) in 2732 int64_t) 2733 tmp_includes="$curl_includes_inttypes" 2734 tmp_source="char f@<:@@:>@ = PRId64;" 2735 tmp_fmt="PRId64" 2736 ;; 2737 int32_t) 2738 tmp_includes="$curl_includes_inttypes" 2739 tmp_source="char f@<:@@:>@ = PRId32;" 2740 tmp_fmt="PRId32" 2741 ;; 2742 int16_t) 2743 tmp_includes="$curl_includes_inttypes" 2744 tmp_source="char f@<:@@:>@ = PRId16;" 2745 tmp_fmt="PRId16" 2746 ;; 2747 esac 2748 AC_COMPILE_IFELSE([ 2749 AC_LANG_PROGRAM([[ 2750 $tmp_includes 2751 typedef $1 curl_off_t; 2752 typedef char dummy_arr[sizeof(curl_off_t) == $2 ? 1 : -1]; 2753 ]],[[ 2754 $tmp_source 2755 curl_off_t dummy; 2756 ]]) 2757 ],[ 2758 if test -z "$tmp_fmt"; then 2759 curl_typeof_curl_off_t="$1" 2760 curl_sizeof_curl_off_t="$2" 2761 else 2762 CURL_CHECK_DEF([$tmp_fmt], [$curl_includes_inttypes], [silent]) 2763 AS_VAR_PUSHDEF([tmp_HaveFmtDef], [curl_cv_have_def_$tmp_fmt])dnl 2764 AS_VAR_PUSHDEF([tmp_FmtDef], [curl_cv_def_$tmp_fmt])dnl 2765 if test AS_VAR_GET(tmp_HaveFmtDef) = "yes"; then 2766 curl_format_curl_off_t=AS_VAR_GET(tmp_FmtDef) 2767 curl_typeof_curl_off_t="$1" 2768 curl_sizeof_curl_off_t="$2" 2769 fi 2770 AS_VAR_POPDEF([tmp_FmtDef])dnl 2771 AS_VAR_POPDEF([tmp_HaveFmtDef])dnl 2772 fi 2773 ]) 2774 fi 2775]) 2776 2777 2778dnl DO_CURL_OFF_T_SUFFIX_CHECK (TYPE) 2779dnl ------------------------------------------------- 2780dnl Internal macro for CURL_CONFIGURE_CURL_OFF_T 2781 2782AC_DEFUN([DO_CURL_OFF_T_SUFFIX_CHECK], [ 2783 AC_REQUIRE([CURL_INCLUDES_INTTYPES])dnl 2784 AC_MSG_CHECKING([constant suffix string for curl_off_t]) 2785 # 2786 curl_suffix_curl_off_t="unknown" 2787 curl_suffix_curl_off_tu="unknown" 2788 # 2789 case XC_SH_TR_SH([$1]) in 2790 long_long | __longlong | __longlong_t) 2791 tst_suffixes="LL::" 2792 ;; 2793 long) 2794 tst_suffixes="L::" 2795 ;; 2796 int) 2797 tst_suffixes="::" 2798 ;; 2799 __int64 | int64_t) 2800 tst_suffixes="LL:i64::" 2801 ;; 2802 __int32 | int32_t) 2803 tst_suffixes="L:i32::" 2804 ;; 2805 __int16 | int16_t) 2806 tst_suffixes="L:i16::" 2807 ;; 2808 *) 2809 AC_MSG_ERROR([unexpected data type $1]) 2810 ;; 2811 esac 2812 # 2813 old_IFS=$IFS; IFS=':' 2814 for tmp_ssuf in $tst_suffixes ; do 2815 IFS=$old_IFS 2816 if test "x$curl_suffix_curl_off_t" = "xunknown"; then 2817 case $tmp_ssuf in 2818 i64 | i32 | i16) 2819 tmp_usuf="u$tmp_ssuf" 2820 ;; 2821 LL | L) 2822 tmp_usuf="U$tmp_ssuf" 2823 ;; 2824 *) 2825 tmp_usuf="" 2826 ;; 2827 esac 2828 AC_COMPILE_IFELSE([ 2829 AC_LANG_PROGRAM([[ 2830 $curl_includes_inttypes 2831 typedef $1 new_t; 2832 ]],[[ 2833 new_t s1; 2834 new_t s2; 2835 s1 = -10$tmp_ssuf ; 2836 s2 = 20$tmp_ssuf ; 2837 if(s1 > s2) 2838 return 1; 2839 ]]) 2840 ],[ 2841 curl_suffix_curl_off_t="$tmp_ssuf" 2842 curl_suffix_curl_off_tu="$tmp_usuf" 2843 ]) 2844 fi 2845 done 2846 IFS=$old_IFS 2847 # 2848 if test "x$curl_suffix_curl_off_t" = "xunknown"; then 2849 AC_MSG_ERROR([cannot find constant suffix string for curl_off_t.]) 2850 else 2851 AC_MSG_RESULT([$curl_suffix_curl_off_t]) 2852 AC_MSG_CHECKING([constant suffix string for unsigned curl_off_t]) 2853 AC_MSG_RESULT([$curl_suffix_curl_off_tu]) 2854 fi 2855 # 2856]) 2857 2858 2859dnl CURL_CONFIGURE_CURL_OFF_T 2860dnl ------------------------------------------------- 2861dnl Find out suitable curl_off_t data type definition and associated 2862dnl items, and make the appropriate definitions used in template file 2863dnl include/curl/curlbuild.h.in to properly configure the library. 2864 2865AC_DEFUN([CURL_CONFIGURE_CURL_OFF_T], [ 2866 AC_REQUIRE([CURL_INCLUDES_INTTYPES])dnl 2867 # 2868 AC_BEFORE([$0],[AC_SYS_LARGEFILE])dnl 2869 AC_BEFORE([$0],[CURL_CONFIGURE_REENTRANT])dnl 2870 AC_BEFORE([$0],[CURL_CHECK_AIX_ALL_SOURCE])dnl 2871 # 2872 if test -z "$SED"; then 2873 AC_MSG_ERROR([SED not set. Cannot continue without SED being set.]) 2874 fi 2875 # 2876 AC_CHECK_SIZEOF(long) 2877 AC_CHECK_SIZEOF(void*) 2878 # 2879 if test -z "$ac_cv_sizeof_long" || 2880 test "$ac_cv_sizeof_long" -eq "0"; then 2881 AC_MSG_ERROR([cannot find out size of long.]) 2882 fi 2883 if test -z "$ac_cv_sizeof_voidp" || 2884 test "$ac_cv_sizeof_voidp" -eq "0"; then 2885 AC_MSG_ERROR([cannot find out size of void*.]) 2886 fi 2887 # 2888 x_LP64_long="" 2889 x_LP32_long="" 2890 # 2891 if test "$ac_cv_sizeof_long" -eq "8" && 2892 test "$ac_cv_sizeof_voidp" -ge "8"; then 2893 x_LP64_long="long" 2894 elif test "$ac_cv_sizeof_long" -eq "4" && 2895 test "$ac_cv_sizeof_voidp" -ge "4"; then 2896 x_LP32_long="long" 2897 fi 2898 # 2899 dnl DO_CURL_OFF_T_CHECK results are stored in next 3 vars 2900 # 2901 curl_typeof_curl_off_t="unknown" 2902 curl_sizeof_curl_off_t="unknown" 2903 curl_format_curl_off_t="unknown" 2904 curl_format_curl_off_tu="unknown" 2905 # 2906 if test "$curl_typeof_curl_off_t" = "unknown"; then 2907 AC_MSG_CHECKING([for 64-bit curl_off_t data type]) 2908 for t8 in \ 2909 "$x_LP64_long" \ 2910 'int64_t' \ 2911 '__int64' \ 2912 'long long' \ 2913 '__longlong' \ 2914 '__longlong_t' ; do 2915 DO_CURL_OFF_T_CHECK([$t8], [8]) 2916 done 2917 AC_MSG_RESULT([$curl_typeof_curl_off_t]) 2918 fi 2919 if test "$curl_typeof_curl_off_t" = "unknown"; then 2920 AC_MSG_CHECKING([for 32-bit curl_off_t data type]) 2921 for t4 in \ 2922 "$x_LP32_long" \ 2923 'int32_t' \ 2924 '__int32' \ 2925 'int' ; do 2926 DO_CURL_OFF_T_CHECK([$t4], [4]) 2927 done 2928 AC_MSG_RESULT([$curl_typeof_curl_off_t]) 2929 fi 2930 if test "$curl_typeof_curl_off_t" = "unknown"; then 2931 AC_MSG_ERROR([cannot find data type for curl_off_t.]) 2932 fi 2933 # 2934 AC_MSG_CHECKING([size of curl_off_t]) 2935 AC_MSG_RESULT([$curl_sizeof_curl_off_t]) 2936 # 2937 AC_MSG_CHECKING([formatting string directive for curl_off_t]) 2938 if test "$curl_format_curl_off_t" != "unknown"; then 2939 x_pull_headers="yes" 2940 curl_format_curl_off_t=`echo "$curl_format_curl_off_t" | "$SED" 's/[["]]//g'` 2941 curl_format_curl_off_tu=`echo "$curl_format_curl_off_t" | "$SED" 's/i$/u/'` 2942 curl_format_curl_off_tu=`echo "$curl_format_curl_off_tu" | "$SED" 's/d$/u/'` 2943 curl_format_curl_off_tu=`echo "$curl_format_curl_off_tu" | "$SED" 's/D$/U/'` 2944 else 2945 x_pull_headers="no" 2946 case XC_SH_TR_SH([$curl_typeof_curl_off_t]) in 2947 long_long | __longlong | __longlong_t) 2948 curl_format_curl_off_t="lld" 2949 curl_format_curl_off_tu="llu" 2950 ;; 2951 long) 2952 curl_format_curl_off_t="ld" 2953 curl_format_curl_off_tu="lu" 2954 ;; 2955 int) 2956 curl_format_curl_off_t="d" 2957 curl_format_curl_off_tu="u" 2958 ;; 2959 __int64) 2960 curl_format_curl_off_t="I64d" 2961 curl_format_curl_off_tu="I64u" 2962 ;; 2963 __int32) 2964 curl_format_curl_off_t="I32d" 2965 curl_format_curl_off_tu="I32u" 2966 ;; 2967 __int16) 2968 curl_format_curl_off_t="I16d" 2969 curl_format_curl_off_tu="I16u" 2970 ;; 2971 *) 2972 AC_MSG_ERROR([cannot find print format string for curl_off_t.]) 2973 ;; 2974 esac 2975 fi 2976 AC_MSG_RESULT(["$curl_format_curl_off_t"]) 2977 # 2978 AC_MSG_CHECKING([formatting string directive for unsigned curl_off_t]) 2979 AC_MSG_RESULT(["$curl_format_curl_off_tu"]) 2980 # 2981 DO_CURL_OFF_T_SUFFIX_CHECK([$curl_typeof_curl_off_t]) 2982 # 2983 if test "$x_pull_headers" = "yes"; then 2984 if test "x$ac_cv_header_sys_types_h" = "xyes"; then 2985 CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_TYPES_H]) 2986 fi 2987 if test "x$ac_cv_header_stdint_h" = "xyes"; then 2988 CURL_DEFINE_UNQUOTED([CURL_PULL_STDINT_H]) 2989 fi 2990 if test "x$ac_cv_header_inttypes_h" = "xyes"; then 2991 CURL_DEFINE_UNQUOTED([CURL_PULL_INTTYPES_H]) 2992 fi 2993 fi 2994 # 2995 CURL_DEFINE_UNQUOTED([CURL_TYPEOF_CURL_OFF_T], [$curl_typeof_curl_off_t]) 2996 CURL_DEFINE_UNQUOTED([CURL_FORMAT_CURL_OFF_T], ["$curl_format_curl_off_t"]) 2997 CURL_DEFINE_UNQUOTED([CURL_FORMAT_CURL_OFF_TU], ["$curl_format_curl_off_tu"]) 2998 CURL_DEFINE_UNQUOTED([CURL_FORMAT_OFF_T], ["%$curl_format_curl_off_t"]) 2999 CURL_DEFINE_UNQUOTED([CURL_SIZEOF_CURL_OFF_T], [$curl_sizeof_curl_off_t]) 3000 CURL_DEFINE_UNQUOTED([CURL_SUFFIX_CURL_OFF_T], [$curl_suffix_curl_off_t]) 3001 CURL_DEFINE_UNQUOTED([CURL_SUFFIX_CURL_OFF_TU], [$curl_suffix_curl_off_tu]) 3002 # 3003]) 3004 3005 3006dnl CURL_CHECK_WIN32_LARGEFILE 3007dnl ------------------------------------------------- 3008dnl Check if curl's WIN32 large file will be used 3009 3010AC_DEFUN([CURL_CHECK_WIN32_LARGEFILE], [ 3011 AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl 3012 AC_MSG_CHECKING([whether build target supports WIN32 file API]) 3013 curl_win32_file_api="no" 3014 if test "$curl_cv_header_windows_h" = "yes"; then 3015 if test x"$enable_largefile" != "xno"; then 3016 AC_COMPILE_IFELSE([ 3017 AC_LANG_PROGRAM([[ 3018 ]],[[ 3019#if !defined(_WIN32_WCE) && \ 3020 (defined(__MINGW32__) || \ 3021 (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64)))) 3022 int dummy=1; 3023#else 3024 WIN32 large file API not supported. 3025#endif 3026 ]]) 3027 ],[ 3028 curl_win32_file_api="win32_large_files" 3029 ]) 3030 fi 3031 if test "$curl_win32_file_api" = "no"; then 3032 AC_COMPILE_IFELSE([ 3033 AC_LANG_PROGRAM([[ 3034 ]],[[ 3035#if defined(_WIN32_WCE) || defined(__MINGW32__) || defined(_MSC_VER) 3036 int dummy=1; 3037#else 3038 WIN32 small file API not supported. 3039#endif 3040 ]]) 3041 ],[ 3042 curl_win32_file_api="win32_small_files" 3043 ]) 3044 fi 3045 fi 3046 case "$curl_win32_file_api" in 3047 win32_large_files) 3048 AC_MSG_RESULT([yes (large file enabled)]) 3049 AC_DEFINE_UNQUOTED(USE_WIN32_LARGE_FILES, 1, 3050 [Define to 1 if you are building a Windows target with large file support.]) 3051 ;; 3052 win32_small_files) 3053 AC_MSG_RESULT([yes (large file disabled)]) 3054 AC_DEFINE_UNQUOTED(USE_WIN32_SMALL_FILES, 1, 3055 [Define to 1 if you are building a Windows target without large file support.]) 3056 ;; 3057 *) 3058 AC_MSG_RESULT([no]) 3059 ;; 3060 esac 3061]) 3062 3063dnl CURL_EXPORT_PCDIR ($pcdir) 3064dnl ------------------------ 3065dnl if $pcdir is not empty, set PKG_CONFIG_LIBDIR to $pcdir and export 3066dnl 3067dnl we need this macro since pkg-config distinguishes among empty and unset 3068dnl variable while checking PKG_CONFIG_LIBDIR 3069dnl 3070 3071AC_DEFUN([CURL_EXPORT_PCDIR], [ 3072 if test -n "$1"; then 3073 PKG_CONFIG_LIBDIR="$1" 3074 export PKG_CONFIG_LIBDIR 3075 fi 3076]) 3077 3078dnl CURL_CHECK_PKGCONFIG ($module, [$pcdir]) 3079dnl ------------------------ 3080dnl search for the pkg-config tool. Set the PKGCONFIG variable to hold the 3081dnl path to it, or 'no' if not found/present. 3082dnl 3083dnl If pkg-config is present, check that it has info about the $module or 3084dnl return "no" anyway! 3085dnl 3086dnl Optionally PKG_CONFIG_LIBDIR may be given as $pcdir. 3087dnl 3088 3089AC_DEFUN([CURL_CHECK_PKGCONFIG], [ 3090 if test -n "$PKG_CONFIG"; then 3091 PKGCONFIG="$PKG_CONFIG" 3092 else 3093 AC_PATH_TOOL([PKGCONFIG], [pkg-config], [no], 3094 [$PATH:/usr/bin:/usr/local/bin]) 3095 fi 3096 3097 if test "x$PKGCONFIG" != "xno"; then 3098 AC_MSG_CHECKING([for $1 options with pkg-config]) 3099 dnl ask pkg-config about $1 3100 itexists=`CURL_EXPORT_PCDIR([$2]) dnl 3101 $PKGCONFIG --exists $1 >/dev/null 2>&1 && echo 1` 3102 3103 if test -z "$itexists"; then 3104 dnl pkg-config does not have info about the given module! set the 3105 dnl variable to 'no' 3106 PKGCONFIG="no" 3107 AC_MSG_RESULT([no]) 3108 else 3109 AC_MSG_RESULT([found]) 3110 fi 3111 fi 3112]) 3113 3114 3115dnl CURL_GENERATE_CONFIGUREHELP_PM 3116dnl ------------------------------------------------- 3117dnl Generate test harness configurehelp.pm module, defining and 3118dnl initializing some perl variables with values which are known 3119dnl when the configure script runs. For portability reasons, test 3120dnl harness needs information on how to run the C preprocessor. 3121 3122AC_DEFUN([CURL_GENERATE_CONFIGUREHELP_PM], [ 3123 AC_REQUIRE([AC_PROG_CPP])dnl 3124 tmp_cpp=`eval echo "$ac_cpp" 2>/dev/null` 3125 if test -z "$tmp_cpp"; then 3126 tmp_cpp='cpp' 3127 fi 3128 cat >./tests/configurehelp.pm <<_EOF 3129[@%:@] This is a generated file. Do not edit. 3130 3131package configurehelp; 3132 3133use strict; 3134use warnings; 3135use Exporter; 3136 3137use vars qw( 3138 @ISA 3139 @EXPORT_OK 3140 \$Cpreprocessor 3141 ); 3142 3143@ISA = qw(Exporter); 3144 3145@EXPORT_OK = qw( 3146 \$Cpreprocessor 3147 ); 3148 3149\$Cpreprocessor = '$tmp_cpp'; 3150 31511; 3152_EOF 3153]) 3154 3155dnl CURL_CPP_P 3156dnl 3157dnl Check if $cpp -P should be used for extract define values due to gcc 5 3158dnl splitting up strings and defines between line outputs. gcc by default 3159dnl (without -P) will show TEST EINVAL TEST as 3160dnl 3161dnl # 13 "conftest.c" 3162dnl TEST 3163dnl # 13 "conftest.c" 3 4 3164dnl 22 3165dnl # 13 "conftest.c" 3166dnl TEST 3167 3168AC_DEFUN([CURL_CPP_P], [ 3169 AC_MSG_CHECKING([if cpp -P is needed]) 3170 AC_EGREP_CPP([TEST.*TEST], [ 3171 #include <errno.h> 3172TEST EINVAL TEST 3173 ], [cpp=no], [cpp=yes]) 3174 AC_MSG_RESULT([$cpp]) 3175 3176 dnl we need cpp -P so check if it works then 3177 if test "x$cpp" = "xyes"; then 3178 AC_MSG_CHECKING([if cpp -P works]) 3179 OLDCPPFLAGS=$CPPFLAGS 3180 CPPFLAGS="$CPPFLAGS -P" 3181 AC_EGREP_CPP([TEST.*TEST], [ 3182 #include <errno.h> 3183TEST EINVAL TEST 3184 ], [cpp_p=yes], [cpp_p=no]) 3185 AC_MSG_RESULT([$cpp_p]) 3186 3187 if test "x$cpp_p" = "xno"; then 3188 AC_MSG_WARN([failed to figure out cpp -P alternative]) 3189 # without -P 3190 CPPPFLAG="" 3191 else 3192 # with -P 3193 CPPPFLAG="-P" 3194 fi 3195 dnl restore CPPFLAGS 3196 CPPFLAGS=$OLDCPPFLAGS 3197 else 3198 # without -P 3199 CPPPFLAG="" 3200 fi 3201]) 3202 3203 3204dnl CURL_MAC_CFLAGS 3205dnl 3206dnl Check if -mmacosx-version-min, -miphoneos-version-min or any 3207dnl similar are set manually, otherwise do. And set 3208dnl -Werror=partial-availability. 3209dnl 3210 3211AC_DEFUN([CURL_MAC_CFLAGS], [ 3212 3213 tst_cflags="no" 3214 case $host_os in 3215 darwin*) 3216 tst_cflags="yes" 3217 ;; 3218 esac 3219 3220 AC_MSG_CHECKING([for good-to-use Mac CFLAGS]) 3221 AC_MSG_RESULT([$tst_cflags]); 3222 3223 if test "$tst_cflags" = "yes"; then 3224 AC_MSG_CHECKING([for *version-min in CFLAGS]) 3225 min="" 3226 if test -z "$(echo $CFLAGS | grep m.*os.*-version-min)"; then 3227 min="-mmacosx-version-min=10.8" 3228 CFLAGS="$CFLAGS $min" 3229 fi 3230 if test -z "$min"; then 3231 AC_MSG_RESULT([set by user]) 3232 else 3233 AC_MSG_RESULT([$min set]) 3234 fi 3235 3236 old_CFLAGS=$CFLAGS 3237 CFLAGS="$CFLAGS -Werror=partial-availability" 3238 AC_MSG_CHECKING([whether $CC accepts -Werror=partial-availability]) 3239 AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], 3240 [AC_MSG_RESULT([yes])], 3241 [AC_MSG_RESULT([no]) 3242 CFLAGS=$old_CFLAGS]) 3243 fi 3244 3245]) 3246