[packages/qt4] - fix building with gcc9 and -std=c++11 to stop polluting everything with gnu++98 - rel 23

baggins baggins at pld-linux.org
Sat Sep 14 23:34:01 CEST 2019


commit b42b0c7fae8860fc46b9a9f4d937f4d8066f2daf
Author: Jan Rękorajski <baggins at pld-linux.org>
Date:   Sat Sep 14 23:30:59 2019 +0200

    - fix building with gcc9 and -std=c++11 to stop polluting everything with gnu++98
    - rel 23

 cxx11.patch         | 123 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 gcc9-qforeach.patch |  64 +++++++++++++++++++++++++++
 gcc9.patch          |  11 +++++
 mysql-link.patch    |  11 +++++
 qt4.spec            |  14 ++++--
 5 files changed, 220 insertions(+), 3 deletions(-)
---
diff --git a/qt4.spec b/qt4.spec
index 8a40730..c742741 100644
--- a/qt4.spec
+++ b/qt4.spec
@@ -63,7 +63,7 @@ Summary(pl.UTF-8):	Biblioteka Qt do tworzenia GUI
 Summary(pt_BR.UTF-8):	Estrutura para rodar aplicações GUI Qt
 Name:		qt4
 Version:	4.8.7
-Release:	22
+Release:	23
 License:	LGPL v2.1 or GPL v3.0
 Group:		X11/Libraries
 Source0:	http://download.qt-project.org/official_releases/qt/4.8/%{version}/qt-everywhere-opensource-src-%{version}.tar.gz
@@ -128,6 +128,10 @@ Patch46:	qt-everywhere-opensource-src-4.8.3-qdbusconnection_no_debug.patch
 Patch47:	qt-everywhere-opensource-src-4.8.2--assistant-crash.patch
 Patch48:	qt-everywhere-opensource-src-4.8.0-QTBUG-22037.patch
 Patch49:	icu59.patch
+Patch50:	mysql-link.patch
+Patch51:	gcc9.patch
+Patch52:	gcc9-qforeach.patch
+Patch53:	cxx11.patch
 URL:		http://qt-project.org/
 %{?with_ibase:BuildRequires:	Firebird-devel}
 %{?with_openvg:BuildRequires:	Mesa-libOpenVG-devel}
@@ -1566,6 +1570,10 @@ Programas exemplo para o Qt versão.
 %patch47 -p1
 %patch48 -p1
 %patch49 -p1
+%patch50 -p1
+%patch51 -p1
+%patch52 -p1
+%patch53 -p1
 
 %{__sed} -i -e 's,usr/X11R6/,usr/g,' mkspecs/linux-g++-64/qmake.conf \
 	mkspecs/common/linux.conf
@@ -1577,9 +1585,9 @@ Programas exemplo para o Qt versão.
 	s|QMAKE_LINK.*=.*g++|QMAKE_LINK\t\t= %{__cxx}|;
 	s|QMAKE_LINK_SHLIB.*=.*g++|QMAKE_LINK_SHLIB\t= %{__cxx}|;
 	s|QMAKE_CFLAGS_RELEASE.*|QMAKE_CFLAGS_RELEASE\t+= %{rpmcppflags} %{rpmcflags}|;
-	s|QMAKE_CXXFLAGS_RELEASE.*|QMAKE_CXXFLAGS_RELEASE\t+= %{rpmcppflags} %{rpmcxxflags} -std=gnu++98|;
+	s|QMAKE_CXXFLAGS_RELEASE.*|QMAKE_CXXFLAGS_RELEASE\t+= %{rpmcppflags} %{rpmcxxflags}|;
 	s|QMAKE_CFLAGS_DEBUG.*|QMAKE_CFLAGS_DEBUG\t+= %{debugcflags}|;
-	s|QMAKE_CXXFLAGS_DEBUG.*|QMAKE_CXXFLAGS_DEBUG\t+= %{debugcflags} -std=gnu++98|;
+	s|QMAKE_CXXFLAGS_DEBUG.*|QMAKE_CXXFLAGS_DEBUG\t+= %{debugcflags}|;
 	' mkspecs/common/g++-base.conf
 
 %{__sed} -i -e '
diff --git a/cxx11.patch b/cxx11.patch
new file mode 100644
index 0000000..3ee7cac
--- /dev/null
+++ b/cxx11.patch
@@ -0,0 +1,123 @@
+--- qt-everywhere-opensource-src-4.8.7/src/3rdparty/javascriptcore/JavaScriptCore/wtf/TypeTraits.h~	2015-05-07 16:14:48.000000000 +0200
++++ qt-everywhere-opensource-src-4.8.7/src/3rdparty/javascriptcore/JavaScriptCore/wtf/TypeTraits.h	2019-09-14 17:24:05.875744690 +0200
+@@ -170,8 +170,8 @@
+ 
+     // 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.
+-    template<typename T> struct HasTrivialConstructor : public std::tr1::has_trivial_constructor<T> { };
+-    template<typename T> struct HasTrivialDestructor : public std::tr1::has_trivial_destructor<T> { };
++    template<typename T> struct HasTrivialConstructor : public std::is_trivially_constructible<T> { };
++    template<typename T> struct HasTrivialDestructor : public std::is_trivially_destructible<T> { };
+ 
+ #else
+ 
+--- qt-everywhere-opensource-src-4.8.7/src/3rdparty/javascriptcore/JavaScriptCore/wtf/HashTable.h~	2015-05-07 16:14:48.000000000 +0200
++++ qt-everywhere-opensource-src-4.8.7/src/3rdparty/javascriptcore/JavaScriptCore/wtf/HashTable.h	2019-09-14 20:25:57.045375344 +0200
+@@ -257,7 +257,7 @@
+ 
+     using std::swap;
+ 
+-#if !COMPILER(MSVC) && !OS(QNX) && !defined(_LIBCPP_VERSION)
++#if 0 && !COMPILER(MSVC) && !OS(QNX) && !defined(_LIBCPP_VERSION)
+     // The Dinkumware C++ library (used by MSVC and QNX) and clang's libc++ have a swap for pairs defined.
+ 
+     // swap pairs by component, in case of pair members that specialize swap
+--- qt-everywhere-opensource-src-4.8.7/src/3rdparty/javascriptcore/JavaScriptCore/runtime/Structure.h~	2015-05-07 16:14:48.000000000 +0200
++++ qt-everywhere-opensource-src-4.8.7/src/3rdparty/javascriptcore/JavaScriptCore/runtime/Structure.h	2019-09-14 18:06:14.575659781 +0200
+@@ -317,7 +317,7 @@
+         TransitionTable* transitionTable = new TransitionTable;
+         setTransitionTable(transitionTable);
+         if (existingTransition)
+-            add(StructureTransitionTableHash::Key(RefPtr<UString::Rep>(existingTransition->m_nameInPrevious.get()), existingTransition->m_attributesInPrevious), existingTransition, existingTransition->m_specificValueInPrevious);
++            add(StructureTransitionTableHash::Key(RefPtr<UString::Rep>(existingTransition->m_nameInPrevious.get()), +existingTransition->m_attributesInPrevious), existingTransition, existingTransition->m_specificValueInPrevious);
+     }
+ } // namespace JSC
+ 
+--- qt-everywhere-opensource-src-4.8.7/src/3rdparty/javascriptcore/JavaScriptCore/runtime/Structure.cpp~	2015-05-07 16:14:48.000000000 +0200
++++ qt-everywhere-opensource-src-4.8.7/src/3rdparty/javascriptcore/JavaScriptCore/runtime/Structure.cpp	2019-09-14 18:05:24.248994834 +0200
+@@ -157,7 +157,7 @@
+ {
+     if (m_previous) {
+         if (m_nameInPrevious)
+-            m_previous->table.remove(StructureTransitionTableHash::Key(RefPtr<UString::Rep>(m_nameInPrevious.get()), m_attributesInPrevious), m_specificValueInPrevious);
++            m_previous->table.remove(StructureTransitionTableHash::Key(RefPtr<UString::Rep>(m_nameInPrevious.get()), +m_attributesInPrevious), m_specificValueInPrevious);
+         else
+             m_previous->table.removeAnonymousSlotTransition(m_anonymousSlotsInPrevious);
+ 
+@@ -280,7 +280,7 @@
+             continue;
+         }
+         structure->m_nameInPrevious->ref();
+-        PropertyMapEntry entry(structure->m_nameInPrevious.get(), structure->m_offset, structure->m_attributesInPrevious, structure->m_specificValueInPrevious, ++m_propertyTable->lastIndexUsed);
++        PropertyMapEntry entry(structure->m_nameInPrevious.get(), structure->m_offset, +structure->m_attributesInPrevious, structure->m_specificValueInPrevious, ++m_propertyTable->lastIndexUsed);
+         insertIntoPropertyMapHashTable(entry);
+     }
+ }
+--- qt-everywhere-opensource-src-4.8.7/src/3rdparty/javascriptcore/JavaScriptCore/yarr/RegexCompiler.cpp~	2015-05-07 16:14:47.000000000 +0200
++++ qt-everywhere-opensource-src-4.8.7/src/3rdparty/javascriptcore/JavaScriptCore/yarr/RegexCompiler.cpp	2019-09-14 18:26:54.518951294 +0200
+@@ -719,7 +719,7 @@
+ 
+     constructor.setupOffsets();
+ 
+-    return false;
++    return nullptr;
+ };
+ 
+ 
+--- qt-everywhere-opensource-src-4.8.7/src/3rdparty/webkit/Source/JavaScriptCore/wtf/TypeTraits.h~	2015-05-07 16:14:45.000000000 +0200
++++ qt-everywhere-opensource-src-4.8.7/src/3rdparty/webkit/Source/JavaScriptCore/wtf/TypeTraits.h	2019-09-14 18:23:03.718959093 +0200
+@@ -183,8 +183,8 @@
+ 
+     // 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.
+-    template<typename T> struct HasTrivialConstructor : public std::tr1::has_trivial_constructor<T> { };
+-    template<typename T> struct HasTrivialDestructor : public std::tr1::has_trivial_destructor<T> { };
++    template<typename T> struct HasTrivialConstructor : public std::is_trivially_constructible<T> { };
++    template<typename T> struct HasTrivialDestructor : public std::is_trivially_destructible<T> { };
+ 
+ #else
+ 
+--- qt-everywhere-opensource-src-4.8.7/src/3rdparty/webkit/Source/JavaScriptCore/wtf/HashSet.h~	2015-05-07 16:14:45.000000000 +0200
++++ qt-everywhere-opensource-src-4.8.7/src/3rdparty/webkit/Source/JavaScriptCore/wtf/HashSet.h	2019-09-14 18:32:15.168940587 +0200
+@@ -188,7 +188,8 @@
+ #if COMPILER(MSVC) && _MSC_VER >= 1700
+         return iterator_const_cast(m_impl.add(value));
+ #else
+-        return m_impl.add(value);
++        pair<typename HashTableType::iterator, bool> p = m_impl.add(value);
++        return pair<iterator, bool>(iterator(p.first), p.second);
+ #endif
+     }
+ 
+@@ -201,7 +202,8 @@
+ #if COMPILER(MSVC) && _MSC_VER >= 1700
+         return iterator_const_cast(m_impl.template addPassingHashCode<T, T, Adapter>(value, value));
+ #else
+-        return m_impl.template addPassingHashCode<T, T, Adapter>(value, value);
++        pair<typename HashTableType::iterator, bool> p = m_impl.template addPassingHashCode<T, T, Adapter>(value, value);
++        return pair<iterator, bool>(iterator(p.first), p.second);
+ #endif
+     }
+ 
+--- qt-everywhere-opensource-src-4.8.7/src/3rdparty/webkit/Source/WebCore/dom/Element.cpp~	2015-05-07 16:14:47.000000000 +0200
++++ qt-everywhere-opensource-src-4.8.7/src/3rdparty/webkit/Source/WebCore/dom/Element.cpp	2019-09-14 18:39:17.915592915 +0200
+@@ -1080,7 +1080,7 @@
+ {
+     // Ref currentStyle in case it would otherwise be deleted when setRenderStyle() is called.
+     RefPtr<RenderStyle> currentStyle(renderStyle());
+-    bool hasParentStyle = parentNodeForRenderingAndStyle() ? parentNodeForRenderingAndStyle()->renderStyle() : false;
++    bool hasParentStyle = parentNodeForRenderingAndStyle() ? bool(parentNodeForRenderingAndStyle()->renderStyle()) : false;
+     bool hasDirectAdjacentRules = currentStyle && currentStyle->childrenAffectedByDirectAdjacentRules();
+     bool hasIndirectAdjacentRules = currentStyle && currentStyle->childrenAffectedByForwardPositionalRules();
+ 
+--- qt-everywhere-opensource-src-4.8.7/src/plugins/accessible/widgets/itemviews.cpp~	2015-05-07 16:14:48.000000000 +0200
++++ qt-everywhere-opensource-src-4.8.7/src/plugins/accessible/widgets/itemviews.cpp	2019-09-14 18:37:01.048930870 +0200
+@@ -393,7 +393,7 @@
+     QModelIndex index = view()->model()->index(0, column, view()->rootIndex());
+     if (!index.isValid() || view()->selectionMode() & QAbstractItemView::NoSelection)
+         return false;
+-    view()->selectionModel()->select(index, QItemSelectionModel::Columns & QItemSelectionModel::Deselect);
++    view()->selectionModel()->select(index, QItemSelectionModel::Columns | QItemSelectionModel::Deselect);
+     return true;
+ }
+ 
diff --git a/gcc9-qforeach.patch b/gcc9-qforeach.patch
new file mode 100644
index 0000000..ae54cdb
--- /dev/null
+++ b/gcc9-qforeach.patch
@@ -0,0 +1,64 @@
+From c35a3f519007af44c3b364b9af86f6a336f6411b Mon Sep 17 00:00:00 2001
+From: Thiago Macieira <thiago.macieira at intel.com>
+Date: Tue, 11 Feb 2014 16:17:46 -0800
+Subject: [PATCH] Redo the Q_FOREACH loop control without GCC statement
+ expressions
+
+It's possible to do without them, which probably makes the number of
+supported compilers a lot bigger: they just need to support decltype()
+or __typeof__.
+
+That includes the Intel compiler. The old code was also apparently
+working, but no one had realized the old workaround for some old version
+was still in place.
+
+The loop overhead is more or less the same. I have not done benchmarks,
+but inspection of the generated assembly shows more or less the same
+number of instructions.
+
+Change-Id: I32d499c84a6ddd19d994b49f17a469acb5c3a3f1
+Reviewed-by: Olivier Goffart <ogoffart at woboq.com>
+Reviewed-by: Marc Mutz <marc.mutz at kdab.com>
+
+Backported to Qt 4
+
+--- a/src/corelib/global/qglobal.h
++++ b/src/corelib/global/qglobal.h
+@@ -2482,22 +2482,32 @@ typedef uint Flags;
+ 
+ #endif /* Q_NO_TYPESAFE_FLAGS */
+ 
+-#if defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && !defined(Q_CC_RVCT)
++#if (defined(Q_CC_GNU) && !defined(Q_CC_RVCT))
+ /* make use of typeof-extension */
+ template <typename T>
+ class QForeachContainer {
+ public:
+-    inline QForeachContainer(const T& t) : c(t), brk(0), i(c.begin()), e(c.end()) { }
++    inline QForeachContainer(const T& t) : c(t), i(c.begin()), e(c.end()), control(1) { }
+     const T c;
+     int brk;
+     typename T::const_iterator i, e;
++    int control;
+ };
+ 
++// Explanation of the control word:
++//  - it's initialized to 1
++//  - that means both the inner and outer loops start
++//  - if there were no breaks, at the end of the inner loop, it's set to 0, which
++//    causes it to exit (the inner loop is run exactly once)
++//  - at the end of the outer loop, it's inverted, so it becomes 1 again, allowing
++//    the outer loop to continue executing
++//  - if there was a break inside the inner loop, it will exit with control still
++//    set to 1; in that case, the outer loop will invert it to 0 and will exit too
+ #define Q_FOREACH(variable, container)                                \
+ for (QForeachContainer<__typeof__(container)> _container_(container); \
+-     !_container_.brk && _container_.i != _container_.e;              \
+-     __extension__  ({ ++_container_.brk; ++_container_.i; }))                       \
+-    for (variable = *_container_.i;; __extension__ ({--_container_.brk; break;}))
++     _container_.control && _container_.i != _container_.e;         \
++     ++_container_.i, _container_.control ^= 1)                     \
++    for (variable = *_container_.i; _container_.control; _container_.control = 0)
+ 
+ #else
+ 
diff --git a/gcc9.patch b/gcc9.patch
new file mode 100644
index 0000000..787cd7d
--- /dev/null
+++ b/gcc9.patch
@@ -0,0 +1,11 @@
+--- qt-everywhere-opensource-src-4.8.7/configure~	2019-09-14 20:06:01.000000000 +0200
++++ qt-everywhere-opensource-src-4.8.7/configure	2019-09-14 20:40:44.545345003 +0200
+@@ -7753,7 +7753,7 @@
+     *-g++*)
+ 	# Check gcc's version
+ 	case "$(${QMAKE_CONF_COMPILER} -dumpversion)" in
+-	    8*|7*|6*|5*|4*|3.4*)
++	    9*|8*|7*|6*|5*|4*|3.4*)
+ 		;;
+             3.3*)
+                 canBuildWebKit="no"
diff --git a/mysql-link.patch b/mysql-link.patch
new file mode 100644
index 0000000..a460923
--- /dev/null
+++ b/mysql-link.patch
@@ -0,0 +1,11 @@
+--- qt-everywhere-opensource-src-4.8.7/src/sql/drivers/mysql/qsql_mysql.pri~	2015-05-07 16:14:48.000000000 +0200
++++ qt-everywhere-opensource-src-4.8.7/src/sql/drivers/mysql/qsql_mysql.pri	2019-09-14 15:53:51.542585322 +0200
+@@ -4,7 +4,7 @@
+ unix {
+     isEmpty(QT_LFLAGS_MYSQL) {
+         !contains(LIBS, .*mysqlclient.*):!contains(LIBS, .*mysqld.*) {
+-            use_libmysqlclient_r:LIBS += -lmysqlclient_r
++            use_libmysqlclient_r:LIBS += -lmysqlclient
+             else:LIBS += -lmysqlclient
+         }
+     } else {
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/qt4.git/commitdiff/b42b0c7fae8860fc46b9a9f4d937f4d8066f2daf



More information about the pld-cvs-commit mailing list