diff --git a/CHANGES b/CHANGES index b110a07cfb..fc06e5fc76 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +3605. [port] win32: Addressed several compatibility issues + with newer versions of Visual Studio. [RT #33916] + 3604. [bug] Fixed a compile-time error when building with JSON but not XML. [RT #33959] diff --git a/bin/named/win32/ntservice.c b/bin/named/win32/ntservice.c index d0245e1fdf..b978bc1001 100644 --- a/bin/named/win32/ntservice.c +++ b/bin/named/win32/ntservice.c @@ -28,6 +28,11 @@ #include #include +/* In fact more bound to the platform toolset... */ +#if defined(_M_IX86) && (_MSC_VER < 1600) +#define ISC_ADJUST_FDIV +#endif + /* Handle to SCM for updating service status */ static SERVICE_STATUS_HANDLE hServiceStatus = 0; static BOOL foreground = FALSE; @@ -199,7 +204,7 @@ _CRTIMP void __cdecl __getmainargs(int *, char ***, char ***, int, _startupinfo *); void __cdecl _setargv(void); -#ifdef _M_IX86 +#ifdef ISC_ADJUST_FDIV /* Pentium FDIV adjustment */ extern int _adjust_fdiv; extern int * _imp___adjust_fdiv; @@ -236,7 +241,7 @@ void GetArgs(int *argc, char ***argv, char ***envp) __getmainargs(argc, argv, envp, _dowildcard, &startinfo); __initenv = *envp; -#ifdef _M_IX86 +#ifdef ISC_ADJUST_FDIV _adjust_fdiv = * _imp___adjust_fdiv; _setdefaultprecision(); #endif diff --git a/lib/isc/win32/include/isc/net.h b/lib/isc/win32/include/isc/net.h index ba2d7faef5..ce0566eabf 100644 --- a/lib/isc/win32/include/isc/net.h +++ b/lib/isc/win32/include/isc/net.h @@ -189,41 +189,113 @@ typedef isc_uint16_t in_port_t; * Use the WSA constants instead. */ +#include + +#ifndef EWOULDBLOCK #define EWOULDBLOCK WSAEWOULDBLOCK +#endif +#ifndef EINPROGRESS #define EINPROGRESS WSAEINPROGRESS +#endif +#ifndef EALREADY #define EALREADY WSAEALREADY +#endif +#ifndef ENOTSOCK #define ENOTSOCK WSAENOTSOCK +#endif +#ifndef EDESTADDRREQ #define EDESTADDRREQ WSAEDESTADDRREQ +#endif +#ifndef EMSGSIZE #define EMSGSIZE WSAEMSGSIZE +#endif +#ifndef EPROTOTYPE #define EPROTOTYPE WSAEPROTOTYPE +#endif +#ifndef ENOPROTOOPT #define ENOPROTOOPT WSAENOPROTOOPT +#endif +#ifndef EPROTONOSUPPORT #define EPROTONOSUPPORT WSAEPROTONOSUPPORT +#endif +#ifndef ESOCKTNOSUPPORT #define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT +#endif +#ifndef EOPNOTSUPP #define EOPNOTSUPP WSAEOPNOTSUPP +#endif +#ifndef EPFNOSUPPORT #define EPFNOSUPPORT WSAEPFNOSUPPORT +#endif +#ifndef EAFNOSUPPORT #define EAFNOSUPPORT WSAEAFNOSUPPORT +#endif +#ifndef EADDRINUSE #define EADDRINUSE WSAEADDRINUSE +#endif +#ifndef EADDRNOTAVAIL #define EADDRNOTAVAIL WSAEADDRNOTAVAIL +#endif +#ifndef ENETDOWN #define ENETDOWN WSAENETDOWN +#endif +#ifndef ENETUNREACH #define ENETUNREACH WSAENETUNREACH +#endif +#ifndef ENETRESET #define ENETRESET WSAENETRESET +#endif +#ifndef ECONNABORTED #define ECONNABORTED WSAECONNABORTED +#endif +#ifndef ECONNRESET #define ECONNRESET WSAECONNRESET +#endif +#ifndef ENOBUFS #define ENOBUFS WSAENOBUFS +#endif +#ifndef EISCONN #define EISCONN WSAEISCONN +#endif +#ifndef ENOTCONN #define ENOTCONN WSAENOTCONN +#endif +#ifndef ESHUTDOWN #define ESHUTDOWN WSAESHUTDOWN +#endif +#ifndef ETOOMANYREFS #define ETOOMANYREFS WSAETOOMANYREFS +#endif +#ifndef ETIMEDOUT #define ETIMEDOUT WSAETIMEDOUT +#endif +#ifndef ECONNREFUSED #define ECONNREFUSED WSAECONNREFUSED +#endif +#ifndef ELOOP #define ELOOP WSAELOOP +#endif +#ifndef EHOSTDOWN #define EHOSTDOWN WSAEHOSTDOWN +#endif +#ifndef EHOSTUNREACH #define EHOSTUNREACH WSAEHOSTUNREACH +#endif +#ifndef EPROCLIM #define EPROCLIM WSAEPROCLIM +#endif +#ifndef EUSERS #define EUSERS WSAEUSERS +#endif +#ifndef EDQUOT #define EDQUOT WSAEDQUOT +#endif +#ifndef ESTALE #define ESTALE WSAESTALE +#endif +#ifndef EREMOTE #define EREMOTE WSAEREMOTE +#endif /*** diff --git a/lib/isc/win32/netdb.h b/lib/isc/win32/netdb.h index f8d936a99f..3e17c2e4c8 100644 --- a/lib/isc/win32/netdb.h +++ b/lib/isc/win32/netdb.h @@ -27,6 +27,7 @@ * Define if does not declare struct addrinfo. */ +#if _MSC_VER < 1600 struct addrinfo { int ai_flags; /* AI_PASSIVE, AI_CANONNAME */ int ai_family; /* PF_xxx */ @@ -37,6 +38,7 @@ struct addrinfo { struct sockaddr *ai_addr; /* Binary address */ struct addrinfo *ai_next; /* Next structure in linked list */ }; +#endif /* diff --git a/lib/isc/win32/stdio.c b/lib/isc/win32/stdio.c index c7cecff674..3163e1bc9d 100644 --- a/lib/isc/win32/stdio.c +++ b/lib/isc/win32/stdio.c @@ -51,9 +51,10 @@ isc_stdio_close(FILE *f) { isc_result_t isc_stdio_seek(FILE *f, off_t offset, int whence) { + /* based on the fact off_t is typedef to long */ int r; - r = fseeko(f, offset, whence); + r = fseek(f, offset, whence); if (r == 0) return (ISC_R_SUCCESS); else @@ -62,11 +63,12 @@ isc_stdio_seek(FILE *f, off_t offset, int whence) { isc_result_t isc_stdio_tell(FILE *f, off_t *offsetp) { - off_t r; + /* based on the fact off_t is typedef to long */ + long r; REQUIRE(offsetp != NULL); - r = ftello(f); + r = ftell(f); if (r >= 0) { *offsetp = r; return (ISC_R_SUCCESS); diff --git a/lib/lwres/win32/include/lwres/net.h b/lib/lwres/win32/include/lwres/net.h index 94e4af438e..599ced2d1d 100644 --- a/lib/lwres/win32/include/lwres/net.h +++ b/lib/lwres/win32/include/lwres/net.h @@ -112,41 +112,113 @@ * Use the WSA constants instead. */ +#include + +#ifndef EWOULDBLOCK #define EWOULDBLOCK WSAEWOULDBLOCK +#endif +#ifndef EINPROGRESS #define EINPROGRESS WSAEINPROGRESS +#endif +#ifndef EALREADY #define EALREADY WSAEALREADY +#endif +#ifndef ENOTSOCK #define ENOTSOCK WSAENOTSOCK +#endif +#ifndef EDESTADDRREQ #define EDESTADDRREQ WSAEDESTADDRREQ +#endif +#ifndef EMSGSIZE #define EMSGSIZE WSAEMSGSIZE +#endif +#ifndef EPROTOTYPE #define EPROTOTYPE WSAEPROTOTYPE +#endif +#ifndef ENOPROTOOPT #define ENOPROTOOPT WSAENOPROTOOPT +#endif +#ifndef EPROTONOSUPPORT #define EPROTONOSUPPORT WSAEPROTONOSUPPORT +#endif +#ifndef ESOCKTNOSUPPORT #define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT +#endif +#ifndef EOPNOTSUPP #define EOPNOTSUPP WSAEOPNOTSUPP +#endif +#ifndef EPFNOSUPPORT #define EPFNOSUPPORT WSAEPFNOSUPPORT +#endif +#ifndef EAFNOSUPPORT #define EAFNOSUPPORT WSAEAFNOSUPPORT +#endif +#ifndef EADDRINUSE #define EADDRINUSE WSAEADDRINUSE +#endif +#ifndef EADDRNOTAVAIL #define EADDRNOTAVAIL WSAEADDRNOTAVAIL +#endif +#ifndef ENETDOWN #define ENETDOWN WSAENETDOWN +#endif +#ifndef ENETUNREACH #define ENETUNREACH WSAENETUNREACH +#endif +#ifndef ENETRESET #define ENETRESET WSAENETRESET +#endif +#ifndef ECONNABORTED #define ECONNABORTED WSAECONNABORTED +#endif +#ifndef ECONNRESET #define ECONNRESET WSAECONNRESET +#endif +#ifndef ENOBUFS #define ENOBUFS WSAENOBUFS +#endif +#ifndef EISCONN #define EISCONN WSAEISCONN +#endif +#ifndef ENOTCONN #define ENOTCONN WSAENOTCONN +#endif +#ifndef ESHUTDOWN #define ESHUTDOWN WSAESHUTDOWN +#endif +#ifndef ETOOMANYREFS #define ETOOMANYREFS WSAETOOMANYREFS +#endif +#ifndef ETIMEDOUT #define ETIMEDOUT WSAETIMEDOUT +#endif +#ifndef ECONNREFUSED #define ECONNREFUSED WSAECONNREFUSED +#endif +#ifndef ELOOP #define ELOOP WSAELOOP +#endif +#ifndef EHOSTDOWN #define EHOSTDOWN WSAEHOSTDOWN +#endif +#ifndef EHOSTUNREACH #define EHOSTUNREACH WSAEHOSTUNREACH +#endif +#ifndef EPROCLIM #define EPROCLIM WSAEPROCLIM +#endif +#ifndef EUSERS #define EUSERS WSAEUSERS +#endif +#ifndef EDQUOT #define EDQUOT WSAEDQUOT +#endif +#ifndef ESTALE #define ESTALE WSAESTALE +#endif +#ifndef EREMOTE #define EREMOTE WSAEREMOTE +#endif LWRES_LANG_BEGINDECLS diff --git a/lib/lwres/win32/include/lwres/netdb.h b/lib/lwres/win32/include/lwres/netdb.h index 41146c8803..087e9a1251 100644 --- a/lib/lwres/win32/include/lwres/netdb.h +++ b/lib/lwres/win32/include/lwres/netdb.h @@ -31,7 +31,9 @@ /* * Define if does not declare struct addrinfo. */ +#if _MSC_VER < 1600 #define ISC_LWRES_NEEDADDRINFO 1 +#endif #ifdef ISC_LWRES_NEEDADDRINFO struct addrinfo { diff --git a/win32utils/BuildSetup.bat b/win32utils/BuildSetup.bat index 21f7e38a05..2bdd319cb0 100644 --- a/win32utils/BuildSetup.bat +++ b/win32utils/BuildSetup.bat @@ -81,6 +81,36 @@ copy ..\doc\misc\migration-4to9 ..\Build\Release call SetupLibs.bat +rem +rem try to find vcredist_x86.exe upper +rem +if Not Defined VCRedistPath ( +if Exist ..\..\vcredist_x86.exe set VCRedistPath=..\..\vcredist_x86.exe +) + +rem +rem get vcredist where someone said it should be +rem +if Defined VCRedistPath ( + +if Exist "%VCRedistPath%" ( + +echo Copying Visual C x86 Redistributable Installer + +rem +rem Use /Y so we allways have the current version of the installer. +rem + +copy /Y "%VCRedistPath%" ..\Build\Release\ +copy /Y "%VCRedistPath%" ..\Build\Debug\ + +) else ( + + echo "**** %VCRedistPath% not found ****" + +) +) else ( + rem rem set vcredist here so that it is correctly expanded in the if body rem @@ -106,8 +136,14 @@ copy /Y "%FrameworkSDKDir%\%vcredist%" ..\Build\Debug\ echo "**** %FrameworkSDKDir%\%vcredist% not found ****" ) ) else ( +if NOT Defined FrameworkDir ( echo "**** Warning FrameworkSDKDir not defined ****" echo "**** Run vsvars32.bat ****" +) else ( + echo "**** vcredist_x86.exe not found ****" + echo "**** please set VCRedistPath ****" +) +) ) echo Running Message Compiler diff --git a/win32utils/win32-build.txt b/win32utils/win32-build.txt index e0dcfbbbe5..fa4939ad2a 100644 --- a/win32utils/win32-build.txt +++ b/win32utils/win32-build.txt @@ -4,7 +4,7 @@ See COPYRIGHT in the source root or http://isc.org/copyright.html for terms. $Id$ - BIND 9.10 for Win32 Source Build Instructions. 12-June-2013 + BIND 9.10 for Win32 Source Build Instructions. 24-June-2013 Building BIND 9.10 on Windows XP/Vista/7/8 or server 2003/2008/2008R2 has the following prerequisites: @@ -22,7 +22,12 @@ on the system on which you are building BIND. the system on which you are building BIND. (If you do not wish to use the statistics channel, remove HAVE_LIBXML2 from config.h.win32.) -4) If you want to build using Visual C++ 6.0, you'll need some extra +4) The BIND Installer (BINDInstall) includes a copy of the +redistributable runtime object vcredist_x86.exe, which is included +with Visual Studio and can be downloaded from Microsoft. This file +must be in place prior to running the build setup script. + +5) If you want to build using Visual C++ 6.0, you'll need some extra files that are to be found in the Platform SDK (which you will need to install), namely: