dnl $Id$ dnl Process this file with autoconf to produce a configure script. AC_INIT(lib/urldata.h) AM_CONFIG_HEADER(config.h src/config.h) VERSION=`sed -ne 's/^#define LIBCURL_VERSION "\(.*\)"/\1/p' ${srcdir}/include/curl/curl.h` AM_INIT_AUTOMAKE(curl,$VERSION) AM_PROG_LIBTOOL dnl dnl Detect the canonical host and target build environment dnl AC_CANONICAL_HOST AC_CANONICAL_TARGET dnl Checks for programs. AC_PROG_CC dnl Check for AIX weirdos AC_AIX dnl check for how to do large files AC_SYS_LARGEFILE dnl The install stuff has already been taken care of by the automake stuff dnl AC_PROG_INSTALL AC_PROG_MAKE_SET dnl ************************************************************ dnl lame option to switch on debug options dnl AC_MSG_CHECKING([whether to enable debug options]) AC_ARG_ENABLE(debug, [ --enable-debug Enable pedantic debug options --disable-debug Disable debug options], [ case "$enableval" in no) AC_MSG_RESULT(no) ;; *) AC_MSG_RESULT(yes) CPPFLAGS="$CPPFLAGS -DMALLOCDEBUG" CFLAGS="-Wall -pedantic -g" ;; esac ], AC_MSG_RESULT(no) ) dnl dnl check for working getaddrinfo() dnl AC_DEFUN(CURL_CHECK_WORKING_GETADDRINFO,[ AC_CACHE_CHECK(for working getaddrinfo, ac_cv_working_getaddrinfo,[ AC_TRY_RUN( [ #include #include #include void main(void) { struct addrinfo hints, *ai; int error; memset(&hints, 0, sizeof(hints)); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; error = getaddrinfo("127.0.0.1", "8080", &hints, &ai); if (error) { exit(1); } else { exit(0); } } ],[ ac_cv_working_getaddrinfo="yes" ],[ ac_cv_working_getaddrinfo="no" ],[ ac_cv_working_getaddrinfo="yes" ])]) if test "$ac_cv_working_getaddrinfo" = "yes"; then AC_DEFINE(HAVE_GETADDRINFO, 1, [Define if getaddrinfo exists and works]) AC_DEFINE(ENABLE_IPV6, 1, [Define if you want to enable IPv6 support]) fi ]) AC_DEFUN(CURL_CHECK_LOCALTIME_R, [ dnl check for a few thread-safe functions AC_CHECK_FUNCS(localtime_r,[ AC_MSG_CHECKING(whether localtime_r is declared) AC_EGREP_CPP(localtime_r,[ #include ],[ AC_MSG_RESULT(yes)],[ AC_MSG_RESULT(no) AC_MSG_CHECKING(whether localtime_r with -D_REENTRANT is declared) AC_EGREP_CPP(localtime_r,[ #define _REENTRANT #include ],[ AC_DEFINE(NEED_REENTRANT) AC_MSG_RESULT(yes)], AC_MSG_RESULT(no))])]) ]) AC_DEFUN(CURL_CHECK_INET_NTOA_R, [ dnl determine if function definition for inet_ntoa_r exists. AC_CHECK_FUNCS(inet_ntoa_r,[ AC_MSG_CHECKING(whether inet_ntoa_r is declared) AC_EGREP_CPP(inet_ntoa_r,[ #include ],[ AC_DEFINE(HAVE_INET_NTOA_R_DECL) AC_MSG_RESULT(yes)],[ AC_MSG_RESULT(no) AC_MSG_CHECKING(whether inet_ntoa_r with -D_REENTRANT is declared) AC_EGREP_CPP(inet_ntoa_r,[ #define _REENTRANT #include ],[ AC_DEFINE(HAVE_INET_NTOA_R_DECL) AC_DEFINE(NEED_REENTRANT) AC_MSG_RESULT(yes)], AC_MSG_RESULT(no))])]) ]) AC_DEFUN(CURL_CHECK_GETHOSTBYADDR_R, [ dnl check for number of arguments to gethostbyaddr_r. it might take dnl either 5, 7, or 8 arguments. AC_CHECK_FUNCS(gethostbyaddr_r,[ AC_MSG_CHECKING(if gethostbyaddr_r takes 5 arguments) AC_TRY_COMPILE([ #include #include ],[ char * address; int length; int type; struct hostent h; struct hostent_data hdata; int rc; rc = gethostbyaddr_r(address, length, type, &h, &hdata);],[ AC_MSG_RESULT(yes) AC_DEFINE(HAVE_GETHOSTBYADDR_R_5) ac_cv_gethostbyaddr_args=5],[ AC_MSG_RESULT(no) AC_MSG_CHECKING(if gethostbyaddr_r with -D_REENTRANT takes 5 arguments) AC_TRY_COMPILE([ #define _REENTRANT #include #include ],[ char * address; int length; int type; struct hostent h; struct hostent_data hdata; int rc; rc = gethostbyaddr_r(address, length, type, &h, &hdata);],[ AC_MSG_RESULT(yes) AC_DEFINE(HAVE_GETHOSTBYADDR_R_5) AC_DEFINE(NEED_REENTRANT) ac_cv_gethostbyaddr_args=5],[ AC_MSG_RESULT(no) AC_MSG_CHECKING(if gethostbyaddr_r takes 7 arguments) AC_TRY_COMPILE([ #include #include ],[ char * address; int length; int type; struct hostent h; char buffer[8192]; int h_errnop; struct hostent * hp; hp = gethostbyaddr_r(address, length, type, &h, buffer, 8192, &h_errnop);],[ AC_MSG_RESULT(yes) AC_DEFINE(HAVE_GETHOSTBYADDR_R_7) ac_cv_gethostbyaddr_args=7],[ AC_MSG_RESULT(no) AC_MSG_CHECKING(if gethostbyaddr_r takes 8 arguments) AC_TRY_COMPILE([ #include #include ],[ char * address; int length; int type; struct hostent h; char buffer[8192]; int h_errnop; struct hostent * hp; int rc; rc = gethostbyaddr_r(address, length, type, &h, buffer, 8192, &hp, &h_errnop);],[ AC_MSG_RESULT(yes) AC_DEFINE(HAVE_GETHOSTBYADDR_R_8) ac_cv_gethostbyaddr_args=8],[ AC_MSG_RESULT(no) have_missing_r_funcs="$have_missing_r_funcs gethostbyaddr_r"])])])])]) ]) AC_DEFUN(CURL_CHECK_GETHOSTBYNAME_R, [ dnl check for number of arguments to gethostbyname_r. it might take dnl either 3, 5, or 6 arguments. AC_CHECK_FUNCS(gethostbyname_r,[ AC_MSG_CHECKING(if gethostbyname_r takes 3 arguments) AC_TRY_RUN([ #include #include #include int main () { struct hostent h; struct hostent_data hdata; char *name = "localhost"; int rc; memset(&h, 0, sizeof(struct hostent)); memset(&hdata, 0, sizeof(struct hostent_data)); rc = gethostbyname_r(name, &h, &hdata); exit (rc != 0 ? 1 : 0); }],[ AC_MSG_RESULT(yes) AC_DEFINE(HAVE_GETHOSTBYNAME_R_3) ac_cv_gethostbyname_args=3],[ AC_MSG_RESULT(no) AC_MSG_CHECKING(if gethostbyname_r with -D_REENTRANT takes 3 arguments) AC_TRY_RUN([ #define _REENTRANT #include #include #include int main () { struct hostent h; struct hostent_data hdata; char *name = "localhost"; int rc; memset(&h, 0, sizeof(struct hostent)); memset(&hdata, 0, sizeof(struct hostent_data)); rc = gethostbyname_r(name, &h, &hdata); exit (rc != 0 ? 1 : 0); }],[ AC_MSG_RESULT(yes) AC_DEFINE(HAVE_GETHOSTBYNAME_R_3) AC_DEFINE(NEED_REENTRANT) ac_cv_gethostbyname_args=3],[ AC_MSG_RESULT(no) AC_MSG_CHECKING(if gethostbyname_r takes 5 arguments) AC_TRY_RUN([ #include #include int main () { struct hostent *hp; struct hostent h; char *name = "localhost"; char buffer[8192]; int h_errno; hp = gethostbyname_r(name, &h, buffer, 8192, &h_errno); exit (hp == NULL ? 1 : 0); }],[ AC_MSG_RESULT(yes) AC_DEFINE(HAVE_GETHOSTBYNAME_R_5) ac_cv_gethostbyname_args=5],[ AC_MSG_RESULT(no) AC_MSG_CHECKING(if gethostbyname_r takes 6 arguments) AC_TRY_RUN([ #include #include int main () { struct hostent h; struct hostent *hp; char *name = "localhost"; char buf[8192]; int rc; int h_errno; rc = gethostbyname_r(name, &h, buf, 8192, &hp, &h_errno); exit (rc != 0 ? 1 : 0); }],[ AC_MSG_RESULT(yes) AC_DEFINE(HAVE_GETHOSTBYNAME_R_6) ac_cv_gethostbyname_args=6],[ AC_MSG_RESULT(no) have_missing_r_funcs="$have_missing_r_funcs gethostbyname_r"], [ac_cv_gethostbyname_args=0])], [ac_cv_gethostbyname_args=0])], [ac_cv_gethostbyname_args=0])], [ac_cv_gethostbyname_args=0])]) if test "$ac_cv_func_gethostbyname_r" = "yes"; then if test "$ac_cv_gethostbyname_args" = "0"; then dnl there's a gethostbyname_r() function, but we don't know how dnl many arguments it wants! AC_MSG_ERROR([couldn't figure out how to use gethostbyname_r()]) fi fi ]) dnl ********************************************************************** dnl Checks for IPv6 dnl ********************************************************************** AC_MSG_CHECKING([whether to enable ipv6]) AC_ARG_ENABLE(ipv6, [ --enable-ipv6 Enable ipv6 (with ipv4) support --disable-ipv6 Disable ipv6 support], [ case "$enableval" in no) AC_MSG_RESULT(no) ipv6=no ;; *) AC_MSG_RESULT(yes) ipv6=yes ;; esac ], AC_TRY_RUN([ /* is AF_INET6 available? */ #include #include main() { if (socket(AF_INET6, SOCK_STREAM, 0) < 0) exit(1); else exit(0); } ], AC_MSG_RESULT(yes) ipv6=yes, AC_MSG_RESULT(no) ipv6=no, AC_MSG_RESULT(no) ipv6=no )) if test "$ipv6" = "yes"; then CURL_CHECK_WORKING_GETADDRINFO fi dnl ********************************************************************** dnl Checks for libraries. dnl ********************************************************************** dnl gethostbyname in the nsl lib? AC_CHECK_FUNC(gethostbyname, , AC_CHECK_LIB(nsl, gethostbyname)) if test "$ac_cv_lib_nsl_gethostbyname" != "yes" -a "$ac_cv_func_gethostbyname" != "yes"; then dnl gethostbyname in the socket lib? AC_CHECK_FUNC(gethostbyname, , AC_CHECK_LIB(socket, gethostbyname)) fi dnl At least one system has been identified to require BOTH nsl and dnl socket libs to link properly. if test "$ac_cv_lib_nsl_gethostbyname" = "$ac_cv_func_gethostbyname"; then AC_MSG_CHECKING([trying both nsl and socket libs]) my_ac_save_LIBS=$LIBS LIBS="-lnsl -lsocket $LIBS" AC_TRY_LINK( , [gethostbyname();], my_ac_link_result=success, my_ac_link_result=failure ) if test "$my_ac_link_result" = "failure"; then AC_MSG_RESULT([no]) AC_MSG_ERROR([couldn't find libraries for gethostbyname()]) dnl restore LIBS LIBS=$my_ac_save_LIBS else AC_MSG_RESULT([yes]) fi fi dnl resolve lib? AC_CHECK_FUNC(strcasecmp, , AC_CHECK_LIB(resolve, strcasecmp)) if test "$ac_cv_lib_resolve_strcasecmp" = "$ac_cv_func_strcasecmp"; then AC_CHECK_LIB(resolve, strcasecmp, [LIBS="-lresolve $LIBS"], , -lnsl) fi dnl socket lib? AC_CHECK_FUNC(connect, , AC_CHECK_LIB(socket, connect)) dnl ucb lib? AC_CHECK_FUNC(gethostname, , AC_CHECK_LIB(ucb, gethostname)) dnl dl lib? AC_CHECK_FUNC(dlopen, , AC_CHECK_LIB(dl, dlopen)) dnl ********************************************************************** dnl Check for the random seed preferences dnl ********************************************************************** AC_ARG_WITH(egd-socket, [ --with-egd-socket=FILE Entropy Gathering Daemon socket pathname], [ EGD_SOCKET="$withval" ] ) if test -n "$EGD_SOCKET" ; then AC_DEFINE_UNQUOTED(EGD_SOCKET, "$EGD_SOCKET") fi dnl Check for user-specified random device AC_ARG_WITH(random, [ --with-random=FILE read randomness from FILE (default=/dev/urandom)], [ RANDOM_FILE="$withval" ], [ dnl Check for random device AC_CHECK_FILE("/dev/urandom", [ RANDOM_FILE="/dev/urandom"; ] ) ] ) if test -n "$RANDOM_FILE" ; then AC_SUBST(RANDOM_FILE) AC_DEFINE_UNQUOTED(RANDOM_FILE, "$RANDOM_FILE") fi dnl ********************************************************************** dnl Check for the presence of Kerberos4 libraries and headers dnl ********************************************************************** AC_ARG_WITH(krb4-includes, [ --with-krb4-includes[=DIR] Specify location of kerberos4 headers],[ CPPFLAGS="$CPPFLAGS -I$withval" KRB4INC="$withval" want_krb4=yes ]) AC_ARG_WITH(krb4-libs, [ --with-krb4-libs[=DIR] Specify location of kerberos4 libs],[ LDFLAGS="$LDFLAGS -L$withval" KRB4LIB="$withval" want_krb4=yes ]) OPT_KRB4=off AC_ARG_WITH(krb4,dnl [ --with-krb4[=DIR] where to look for Kerberos4],[ OPT_KRB4="$withval" if test X"$OPT_KRB4" != Xyes then LDFLAGS="$LDFLAGS -L$OPT_KRB4/lib" KRB4LIB="$OPT_KRB4/lib" CPPFLAGS="$CPPFLAGS -I$OPT_KRB4/include" KRB4INC="$OPT_KRB4/include" fi want_krb4="yes" ]) AC_MSG_CHECKING([if Kerberos4 support is requested]) if test "$want_krb4" = yes then if test "$ipv6" = "yes"; then echo krb4 is not compatible with IPv6 exit 1 fi AC_MSG_RESULT(yes) dnl Check for & handle argument to --with-krb4 AC_MSG_CHECKING(where to look for Kerberos4) if test X"$OPT_KRB4" = Xyes then AC_MSG_RESULT([defaults]) else AC_MSG_RESULT([libs in $KRB4LIB, headers in $KRB4INC]) fi dnl Check for DES library AC_CHECK_LIB(des, des_pcbc_encrypt, [ AC_CHECK_HEADERS(des.h) dnl resolv lib? AC_CHECK_FUNC(res_search, , AC_CHECK_LIB(resolv, res_search)) dnl Check for the Kerberos4 library AC_CHECK_LIB(krb, krb_net_read, [ dnl Check for header files AC_CHECK_HEADERS(krb.h) dnl we found the required libraries, add to LIBS LIBS="-lkrb -ldes $LIBS" dnl Check for function krb_get_our_ip_for_realm dnl this is needed for NAT networks AC_CHECK_FUNCS(krb_get_our_ip_for_realm) dnl add define KRB4 AC_DEFINE(KRB4) dnl the krb4 stuff needs a strlcpy() AC_CHECK_FUNCS(strlcpy) ]) ]) else AC_MSG_RESULT(no) fi dnl ********************************************************************** dnl Check for the presence of SSL libraries and headers dnl ********************************************************************** dnl Default to compiler & linker defaults for SSL files & libraries. OPT_SSL=off AC_ARG_WITH(ssl,dnl [ --with-ssl[=DIR] where to look for SSL [compiler/linker default paths] DIR points to the SSL installation [/usr/local/ssl]], OPT_SSL=$withval ) if test X"$OPT_SSL" = Xno then AC_MSG_WARN(SSL/https support disabled) else dnl Check for & handle argument to --with-ssl. AC_MSG_CHECKING(where to look for SSL) if test X"$OPT_SSL" = Xoff then AC_MSG_RESULT([defaults (or given in environment)]) else test X"$OPT_SSL" = Xyes && OPT_SSL=/usr/local/ssl dnl LIBS="$LIBS -L$OPT_SSL/lib" LDFLAGS="$LDFLAGS -L$OPT_SSL/lib" CPPFLAGS="$CPPFLAGS -I$OPT_SSL/include/openssl -I$OPT_SSL/include" AC_MSG_RESULT([$OPT_SSL]) fi dnl check for crypto libs (part of SSLeay) AC_CHECK_LIB(crypto, CRYPTO_lock) if test $ac_cv_lib_crypto_CRYPTO_lock = yes; then dnl This is only reasonable to do if crypto actually is there: check for dnl SSL libs NOTE: it is important to do this AFTER the crypto lib AC_CHECK_LIB(ssl, SSL_connect) if test "$ac_cv_lib_ssl_SSL_connect" != yes; then dnl we didn't find the SSL lib, try the RSAglue/rsaref stuff AC_MSG_CHECKING(for ssl with RSAglue/rsaref libs in use); OLIBS=$LIBS LIBS="$LIBS -lRSAglue -lrsaref" AC_CHECK_LIB(ssl, SSL_connect) if test "$ac_cv_lib_ssl_SSL_connect" != yes; then dnl still no SSL_connect AC_MSG_RESULT(no) LIBS=$OLIBS else AC_MSG_RESULT(yes) fi fi dnl Check for SSLeay headers AC_CHECK_HEADERS(openssl/x509.h openssl/rsa.h openssl/crypto.h openssl/pem.h openssl/ssl.h openssl/err.h) if test $ac_cv_header_openssl_x509_h = no; then AC_CHECK_HEADERS(x509.h rsa.h crypto.h pem.h ssl.h err.h) fi fi dnl these can only exist if openssl exists AC_CHECK_FUNCS( RAND_status \ RAND_screen \ RAND_egd ) fi dnl ********************************************************************** dnl Check for the presence of ZLIB libraries and headers dnl ********************************************************************** dnl Default to compiler & linker defaults for files & libraries. dnl OPT_ZLIB=no dnl AC_ARG_WITH(zlib,dnl dnl [ --with-zlib[=DIR] where to look for ZLIB [compiler/linker default paths] dnl DIR points to the ZLIB installation prefix [/usr/local]], dnl OPT_ZLIB=$withval, dnl ) dnl Check for & handle argument to --with-zlib. dnl dnl NOTE: We *always* look for ZLIB headers & libraries, all this option dnl does is change where we look (by adjusting LIBS and CPPFLAGS.) dnl dnl AC_MSG_CHECKING(where to look for ZLIB) dnl if test X"$OPT_ZLIB" = Xno dnl then dnl AC_MSG_RESULT([defaults (or given in environment)]) dnl else dnl test X"$OPT_ZLIB" = Xyes && OPT_ZLIB=/usr/local dnl LIBS="$LIBS -L$OPT_ZLIB/lib" dnl CPPFLAGS="$CPPFLAGS -I$OPT_ZLIB/include" dnl AC_MSG_RESULT([$OPT_ZLIB]) dnl fi dnl z lib? dnl AC_CHECK_FUNC(gzread, , AC_CHECK_LIB(z, gzread)) dnl Default is to try the thread-safe versions of a few functions OPT_THREAD=on AC_ARG_ENABLE(thread,dnl [ --disable-thread tell configure to not look for thread-safe functions], OPT_THREAD=off ) if test X"$OPT_THREAD" = Xoff then AC_MSG_WARN(libcurl will not get built using thread-safe functions) AC_DEFINE(DISABLED_THREADSAFE, 1, \ Set to explicitly specify we don't want to use thread-safe functions) else dnl dig around for gethostbyname_r() CURL_CHECK_GETHOSTBYNAME_R() dnl dig around for gethostbyaddr_r() CURL_CHECK_GETHOSTBYADDR_R() dnl poke around for inet_ntoa_r() CURL_CHECK_INET_NTOA_R() dnl is there a localtime_r() CURL_CHECK_LOCALTIME_R() fi dnl ********************************************************************** dnl Back to "normal" configuring dnl ********************************************************************** dnl Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS( \ unistd.h \ malloc.h \ stdlib.h \ arpa/inet.h \ net/if.h \ netinet/in.h \ netinet/if_ether.h \ netdb.h \ sys/select.h \ sys/socket.h \ sys/sockio.h \ sys/stat.h \ sys/types.h \ sys/time.h \ getopt.h \ sys/param.h \ termios.h \ termio.h \ sgtty.h \ fcntl.h \ dlfcn.h \ alloca.h \ winsock.h \ time.h \ io.h \ pwd.h ) dnl Check for libz header dnl AC_CHECK_HEADERS(zlib.h) dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_TYPE_SIZE_T AC_HEADER_TIME # mprintf() checks: # check for 'long double' AC_CHECK_SIZEOF(long double, 8) # check for 'long long' AC_CHECK_SIZEOF(long long, 4) # check for ssize_t AC_CHECK_TYPE(ssize_t, int) dnl dnl We can't just AC_CHECK_TYPE() for socklen_t since it doesn't appear dnl in the standard headers. We egrep for it in the socket headers and dnl if it is used there we assume we have the type defined, otherwise dnl we search for it with AC_CHECK_TYPE() the "normal" way dnl if test "$ac_cv_header_sys_socket_h" = "yes"; then AC_MSG_CHECKING(for socklen_t in sys/socket.h) AC_EGREP_HEADER(socklen_t, sys/socket.h, socklen_t=yes AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) fi if test "$socklen_t" != "yes"; then # check for socklen_t the standard way if it wasn't found before AC_CHECK_TYPE(socklen_t, int) fi dnl Get system canonical name AC_CANONICAL_HOST AC_DEFINE_UNQUOTED(OS, "${host}") dnl Checks for library functions. dnl AC_PROG_GCC_TRADITIONAL AC_TYPE_SIGNAL dnl AC_FUNC_VPRINTF AC_CHECK_FUNCS( socket \ select \ strdup \ strstr \ strftime \ uname \ strcasecmp \ stricmp \ strcmpi \ gethostname \ gethostbyaddr \ getservbyname \ gettimeofday \ inet_addr \ inet_ntoa \ tcsetattr \ tcgetattr \ perror \ closesocket \ setvbuf \ sigaction \ signal \ getpass_r \ strlcat \ getpwuid \ geteuid ) dnl removed 'getpass' check on October 26, 2000 if test "$ac_cv_func_select" != "yes"; then AC_MSG_ERROR(Can't work without an existing select() function) fi if test "$ac_cv_func_socket" != "yes"; then AC_MSG_ERROR(Can't work without an existing socket() function) fi AC_PATH_PROG( PERL, perl, , $PATH:/usr/local/bin/perl:/usr/bin/:/usr/local/bin ) AC_SUBST(PERL) AC_PATH_PROGS( NROFF, gnroff nroff, , $PATH:/usr/bin/:/usr/local/bin ) AC_SUBST(NROFF) AC_PROG_YACC dnl AC_PATH_PROG( RANLIB, ranlib, /usr/bin/ranlib, dnl $PATH:/usr/bin/:/usr/local/bin ) dnl AC_SUBST(RANLIB) AC_OUTPUT( Makefile \ docs/Makefile \ docs/examples/Makefile \ include/Makefile \ include/curl/Makefile \ src/Makefile \ lib/Makefile \ tests/Makefile \ tests/data/Makefile \ packages/Makefile \ packages/Win32/Makefile \ packages/Linux/Makefile \ packages/Linux/RPM/Makefile \ packages/Linux/RPM/curl.spec \ packages/Linux/RPM/curl-ssl.spec \ perl/Makefile \ perl/Curl_easy/Makefile \ php/Makefile \ php/examples/Makefile )