]> sjero.net Git - wget/commitdiff
imported patch windows
authorMicah Cowan <micah@cowan.name>
Wed, 23 Sep 2009 01:43:02 +0000 (18:43 -0700)
committerMicah Cowan <micah@cowan.name>
Wed, 23 Sep 2009 01:43:02 +0000 (18:43 -0700)
ChangeLog
configure.ac
src/ChangeLog
src/Makefile.am
src/host.c
src/mswindows.c
src/mswindows.h
src/wget.h

index b7f6b6a125d416ef12b1d6e66a2fcc732c25f1a3..f1123529cf46d044d9304502fcfc526b079f5d99 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+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".
index ba501b91a01eb9cc0661d5c93beb86769789e679..b191b03dd0aa983b3c875c098fe42214e56e01a6 100644 (file)
@@ -202,6 +202,7 @@ AC_FUNC_MMAP
 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])
@@ -215,7 +216,6 @@ AC_DEFINE([HAVE_STRCASECMP], 1, [Define to 1 if you have the `strcasecmp' functi
 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.
@@ -227,6 +227,14 @@ WGET_NANOSLEEP
 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
index 392c24758f25a1febff701735016d472a8564c3f..025b199c765c91969520b23c85093214c5ac219e 100644 (file)
@@ -7,6 +7,28 @@
        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.
index 4f463f9016c92b425415af45429d6bd4b0d2b868..44b62fb3270b789bb97361756fff0136432f5b64 100644 (file)
@@ -36,7 +36,7 @@ endif
 
 # 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                \
@@ -52,9 +52,10 @@ 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)
@@ -67,8 +68,8 @@ build_info.c: $(srcdir)/Makefile.am $(srcdir)/build_info.c.in
            $(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 '' >> $@
index 4497bad2e852193823414f6f56470cf3044bea5b..dffb5a65ac5408c7ff648f6756d34fa9703f91e3 100644 (file)
@@ -63,7 +63,7 @@ as that of the covered work.  */
 # define NO_ADDRESS NO_DATA
 #endif
 
-#if !HAVE_DECL_H_ERRNO
+#if !HAVE_DECL_H_ERRNO && !defined(WINDOWS)
 extern int h_errno;
 #endif
 
index d3decedaa4f54c80084200fa1a18480224aff6a5..f3ee0152be276f3e80016d47bdc68752919723f5 100644 (file)
@@ -59,7 +59,7 @@ void log_request_redirect_output (const char *);
 void
 xsleep (double seconds)
 {
-#ifdef HAVE_USLEEP
+#if defined(HAVE_USLEEP) && defined(HAVE_SLEEP)
   if (seconds > 1000)
     {
       /* Explained in utils.c. */
@@ -603,91 +603,6 @@ WRAP (setsockopt, (int s, int level, int opt, const void *val, int len),
                   (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.
index a80328743eb8f3a38dbbbb98e0530fa2eda04953..241c0016e324cc4fac62dc83f124ebb046fc9216 100644 (file)
@@ -125,7 +125,7 @@ const char *inet_ntop (int, const void *, char *, socklen_t);
 
 #ifdef NEED_GAI_STRERROR
 # undef gai_strerror
-# define gai_strerror windows_strerror
+# define gai_strerror strerror
 #endif
 
 #ifndef INHIBIT_WRAP
@@ -160,51 +160,6 @@ int wrapped_getpeername (int, struct sockaddr *, int *);
 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);
index bc868ff47a8ac140f637c2b53213aa4679803b87..6e42277b0cf9671d59bfcfe3541542a1c49ec06f 100644 (file)
@@ -38,6 +38,10 @@ as that of the covered work.  */
 
 #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"