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