Partial fix for WebKit compilation on Windows
authorSimon Hausmann <simon.hausmann@nokia.com>
Tue, 12 Jun 2012 07:57:10 +0000 (09:57 +0200)
committerQt by Nokia <qt-info@nokia.com>
Wed, 13 Jun 2012 21:24:08 +0000 (23:24 +0200)
qdatetime.h uses std::min/max and on Windows windows.h (or some subsequent
header file) may under certain circumstances define min/max as macros.

The easiest way to prevent the windows header files from doing that is to
define NOMINMAX in the place right before windows.h is included. The other
way is to define min and max to min/max themselves to prevent windows.h
from doing its evil thing.

If a user of Qt (WebKit in this case) chooses the approach of defining
min/max to themselves and then includes qdatetime.h, then a subsequent
inclusion of windows.h doesn't work because qdatetime.h undefines min/max.

We should not enforce the type of workaround needed, therefore this patch
removes the workaround from qdatetime.h and requires user code that
happens to include windows header files before qdatetime.h (seldom case)
to choose either workaround.

Change-Id: I7347eec7369491a065e894cff557004e069453d5
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
src/corelib/tools/qdatetime.h
src/network/socket/qnativesocketengine_win.cpp
src/plugins/platforms/windows/accessible/comutils.cpp
tests/auto/network/kernel/qhostinfo/tst_qhostinfo.cpp
tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp
tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp
tests/benchmarks/corelib/io/qdiriterator/main.cpp

index af257ea..a648285 100644 (file)
 #include <QtCore/qnamespace.h>
 #include <QtCore/qsharedpointer.h>
 
-// windows.h defines these identifiers, so undefine it
-// ### figure out where in Qt we include it too soon
-#ifdef max
-# undef max
-#endif
-#ifdef min
-# undef min
-#endif
-
 #include <limits>
 
 QT_BEGIN_HEADER
index bc26a7f..60c4c73 100644 (file)
@@ -39,6 +39,9 @@
 **
 ****************************************************************************/
 
+// Prevent windows system header files from defining min/max as macros.
+#define NOMINMAX
+
 #include <winsock2.h>
 #include <ws2tcpip.h>
 
index 2823306..05227c9 100644 (file)
@@ -38,6 +38,9 @@
 ** $QT_END_LICENSE$
 **
 ****************************************************************************/
+
+#include <qt_windows.h>
+
 #include <ocidl.h>
 #include <olectl.h>
 
index fbcaa2c..5285425 100644 (file)
@@ -50,6 +50,9 @@
 # define QT_NO_GETADDRINFO
 #endif
 
+// To prevent windows system header files from re-defining min/max
+#define NOMINMAX
+
 #if defined(Q_OS_WIN) && !defined(QT_NO_GETADDRINFO)
 # include <winsock2.h>
 # include <ws2tcpip.h>
index 1d9ba55..d37f0b7 100644 (file)
@@ -40,6 +40,8 @@
 ****************************************************************************/
 
 #include <qglobal.h>
+// To prevent windows system header files from re-defining min/max
+#define NOMINMAX
 #if defined(_WIN32)
 #include <winsock2.h>
 #else
index 13c5d96..4caca29 100644 (file)
@@ -41,6 +41,8 @@
 
 #include <qglobal.h>
 
+// To prevent windows system header files from re-defining min/max
+#define NOMINMAX
 #if defined(_WIN32)
 #include <winsock2.h>
 #else
index 758f390..340ed93 100644 (file)
@@ -43,7 +43,7 @@
 #include <QString>
 
 #ifdef Q_OS_WIN
-#   include <windows.h>
+#   include <qt_windows.h>
 #else
 #   include <sys/stat.h>
 #   include <sys/types.h>