dnl Template file for GNU Autoconf
-dnl Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+dnl Copyright (C) 1995, 1996, 1997, 2001 Free Software Foundation, Inc.
dnl This program is free software; you can redistribute it and/or modify
dnl it under the terms of the GNU General Public License as published by
[AC_DEFINE(HAVE_SOCKS)])
AC_ARG_WITH(ssl,
-[ --with-ssl[=SSL_ROOT] link with libssl [in SSL_ROOT/lib] for https: support])
+[ --with-ssl[=SSL-ROOT] link with SSL support [default=auto]
+ --without-ssl disable SSL autodetection])
AC_ARG_ENABLE(opie,
[ --disable-opie disable support for opie or s/key FTP login],
DEBUG=$enableval, DEBUG=yes)
test x"${DEBUG}" = xyes && AC_DEFINE(DEBUG)
+wget_need_md5=no
+
case "${USE_OPIE}${USE_DIGEST}" in
*yes*)
- MD5_OBJ='md5$o'
+ wget_need_md5=yes
esac
if test x"$USE_OPIE" = xyes; then
OPIE_OBJ='ftp-opie$o'
fi
-AC_SUBST(MD5_OBJ)
AC_SUBST(OPIE_OBJ)
dnl
dnl
AC_PROG_INSTALL
-dnl
-dnl Configure our included libtool and make sure it's regenerated when needed
-dnl
-AM_PROG_LIBTOOL
-AC_SUBST(LIBTOOL_DEPS)
-
dnl
dnl Find the compiler
dnl
dnl
AC_AIX
+dnl
+dnl Configure our included libtool and make sure it's regenerated when needed
+dnl
+AC_PROG_LIBTOOL
+AC_SUBST(LIBTOOL_DEPS)
+
dnl
dnl In case of {cyg,gnu}win32. Should be a _target_ test.
dnl Might also be erelevant for DJGPP.
dnl
dnl Checks for headers
dnl
-AC_CHECK_HEADERS(string.h stdarg.h unistd.h sys/time.h utime.h sys/utime.h)
-AC_CHECK_HEADERS(sys/select.h sys/utsname.h pwd.h signal.h)
+AC_CHECK_HEADERS(string.h stdarg.h unistd.h sys/time.h utime.h sys/utime.h pwd.h)
+AC_CHECK_HEADERS(termios.h sys/ioctl.h sys/select.h sys/utsname.h signal.h)
AC_HEADER_TIME
dnl
dnl
AC_FUNC_ALLOCA
AC_FUNC_MMAP
-AC_CHECK_FUNCS(strdup strstr strcasecmp strncasecmp)
+AC_CHECK_FUNCS(strdup strstr strcasecmp strncasecmp strpbrk memmove)
AC_CHECK_FUNCS(gettimeofday mktime strptime)
AC_CHECK_FUNCS(strerror snprintf vsnprintf select signal symlink access isatty)
-AC_CHECK_FUNCS(uname gethostname)
+AC_CHECK_FUNCS(uname gethostname usleep)
-AC_CHECK_FUNCS(gethostbyname, [], [
- AC_CHECK_LIB(nsl, gethostbyname)
+dnl
+dnl Check if we need to compile in getopt.c.
+dnl
+AC_CHECK_FUNC(getopt_long, [], [
+ GETOPT_OBJ='getopt$o'
])
+AC_SUBST(GETOPT_OBJ)
dnl
dnl Checks for libraries.
dnl
+dnl On Solaris, -lnsl is needed to use gethostbyname. On "NCR MP-RAS
+dnl 3.0", however, gethostbyname is in libc, but -lnsl is still needed
+dnl to use -lsocket, as well as for functions such as inet_ntoa. We
+dnl look for such known offenders and if one of them is not found, we
+dnl check if -lnsl is needed.
+
+wget_check_in_nsl=NONE
+AC_CHECK_FUNCS(gethostbyname, [], [
+ wget_check_in_nsl=gethostbyname
+])
+AC_CHECK_FUNCS(inet_ntoa, [], [
+ wget_check_in_nsl=inet_ntoa
+])
+if test $wget_check_in_nsl != NONE; then
+ AC_CHECK_LIB(nsl, $wget_check_in_nsl)
+fi
+
AC_CHECK_LIB(socket, socket)
dnl #### This appears to be deficient with later versions of SOCKS.
AC_CHECK_LIB(socks, Rconnect)
fi
-dnl OpenSSL is a third-party library, which makes checking for it a
-dnl pain. Before proceeding, we need to figure out whether to use the
-dnl `-R' flag.
-
-dnl Try to autodetect runtime library flag (usually -R), and whether
-dnl it works (or at least does no harm). Note that this is used
-dnl merely for the configure test below. The actual linking is
-dnl performed by libtool. Wouldn't it be nice if libtool also
-dnl provided "querying" that we need in configure?
-AC_MSG_CHECKING("for runtime libraries flag")
-case "$opsys" in
- sol2 ) dash_r="-R" ;;
- decosf* | linux* | irix*) dash_r="-rpath " ;;
- *)
- dash_r=""
- for try_dash_r in "-R" "-R " "-rpath "; do
- OLD_LDFLAGS=$LDFLAGS
- LDFLAGS="${try_dash_r}/no/such/file-or-directory $LDFLAGS"
- AC_TRY_LINK(, , dash_r="$try_dash_r")
- LDFLAGS=$ODL_LDFLAGS
- test -n "$dash_r" && break
- done ;;
-esac
-if test -n "$dash_r";
- then AC_MSG_RESULT("\"${dash_r}\"")
- else AC_MSG_RESULT(NONE)
+dnl $with_ssl can be one of:
+dnl - empty string or "auto", meaning autodetect SSL and use it if found.
+dnl - "yes", meaning link with SSL or bail out.
+dnl - "no", meaning don't link with SSL.
+dnl - anything else, meaning use that as the SSL root, and bail out
+dnl if it fails.
+
+if test x"$with_ssl" = x; then
+ dnl Canonicalize unspecified with-ssl setting to "auto". This
+ dnl implements the "auto-detect by default" feature. If you want to
+ dnl change this to "ignore SSL by default", change "auto" to "no".
+ with_ssl=auto
fi
-dnl If --with-ssl was specified, make sure we can link with the
-dnl OpenSSL libs. We should probably auto-detect this by default.
+dnl Detection of OpenSSL is much hairier than the detection of other
+dnl libraries because OpenSSL can be compiled as a third-party
+dnl library, which means it will not be found without additional
+dnl linker magic. It would be really nice to rework this check into
+dnl an AC_DEFUN so that we can reuse it for other third-party
+dnl libraries.
+
+if test x"$with_ssl" != x"no"; then
-if test x"$with_ssl" != x -a x"$with_ssl" != x"no"; then
+ wget_force_ssl=no
if test x"$with_ssl" = x"yes"; then
- dnl OpenSSL's default install location is "/usr/local/ssl". We also
- dnl allow /usr/local for regular-style install, and /usr for Linux
- dnl stuff.
- ssl_all_roots="default /usr/local/ssl /usr/local /opt"
+ wget_force_ssl=yes
+ fi
+
+ if test x"$with_ssl" = x"yes" || test x"$with_ssl" = x"auto"; then
+ dnl OpenSSL's root was not specified, so we have to guess. First
+ dnl try the system default location, then "/usr/local/ssl" (where
+ dnl OpenSSL installs by default), then "/usr/local" (traditional
+ dnl choice for installation root), then "/opt".
+ ssl_all_roots="system-default /usr/local/ssl /usr/local /opt"
else
- dnl Root has been kindly provided by the user.
+ dnl Root has been specified by the user.
ssl_all_roots=$with_ssl
+ wget_force_ssl=yes
fi
- OLD_LIBS=$LIBS
- OLD_LDFLAGS=$LDFLAGS
+ wget_save_CC=$CC
+ wget_save_LIBS=$LIBS
+ wget_save_LDFLAGS=$LDFLAGS
+ wget_save_CPPFLAGS=$CPPFLAGS
+
+ dnl Use libtool for OpenSSL tests so we can specify "-R<rpath>"
+ dnl without having to know how the linker handles it.
+ CC="$SHELL ./libtool $CC"
dnl Unfortunately, as of this writing (OpenSSL 0.9.6), the libcrypto
dnl shared library doesn't record its dependency on libdl, so we
AC_CHECK_LIB(dl,dlopen)
AC_CHECK_LIB(dl,shl_load)
- ssl_linked=no
+ ssl_success=no
dnl Now try to find SSL libraries in each of the likely SSL roots.
for ssl_root in $ssl_all_roots
do
- LIBS=$OLD_LIBS
-
- if test x"$ssl_root" = xdefault; then
- dnl Try the default library locations.
+ if test x"$ssl_root" = x"system-default"; then
+ dnl Try the default include and library locations.
SSL_INCLUDES=
- LDFLAGS=$OLD_LDFLAGS
else
dnl Try this specific root.
SSL_INCLUDES=-I$ssl_root/include
- SSL_DASH_L="-L$ssl_root/lib"
- SSL_DASH_R=
- dnl Only use -R<foo> on systems which support a -R variant.
- if test x"$dash_r" != x; then
- SSL_DASH_R="${dash_r}$ssl_root/lib"
- fi
- LDFLAGS="$SSL_DASH_L $SSL_DASH_R $OLD_LDFLAGS"
+ dnl It's OK to use -R directly because libtool will
+ dnl interpret it for us.
+ LDFLAGS="-L$ssl_root/lib -R$ssl_root/lib $wget_save_LDFLAGS"
fi
- ssl_link_failure=no
-
AC_MSG_RESULT(["Looking for SSL libraries in $ssl_root"])
+ dnl Check whether the compiler can find the include files. On
+ dnl some systems Gcc finds libraries in /usr/local/lib, but fails
+ dnl to find the includes in /usr/local/include.
+
+ ssl_found_includes=no
+ CPPFLAGS="$SSL_INCLUDES $wget_save_CPPFLAGS"
+
+ AC_MSG_CHECKING(["for includes"])
+
+ AC_TRY_CPP([#include <openssl/ssl.h>
+#include <openssl/rsa.h>
+],
+ AC_MSG_RESULT("found"); ssl_found_includes=yes,
+ AC_MSG_RESULT("not found")
+ )
+
+ if test x"$ssl_found_includes" = xno; then
+ continue
+ fi
+
+ ssl_link_failure=no
+
dnl Make sure that the checks don't run afoul of the cache. It
dnl would be nicer to temporarily turn off the cache, but
dnl apparently Autoconf doesn't allow that.
dnl failure if you use a static libcrypto.a and libssl.a rather
dnl than shared libraries.
- AC_CHECK_LIB(crypto,RSA_new,,ssl_link_failure=yes)
- AC_CHECK_LIB(ssl,SSL_new,,ssl_link_failure=yes)
+ AC_CHECK_LIB(crypto, RSA_new, , ssl_link_failure=yes)
+ AC_CHECK_LIB(ssl, SSL_new, , ssl_link_failure=yes)
- dnl If ssl_link_failure is still no, the libraries link. But we
- dnl still need to check if the program linked with those libraries
- dnl under these settings with run. On some systems (Solaris), Gcc
- dnl adds -L/usr/local/lib to the linking line, but fails to add
- dnl -R/usr/local/lib, thus creating executables that link, but
- dnl fail to run.
+ if test x"$ssl_link_failure" = xyes; then
+ dnl One or both libs failed to link.
+ continue
+ fi
+
+ dnl The libraries link. But we still need to check if the program
+ dnl linked with those libraries under these settings with run. On
+ dnl some systems (Solaris), Gcc adds -L/usr/local/lib to the
+ dnl linking line, but fails to add -R/usr/local/lib, thus creating
+ dnl executables that link, but fail to run.
dnl If we are cross-compiling, just assume that working linkage
dnl implies working executable.
- if test x"$ssl_link_failure" = xno; then
- dnl Now try to run the thing.
- AC_MSG_CHECKING("whether runtime linking works")
- AC_TRY_RUN([
-char RSA_new();
-char SSL_new();
-main(){return 0;}
-], AC_MSG_RESULT("yes"), AC_MSG_RESULT("no"); ssl_link_failure=yes, true)
- fi
+ ssl_run_failure=no
- if test x"$ssl_link_failure" = xno; then
- dnl This echo doesn't look right, but I'm not sure what to use
- dnl instead.
- AC_MSG_RESULT("Compiling in support for SSL in $ssl_root")
- AC_DEFINE(HAVE_SSL)
- AC_SUBST(SSL_INCLUDES)
- SSL_OBJ='gen_sslfunc$o'
- AC_SUBST(SSL_OBJ)
- ssl_linked=yes
+ AC_MSG_CHECKING("whether SSL libs are resolved at runtime")
+ AC_TRY_RUN([
+int RSA_new();
+int SSL_new();
+main(){return 0;}
+],
+ AC_MSG_RESULT("yes"),
+ AC_MSG_RESULT("no"); ssl_run_failure=yes,
+ AC_MSG_RESULT("cross")
+ )
+
+ if test x"$ssl_run_failure" = xno; then
+ ssl_success=yes
break
fi
done
- if test x"$ssl_linked" = xno; then
- LD_FLAGS=$OLD_LDFLAGS
- LIBS=$OLD_LIBS
- dnl Perhaps we should abort here. Remember that the user
- dnl explicitly requested linking with SSL.
- echo
- echo "WARNING: Failed to link with OpenSSL libraries in $ssl_root/lib."
- echo " Wget will be built without support for https://... URLs."
- echo
+ if test x"$ssl_success" = xyes; then
+ dnl AC_MSG_RESULT doesn't look right here, but I'm not sure what
+ dnl to use instead.
+ AC_MSG_RESULT("Compiling in support for SSL in $ssl_root")
+ AC_DEFINE(HAVE_SSL)
+ AC_SUBST(SSL_INCLUDES)
+ SSL_OBJ='gen_sslfunc$o'
+ AC_SUBST(SSL_OBJ)
+ else
+ LDFLAGS=$wget_save_LDFLAGS
+ LIBS=$wget_save_LIBS
+
+ dnl If linking with SSL was forced rather than auto-detected, then
+ dnl bail out if SSL failed.
+ if test x"$wget_force_ssl" = x"yes"; then
+ exec >&2
+ echo "ERROR: Failed to find OpenSSL libraries."
+ exit 2
+ fi
+ fi
+
+ dnl Restore the compiler setting.
+ CC=$wget_save_CC
+
+ dnl Restore the CPPFLAGS. Do this regardless of whether linking
+ dnl with SSL succeeded -- SSL includes will be handled using
+ dnl @SSL_INCLUDES@.
+ CPPFLAGS=$wget_save_CPPFLAGS
+fi
+
+dnl
+dnl Find an md5 implementation.
+dnl
+
+if test x"$wget_need_md5" = xyes
+then
+ MD5_OBJ='gen-md5$o'
+
+ found_md5=no
+
+ dnl Check for the system MD5 library on Solaris. We don't check for
+ dnl something simple like "MD5Update" because there are a number of
+ dnl MD5 implementations that use that name. md5_calc is, hopefully,
+ dnl specific to the Solaris MD5 library.
+ if test x"$found_md5" = xno; then
+ AC_CHECK_LIB(md5, md5_calc, [
+ AC_DEFINE(HAVE_SOLARIS_MD5)
+ LIBS="-lmd5 $LIBS"
+ found_md5=yes
+ ])
+ fi
+
+ dnl Then see if we're linking OpenSSL anyway; if yes, use its md5
+ dnl implementation.
+ if test x"$found_md5" = xno; then
+ if test x"$ssl_success" = xyes; then
+ AC_DEFINE(HAVE_OPENSSL_MD5)
+ found_md5=yes
+ fi
+ fi
+
+ dnl If none of the above worked, use the one we ship with Wget.
+ if test x"$found_md5" = xno; then
+ AC_DEFINE(HAVE_BUILTIN_MD5)
+ found_md5=yes
+ MD5_OBJ="$MD5_OBJ gnu-md5\$o"
fi
fi
+AC_DEFINE(HAVE_MD5)
+AC_SUBST(MD5_OBJ)
dnl
dnl Set of available languages.