From 5dbf05a3ee4add64f69a9f3f27114fe8fa8efe3f Mon Sep 17 00:00:00 2001 From: meep-eep Date: Fri, 27 Oct 2006 21:30:41 +0000 Subject: [PATCH] More fixes for MinGW build. git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@2470 8092fc87-c524-0410-9efc-e669fe64eaf9 --- sc2/build.vars.in | 4 +++- sc2/build/unix/build.config | 2 +- sc2/src/msvc++/UrQuanMasters.dsp | 4 ++++ sc2/src/port.h | 20 +++++++++++++++++++ sc2/src/sc2code/libs/network/FILES | 2 ++ sc2/src/sc2code/libs/network/Makeinfo | 3 +++ .../sc2code/libs/network/connect/connect.c | 2 +- sc2/src/sc2code/libs/network/connect/listen.c | 2 +- .../sc2code/libs/network/connect/resolve.h | 3 ++- sc2/src/sc2code/libs/network/netport.h | 10 ++++++++++ .../sc2code/libs/network/socket/socket_win.c | 1 + .../sc2code/libs/network/socket/socket_win.h | 1 + 12 files changed, 49 insertions(+), 5 deletions(-) diff --git a/sc2/build.vars.in b/sc2/build.vars.in index d97b1ea2f..62669bd16 100644 --- a/sc2/build.vars.in +++ b/sc2/build.vars.in @@ -41,7 +41,9 @@ uqm_USE_PLATFORM_ACCEL='@USE_PLATFORM_ACCEL@' uqm_NETPLAY='@NETPLAY@' uqm_USE_WINSOCK='@USE_WINSOCK@' DEBUG='@DEBUG@' +MACRO_WIN32='@MACRO_WIN32@' +MACRO___MINGW32__='@MACRO___MINGW32__@' export BUILD_SYSTEM HOST_SYSTEM DEBUG -export MACRO_WIN32 MACRO__MCS_VER MACRO___MINGW32__ +export MACRO_WIN32 MACRO___MINGW32__ export uqm_SOUNDMODULE uqm_USE_INTERNAL_MIKMOD uqm_HAVE_REGEX uqm_USE_WINSOCK export uqm_HAVE_OPENGL uqm_USE_ZIP_IO uqm_USE_PLATFORM_ACCEL uqm_NETPLAY diff --git a/sc2/build/unix/build.config b/sc2/build/unix/build.config index a8c18314c..5ea281b0b 100644 --- a/sc2/build/unix/build.config +++ b/sc2/build/unix/build.config @@ -346,7 +346,7 @@ uqm_process_config() { HAVE_OPENGL HAVE_REGEX_H_FLAG USE_ZIP_IO \ USE_PLATFORM_ACCEL USE_WINSOCK \ INSTALL_LIBDIR INSTALL_BINDIR INSTALL_SHAREDIR \ - REZ WINDRES" + REZ WINDRES $HAVE_SYMBOLS" SUBSTITUTE_FILES="build.vars" substitute_vars SUBSTITUTE_VARS SUBSTITUTE_FILES . "$BUILD_WORK" diff --git a/sc2/src/msvc++/UrQuanMasters.dsp b/sc2/src/msvc++/UrQuanMasters.dsp index e1f19bcb9..09dffad29 100644 --- a/sc2/src/msvc++/UrQuanMasters.dsp +++ b/sc2/src/msvc++/UrQuanMasters.dsp @@ -1439,6 +1439,10 @@ SOURCE=..\sc2code\libs\network\socket\socket_win.h # End Source File # End Group +# Begin Source File + +SOURCE=..\sc2code\libs\network\wspiapiwrap.h +# End Source File # End Group # Begin Source File diff --git a/sc2/src/port.h b/sc2/src/port.h index ef98ff0b6..e85b45e43 100644 --- a/sc2/src/port.h +++ b/sc2/src/port.h @@ -3,6 +3,22 @@ #include "config.h" +#ifdef __MINGW32__ +// Microsoft Windows headers expect this to be set. The MSVC compiler sets +// it, but MinGW doesn't. +# if defined(_X86_) +# define _M_IX86 +# elif defined(_IA64_) +# define _M_IA64 +# elif defined(__amd64__) +# define _M_AMD64 +# elif defined(__m68k__) +# define _68K_ +# elif defined(__ppc__) +# define _M_PPC +# endif +#endif + #ifdef _MSC_VER # include #else @@ -30,6 +46,10 @@ int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result); # define inline __inline #else # define inline __inline__ +# ifdef __MINGW32__ + // For when including Microsoft Windows header files. +# define _inline inline +# endif #endif // Directories diff --git a/sc2/src/sc2code/libs/network/FILES b/sc2/src/sc2code/libs/network/FILES index 8725b9f23..ddcd68569 100644 --- a/sc2/src/sc2code/libs/network/FILES +++ b/sc2/src/sc2code/libs/network/FILES @@ -4,6 +4,8 @@ bytesex.h Functions for endianness conversions. network.h Functions for initialising the network subsystem. network_bsd.c Network subsystem functions for BSD sockets. network_win.c Network subsystem functions for Winsock sockets. +wspiapiwrap.{c,h} Hack to make sure is #included in exactly + one file. In libs/network/netmanager/: ndesc.{c,h} Defines network descriptors. diff --git a/sc2/src/sc2code/libs/network/Makeinfo b/sc2/src/sc2code/libs/network/Makeinfo index 1278f91d4..3afab6fa1 100644 --- a/sc2/src/sc2code/libs/network/Makeinfo +++ b/sc2/src/sc2code/libs/network/Makeinfo @@ -2,6 +2,9 @@ uqm_SUBDIRS="connect netmanager socket" uqm_CFILES="netport.c" if [ -n "$uqm_USE_WINSOCK" ]; then uqm_CFILES="$uqm_CFILES network_win.c" + if [ -n "$MACRO___MINGW32__" ]; then + uqm_CFILES="$uqm_CFILES wspiapiwrap.c" + fi else uqm_CFILES="$uqm_CFILES network_bsd.c" fi diff --git a/sc2/src/sc2code/libs/network/connect/connect.c b/sc2/src/sc2code/libs/network/connect/connect.c index 482b4dfc3..339045792 100644 --- a/sc2/src/sc2code/libs/network/connect/connect.c +++ b/sc2/src/sc2code/libs/network/connect/connect.c @@ -36,7 +36,7 @@ #ifdef USE_WINSOCK # include # include -# include +# include "../wspiapiwrap.h" #else # include #endif diff --git a/sc2/src/sc2code/libs/network/connect/listen.c b/sc2/src/sc2code/libs/network/connect/listen.c index 78c75740f..55c34ab3a 100644 --- a/sc2/src/sc2code/libs/network/connect/listen.c +++ b/sc2/src/sc2code/libs/network/connect/listen.c @@ -40,7 +40,7 @@ #endif #ifdef DEBUG # ifdef USE_WINSOCK -# include +# include "../wspiapiwrap.h" # endif #endif #include diff --git a/sc2/src/sc2code/libs/network/connect/resolve.h b/sc2/src/sc2code/libs/network/connect/resolve.h index 9702acaf0..92bb91c94 100644 --- a/sc2/src/sc2code/libs/network/connect/resolve.h +++ b/sc2/src/sc2code/libs/network/connect/resolve.h @@ -29,6 +29,7 @@ typedef enum { typedef struct ResolveState ResolveState; #include "port.h" +#include "../netport.h" // For addrinfo. #ifdef USE_WINSOCK @@ -67,7 +68,7 @@ typedef void (*ResolveErrorCallback)(ResolveState *resolveState, #ifdef USE_WINSOCK # include # include -# include +# include "../wspiapiwrap.h" #else /* !defined(USE_WINSOCK) */ # include #endif /* !defined(USE_WINSOCK) */ diff --git a/sc2/src/sc2code/libs/network/netport.h b/sc2/src/sc2code/libs/network/netport.h index ce4899f3f..2cd344a19 100644 --- a/sc2/src/sc2code/libs/network/netport.h +++ b/sc2/src/sc2code/libs/network/netport.h @@ -26,6 +26,16 @@ int winsockErrorToErrno(int winsockError); int getWinsockErrno(void); # define EAI_SYSTEM 0x02000001 // Any value will do that doesn't conflict with an existing value. + +#ifdef __MINGW32__ +// MinGW does not have a working gai_strerror() yet. +static inline const char * +gai_strerror(int err) { + (void) err; + return "[gai_strerror() is not available on MinGW]"; +} +#endif /* defined(__MINGW32__) */ + #endif #endif /* _NETPORT_H */ diff --git a/sc2/src/sc2code/libs/network/socket/socket_win.c b/sc2/src/sc2code/libs/network/socket/socket_win.c index 92b4f9981..af57173e9 100644 --- a/sc2/src/sc2code/libs/network/socket/socket_win.c +++ b/sc2/src/sc2code/libs/network/socket/socket_win.c @@ -20,6 +20,7 @@ #define PORT_WANT_ERRNO #include "port.h" +#include "../netport.h" #define SOCKET_INTERNAL #include "socket.h" diff --git a/sc2/src/sc2code/libs/network/socket/socket_win.h b/sc2/src/sc2code/libs/network/socket/socket_win.h index 305cc1333..9e1e3e2da 100644 --- a/sc2/src/sc2code/libs/network/socket/socket_win.h +++ b/sc2/src/sc2code/libs/network/socket/socket_win.h @@ -27,6 +27,7 @@ struct Socket { #endif /* SOCKET_INTERNAL */ typedef int socklen_t; +struct sockaddr; #endif /* _SOCKET_WIN_H */