AC_INIT([src/version.c])
AC_PREREQ(2.57)
+dnl Include the M4 macros we use.
+builtin(include, [m4/wget.m4])dnl
+builtin(include, [m4/lib-ld.m4])dnl
+builtin(include, [m4/lib-link.m4])dnl
+builtin(include, [m4/lib-prefix.m4])dnl
+
dnl
dnl What version of Wget are we building?
dnl
wget_need_md5=yes
esac
if test x"$ENABLE_OPIE" = xyes; then
- OPIE_OBJ='ftp-opie$o'
+ OPIE_OBJ='ftp-opie.o'
fi
AC_SUBST(OPIE_OBJ)
AC_PROG_CC
AC_AIX
-AM_PROG_CC_STDC
dnl Turn on optimization by default. Specifically:
dnl
fi
fi
-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.
AC_C_CONST
AC_C_INLINE
AC_C_VOLATILE
+dnl Needed for GNU md5 code.
AC_C_BIGENDIAN
-AC_C_PROTOTYPES
-
-if test x"$am_cv_prog_cc_stdc" != xno; then :
- AC_SUBST(U, [])
- AC_SUBST(ANSI2KNR, [])
-else
- AC_SUBST(U, [_])
- AC_SUBST(ANSI2KNR, [./ansi2knr])
-fi
dnl
dnl Checks for header files that might be missing.
dnl
-dnl Check for basic headers, even those we assume the presence of.
-dnl This is because Autoconf default includes check for STDC_HEADERS,
-dnl HAVE_SYS_TYPES_H, etc. before including them.
+dnl Check for basic headers, even though we expect their presence to
+dnl compile. This is because test programs used by Autoconf macros
+dnl check for STDC_HEADERS, HAVE_SYS_TYPES_H, etc. before including
+dnl them. Without these checks they will fail to be included in test
+dnl programs, which will subsequently fail.
AC_HEADER_STDC
-AC_CHECK_HEADERS(sys/types.h sys/stat.h)
-dnl Now check for the others.
-AC_CHECK_HEADERS(string.h strings.h stdarg.h limits.h unistd.h sys/time.h)
+
+dnl Now the real checks:
+AC_HEADER_STDBOOL
+AC_CHECK_HEADERS(unistd.h sys/time.h)
AC_CHECK_HEADERS(termios.h sys/ioctl.h sys/select.h utime.h sys/utime.h)
-AC_CHECK_HEADERS(stdint.h inttypes.h signal.h setjmp.h pwd.h)
-AC_HEADER_TIME
+AC_CHECK_HEADERS(stdint.h inttypes.h setjmp.h pwd.h)
dnl
-dnl Check integral type sizes.
+dnl Check sizes of signed integer types. These are used to find n-bit
+dnl integral types on older systems that fail to provide intN_t and
+dnl uintN_t typedefs.
dnl
AC_CHECK_SIZEOF(short)
AC_CHECK_SIZEOF(int)
AC_TYPE_SIZE_T
AC_TYPE_PID_T
AC_CHECK_TYPES(uint32_t)
-AC_TYPE_SIGNAL
AC_CHECK_TYPES(sig_atomic_t, [], [], [
#include <stdio.h>
#include <sys/types.h>
#if HAVE_INTTYPES_H
# include <inttypes.h>
#endif
-#ifdef HAVE_SIGNAL_H
-# include <signal.h>
-#endif
+#include <signal.h>
])
dnl
AC_FUNC_ALLOCA
AC_FUNC_MMAP
AC_FUNC_FSEEKO
-AC_CHECK_FUNCS(strdup strstr strcasecmp strncasecmp strpbrk memmove)
-AC_CHECK_FUNCS(gettimeofday mktime strptime strerror snprintf vsnprintf)
-AC_CHECK_FUNCS(usleep select ftello sigblock sigsetjmp signal)
-AC_CHECK_FUNCS(symlink access isatty)
+AC_CHECK_FUNCS(strptime snprintf vsnprintf)
+AC_CHECK_FUNCS(usleep ftello sigblock sigsetjmp symlink)
+
+dnl We expect to have these functions on Unix-like systems configure
+dnl runs on. The defines are provided to get them in config.h.in so
+dnl Wget can still be ported to non-Unix systems (such as Windows)
+dnl that lack some of these functions.
+AC_DEFINE([HAVE_STRCASECMP], 1, [Define to 1 if you have the `strcasecmp' function.])
+AC_DEFINE([HAVE_STRNCASECMP], 1, [Define to 1 if you have the `strncasecmp' function.])
+AC_DEFINE([HAVE_STRDUP], 1, [Define to 1 if you have the `strdup' function.])
+AC_DEFINE([HAVE_ISATTY], 1, [Define to 1 if you have the `isatty' function.])
+AC_DEFINE([HAVE_SYMLINK], 1, [Define to 1 if you have the `symlink' function.])
dnl
-dnl Call Wget's local macros defined in aclocal.
+dnl Call Wget-specific macros defined in aclocal.
dnl
WGET_STRUCT_UTIMBUF
WGET_SOCKLEN_T
dnl Check if we need to compile in getopt.c.
dnl
AC_CHECK_FUNC(getopt_long, [], [
- GETOPT_OBJ='getopt$o'
+ GETOPT_OBJ='getopt.o'
])
AC_SUBST(GETOPT_OBJ)
dnl Checks for libraries.
dnl
-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 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
+dnl Check for OpenSSL
- wget_force_ssl=no
- if test x"$with_ssl" = x"yes"; then
- 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 specified by the user.
- ssl_all_roots=$with_ssl
- wget_force_ssl=yes
- fi
-
- 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
- dnl need to check for it ourselves so we won't fail to link due to a
- dnl lack of -ldl. Most OSes use dlopen(), but HP-UX uses
- dnl shl_load().
- AC_CHECK_LIB(dl,dlopen)
- AC_CHECK_LIB(dl,shl_load)
-
- 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
- if test x"$ssl_root" = x"system-default"; then
- dnl Try the default include and library locations.
- SSL_INCLUDES=
- else
- dnl Try this specific root.
- SSL_INCLUDES=-I$ssl_root/include
- 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
-
- AC_MSG_NOTICE([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"
+dnl As of this writing (OpenSSL 0.9.6), the libcrypto shared library
+dnl doesn't record its dependency on libdl, so we need to make sure
+dnl -ldl ends up in LIBS on systems that have it. Most OSes use
+dnl dlopen(), but HP-UX uses dnl shl_load().
+AC_CHECK_LIB(dl, dlopen, [], [
+ AC_CHECK_LIB(dl, shl_load)
+])
- dnl Check for all the OpenSSL includes that Wget actually uses.
- dnl This will prune both invalid installations and ancient
- dnl versions of OpenSSL that we can't use.
- AC_MSG_CHECKING([for includes])
- AC_COMPILE_IFELSE([
+dnl Now actually check for -lssl
+AC_LIB_HAVE_LINKFLAGS([ssl], [crypto], [
#include <openssl/ssl.h>
-#include <openssl/bio.h>
-#include <openssl/crypto.h>
-#include <openssl/des.h>
+#include <openssl/x509.h>
#include <openssl/err.h>
-#include <openssl/md4.h>
-#include <openssl/pem.h>
#include <openssl/rand.h>
-#include <openssl/x509.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.
-
- unset ac_cv_lib_crypto_RSA_new
- unset ac_cv_lib_ssl_SSL_new
-
- dnl These checks need to be in this order, or you'll get a link
- 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)
-
- 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.
-
- ssl_run_failure=no
-
- 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_success" = xyes; then
- AC_MSG_NOTICE([compiling in support for SSL in $ssl_root])
- AC_DEFINE([HAVE_SSL], 1,
- [Define if SSL support should be compiled in.])
- 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
- AC_MSG_ERROR([failed to find OpenSSL libraries], 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
+#include <openssl/des.h>
+#include <openssl/md4.h>
+#include <openssl/md5.h>
+], [SSL_library_init ()])
+if test x"$LIBSSL" != x
+then
+ AC_MSG_NOTICE([compiling in support for SSL])
+ AC_DEFINE([HAVE_SSL], 1,
+ [Define if SSL support should be compiled in.])
+ SSL_OBJ='openssl.o'
fi
+AC_SUBST(SSL_OBJ)
dnl Enable NTLM if requested and if SSL is available.
NTLM_OBJ=''
-if test x"$ssl_success" = xyes
+if test x"$LIBSSL" != x
then
if test x"$ENABLE_NTLM" != xno
then
AC_DEFINE([ENABLE_NTLM], 1,
[Define if you want the NTLM authorization support compiled in.])
- NTLM_OBJ='http-ntlm$o'
+ NTLM_OBJ='http-ntlm.o'
fi
else
dnl If SSL is unavailable and the user explicitly requested NTLM,
dnl This should be moved to an AC_DEFUN, but I'm not sure how to
dnl manipulate MD5_OBJ from the defun.
- MD5_OBJ='gen-md5$o'
+ MD5_OBJ='gen-md5.o'
found_md5=no
dnl Check for the system MD5 library on Solaris. We don't check for
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], 1, [Define to use built-in MD5.])
- MD5_OBJ="$MD5_OBJ gnu-md5\$o"
+ MD5_OBJ="$MD5_OBJ gnu-md5.o"
found_md5=yes
AC_MSG_NOTICE([using the GNU MD5 implementation])
fi
dnl
dnl If --enable-ipv6 is specified, we try to use IPv6 (as long as
dnl getaddrinfo is also present). If --disable-ipv6 is specified, we
-dnl don't use IPv6 or getaddrinfo.
+dnl don't use IPv6 or getaddrinfo. Otherwise we detect IPv6 and use
+dnl it where available.
dnl
-ipv6=
-check_for_ipv6=no
AC_ARG_ENABLE(ipv6,
AC_HELP_STRING([--disable-ipv6],[disable IPv6 support]),
[case "${enable_ipv6}" in
- no)
- AC_MSG_NOTICE([disabling IPv6 at user request])
- ipv6=no
- ;;
- *)
+ no)
+ AC_MSG_NOTICE([disabling IPv6 at user request])
+ dnl Disable IPv6 checking
+ ipv6=no
+ ;;
+ yes)
+ dnl IPv6 explicitly enabled: force its use (abort if unavailable).
+ ipv6=yes
+ force_ipv6=yes
+ ;;
+ auto)
+ dnl Auto-detect IPv6, i.e. check for IPv6, but don't force it.
+ ipv6=yes
+ ;;
+ *)
+ AC_MSG_ERROR([Invalid --enable-ipv6 argument \`$enable_ipv6'])
+ ;;
+ esac
+ ], [
+ dnl If nothing is specified, assume auto-detection.
ipv6=yes
- ;;
- esac],
- dnl If unspecified, check for IPv6 and use it where available.
- [check_for_ipv6=yes]
+ ]
)
-if test "X$ipv6" = "Xyes" || test "X$check_for_ipv6" = "Xyes"; then
+if test "X$ipv6" = "Xyes"; then
AC_CHECK_FUNCS(getaddrinfo, [], [
AC_MSG_NOTICE([Disabling IPv6 support: your system does not support getaddrinfo(3)])
ipv6=no
])
fi
-if test "X$ipv6" = "Xyes" || test "X$check_for_ipv6" = "Xyes"; then
+if test "X$ipv6" = "Xyes"; then
PROTO_INET6([], [
AC_MSG_NOTICE([Disabling IPv6 support: your system does not support the PF_INET6 protocol family])
ipv6=no
])
fi
-if test "X$ipv6" = "Xyes" || test "X$check_for_ipv6" = "Xyes"; then
- TYPE_STRUCT_SOCKADDR_IN6([
- ipv6=yes
- ],[
- AC_MSG_NOTICE([Disabling IPv6 support: your system does not support 'struct sockaddr_in6'])
+if test "X$ipv6" = "Xyes"; then
+ TYPE_STRUCT_SOCKADDR_IN6([],[
+ AC_MSG_NOTICE([Disabling IPv6 support: your system does not support \`struct sockaddr_in6'])
ipv6=no
])
if test "X$ipv6" = "Xyes"; then
if test "X$ipv6" = "Xyes"; then
AC_DEFINE([ENABLE_IPV6], 1, [Define if IPv6 support is enabled.])
+ AC_MSG_NOTICE([Enabling support for IPv6.])
+elif test "x$force_ipv6" = "xyes"; then
+ AC_MSG_ERROR([IPv6 support requested but not found; aborting])
fi
dnl build the Info documentation.
dnl
-AC_CHECK_PROGS(MAKEINFO, makeinfo)
+AC_CHECK_PROGS(MAKEINFO, [makeinfo], [true])
dnl
dnl Find perl and pod2man
dnl
-AC_PATH_PROGS(PERL, perl5 perl, no)
+AC_PATH_PROGS(PERL, [perl5 perl], no)
AC_PATH_PROG(POD2MAN, pod2man, no)
if test "x${POD2MAN}" = xno; then