From f42c0dcca86f2009c089e27ba513cb6fc9ee88ba Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Wed, 26 Jun 2013 14:38:35 -0700 Subject: [PATCH] [master] win32 fixes 3605. [port] win32: Addressed several compatibility issues with newer versions of Visual Studio. [RT #33916] Squashed commit of the following: commit 4127af15f85da90cf2bd3a0c5a558daae89e833a Author: Francis Dupont Date: Tue Jun 25 22:41:53 2013 +0200 make the last change to be text commit 21ef4891b9ee3e3aefb45d4c80d5cb7ec78f264f Author: Curtis Blackburn Date: Tue Jun 25 12:35:08 2013 -0500 [rt33916] re-worded for easier reading commit 83828e47e62fea4070441e645ba8fed338255ceb Author: Francis Dupont Date: Mon Jun 24 16:08:11 2013 +0200 introduce a VCRedistPath env var commit 0337f2554f168993a65945e78c2879e9bfca5293 Author: Francis Dupont Date: Sun Jun 23 01:23:26 2013 +0200 _adjust_fdiv for VS < 2010 commit 375fdd5c06be276b0ff0ad589c0e22b809339fe9 Author: Francis Dupont Date: Thu Jun 20 16:27:04 2013 +0200 move to MSVC v1600 as it still breaks on VS 2010 commit bfcaf72071e9d8df1d0ce0c5f05b69acd51bf698 Author: Francis Dupont Date: Thu Jun 20 15:57:35 2013 +0200 WIN32: avoid addrinfo redef commit 18504c3e50b11e66a0b573c7cb3d61094bfa5b52 Author: Francis Dupont Date: Thu Jun 20 15:54:38 2013 +0200 WIN32: fseek/ftell commit f9a4fdccc5ab1c74c64412fb76da7dfd161787b2 Author: Francis Dupont Date: Thu Jun 20 15:13:01 2013 +0200 fix WIN32 error redefs in net.h (isc ad lwres libs) --- CHANGES | 3 ++ bin/named/win32/ntservice.c | 9 +++- lib/isc/win32/include/isc/net.h | 72 +++++++++++++++++++++++++++ lib/isc/win32/netdb.h | 2 + lib/isc/win32/stdio.c | 8 +-- lib/lwres/win32/include/lwres/net.h | 72 +++++++++++++++++++++++++++ lib/lwres/win32/include/lwres/netdb.h | 2 + win32utils/BuildSetup.bat | 36 ++++++++++++++ win32utils/win32-build.txt | 9 +++- 9 files changed, 206 insertions(+), 7 deletions(-) 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: