+2009-09-22 Micah Cowan <micah@cowan.name>
+
+ * configure.ac: Added "sleep" and "symlink" to AC_CHECK_FUNCS,
+ removing the hard-coded definition of HAVE_SYMLINK. When running
+ on MinGW, compile mswindows.c, and link against libwsock32.
+
2009-09-21 Micah Cowan <micah@cowan.name>
* vms/VMS-WGET.COM: "the the" -> "the".
AC_FUNC_FSEEKO
AC_CHECK_FUNCS(strptime timegm snprintf vsnprintf vasprintf drand48)
AC_CHECK_FUNCS(strtoll usleep ftello sigblock sigsetjmp memrchr wcwidth mbtowc)
+AC_CHECK_FUNCS(sleep symlink)
if test x"$ENABLE_OPIE" = xyes; then
AC_LIBOBJ([ftp-opie])
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-specific macros defined in aclocal.
WGET_POSIX_CLOCK
WGET_NSL_SOCKET
+dnl Deal with specific hosts
+case $host_os in
+ *mingw32* )
+ AC_SUBST(W32LIBS, '-lwsock32')
+ AC_LIBOBJ([mswindows])
+ ;;
+esac
+
dnl
dnl Checks for libraries.
dnl
ensures we find the repository, even if the build directory is
outside the source directory.
+ * wget.h: define WINDOWS if _WIN32 or __WIN32__ is defined, but
+ not __CYGWIN__.
+
+ * mswindows.c (xsleep): Check for availability of the sleep
+ function, in addition to the usleep function.
+ (get_winsock_error, windows_strerror): Removed (gnulib already
+ supplies this functionality).
+
+ * mswindows.h [NEED_GAI_STRERROR]: define gai_strerror
+ to (gnulib's) strerror, rather than windows_strerror. Removed
+ error macro definitions provided by gnulib.
+ (windows_strerror): Removed (gnulib already supplies this
+ functionality).
+
+ * host.c: Don't declare h_errno when building on Windows.
+
+ * Makefile.am (LIBS): Added @W32LIBS@.
+ (EXTRA_wget_SOURCES): Removed (it's in LIBOBJ now).
+ (version.c): Removed dependency on $(LDADD), since it may include
+ dependencies that are not part of the Wget sources (-lwsock32, for
+ instance).
+
* openssl.c (ssl_check_certificate): Avoid reusing the same buffer
space for successive quoted arguments. Thanks to Steven Schweda
for pointing out the problem.
# The following line is losing on some versions of make!
DEFS = @DEFS@ -DSYSTEM_WGETRC=\"$(sysconfdir)/wgetrc\" -DLOCALEDIR=\"$(localedir)\"
-LIBS = @LIBSSL@ @LIBGNUTLS@ @LIBICONV@ @LIBINTL@ @LIBS@
+LIBS = @LIBSSL@ @LIBGNUTLS@ @LIBICONV@ @LIBINTL@ @W32LIBS@ @LIBS@
bin_PROGRAMS = wget
wget_SOURCES = cmpt.c connect.c convert.c cookies.c ftp.c \
spider.h ssl.h sysdep.h url.h utils.h wget.h iri.h \
exits.h gettext.h
nodist_wget_SOURCES = version.c
-EXTRA_wget_SOURCES = mswindows.c iri.c
+EXTRA_wget_SOURCES = iri.c
LDADD = $(LIBOBJS) ../lib/libgnu.a @MD5_LDADD@
AM_CPPFLAGS = -I$(top_srcdir)/lib @MD5_CPPFLAGS@
+MD5_LDADD = @MD5_LDADD@
../lib/libgnu.a:
cd ../lib && $(MAKE) $(AM_MAKEFLAGS)
$(srcdir)/build_info.c.in > $@
ESCAPEQUOTE = sed -e 's/[\\"]/\\&/g' -e 's/\\"/"/' -e 's/\\";$$/";/'
-version.c: $(wget_SOURCES) $(LDADD) $(srcdir)/Makefile.am \
- $(top_srcdir)/configure.ac
+version.c: $(wget_SOURCES) ../lib/libgnu.a $(MD5_LDADD) \
+ $(srcdir)/Makefile.am $(top_srcdir)/configure.ac
echo '/* version.c */' > $@
echo '/* Autogenerated by Makefile - DO NOT EDIT */' >> $@
echo '' >> $@
# define NO_ADDRESS NO_DATA
#endif
-#if !HAVE_DECL_H_ERRNO
+#if !HAVE_DECL_H_ERRNO && !defined(WINDOWS)
extern int h_errno;
#endif
void
xsleep (double seconds)
{
-#ifdef HAVE_USLEEP
+#if defined(HAVE_USLEEP) && defined(HAVE_SLEEP)
if (seconds > 1000)
{
/* Explained in utils.c. */
(s, level, opt, val, len))
WRAP (closesocket, (int s), (s))
-/* Return the text of the error message for Winsock error WSERR. */
-
-static const char *
-get_winsock_error (int wserr)
-{
- switch (wserr) {
- case WSAEINTR: return "Interrupted system call";
- case WSAEBADF: return "Bad file number";
- case WSAEACCES: return "Permission denied";
- case WSAEFAULT: return "Bad address";
- case WSAEINVAL: return "Invalid argument";
- case WSAEMFILE: return "Too many open files";
- case WSAEWOULDBLOCK: return "Resource temporarily unavailable";
- case WSAEINPROGRESS: return "Operation now in progress";
- case WSAEALREADY: return "Operation already in progress";
- case WSAENOTSOCK: return "Socket operation on nonsocket";
- case WSAEDESTADDRREQ: return "Destination address required";
- case WSAEMSGSIZE: return "Message too long";
- case WSAEPROTOTYPE: return "Protocol wrong type for socket";
- case WSAENOPROTOOPT: return "Bad protocol option";
- case WSAEPROTONOSUPPORT: return "Protocol not supported";
- case WSAESOCKTNOSUPPORT: return "Socket type not supported";
- case WSAEOPNOTSUPP: return "Operation not supported";
- case WSAEPFNOSUPPORT: return "Protocol family not supported";
- case WSAEAFNOSUPPORT: return "Address family not supported by protocol family";
- case WSAEADDRINUSE: return "Address already in use";
- case WSAEADDRNOTAVAIL: return "Cannot assign requested address";
- case WSAENETDOWN: return "Network is down";
- case WSAENETUNREACH: return "Network is unreachable";
- case WSAENETRESET: return "Network dropped connection on reset";
- case WSAECONNABORTED: return "Software caused connection abort";
- case WSAECONNRESET: return "Connection reset by peer";
- case WSAENOBUFS: return "No buffer space available";
- case WSAEISCONN: return "Socket is already connected";
- case WSAENOTCONN: return "Socket is not connected";
- case WSAESHUTDOWN: return "Cannot send after socket shutdown";
- case WSAETOOMANYREFS: return "Too many references";
- case WSAETIMEDOUT: return "Connection timed out";
- case WSAECONNREFUSED: return "Connection refused";
- case WSAELOOP: return "Too many levels of symbolic links";
- case WSAENAMETOOLONG: return "File name too long";
- case WSAEHOSTDOWN: return "Host is down";
- case WSAEHOSTUNREACH: return "No route to host";
- case WSAENOTEMPTY: return "Not empty";
- case WSAEPROCLIM: return "Too many processes";
- case WSAEUSERS: return "Too many users";
- case WSAEDQUOT: return "Bad quota";
- case WSAESTALE: return "Something is stale";
- case WSAEREMOTE: return "Remote error";
- case WSAEDISCON: return "Disconnected";
-
- /* Extended Winsock errors */
- case WSASYSNOTREADY: return "Winsock library is not ready";
- case WSANOTINITIALISED: return "Winsock library not initalised";
- case WSAVERNOTSUPPORTED: return "Winsock version not supported";
-
- case WSAHOST_NOT_FOUND: return "Host not found";
- case WSATRY_AGAIN: return "Host not found, try again";
- case WSANO_RECOVERY: return "Unrecoverable error in call to nameserver";
- case WSANO_DATA: return "No data record of requested type";
-
- default:
- return NULL;
- }
-}
-
-/* Return the error message corresponding to ERR. This is different
- from Windows libc strerror() in that it handles Winsock errors
- correctly. */
-
-const char *
-windows_strerror (int err)
-{
- const char *p;
- if (err >= 0 && err < sys_nerr)
- return strerror (err);
- else if ((p = get_winsock_error (err)) != NULL)
- return p;
- else
- {
- static char buf[32];
- snprintf (buf, sizeof (buf), "Unknown error %d (%#x)", err, err);
- return buf;
- }
-}
\f
#ifdef ENABLE_IPV6
/* An inet_ntop implementation that uses WSAAddressToString.
#ifdef NEED_GAI_STRERROR
# undef gai_strerror
-# define gai_strerror windows_strerror
+# define gai_strerror strerror
#endif
#ifndef INHIBIT_WRAP
int wrapped_setsockopt (int, int, int, const void *, int);
int wrapped_closesocket (int);
-/* Finally, provide a private version of strerror that does the
- right thing with Winsock errors. */
-#ifndef INHIBIT_WRAP
-# define strerror windows_strerror
-#endif
-const char *windows_strerror (int);
-
-/* Declarations of various socket errors: */
-
-#define EWOULDBLOCK WSAEWOULDBLOCK
-#define EINPROGRESS WSAEINPROGRESS
-#define EALREADY WSAEALREADY
-#define ENOTSOCK WSAENOTSOCK
-#define EDESTADDRREQ WSAEDESTADDRREQ
-#define EMSGSIZE WSAEMSGSIZE
-#define EPROTOTYPE WSAEPROTOTYPE
-#define ENOPROTOOPT WSAENOPROTOOPT
-#define EPROTONOSUPPORT WSAEPROTONOSUPPORT
-#define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT
-#define EOPNOTSUPP WSAEOPNOTSUPP
-#define EPFNOSUPPORT WSAEPFNOSUPPORT
-#define EAFNOSUPPORT WSAEAFNOSUPPORT
-#define EADDRINUSE WSAEADDRINUSE
-#define EADDRNOTAVAIL WSAEADDRNOTAVAIL
-#define ENETDOWN WSAENETDOWN
-#define ENETUNREACH WSAENETUNREACH
-#define ENETRESET WSAENETRESET
-#define ECONNABORTED WSAECONNABORTED
-#define ECONNRESET WSAECONNRESET
-#define ENOBUFS WSAENOBUFS
-#define EISCONN WSAEISCONN
-#define ENOTCONN WSAENOTCONN
-#define ESHUTDOWN WSAESHUTDOWN
-#define ETOOMANYREFS WSAETOOMANYREFS
-#define ETIMEDOUT WSAETIMEDOUT
-#define ECONNREFUSED WSAECONNREFUSED
-#define ELOOP WSAELOOP
-#define EHOSTDOWN WSAEHOSTDOWN
-#define EHOSTUNREACH WSAEHOSTUNREACH
-#define EPROCLIM WSAEPROCLIM
-#define EUSERS WSAEUSERS
-#define EDQUOT WSAEDQUOT
-#define ESTALE WSAESTALE
-#define EREMOTE WSAEREMOTE
-
/* Public functions. */
void ws_startup (void);
#include "config.h"
+#if ((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__)
+# define WINDOWS
+#endif
+
/* Include these, so random files need not include them. */
#include "sysdep.h"