-
Notifications
You must be signed in to change notification settings - Fork 328
Making Qt 4.8.7 compile with Visual Studio 2015
Gray Olson edited this page Mar 23, 2019
·
5 revisions
This patch comes from user DarthFutuza's post on the Qt forum.
Download the patch and apply it with patch -p0 < qt-487.patch
.
Content of the patch:
diff --git a/src/3rdparty/clucene/src/CLucene/StdHeader.h b/src/3rdparty/clucene/src/CLucene/StdHeader.h
index 224d400..50adbf6 100644
--- src/3rdparty/clucene/src/CLucene/StdHeader.h
+++ src/3rdparty/clucene/src/CLucene/StdHeader.h
@@ -123,6 +123,9 @@ extern int _lucene_counter_break; //can set a watch on this
#endif
#if !defined(LUCENE_DISABLE_HASHING) && defined(_CL_HAVE_HASH_MAP) && defined(_CL_HAVE_HASH_SET)
+ #if (defined(_MSC_VER) && (_MSC_VER >= 1900))
+ #define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
+ #endif
//hashing is all or nothing!
#include <hash_map>
#include <hash_set>
diff --git a/src/3rdparty/clucene/src/CLucene/util/VoidMap.h b/src/3rdparty/clucene/src/CLucene/util/VoidMap.h
index 1153a01..b37465a 100644
--- src/3rdparty/clucene/src/CLucene/util/VoidMap.h
+++ src/3rdparty/clucene/src/CLucene/util/VoidMap.h
@@ -217,17 +217,28 @@ public:
//A collection that contains no duplicates
//does not guarantee that the order will remain constant over time
+// MSVC2015: https://codereview.qt-project.org/#/c/110682/3//ALL,unified
template<typename _kt, typename _vt,
typename _Compare,
typename _KeyDeletor=CL_NS(util)::Deletor::Dummy,
typename _ValueDeletor=CL_NS(util)::Deletor::Dummy>
class CLSet:public __CLMap<_kt,_vt,
+#if (defined(_MSC_VER) && (_MSC_VER >= 1900))
+ CL_NS_STD(map)<_kt,_vt>,
+#else
CL_NS_STD(map)<_kt,_vt, _Compare>,
+#endif
_KeyDeletor,_ValueDeletor>
{
+#if (defined(_MSC_VER) && (_MSC_VER >= 1900))
+ typedef typename CL_NS_STD(map)<_kt,_vt> _base;
+ typedef __CLMap<_kt, _vt, CL_NS_STD(map)<_kt,_vt>,
+ _KeyDeletor,_ValueDeletor> _this;
+#else
typedef typename CL_NS_STD(map)<_kt,_vt,_Compare> _base;
typedef __CLMap<_kt, _vt, CL_NS_STD(map)<_kt,_vt, _Compare>,
_KeyDeletor,_ValueDeletor> _this;
+#endif
public:
CLSet ( const bool deleteKey=false, const bool deleteValue=false )
{
diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/runtime/ArgList.h b/src/3rdparty/javascriptcore/JavaScriptCore/runtime/ArgList.h
index 8e1fdbe..79511ef 100644
--- src/3rdparty/javascriptcore/JavaScriptCore/runtime/ArgList.h
+++ src/3rdparty/javascriptcore/JavaScriptCore/runtime/ArgList.h
@@ -172,7 +172,10 @@ namespace JSC {
void operator delete[](void*);
void* operator new(size_t, void*);
+// FIXME: strange magic
+#if !(defined(_MSC_VER) && (_MSC_VER >= 1900))
void operator delete(void*, size_t);
+#endif
};
class ArgList {
diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/wtf/StringExtras.h b/src/3rdparty/javascriptcore/JavaScriptCore/wtf/StringExtras.h
index b1ec09f..11670e2 100644
--- src/3rdparty/javascriptcore/JavaScriptCore/wtf/StringExtras.h
+++ src/3rdparty/javascriptcore/JavaScriptCore/wtf/StringExtras.h
@@ -36,6 +36,7 @@
#if COMPILER(MSVC)
// FIXME: why a COMPILER check instead of OS? also, these should be HAVE checks
+#if (_MSC_VER < 1900)
inline int snprintf(char* buffer, size_t count, const char* format, ...)
{
int result;
@@ -45,6 +46,7 @@ inline int snprintf(char* buffer, size_t count, const char* format, ...)
va_end(args);
return result;
}
+#endif
#if COMPILER(MSVC7) || OS(WINCE)
diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/wtf/TypeTraits.h b/src/3rdparty/javascriptcore/JavaScriptCore/wtf/TypeTraits.h
index 7ba487f..790c6a0 100644
--- src/3rdparty/javascriptcore/JavaScriptCore/wtf/TypeTraits.h
+++ src/3rdparty/javascriptcore/JavaScriptCore/wtf/TypeTraits.h
@@ -170,8 +170,16 @@ namespace WTF {
// GCC's libstdc++ 20070724 and later supports C++ TR1 type_traits in the std namespace.
// VC10 (VS2010) and later support C++ TR1 type_traits in the std::tr1 namespace.
+ // VC14 (VS2015) and later support C++11 type_traits in the std namespace, but old TR1 names
+ // have been removed. See https://msdn.microsoft.com/en-us/library/vstudio/bb531344(v=vs.140).aspx
+ // for details.
+#if (defined(_MSC_VER) && (_MSC_VER >= 1900))
+ template<typename T> struct HasTrivialConstructor : public std::is_trivially_default_constructible<T> { };
+ template<typename T> struct HasTrivialDestructor : public std::is_trivially_destructible<T> { };
+#else
template<typename T> struct HasTrivialConstructor : public std::tr1::has_trivial_constructor<T> { };
template<typename T> struct HasTrivialDestructor : public std::tr1::has_trivial_destructor<T> { };
+#endif
#else
diff --git a/src/3rdparty/javascriptcore/WebKit.pri b/src/3rdparty/javascriptcore/WebKit.pri
index 9aaaa99..487aad6 100644
--- src/3rdparty/javascriptcore/WebKit.pri
+++ src/3rdparty/javascriptcore/WebKit.pri
@@ -22,7 +22,7 @@ isEmpty(OUTPUT_DIR) {
DEFINES += BUILDING_QT__=1
building-libs {
- win32-msvc*|win32-icc: INCLUDEPATH += $$PWD/JavaScriptCore/os-win32
+ win32-msvc200*|win32-msvc2010*|win32-msvc2012*|win32-msvc2013*|win32-icc: INCLUDEPATH += $$PWD/JavaScriptCore/os-win32
} else {
CONFIG(QTDIR_build) {
QT += webkit
diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/runtime/ArgList.h b/src/3rdparty/webkit/Source/JavaScriptCore/runtime/ArgList.h
index bb2d2842..627b015 100644
--- src/3rdparty/webkit/Source/JavaScriptCore/runtime/ArgList.h
+++ src/3rdparty/webkit/Source/JavaScriptCore/runtime/ArgList.h
@@ -174,7 +174,10 @@ namespace JSC {
void operator delete[](void*);
void* operator new(size_t, void*);
+// FIXME: strange magic
+#if !(defined(_MSC_VER) && (_MSC_VER >= 1900))
void operator delete(void*, size_t);
+#endif
};
class ArgList {
diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/StringExtras.h b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/StringExtras.h
index 371e33b..37e0858 100644
--- src/3rdparty/webkit/Source/JavaScriptCore/wtf/StringExtras.h
+++ src/3rdparty/webkit/Source/JavaScriptCore/wtf/StringExtras.h
@@ -37,6 +37,7 @@
#if COMPILER(MSVC)
// FIXME: why a COMPILER check instead of OS? also, these should be HAVE checks
+#if (_MSC_VER < 1900)
inline int snprintf(char* buffer, size_t count, const char* format, ...)
{
int result;
@@ -52,6 +53,7 @@ inline int snprintf(char* buffer, size_t count, const char* format, ...)
return result;
}
+#endif
inline double wtf_vsnprintf(char* buffer, size_t count, const char* format, va_list args)
{
diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/TypeTraits.h b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/TypeTraits.h
index 44103cd..7b09980 100644
--- src/3rdparty/webkit/Source/JavaScriptCore/wtf/TypeTraits.h
+++ src/3rdparty/webkit/Source/JavaScriptCore/wtf/TypeTraits.h
@@ -183,8 +183,16 @@ namespace WTF {
// GCC's libstdc++ 20070724 and later supports C++ TR1 type_traits in the std namespace.
// VC10 (VS2010) and later support C++ TR1 type_traits in the std::tr1 namespace.
+ // VC14 (VS2015) and later support C++11 type_traits in the std namespace, but old TR1 names
+ // have been removed. See https://msdn.microsoft.com/en-us/library/vstudio/bb531344(v=vs.140).aspx
+ // for details.
+#if (defined(_MSC_VER) && (_MSC_VER >= 1900))
+ template<typename T> struct HasTrivialConstructor : public std::is_trivially_default_constructible<T> { };
+ template<typename T> struct HasTrivialDestructor : public std::is_trivially_destructible<T> { };
+#else
template<typename T> struct HasTrivialConstructor : public std::tr1::has_trivial_constructor<T> { };
template<typename T> struct HasTrivialDestructor : public std::tr1::has_trivial_destructor<T> { };
+#endif
#else
diff --git a/src/3rdparty/webkit/Source/WebKit.pri b/src/3rdparty/webkit/Source/WebKit.pri
index 01f88a4..b607444 100644
--- src/3rdparty/webkit/Source/WebKit.pri
+++ src/3rdparty/webkit/Source/WebKit.pri
@@ -38,7 +38,7 @@ DEPENDPATH += $$OUT_PWD
DEFINES += BUILDING_QT__=1
building-libs {
- win32-msvc*|win32-icc: INCLUDEPATH += $$PWD/JavaScriptCore/os-win32
+ win32-msvc200*|win32-msvc2010*|win32-msvc2012*|win32-msvc2013*|win32-icc: INCLUDEPATH += $$PWD/JavaScriptCore/os-win32
} else {
CONFIG(QTDIR_build) {
QT += webkit