diff --git a/desktop/kde/phonon/qt5-phonon-backend-gstreamer/actions.py b/desktop/kde/phonon/qt5-phonon-backend-gstreamer/actions.py
index 713b425bb7..5019df1cbf 100644
--- a/desktop/kde/phonon/qt5-phonon-backend-gstreamer/actions.py
+++ b/desktop/kde/phonon/qt5-phonon-backend-gstreamer/actions.py
@@ -8,11 +8,7 @@ from pisi.actionsapi import kde5
from pisi.actionsapi import pisitools
def setup():
- kde5.configure("-DCMAKE_BUILD_TYPE=Release \
- -DCMAKE_INSTALL_PREFIX=/usr \
- -DCMAKE_SKIP_RPATH=ON \
- -DCMAKE_INSTALL_LIBDIR=lib \
- -D__KDE_HAVE_GCC_VISIBILITY=NO \
+ kde5.configure("-D__KDE_HAVE_GCC_VISIBILITY=NO \
-DPHONON_BUILD_PHONON4QT5=ON")
def build():
diff --git a/desktop/kde/phonon/qt5-phonon-backend-gstreamer/pspec.xml b/desktop/kde/phonon/qt5-phonon-backend-gstreamer/pspec.xml
index 2f70cdbd64..9aeb4d2a1a 100644
--- a/desktop/kde/phonon/qt5-phonon-backend-gstreamer/pspec.xml
+++ b/desktop/kde/phonon/qt5-phonon-backend-gstreamer/pspec.xml
@@ -13,8 +13,10 @@
library
GStreamer qt5-phonon backend
Phonon is the Qt multimedia API, which provides a task-oriented abstraction layer for capturing, mixing, processing, and playing audio and video content. phonon-backend-gstreamer contains the GStreamer backend for Phonon.
- mirrors://kde/stable/phonon/phonon-backend-gstreamer/4.8.2/src/phonon-backend-gstreamer-4.8.2.tar.xz
+ http://download.kde.org/stable/phonon/phonon-backend-gstreamer/4.9.0/phonon-backend-gstreamer-4.9.0.tar.xz
+ extra-cmake-modules
+ qt5-x11extras-devel
qt5-base-devel
qt5-phonon-devel
gstreamer-devel
@@ -23,7 +25,6 @@
gst-plugins-base-next-devel
mesa-devel
libxml2-devel
- cmake
@@ -31,6 +32,7 @@
qt5-phonon-backend-gstreamer
qt5-base
+ qt5-x11extras
qt5-phonon
mesa
glib2
@@ -46,6 +48,13 @@
+
+ 2016-05-03
+ 4.9.0
+ Version bump.
+ Stefan Gronewold(groni)
+ groni@pisilinux.org
+
2015-08-18
4.8.2
diff --git a/desktop/kde/phonon/qt5-phonon/actions.py b/desktop/kde/phonon/qt5-phonon/actions.py
index c0ec460f79..b4fc40a6e2 100644
--- a/desktop/kde/phonon/qt5-phonon/actions.py
+++ b/desktop/kde/phonon/qt5-phonon/actions.py
@@ -9,18 +9,13 @@ from pisi.actionsapi import pisitools
from pisi.actionsapi import get
def setup():
- kde5.configure("-DCMAKE_BUILD_TYPE=Release \
- -DCMAKE_SKIP_RPATH=ON \
- -DCMAKE_INSTALL_PREFIX=/usr \
- -DPHONON_INSTALL_QT_EXTENSIONS_INTO_SYSTEM_QT=ON \
- -DPHONON_BUILD_PHONON4QT5=ON \
- -D__KDE_HAVE_GCC_VISIBILITY=NO \
- -DCMAKE_INSTALL_LIBDIR=lib")
+ kde5.configure("-DPHONON_BUILD_PHONON4QT5=ON")
def build():
kde5.make()
def install():
kde5.install()
-
- pisitools.dosym("/usr/include/KDE/Phonon", "/usr/include/Phonon")
+
+ pisitools.domove("/usr/share/qt5/mkspecs/modules/qt_phonon4qt5.pri", "/usr/lib/qt5/mkspecs/modules/")
+ pisitools.removeDir("/usr/share/qt5")
diff --git a/desktop/kde/phonon/qt5-phonon/pspec.xml b/desktop/kde/phonon/qt5-phonon/pspec.xml
index 1c5c950319..428d67db62 100644
--- a/desktop/kde/phonon/qt5-phonon/pspec.xml
+++ b/desktop/kde/phonon/qt5-phonon/pspec.xml
@@ -13,8 +13,9 @@
library
Cross platform multimedia API for KDE4 using QT5
Phonon was created as a solution to several problems with multimedia commonly faced by Unix desktops, especially KDE 3's outdated multimedia framework aRts. Phonon itself is not a multimedia framework, but interfaces with existing frameworks such as GStreamer or Xine via backends.
- mirrors://kde/stable/phonon/4.8.3/src/phonon-4.8.3.tar.xz
+ http://download.kde.org/stable/phonon/4.9.0/phonon-4.9.0.tar.xz
+ extra-cmake-modules
qt5-base-devel
qt5-designer-devel
qt5-quick1-devel
@@ -22,11 +23,10 @@
gst-plugins-base-devel
pulseaudio-libs-devel
gstreamer-devel
- cmake
mesa-devel
- qt-5.4.2.patch
+
@@ -43,6 +43,7 @@
/usr/lib/libphonon*
/usr/lib/qt5
/usr/share/dbus-1
+ /usr/share/phonon4qt5
@@ -59,12 +60,18 @@
/usr/include
/usr/lib/pkgconfig
/usr/lib/cmake
- /usr/share/phonon4qt5
-
+
+ 2016-05-03
+ 4.9.0
+ Version bump.
+ Stefan Gronewold(groni)
+ groni@pisilinux.org
+
+
2015-08-13
4.8.3
First release
@@ -72,5 +79,4 @@
groni@pisilinux.org
-
diff --git a/desktop/toolkit/qt5/qt5-base/actions.py b/desktop/toolkit/qt5/qt5-base/actions.py
index 163972543e..a00e9a5ccc 100644
--- a/desktop/toolkit/qt5/qt5-base/actions.py
+++ b/desktop/toolkit/qt5/qt5-base/actions.py
@@ -102,7 +102,7 @@ def setup():
def build():
shelltools.export("LD_LIBRARY_PATH", "%s/lib:%s" % (get.curDIR(), get.ENV("LD_LIBRARY_PATH")))
- autotools.make()
+ qt5.make()
def install():
if get.buildTYPE() == "emul32":
diff --git a/desktop/toolkit/qt5/qt5-base/files/qt5-alsa1.11.patch b/desktop/toolkit/qt5/qt5-base/files/qt5-alsa1.11.patch
new file mode 100644
index 0000000000..d6d983b9a9
--- /dev/null
+++ b/desktop/toolkit/qt5/qt5-base/files/qt5-alsa1.11.patch
@@ -0,0 +1,11 @@
+--- qtbase-opensource-src-5.6.0-rc/config.tests/unix/alsa/alsatest.cpp.0 2016-02-29 08:15:48.203031809 +0000
++++ qtbase-opensource-src-5.6.0-rc/config.tests/unix/alsa/alsatest.cpp 2016-02-29 08:16:39.712811962 +0000
+@@ -32,7 +32,7 @@
+ ****************************************************************************/
+
+ #include
+-#if(!(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 10))
++#if(!(SND_LIB_MAJOR == 1 && (SND_LIB_MINOR > 0 || SND_LIB_SUBMINOR >= 10)))
+ #error "Alsa version found too old, require >= 1.0.10"
+ #endif
+
\ No newline at end of file
diff --git a/desktop/toolkit/qt5/qt5-base/files/qtbug-45812.patch b/desktop/toolkit/qt5/qt5-base/files/qtbug-45812.patch
new file mode 100644
index 0000000000..43623d9c16
--- /dev/null
+++ b/desktop/toolkit/qt5/qt5-base/files/qtbug-45812.patch
@@ -0,0 +1,97 @@
+From 269fdbdd2bedda5f5eacb751224d3a3fc3eed5bc Mon Sep 17 00:00:00 2001
+From: Urs Fleisch
+Date: Fri, 26 Feb 2016 17:46:09 +0100
+Subject: [PATCH] xcb: Fix drag and drop to applications like Emacs and
+ Chromium.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Drops without matching time stamp do not work. I have fixed the issue by
+reanimating the findXdndAwareParent() function (adapted to XCB) and
+using it to find a matching transaction if all else fails.
+
+Task-number: QTBUG-45812
+Change-Id: Ibca15bbab02ccf2f25280418e9edf36972ebf9a0
+Reviewed-by: Błażej Szczygieł
+Reviewed-by: Dmitry Shachnev
+Reviewed-by: Shawn Rutledge
+---
+ src/plugins/platforms/xcb/qxcbdrag.cpp | 55 +++++++++++++++++++++++++++-------
+ 1 file changed, 44 insertions(+), 11 deletions(-)
+
+diff --git a/src/plugins/platforms/xcb/qxcbdrag.cpp b/src/plugins/platforms/xcb/qxcbdrag.cpp
+index f5cc873..f1428d0 100644
+--- a/src/plugins/platforms/xcb/qxcbdrag.cpp
++++ b/src/plugins/platforms/xcb/qxcbdrag.cpp
+@@ -1072,6 +1072,40 @@ void QXcbDrag::cancel()
+ send_leave();
+ }
+
++// find an ancestor with XdndAware on it
++static xcb_window_t findXdndAwareParent(QXcbConnection *c, xcb_window_t window)
++{
++ xcb_window_t target = 0;
++ forever {
++ // check if window has XdndAware
++ xcb_get_property_cookie_t gpCookie = Q_XCB_CALL(
++ xcb_get_property(c->xcb_connection(), false, window,
++ c->atom(QXcbAtom::XdndAware), XCB_GET_PROPERTY_TYPE_ANY, 0, 0));
++ xcb_get_property_reply_t *gpReply = xcb_get_property_reply(
++ c->xcb_connection(), gpCookie, 0);
++ bool aware = gpReply && gpReply->type != XCB_NONE;
++ free(gpReply);
++ if (aware) {
++ target = window;
++ break;
++ }
++
++ // try window's parent
++ xcb_query_tree_cookie_t qtCookie = Q_XCB_CALL(
++ xcb_query_tree_unchecked(c->xcb_connection(), window));
++ xcb_query_tree_reply_t *qtReply = xcb_query_tree_reply(
++ c->xcb_connection(), qtCookie, NULL);
++ if (!qtReply)
++ break;
++ xcb_window_t root = qtReply->root;
++ xcb_window_t parent = qtReply->parent;
++ free(qtReply);
++ if (window == root)
++ break;
++ window = parent;
++ }
++ return target;
++}
+
+ void QXcbDrag::handleSelectionRequest(const xcb_selection_request_event_t *event)
+ {
+@@ -1099,17 +1133,16 @@ void QXcbDrag::handleSelectionRequest(const xcb_selection_request_event_t *event
+ // xcb_convert_selection() that we sent the XdndDrop event to.
+ at = findTransactionByWindow(event->requestor);
+ }
+-// if (at == -1 && event->time == XCB_CURRENT_TIME) {
+-// // previous Qt versions always requested the data on a child of the target window
+-// // using CurrentTime... but it could be asking for either drop data or the current drag's data
+-// Window target = findXdndAwareParent(event->requestor);
+-// if (target) {
+-// if (current_target && current_target == target)
+-// at = -2;
+-// else
+-// at = findXdndDropTransactionByWindow(target);
+-// }
+-// }
++
++ if (at == -1 && event->time == XCB_CURRENT_TIME) {
++ xcb_window_t target = findXdndAwareParent(connection(), event->requestor);
++ if (target) {
++ if (current_target == target)
++ at = -2;
++ else
++ at = findTransactionByWindow(target);
++ }
++ }
+ }
+
+ QDrag *transactionDrag = 0;
+--
+2.7.1
diff --git a/desktop/toolkit/qt5/qt5-base/files/qtbug-51648.patch b/desktop/toolkit/qt5/qt5-base/files/qtbug-51648.patch
new file mode 100644
index 0000000000..79e88f6343
--- /dev/null
+++ b/desktop/toolkit/qt5/qt5-base/files/qtbug-51648.patch
@@ -0,0 +1,87 @@
+From b024fbe83863fc57364a52c717d5b43d654bdb5d Mon Sep 17 00:00:00 2001
+From: Weng Xuetian
+Date: Sat, 5 Mar 2016 12:23:21 -0800
+Subject: [PATCH] QtDBus: clean up signal hooks and object tree in
+ closeConnection
+
+If a QObject is added or passed as receiver to QDBusConnection::connect()
+and it is managed by Q_GLOBAL_STATIC or similar mechanism, it is
+possible that when that its destructor is called after the dbus daemon
+thread ends. In that case, QObject::destroyed connected via
+Qt::BlockingQueuedConnection to QDBusConnectionPrivate will cause dead
+lock since the thread is no longer processing events.
+
+Task-number: QTBUG-51648
+Change-Id: I1a1810a6d6d0234af0269d5f3fc1f54101bf1547
+---
+ src/dbus/qdbusconnection_p.h | 1 +
+ src/dbus/qdbusintegrator.cpp | 28 +++++++++++++++++++++++++++-
+ 2 files changed, 28 insertions(+), 1 deletion(-)
+
+diff --git a/src/dbus/qdbusconnection_p.h b/src/dbus/qdbusconnection_p.h
+index c77daf7..565eb83 100644
+--- a/src/dbus/qdbusconnection_p.h
++++ b/src/dbus/qdbusconnection_p.h
+@@ -254,6 +254,7 @@ private:
+ const QVector &metaTypes, int slotIdx);
+
+ SignalHookHash::Iterator removeSignalHookNoLock(SignalHookHash::Iterator it);
++ void disconnectObjectTree(ObjectTreeNode &node);
+
+ bool isServiceRegisteredByThread(const QString &serviceName);
+
+diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp
+index cd44861..a3cd47b 100644
+--- a/src/dbus/qdbusintegrator.cpp
++++ b/src/dbus/qdbusintegrator.cpp
+@@ -1030,7 +1030,6 @@ QDBusConnectionPrivate::~QDBusConnectionPrivate()
+ qPrintable(name));
+
+ closeConnection();
+- rootNode.children.clear(); // free resources
+ qDeleteAll(cachedMetaObjects);
+
+ if (mode == ClientMode || mode == PeerMode) {
+@@ -1052,6 +1051,20 @@ QDBusConnectionPrivate::~QDBusConnectionPrivate()
+ }
+ }
+
++void QDBusConnectionPrivate::disconnectObjectTree(QDBusConnectionPrivate::ObjectTreeNode &haystack)
++{
++ QDBusConnectionPrivate::ObjectTreeNode::DataList::Iterator it = haystack.children.begin();
++
++ while (it != haystack.children.end()) {
++ disconnectObjectTree(*it);
++ it++;
++ }
++
++ if (haystack.obj) {
++ haystack.obj->disconnect(this);
++ }
++}
++
+ void QDBusConnectionPrivate::closeConnection()
+ {
+ QDBusWriteLocker locker(CloseConnectionAction, this);
+@@ -1075,6 +1088,19 @@ void QDBusConnectionPrivate::closeConnection()
+ }
+
+ qDeleteAll(pendingCalls);
++
++ // clean up all signal hook and object tree, to avoid QObject::destroyed
++ // being activated to dbus daemon thread which already quits.
++ // dbus connection is already closed, so there is nothing we could do be clean
++ // up everything here.
++ SignalHookHash::iterator sit = signalHooks.begin();
++ while (sit != signalHooks.end()) {
++ sit.value().obj->disconnect(this);
++ sit++;
++ }
++
++ disconnectObjectTree(rootNode);
++ rootNode.children.clear(); // free resources
+ }
+
+ void QDBusConnectionPrivate::checkThread()
+--
+2.7.1
\ No newline at end of file
diff --git a/desktop/toolkit/qt5/qt5-base/files/qtbug-51649.patch b/desktop/toolkit/qt5/qt5-base/files/qtbug-51649.patch
new file mode 100644
index 0000000000..ba6c30268d
--- /dev/null
+++ b/desktop/toolkit/qt5/qt5-base/files/qtbug-51649.patch
@@ -0,0 +1,158 @@
+From acde2e69df5dedc624674107596f276125e22864 Mon Sep 17 00:00:00 2001
+From: Weng Xuetian
+Date: Thu, 3 Mar 2016 21:56:53 -0800
+Subject: [PATCH] QtDBus: finish all pending call with error if disconnected
+
+libdbus will send a local signal if connection gets disconnected. When
+this happens, end all pending calls with QDBusError::Disconnected.
+
+Task-number: QTBUG-51649
+Change-Id: I5c7d2a468bb5da746d0c0e53e458c1e376f186a9
+---
+ src/dbus/dbus_minimal_p.h | 2 ++
+ src/dbus/qdbusintegrator.cpp | 26 +++++++++++++++++-----
+ src/dbus/qdbusutil_p.h | 6 +++++
+ .../dbus/qdbusconnection/tst_qdbusconnection.cpp | 22 ++++++++++++++++++
+ .../dbus/qdbusconnection/tst_qdbusconnection.h | 1 +
+ 5 files changed, 51 insertions(+), 6 deletions(-)
+
+diff --git a/src/dbus/dbus_minimal_p.h b/src/dbus/dbus_minimal_p.h
+index f0a2954..8f25b24 100644
+--- a/src/dbus/dbus_minimal_p.h
++++ b/src/dbus/dbus_minimal_p.h
+@@ -99,9 +99,11 @@ typedef dbus_uint32_t dbus_bool_t;
+ /* dbus-shared.h */
+ #define DBUS_SERVICE_DBUS "org.freedesktop.DBus"
+ #define DBUS_PATH_DBUS "/org/freedesktop/DBus"
++#define DBUS_PATH_LOCAL "/org/freedesktop/DBus/Local"
+ #define DBUS_INTERFACE_DBUS "org.freedesktop.DBus"
+ #define DBUS_INTERFACE_INTROSPECTABLE "org.freedesktop.DBus.Introspectable"
+ #define DBUS_INTERFACE_PROPERTIES "org.freedesktop.DBus.Properties"
++#define DBUS_INTERFACE_LOCAL "org.freedesktop.DBus.Local"
+
+ #define DBUS_NAME_FLAG_ALLOW_REPLACEMENT 0x1 /**< Allow another service to become the primary owner if requested */
+ #define DBUS_NAME_FLAG_REPLACE_EXISTING 0x2 /**< Request to replace the current primary owner */
+diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp
+index cd44861..320419f 100644
+--- a/src/dbus/qdbusintegrator.cpp
++++ b/src/dbus/qdbusintegrator.cpp
+@@ -519,6 +519,14 @@ bool QDBusConnectionPrivate::handleMessage(const QDBusMessage &amsg)
+ switch (amsg.type()) {
+ case QDBusMessage::SignalMessage:
+ handleSignal(amsg);
++ // Check local disconnected signal from libdbus
++ if (amsg.interface() == QDBusUtil::dbusInterfaceLocal()
++ && amsg.path() == QDBusUtil::dbusPathLocal()
++ && amsg.member() == QDBusUtil::disconnected()
++ && !QDBusMessagePrivate::isLocal(amsg)) {
++ while (!pendingCalls.isEmpty())
++ processFinishedCall(pendingCalls.first());
++ }
+ // if there are any other filters in this DBusConnection,
+ // let them see the signal too
+ return false;
+@@ -1767,10 +1775,16 @@ void QDBusConnectionPrivate::processFinishedCall(QDBusPendingCallPrivate *call)
+
+ QDBusMessage &msg = call->replyMessage;
+ if (call->pending) {
+- // decode the message
+- DBusMessage *reply = q_dbus_pending_call_steal_reply(call->pending);
+- msg = QDBusMessagePrivate::fromDBusMessage(reply, connection->capabilities);
+- q_dbus_message_unref(reply);
++ // when processFinishedCall is called and pending call is not completed,
++ // it means we received disconnected signal from libdbus
++ if (q_dbus_pending_call_get_completed(call->pending)) {
++ // decode the message
++ DBusMessage *reply = q_dbus_pending_call_steal_reply(call->pending);
++ msg = QDBusMessagePrivate::fromDBusMessage(reply, connection->capabilities);
++ q_dbus_message_unref(reply);
++ } else {
++ msg = QDBusMessage::createError(QDBusError::Disconnected, QDBusUtil::disconnectedErrorMessage());
++ }
+ }
+ qDBusDebug() << connection << "got message reply:" << msg;
+
+@@ -2070,8 +2084,8 @@ void QDBusConnectionPrivate::sendInternal(QDBusPendingCallPrivate *pcall, void *
+ pcall->pending = pending;
+ q_dbus_pending_call_set_notify(pending, qDBusResultReceived, pcall, 0);
+
+- // DBus won't notify us when a peer disconnects so we need to track these ourselves
+- if (mode == QDBusConnectionPrivate::PeerMode)
++ // DBus won't notify us when a peer disconnects or server terminates so we need to track these ourselves
++ if (mode == QDBusConnectionPrivate::PeerMode || mode == QDBusConnectionPrivate::ClientMode)
+ pendingCalls.append(pcall);
+
+ return;
+diff --git a/src/dbus/qdbusutil_p.h b/src/dbus/qdbusutil_p.h
+index 8f5ae92..ca70ff9 100644
+--- a/src/dbus/qdbusutil_p.h
++++ b/src/dbus/qdbusutil_p.h
+@@ -155,6 +155,8 @@ namespace QDBusUtil
+ { return QStringLiteral(DBUS_SERVICE_DBUS); }
+ inline QString dbusPath()
+ { return QStringLiteral(DBUS_PATH_DBUS); }
++ inline QString dbusPathLocal()
++ { return QStringLiteral(DBUS_PATH_LOCAL); }
+ inline QString dbusInterface()
+ {
+ // it's the same string, but just be sure
+@@ -165,8 +167,12 @@ namespace QDBusUtil
+ { return QStringLiteral(DBUS_INTERFACE_PROPERTIES); }
+ inline QString dbusInterfaceIntrospectable()
+ { return QStringLiteral(DBUS_INTERFACE_INTROSPECTABLE); }
++ inline QString dbusInterfaceLocal()
++ { return QStringLiteral(DBUS_INTERFACE_LOCAL); }
+ inline QString nameOwnerChanged()
+ { return QStringLiteral("NameOwnerChanged"); }
++ inline QString disconnected()
++ { return QStringLiteral("Disconnected"); }
+ inline QString disconnectedErrorMessage()
+ { return QStringLiteral("Not connected to D-Bus server"); }
+ }
+diff --git a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp
+index e91f87d..6c7e6b1 100644
+--- a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp
++++ b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp
+@@ -1218,6 +1218,28 @@ void tst_QDBusConnection::callVirtualObjectLocal()
+ QCOMPARE(obj.replyArguments, subPathReply.arguments());
+ }
+
++void tst_QDBusConnection::pendingCallWhenDisconnected()
++{
++ QDBusServer *server = new QDBusServer;
++ QDBusConnection con = QDBusConnection::connectToPeer(server->address(), "disconnect");
++ QTestEventLoop::instance().enterLoop(2);
++ QVERIFY(!QTestEventLoop::instance().timeout());
++ QVERIFY(con.isConnected());
++
++ delete server;
++
++ // Make sure we call the method before we know it is disconnected.
++ QVERIFY(con.isConnected());
++ QDBusMessage message = QDBusMessage::createMethodCall("", "/", QString(), "method");
++ QDBusPendingCall reply = con.asyncCall(message);
++
++ QTestEventLoop::instance().enterLoop(2);
++ QVERIFY(!con.isConnected());
++ QVERIFY(reply.isFinished());
++ QVERIFY(reply.isError());
++ QVERIFY(reply.error().type() == QDBusError::Disconnected);
++}
++
+ QString MyObject::path;
+ QString MyObjectWithoutInterface::path;
+ QString MyObjectWithoutInterface::interface;
+diff --git a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h
+index a53ba32..720e484 100644
+--- a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h
++++ b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h
+@@ -121,6 +121,7 @@ private slots:
+ void registerVirtualObject();
+ void callVirtualObject();
+ void callVirtualObjectLocal();
++ void pendingCallWhenDisconnected();
+
+ public:
+ QString serviceName() const { return "org.qtproject.Qt.Autotests.QDBusConnection"; }
+--
+2.7.1
diff --git a/desktop/toolkit/qt5/qt5-base/files/qtbug-51676.patch b/desktop/toolkit/qt5/qt5-base/files/qtbug-51676.patch
new file mode 100644
index 0000000000..78efe4f90f
--- /dev/null
+++ b/desktop/toolkit/qt5/qt5-base/files/qtbug-51676.patch
@@ -0,0 +1,125 @@
+From 11c5e716b08b6b3c5a7c9fce96b0cde8624ec869 Mon Sep 17 00:00:00 2001
+From: Thiago Macieira
+Date: Tue, 15 Mar 2016 11:00:20 -0700
+Subject: [PATCH] Fix QtDBus deadlock inside kded/kiod
+
+Whenever a message spy was installed, we failed to actually process
+looped-back messages by queueing them for processing by the spy. That
+had as a consequence that the caller got an error reply. Worse, since
+the message had been queued, QtDBus would attempt to deliver it later.
+Since that message had isLocal==true, bad things happened inside the
+manager thread.
+
+The correct solution is not to queue the message for the filter. If the
+message is local, then simply deliver directly, as we're still in the
+user's thread. This used to be the behavior in Qt 5.5.
+
+Task-number: QTBUG-51676
+Change-Id: I1dc112894cde7121e8ce302ae51b438ade1ff612
+---
+ src/dbus/qdbusintegrator.cpp | 42 ++++++++++++++++++++++++++++++++----------
+ src/dbus/qdbusintegrator_p.h | 1 +
+ 2 files changed, 33 insertions(+), 10 deletions(-)
+
+diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp
+index cd44861..478a2c4 100644
+--- a/src/dbus/qdbusintegrator.cpp
++++ b/src/dbus/qdbusintegrator.cpp
+@@ -481,6 +481,11 @@ QDBusSpyCallEvent::~QDBusSpyCallEvent()
+
+ void QDBusSpyCallEvent::placeMetaCall(QObject *)
+ {
++ invokeSpyHooks(msg, hooks, hookCount);
++}
++
++inline void QDBusSpyCallEvent::invokeSpyHooks(const QDBusMessage &msg, const Hook *hooks, int hookCount)
++{
+ // call the spy hook list
+ for (int i = 0; i < hookCount; ++i)
+ hooks[i](msg);
+@@ -509,7 +514,12 @@ bool QDBusConnectionPrivate::handleMessage(const QDBusMessage &amsg)
+ {
+ if (!ref.load())
+ return false;
+- if (!dispatchEnabled && !QDBusMessagePrivate::isLocal(amsg)) {
++
++ // local message are always delivered, regardless of filtering
++ // or whether the dispatcher is enabled
++ bool isLocal = QDBusMessagePrivate::isLocal(amsg);
++
++ if (!dispatchEnabled && !isLocal) {
+ // queue messages only, we'll handle them later
+ qDBusDebug() << this << "delivery is suspended";
+ pendingMessages << amsg;
+@@ -523,13 +533,23 @@ bool QDBusConnectionPrivate::handleMessage(const QDBusMessage &amsg)
+ // let them see the signal too
+ return false;
+ case QDBusMessage::MethodCallMessage:
+- // run it through the spy filters (if any) before the regular processing
++ // run it through the spy filters (if any) before the regular processing:
++ // a) if it's a local message, we're in the caller's thread, so invoke the filter directly
++ // b) if it's an external message, post to the main thread
+ if (Q_UNLIKELY(qDBusSpyHookList.exists()) && qApp) {
+ const QDBusSpyHookList &list = *qDBusSpyHookList;
+- qDBusDebug() << this << "invoking message spies";
+- QCoreApplication::postEvent(qApp, new QDBusSpyCallEvent(this, QDBusConnection(this),
+- amsg, list.constData(), list.size()));
+- return true;
++ if (isLocal) {
++ Q_ASSERT(QThread::currentThread() != thread());
++ qDBusDebug() << this << "invoking message spies directly";
++ QDBusSpyCallEvent::invokeSpyHooks(amsg, list.constData(), list.size());
++ } else {
++ qDBusDebug() << this << "invoking message spies via event";
++ QCoreApplication::postEvent(qApp, new QDBusSpyCallEvent(this, QDBusConnection(this),
++ amsg, list.constData(), list.size()));
++
++ // we'll be called back, so return
++ return true;
++ }
+ }
+
+ handleObjectCall(amsg);
+@@ -1451,9 +1471,9 @@ void QDBusConnectionPrivate::handleObjectCall(const QDBusMessage &msg)
+ // that means the dispatchLock mutex is locked
+ // must not call out to user code in that case
+ //
+- // however, if the message is internal, handleMessage was called
+- // directly and no lock is in place. We can therefore call out to
+- // user code, if necessary
++ // however, if the message is internal, handleMessage was called directly
++ // (user's thread) and no lock is in place. We can therefore call out to
++ // user code, if necessary.
+ ObjectTreeNode result;
+ int usedLength;
+ QThread *objThread = 0;
+@@ -1492,12 +1512,14 @@ void QDBusConnectionPrivate::handleObjectCall(const QDBusMessage &msg)
+ usedLength, msg));
+ return;
+ } else if (objThread != QThread::currentThread()) {
+- // synchronize with other thread
++ // looped-back message, targeting another thread:
++ // synchronize with it
+ postEventToThread(HandleObjectCallPostEventAction, result.obj,
+ new QDBusActivateObjectEvent(QDBusConnection(this), this, result,
+ usedLength, msg, &sem));
+ semWait = true;
+ } else {
++ // looped-back message, targeting current thread
+ semWait = false;
+ }
+ } // release the lock
+diff --git a/src/dbus/qdbusintegrator_p.h b/src/dbus/qdbusintegrator_p.h
+index 2bbebdf..c0d9c22 100644
+--- a/src/dbus/qdbusintegrator_p.h
++++ b/src/dbus/qdbusintegrator_p.h
+@@ -145,6 +145,7 @@ public:
+ {}
+ ~QDBusSpyCallEvent();
+ void placeMetaCall(QObject *) Q_DECL_OVERRIDE;
++ static inline void invokeSpyHooks(const QDBusMessage &msg, const Hook *hooks, int hookCount);
+
+ QDBusConnection conn; // keeps the refcount in QDBusConnectionPrivate up
+ QDBusMessage msg;
+--
+2.7.1
\ No newline at end of file
diff --git a/desktop/toolkit/qt5/qt5-base/pspec.xml b/desktop/toolkit/qt5/qt5-base/pspec.xml
index 176d32d2f0..6bebc9dff2 100644
--- a/desktop/toolkit/qt5/qt5-base/pspec.xml
+++ b/desktop/toolkit/qt5/qt5-base/pspec.xml
@@ -72,14 +72,19 @@
mkspecs.patch
+ qt5-alsa1.11.patch
+ qtbug-45812.patch
+ qtbug-51648.patch
+ qtbug-51649.patch
+ qtbug-51676.patch
qt5-base
- libpcre
- libgcc
+ libpcre
+ libgcc
cups
dbus
@@ -251,7 +256,7 @@
- 2016-05-02
+ 2016-05-04
5.6.0
Release Bump
PisiLinux Community
diff --git a/hardware/sound/alsa-lib/pspec.xml b/hardware/sound/alsa-lib/pspec.xml
index a29cf1cdb0..2b818ae5be 100644
--- a/hardware/sound/alsa-lib/pspec.xml
+++ b/hardware/sound/alsa-lib/pspec.xml
@@ -14,7 +14,7 @@
app:console
The Advanced Linux Sound Architecture (ALSA) library
alsa-lib provides ALSA runtime libraries to simplify application programming and provide higher level functionality as well as support for the older OSS API, providing binary compatibility for most OSS programs.
- ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.0.29.tar.bz2
+ ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.1.1.tar.bz2
python-devel
@@ -66,6 +66,13 @@
+
+ 2016-05-03
+ 1.1.1
+ Version bump.
+ Alihan Öztürk
+ alihan@pisilinux.org
+
2015-03-04
1.0.29
diff --git a/hardware/sound/alsa-tools/pspec.xml b/hardware/sound/alsa-tools/pspec.xml
index 5a658c78f5..feadb81900 100644
--- a/hardware/sound/alsa-tools/pspec.xml
+++ b/hardware/sound/alsa-tools/pspec.xml
@@ -14,7 +14,7 @@
app:gui
ALSA configuration tools
alsa-tools contains ALSA (Advanced Linux Sound Architecture) tools like firmware loaders and sound card control utilities for specific sound cards.
- ftp://ftp.alsa-project.org/pub/tools/alsa-tools-1.0.29.tar.bz2
+ ftp://ftp.alsa-project.org/pub/tools/alsa-tools-1.1.0.tar.bz2
gtk2-devel
fltk-devel
@@ -98,6 +98,13 @@
+
+ 2016-05-03
+ 1.1.0
+ Version bump.
+ Alihan Öztürk
+ alihan@pisilinux.org
+
2015-03-04
1.0.29
diff --git a/hardware/sound/alsa-utils/pspec.xml b/hardware/sound/alsa-utils/pspec.xml
index 45da0c38bc..1d53b3bf85 100644
--- a/hardware/sound/alsa-utils/pspec.xml
+++ b/hardware/sound/alsa-utils/pspec.xml
@@ -13,7 +13,7 @@
app:console
Advanced Linux Sound Architecture (ALSA) utilities
alsa-utils contains command line utilities for the Advanced Linux Sound Architecture (ALSA).
- ftp://ftp.alsa-project.org/pub/utils/alsa-utils-1.0.29.tar.bz2
+ ftp://ftp.alsa-project.org/pub/utils/alsa-utils-1.1.1.tar.bz2
xmlto
util-linux
@@ -57,6 +57,13 @@
+
+ 2016-05-03
+ 1.1.1
+ Version bump
+ Alihan Öztürk
+ alihan@pisilinux.org
+
2015-03-04
1.0.29
diff --git a/multimedia/graphics/libmng/actions.py b/multimedia/graphics/libmng/actions.py
index dc5e35dfd2..82cb1be3b4 100644
--- a/multimedia/graphics/libmng/actions.py
+++ b/multimedia/graphics/libmng/actions.py
@@ -15,7 +15,7 @@ def setup():
shelltools.sym("makefiles/Makefile.am", "Makefile.am")
shelltools.sym("makefiles/makefile.linux", "Makefile")
#shelltools.sym("contrib/gcc/sdl-mngplay/acinclude.m4", "acinclude.m4")
-
+
shelltools.system("sed -i -e 's/unroll-loops/& -fPIC/' Makefile ")
autotools.autoreconf("-fiv")
diff --git a/multimedia/graphics/libmng/pspec.xml b/multimedia/graphics/libmng/pspec.xml
index 6a4f5535e1..a9db7a4ba2 100644
--- a/multimedia/graphics/libmng/pspec.xml
+++ b/multimedia/graphics/libmng/pspec.xml
@@ -1,4 +1,3 @@
-
@@ -54,13 +53,11 @@
zlib-32bit
lcms2-32bit
libjpeg-turbo-32bit
- glibc-32bit
zlib-32bit
lcms2-32bit
libjpeg-turbo-32bit
- glibc-32bit
libmng
@@ -70,11 +67,11 @@
- 2014-05-19
+ 2016-05-04
2.0.2
First release
Alihan Öztürk
alihan@pisilinux.org
-
+
\ No newline at end of file