diff options
-rw-r--r-- | Makefile | 12 | ||||
-rw-r--r-- | README | 8 | ||||
-rw-r--r-- | code/qcommon/net_ip.c | 93 |
3 files changed, 62 insertions, 51 deletions
@@ -423,14 +423,10 @@ ifeq ($(PLATFORM),mingw32) BASE_CFLAGS = -Wall -fno-strict-aliasing -Wimplicit -Wstrict-prototypes \ -DUSE_ICON - # Require Windows XP or later - # - # IPv6 support requires a header wspiapi.h to work on earlier versions of - # windows. There is no MinGW equivalent of this header so we're forced to - # require XP. In theory this restriction can be removed if this header is - # obtained separately from the platform SDK. The MSVC build does not have - # this limitation. - BASE_CFLAGS += -DWINVER=0x501 + # In the absence of wspiapi.h, require Windows XP or later + ifeq ($(shell test -e $(CMDIR)/wspiapi.h; echo $$?),1) + BASE_CFLAGS += -DWINVER=0x501 + endif ifeq ($(USE_OPENAL),1) BASE_CFLAGS += -DUSE_OPENAL @@ -433,6 +433,14 @@ PNG support Restart GtkRadiant and PNG textures are now available. +Building with MinGW for pre Windows XP + IPv6 support requires a header named "wspiapi.h" to abstract away from + differences in earlier versions of Windows' IPv6 stack. There is no MinGW + equivalent of this header and the Microsoft version is obviously not + redistributable, so in its absence we're forced to require Windows XP. + However if this header is acquired separately and placed in the qcommon/ + directory, this restriction is lifted. + ------------------------------------------------------------- Contributing ----- diff --git a/code/qcommon/net_ip.c b/code/qcommon/net_ip.c index dd59320..e93ee23 100644 --- a/code/qcommon/net_ip.c +++ b/code/qcommon/net_ip.c @@ -24,61 +24,68 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "../qcommon/qcommon.h" #ifdef _WIN32 -#include <winsock2.h> -#include <ws2tcpip.h> -#if WINVER < 0x501 -#include <wspiapi.h> -#else -#include <ws2spi.h> -#endif +# include <winsock2.h> +# include <ws2tcpip.h> +# if WINVER < 0x501 +# ifdef __MINGW32__ + // wspiapi.h isn't available on MinGW, so if it's + // present it's because the end user has added it + // and we should look for it in our tree +# include "wspiapi.h" +# else +# include <wspiapi.h> +# endif +# else +# include <ws2spi.h> +# endif typedef int socklen_t; -#ifdef ADDRESS_FAMILY -#define sa_family_t ADDRESS_FAMILY -#else +# ifdef ADDRESS_FAMILY +# define sa_family_t ADDRESS_FAMILY +# else typedef unsigned short sa_family_t; -#endif +# endif -#define EAGAIN WSAEWOULDBLOCK -#define EADDRNOTAVAIL WSAEADDRNOTAVAIL -#define EAFNOSUPPORT WSAEAFNOSUPPORT -#define ECONNRESET WSAECONNRESET -#define socketError WSAGetLastError( ) +# define EAGAIN WSAEWOULDBLOCK +# define EADDRNOTAVAIL WSAEADDRNOTAVAIL +# define EAFNOSUPPORT WSAEAFNOSUPPORT +# define ECONNRESET WSAECONNRESET +# define socketError WSAGetLastError( ) static WSADATA winsockdata; static qboolean winsockInitialized = qfalse; #else -#if MAC_OS_X_VERSION_MIN_REQUIRED == 1020 - // needed for socklen_t on OSX 10.2 -# define _BSD_SOCKLEN_T_ -#endif - -#include <arpa/inet.h> -#include <errno.h> -#include <netdb.h> -#include <netinet/in.h> -#include <sys/socket.h> -#include <net/if.h> -#include <sys/ioctl.h> -#include <sys/types.h> -#include <sys/time.h> -#include <unistd.h> -#if !defined(__sun) && !defined(__sgi) -#include <ifaddrs.h> -#endif - -#ifdef __sun -#include <sys/filio.h> -#endif +# if MAC_OS_X_VERSION_MIN_REQUIRED == 1020 + // needed for socklen_t on OSX 10.2 +# define _BSD_SOCKLEN_T_ +# endif + +# include <arpa/inet.h> +# include <errno.h> +# include <netdb.h> +# include <netinet/in.h> +# include <sys/socket.h> +# include <net/if.h> +# include <sys/ioctl.h> +# include <sys/types.h> +# include <sys/time.h> +# include <unistd.h> +# if !defined(__sun) && !defined(__sgi) +# include <ifaddrs.h> +# endif + +# ifdef __sun +# include <sys/filio.h> +# endif typedef int SOCKET; -#define INVALID_SOCKET -1 -#define SOCKET_ERROR -1 -#define closesocket close -#define ioctlsocket ioctl -#define socketError errno +# define INVALID_SOCKET -1 +# define SOCKET_ERROR -1 +# define closesocket close +# define ioctlsocket ioctl +# define socketError errno #endif |