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])]) ]) 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 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 ) 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 \ ) 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 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 ) 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 \ tiny/Makefile )