diff --git a/extra/qt/PKGBUILD b/extra/qt/PKGBUILD index a05fa7dbc..d104b7782 100644 --- a/extra/qt/PKGBUILD +++ b/extra/qt/PKGBUILD @@ -6,7 +6,6 @@ # - Just say NO to x86 optimizations ;) # - disabled distcc, ccache - bad things happen # - don't use -no-neon on armv7 -# - make -j1 for v5, -j2 for v7 (pandaboard builder) # - added -fno-strict-volatile-bitfields to CXXFLAGS to fix ARM bug # - disabled gcc47.patch since we're not on that yet # - no libfbclient/ibase, issues building on ARM @@ -14,7 +13,7 @@ pkgbase=qt pkgname=('qt' 'qt-private-headers') pkgver=4.8.3 -pkgrel=4 +pkgrel=5 arch=('i686' 'x86_64') url='http://qt-project.org/' license=('GPL3' 'LGPL') @@ -29,7 +28,9 @@ source=("http://releases.qt-project.org/qt4/source/${_pkgfqn}.tar.gz" 'qtconfig.desktop' 'improve-cups-support.patch' 'fix-crash-in-assistant.patch' - 'disable-ssl-compression.patch') + 'disable-ssl-compression.patch' + 'fix-qtscript-crash.patch' + 'qsortfilterproxymodel.patch') md5sums=('a663b6c875f8d7caa8ac9c30e4a4ec3b' 'fc211414130ab2764132e7370f8e5caa' '85179f5e0437514f8639957e1d8baf62' @@ -37,10 +38,12 @@ md5sums=('a663b6c875f8d7caa8ac9c30e4a4ec3b' '6b771c8a81dd90b45e8a79afa0e5bbfd' 'b9fb6b953cec428d59c026b1ef370e86' '57590084078b6379f0501f7728b02ae2' - '94e9e433342018bf35e8d6d968b7432c') + '94e9e433342018bf35e8d6d968b7432c' + '71579422635e9343665de1c1ba5a3f91' + 'cd550cd628d10459128ca5f231ca6d3f') build() { - cd "${srcdir}"/${_pkgfqn} + cd ${_pkgfqn} # (FS#28381) (KDEBUG#180051) patch -p1 -i "${srcdir}"/improve-cups-support.patch @@ -50,6 +53,12 @@ build() { # Security fix patch -p1 -i "${srcdir}"/disable-ssl-compression.patch + # QTBUG#27322 + patch -p1 -i "${srcdir}"/fix-qtscript-crash.patch + + # QTBUG#27122 + patch -p1 -i "${srcdir}"/qsortfilterproxymodel.patch + export QT4DIR="${srcdir}"/${_pkgfqn} export LD_LIBRARY_PATH=${QT4DIR}/lib:${LD_LIBRARY_PATH} @@ -59,12 +68,6 @@ build() { sed -i "/^QMAKE_LFLAGS_RPATH/s| -Wl,-rpath,||g" mkspecs/common/gcc-base-unix.conf sed -i "/^QMAKE_LFLAGS\s/s|+=|+= ${LDFLAGS}|g" mkspecs/common/gcc-base.conf - if [ "${CARCH}" = "armv6h" -o "${CARCH}" = "armv7h" ]; then - mymakeflags="-j2" - else - mymakeflags="-j1" - fi - ./configure -confirm-license -opensource \ -prefix /usr \ -docdir /usr/share/doc/qt \ @@ -101,7 +104,7 @@ build() { -no-sse4.2 \ -no-avx \ -no-neon - make ${mymakeflags} + make } package_qt() { @@ -114,10 +117,11 @@ package_qt() { 'unixodbc: ODBC driver' 'libxinerama: Xinerama support' 'libxcursor: Xcursor support' - 'libxfixes: Xfixes support') + 'libxfixes: Xfixes support' + 'icu: Unicode support') install='qt.install' - cd "${srcdir}"/${_pkgfqn} + cd ${_pkgfqn} make INSTALL_ROOT="${pkgdir}" install # install missing icons and desktop files @@ -157,11 +161,11 @@ package_qt-private-headers(){ install -d "${pkgdir}"/usr/src/{corelib,declarative,gui,script} for i in QtCore QtDeclarative QtGui QtScript; do - cp -r "${srcdir}"/${_pkgfqn}/include/${i}/private/ \ + cp -r ${_pkgfqn}/include/${i}/private/ \ "${pkgdir}"/usr/include/${i}/ done for i in corelib declarative gui script; do - cp -r "${srcdir}"/${_pkgfqn}/src/${i} "${pkgdir}"/usr/src/ + cp -r ${_pkgfqn}/src/${i} "${pkgdir}"/usr/src/ done } diff --git a/extra/qt/fix-qtscript-crash.patch b/extra/qt/fix-qtscript-crash.patch new file mode 100644 index 000000000..97b1cc62d --- /dev/null +++ b/extra/qt/fix-qtscript-crash.patch @@ -0,0 +1,34 @@ +From e6b7178bc2e62a37b4737695bced1b46bced9215 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C4=99drzej=20Nowacki?= +Date: Mon, 22 Oct 2012 15:17:19 +0200 +Subject: [PATCH] Fix mmap usage. + +Add missing MAP_NORESERVE and fix error checking. + +Special thanks to Olivier JG for debugging the issue. + +Task-number: QTBUG-27322 +Change-Id: Ia9f4aa80415f0127318714912b524131a5b0f18a +Reviewed-by: Simon Hausmann +--- + .../JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp b/src/3rdparty/javascriptcore/JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp +index 16d0fb1..e1237e4 100644 +--- a/src/3rdparty/javascriptcore/JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp ++++ b/src/3rdparty/javascriptcore/JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp +@@ -305,8 +305,8 @@ public: + randomLocation += (1 << 24); + randomLocation <<= 21; + #endif +- m_base = mmap(reinterpret_cast(randomLocation), m_totalHeapSize, INITIAL_PROTECTION_FLAGS, MAP_PRIVATE | MAP_ANON, VM_TAG_FOR_EXECUTABLEALLOCATOR_MEMORY, 0); +- if (!m_base) ++ m_base = mmap(reinterpret_cast(randomLocation), m_totalHeapSize, INITIAL_PROTECTION_FLAGS, MAP_PRIVATE | MAP_ANON | MAP_NORESERVE, VM_TAG_FOR_EXECUTABLEALLOCATOR_MEMORY, 0); ++ if (m_base == MAP_FAILED) + CRASH(); + + // For simplicity, we keep all memory in m_freeList in a 'released' state. +-- +1.8.0 + diff --git a/extra/qt/qsortfilterproxymodel.patch b/extra/qt/qsortfilterproxymodel.patch new file mode 100644 index 000000000..33770e47d --- /dev/null +++ b/extra/qt/qsortfilterproxymodel.patch @@ -0,0 +1,63 @@ +From 989e6c5ee6f3e38b24632ec5caf49c5b03d17aed Mon Sep 17 00:00:00 2001 +From: Stephen Kelly +Date: Fri, 14 Sep 2012 15:42:34 +0200 +Subject: [PATCH] Fix crash when invalidating a QSortFilterProxyModel + +Backport of d7a15fbfd93fb566c7793596ea50d8786b9eb654 from qtbase. + +Task-number: QTBUG-27122 +Change-Id: I0b1eda292fd9648e6f08629f7a069b66bb8b59e8 +Reviewed-by: Olivier Goffart +--- + src/gui/itemviews/qsortfilterproxymodel.cpp | 28 +++++++--- + .../tst_qsortfilterproxymodel.cpp | 61 ++++++++++++++++++++++ + 2 files changed, 83 insertions(+), 6 deletions(-) + +diff --git a/src/gui/itemviews/qsortfilterproxymodel.cpp b/src/gui/itemviews/qsortfilterproxymodel.cpp +index d937b63..9fe224e 100644 +--- a/src/gui/itemviews/qsortfilterproxymodel.cpp ++++ b/src/gui/itemviews/qsortfilterproxymodel.cpp +@@ -1036,18 +1036,34 @@ void QSortFilterProxyModelPrivate::filter_changed(const QModelIndex &source_pare + Mapping *m = it.value(); + QSet rows_removed = handle_filter_changed(m->proxy_rows, m->source_rows, source_parent, Qt::Vertical); + QSet columns_removed = handle_filter_changed(m->proxy_columns, m->source_columns, source_parent, Qt::Horizontal); +- QVector mappedChildren = m->mapped_children; +- QVector::iterator it2 = mappedChildren.end(); +- while (it2 != mappedChildren.begin()) { +- --it2; +- const QModelIndex source_child_index = *it2; ++ ++ // We need to iterate over a copy of m->mapped_children because otherwise it may be changed by other code, invalidating ++ // the iterator it2. ++ // The m->mapped_children vector can be appended to with indexes which are no longer filtered ++ // out (in create_mapping) when this function recurses for child indexes. ++ const QVector mappedChildren = m->mapped_children; ++ QVector indexesToRemove; ++ for (int i = 0; i < mappedChildren.size(); ++i) { ++ const QModelIndex source_child_index = mappedChildren.at(i); + if (rows_removed.contains(source_child_index.row()) || columns_removed.contains(source_child_index.column())) { +- it2 = mappedChildren.erase(it2); ++ indexesToRemove.push_back(i); + remove_from_mapping(source_child_index); + } else { + filter_changed(source_child_index); + } + } ++ QVector::const_iterator removeIt = indexesToRemove.constEnd(); ++ const QVector::const_iterator removeBegin = indexesToRemove.constBegin(); ++ ++ // We can't just remove these items from mappedChildren while iterating above and then ++ // do something like m->mapped_children = mappedChildren, because mapped_children might ++ // be appended to in create_mapping, and we would lose those new items. ++ // Because they are always appended in create_mapping, we can still remove them by ++ // position here. ++ while (removeIt != removeBegin) { ++ --removeIt; ++ m->mapped_children.remove(*removeIt); ++ } + } + + /*! +-- +1.8.0 +