diff -Nru akonadi-16.04.2/CMakeLists.txt akonadi-16.04.2.patched/CMakeLists.txt
--- akonadi-16.04.2/CMakeLists.txt	2016-05-31 11:33:56.000000000 +0200
+++ akonadi-16.04.2.patched/CMakeLists.txt	2016-06-30 22:38:55.661518771 +0200
@@ -31,14 +31,13 @@
     SOVERSION 5)
 
 # Find packages
-find_package(Qt5Core ${QT_REQUIRED_VERSION} CONFIG  REQUIRED)
-find_package(Qt5Gui ${QT_REQUIRED_VERSION} CONFIG REQUIRED)
-find_package(Qt5Widgets ${QT_REQUIRED_VERSION} CONFIG REQUIRED)
-find_package(Qt5Sql ${QT_REQUIRED_VERSION} CONFIG REQUIRED)
-find_package(Qt5Network ${QT_REQUIRED_VERSION} CONFIG REQUIRED)
-find_package(Qt5Xml ${QT_REQUIRED_VERSION} CONFIG REQUIRED)
-find_package(Qt5DBus ${QT_REQUIRED_VERSION} CONFIG REQUIRED)
-find_package(Qt5Test ${QT_REQUIRED_VERSION} CONFIG REQUIRED)
+find_package(Qt5Core ${QT_REQUIRED_VERSION} REQUIRED COMPONENTS Private)
+find_package(Qt5Sql ${QT_REQUIRED_VERSION} REQUIRED COMPONENTS Private)
+find_package(Qt5DBus ${QT_REQUIRED_VERSION} REQUIRED)
+find_package(Qt5Network ${QT_REQUIRED_VERSION} REQUIRED)
+find_package(Qt5Test ${QT_REQUIRED_VERSION} REQUIRED)
+find_package(Qt5Widgets ${QT_REQUIRED_VERSION} REQUIRED)
+find_package(Qt5Xml ${QT_REQUIRED_VERSION} REQUIRED)
 
 find_package(KF5ItemViews ${KF5_VERSION} CONFIG REQUIRED)
 find_package(KF5KIO ${KF5_VERSION} CONFIG REQUIRED)
@@ -129,7 +128,7 @@
     set(SQLITE_TYPE "OPTIONAL")
 endif()
 
-if(AKONADI_BUILD_QSQLITE AND Qt5Core_VERSION VERSION_LESS 5.7.0) # API change in 5.7 breaks our sqlite driver
+if(AKONADI_BUILD_QSQLITE)
     set(SQLITE_MIN_VERSION 3.6.23)
     find_package(Sqlite ${SQLITE_MIN_VERSION})
     set_package_properties(Sqlite PROPERTIES
diff -Nru akonadi-16.04.2/src/qsqlite/CMakeLists.txt akonadi-16.04.2.patched/src/qsqlite/CMakeLists.txt
--- akonadi-16.04.2/src/qsqlite/CMakeLists.txt	2016-05-31 11:33:56.000000000 +0200
+++ akonadi-16.04.2.patched/src/qsqlite/CMakeLists.txt	2016-06-30 22:27:54.489104785 +0200
@@ -9,6 +9,8 @@
 set(QSQLITE_INSTALL_PREFIX "${PLUGIN_INSTALL_DIR}/sqldrivers")
 
 include_directories(
+    ${Qt5Core_PRIVATE_INCLUDE_DIRS}
+    ${Qt5Sql_PRIVATE_INCLUDE_DIRS}
     ${CMAKE_CURRENT_SOURCE_DIR}/src
     ${SQLITE_INCLUDE_DIR}
 )
diff -Nru akonadi-16.04.2/src/qsqlite/src/QtSql/private/qobject_p.h akonadi-16.04.2.patched/src/qsqlite/src/QtSql/private/qobject_p.h
--- akonadi-16.04.2/src/qsqlite/src/QtSql/private/qobject_p.h	2016-05-31 11:33:56.000000000 +0200
+++ akonadi-16.04.2.patched/src/qsqlite/src/QtSql/private/qobject_p.h	1970-01-01 01:00:00.000000000 +0100
@@ -1,434 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Copyright (C) 2013 Olivier Goffart <ogoffart@woboq.com>
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.  For licensing terms and
-** conditions see http://qt.digia.com/licensing.  For further information
-** use the contact form at http://qt.digia.com/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights.  These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QOBJECT_P_H
-#define QOBJECT_P_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of qapplication_*.cpp, qwidget*.cpp and qfiledialog.cpp.  This header
-// file may change from version to version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "QtCore/qobject.h"
-#include "QtCore/qpointer.h"
-#include "QtCore/qsharedpointer.h"
-#include "QtCore/qcoreevent.h"
-#include "QtCore/qlist.h"
-#include "QtCore/qvector.h"
-#include "QtCore/qvariant.h"
-#include "QtCore/qreadwritelock.h"
-
-QT_BEGIN_NAMESPACE
-
-class QVariant;
-class QThreadData;
-class QObjectConnectionListVector;
-namespace QtSharedPointer { struct ExternalRefCountData; }
-
-/* for Qt Test */
-struct QSignalSpyCallbackSet
-{
-    typedef void (*BeginCallback)(QObject *caller, int signal_or_method_index, void **argv);
-    typedef void (*EndCallback)(QObject *caller, int signal_or_method_index);
-    BeginCallback signal_begin_callback,
-                    slot_begin_callback;
-    EndCallback signal_end_callback,
-                slot_end_callback;
-};
-void Q_CORE_EXPORT qt_register_signal_spy_callbacks(const QSignalSpyCallbackSet &callback_set);
-
-extern QSignalSpyCallbackSet Q_CORE_EXPORT qt_signal_spy_callback_set;
-
-enum { QObjectPrivateVersion = QT_VERSION };
-
-class Q_CORE_EXPORT QAbstractDeclarativeData
-{
-public:
-    static void (*destroyed)(QAbstractDeclarativeData *, QObject *);
-    static void (*destroyed_qml1)(QAbstractDeclarativeData *, QObject *);
-    static void (*parentChanged)(QAbstractDeclarativeData *, QObject *, QObject *);
-    static void (*signalEmitted)(QAbstractDeclarativeData *, QObject *, int, void **);
-    static int  (*receivers)(QAbstractDeclarativeData *, const QObject *, int);
-    static bool (*isSignalConnected)(QAbstractDeclarativeData *, const QObject *, int);
-};
-
-// This is an implementation of QAbstractDeclarativeData that is identical with
-// the implementation in QtDeclarative and QtQml for the first bit
-struct QAbstractDeclarativeDataImpl : public QAbstractDeclarativeData
-{
-    quint32 ownedByQml1:1;
-    quint32 unused: 31;
-};
-
-class Q_CORE_EXPORT QObjectPrivate : public QObjectData
-{
-    Q_DECLARE_PUBLIC(QObject)
-
-public:
-    struct ExtraData
-    {
-        ExtraData() {}
-    #ifndef QT_NO_USERDATA
-        QVector<QObjectUserData *> userData;
-    #endif
-        QList<QByteArray> propertyNames;
-        QList<QVariant> propertyValues;
-        QVector<int> runningTimers;
-        QList<QPointer<QObject> > eventFilters;
-        QString objectName;
-    };
-
-    typedef void (*StaticMetaCallFunction)(QObject *, QMetaObject::Call, int, void **);
-    struct Connection
-    {
-        QObject *sender;
-        QObject *receiver;
-        union {
-            StaticMetaCallFunction callFunction;
-            QtPrivate::QSlotObjectBase *slotObj;
-        };
-        // The next pointer for the singly-linked ConnectionList
-        Connection *nextConnectionList;
-        //senders linked list
-        Connection *next;
-        Connection **prev;
-        QAtomicPointer<const int> argumentTypes;
-        QAtomicInt ref_;
-        ushort method_offset;
-        ushort method_relative;
-        uint signal_index : 27; // In signal range (see QObjectPrivate::signalIndex())
-        ushort connectionType : 3; // 0 == auto, 1 == direct, 2 == queued, 4 == blocking
-        ushort isSlotObject : 1;
-        ushort ownArgumentTypes : 1;
-        Connection() : nextConnectionList(0), ref_(2), ownArgumentTypes(true) {
-            //ref_ is 2 for the use in the internal lists, and for the use in QMetaObject::Connection
-        }
-        ~Connection();
-        int method() const { return method_offset + method_relative; }
-        void ref() { ref_.ref(); }
-        void deref() {
-            if (!ref_.deref()) {
-                Q_ASSERT(!receiver);
-                delete this;
-            }
-        }
-    };
-    // ConnectionList is a singly-linked list
-    struct ConnectionList {
-        ConnectionList() : first(0), last(0) {}
-        Connection *first;
-        Connection *last;
-    };
-
-    struct Sender
-    {
-        QObject *sender;
-        int signal;
-        int ref;
-    };
-
-
-    QObjectPrivate(int version = QObjectPrivateVersion);
-    virtual ~QObjectPrivate();
-    void deleteChildren();
-
-    void setParent_helper(QObject *);
-    void moveToThread_helper();
-    void setThreadData_helper(QThreadData *currentData, QThreadData *targetData);
-    void _q_reregisterTimers(void *pointer);
-
-    bool isSender(const QObject *receiver, const char *signal) const;
-    QObjectList receiverList(const char *signal) const;
-    QObjectList senderList() const;
-
-    void addConnection(int signal, Connection *c);
-    void cleanConnectionLists();
-
-    static inline Sender *setCurrentSender(QObject *receiver,
-                                    Sender *sender);
-    static inline void resetCurrentSender(QObject *receiver,
-                                   Sender *currentSender,
-                                   Sender *previousSender);
-
-    static QObjectPrivate *get(QObject *o) {
-        return o->d_func();
-    }
-
-    int signalIndex(const char *signalName, const QMetaObject **meta = 0) const;
-    inline bool isSignalConnected(uint signalIdx) const;
-
-    // To allow abitrary objects to call connectNotify()/disconnectNotify() without making
-    // the API public in QObject. This is used by QQmlNotifierEndpoint.
-    inline void connectNotify(const QMetaMethod &signal);
-    inline void disconnectNotify(const QMetaMethod &signal);
-
-    template <typename Func1, typename Func2>
-    static inline QMetaObject::Connection connect(const typename QtPrivate::FunctionPointer<Func1>::Object *sender, Func1 signal,
-                                                  const typename QtPrivate::FunctionPointer<Func2>::Object *receiverPrivate, Func2 slot,
-                                                  Qt::ConnectionType type = Qt::AutoConnection);
-
-    template <typename Func1, typename Func2>
-    static inline bool disconnect(const typename QtPrivate::FunctionPointer<Func1>::Object *sender, Func1 signal,
-                                  const typename QtPrivate::FunctionPointer<Func2>::Object *receiverPrivate, Func2 slot);
-
-    static QMetaObject::Connection connectImpl(const QObject *sender, int signal_index,
-                                               const QObject *receiver, void **slot,
-                                               QtPrivate::QSlotObjectBase *slotObj, Qt::ConnectionType type,
-                                               const int *types, const QMetaObject *senderMetaObject);
-    static QMetaObject::Connection connect(const QObject *sender, int signal_index, QtPrivate::QSlotObjectBase *slotObj, Qt::ConnectionType type);
-    static bool disconnect(const QObject *sender, int signal_index, void **slot);
-public:
-    ExtraData *extraData;    // extra data set by the user
-    QThreadData *threadData; // id of the thread that owns the object
-
-    QObjectConnectionListVector *connectionLists;
-
-    Connection *senders;     // linked list of connections connected to this object
-    Sender *currentSender;   // object currently activating the object
-    mutable quint32 connectedSignals[2];
-
-    union {
-        QObject *currentChildBeingDeleted;
-        QAbstractDeclarativeData *declarativeData; //extra data used by the declarative module
-    };
-
-    // these objects are all used to indicate that a QObject was deleted
-    // plus QPointer, which keeps a separate list
-    QAtomicPointer<QtSharedPointer::ExternalRefCountData> sharedRefcount;
-};
-
-
-/*! \internal
-
-  Returns \c true if the signal with index \a signal_index from object \a sender is connected.
-  Signals with indices above a certain range are always considered connected (see connectedSignals
-  in QObjectPrivate).
-
-  \a signal_index must be the index returned by QObjectPrivate::signalIndex;
-*/
-inline bool QObjectPrivate::isSignalConnected(uint signal_index) const
-{
-    return signal_index >= sizeof(connectedSignals) * 8
-        || (connectedSignals[signal_index >> 5] & (1 << (signal_index & 0x1f))
-        || (declarativeData && QAbstractDeclarativeData::isSignalConnected
-            && QAbstractDeclarativeData::isSignalConnected(declarativeData, q_func(), signal_index)));
-}
-
-inline QObjectPrivate::Sender *QObjectPrivate::setCurrentSender(QObject *receiver,
-                                                         Sender *sender)
-{
-    Sender *previousSender = receiver->d_func()->currentSender;
-    receiver->d_func()->currentSender = sender;
-    return previousSender;
-}
-
-inline void QObjectPrivate::resetCurrentSender(QObject *receiver,
-                                        Sender *currentSender,
-                                        Sender *previousSender)
-{
-    // ref is set to zero when this object is deleted during the metacall
-    if (currentSender->ref == 1)
-        receiver->d_func()->currentSender = previousSender;
-    // if we've recursed, we need to tell the caller about the objects deletion
-    if (previousSender)
-        previousSender->ref = currentSender->ref;
-}
-
-inline void QObjectPrivate::connectNotify(const QMetaMethod &signal)
-{
-    q_ptr->connectNotify(signal);
-}
-
-inline void QObjectPrivate::disconnectNotify(const QMetaMethod &signal)
-{
-    q_ptr->disconnectNotify(signal);
-}
-
-namespace QtPrivate {
-template<typename Func, typename Args, typename R> class QPrivateSlotObject : public QSlotObjectBase
-{
-    typedef QtPrivate::FunctionPointer<Func> FuncType;
-    Func function;
-    static void impl(int which, QSlotObjectBase *this_, QObject *r, void **a, bool *ret)
-    {
-        switch (which) {
-            case Destroy:
-                delete static_cast<QPrivateSlotObject*>(this_);
-                break;
-            case Call:
-                FuncType::template call<Args, R>(static_cast<QPrivateSlotObject*>(this_)->function,
-                                                 static_cast<typename FuncType::Object *>(QObjectPrivate::get(r)), a);
-                break;
-            case Compare:
-                *ret = *reinterpret_cast<Func *>(a) == static_cast<QPrivateSlotObject*>(this_)->function;
-                break;
-            case NumOperations: ;
-        }
-    }
-public:
-    explicit QPrivateSlotObject(Func f) : QSlotObjectBase(&impl), function(f) {}
-};
-} //namespace QtPrivate
-
-template <typename Func1, typename Func2>
-inline QMetaObject::Connection QObjectPrivate::connect(const typename QtPrivate::FunctionPointer<Func1>::Object *sender, Func1 signal,
-                                                       const typename QtPrivate::FunctionPointer<Func2>::Object *receiverPrivate, Func2 slot,
-                                                       Qt::ConnectionType type)
-{
-    typedef QtPrivate::FunctionPointer<Func1> SignalType;
-    typedef QtPrivate::FunctionPointer<Func2> SlotType;
-    Q_STATIC_ASSERT_X(QtPrivate::HasQ_OBJECT_Macro<typename SignalType::Object>::Value,
-                      "No Q_OBJECT in the class with the signal");
-
-    //compilation error if the arguments does not match.
-    Q_STATIC_ASSERT_X(int(SignalType::ArgumentCount) >= int(SlotType::ArgumentCount),
-                      "The slot requires more arguments than the signal provides.");
-    Q_STATIC_ASSERT_X((QtPrivate::CheckCompatibleArguments<typename SignalType::Arguments, typename SlotType::Arguments>::value),
-                      "Signal and slot arguments are not compatible.");
-    Q_STATIC_ASSERT_X((QtPrivate::AreArgumentsCompatible<typename SlotType::ReturnType, typename SignalType::ReturnType>::value),
-                      "Return type of the slot is not compatible with the return type of the signal.");
-
-    const int *types = 0;
-    if (type == Qt::QueuedConnection || type == Qt::BlockingQueuedConnection)
-        types = QtPrivate::ConnectionTypes<typename SignalType::Arguments>::types();
-
-    return QObject::connectImpl(sender, reinterpret_cast<void **>(&signal),
-        receiverPrivate->q_ptr, reinterpret_cast<void **>(&slot),
-        new QtPrivate::QPrivateSlotObject<Func2, typename QtPrivate::List_Left<typename SignalType::Arguments, SlotType::ArgumentCount>::Value,
-                                        typename SignalType::ReturnType>(slot),
-        type, types, &SignalType::Object::staticMetaObject);
-}
-
-template <typename Func1, typename Func2>
-bool QObjectPrivate::disconnect(const typename QtPrivate::FunctionPointer< Func1 >::Object* sender, Func1 signal,
-                                const typename QtPrivate::FunctionPointer< Func2 >::Object* receiverPrivate, Func2 slot)
-{
-    typedef QtPrivate::FunctionPointer<Func1> SignalType;
-    typedef QtPrivate::FunctionPointer<Func2> SlotType;
-    Q_STATIC_ASSERT_X(QtPrivate::HasQ_OBJECT_Macro<typename SignalType::Object>::Value,
-                      "No Q_OBJECT in the class with the signal");
-    //compilation error if the arguments does not match.
-    Q_STATIC_ASSERT_X((QtPrivate::CheckCompatibleArguments<typename SignalType::Arguments, typename SlotType::Arguments>::value),
-                      "Signal and slot arguments are not compatible.");
-    return QObject::disconnectImpl(sender, reinterpret_cast<void **>(&signal),
-                          receiverPrivate->q_ptr, reinterpret_cast<void **>(&slot),
-                          &SignalType::Object::staticMetaObject);
-}
-
-Q_DECLARE_TYPEINFO(QObjectPrivate::Connection, Q_MOVABLE_TYPE);
-Q_DECLARE_TYPEINFO(QObjectPrivate::Sender, Q_MOVABLE_TYPE);
-
-class QSemaphore;
-class Q_CORE_EXPORT QMetaCallEvent : public QEvent
-{
-public:
-    QMetaCallEvent(ushort method_offset, ushort method_relative, QObjectPrivate::StaticMetaCallFunction callFunction , const QObject *sender, int signalId,
-                   int nargs = 0, int *types = 0, void **args = 0, QSemaphore *semaphore = 0);
-    /*! \internal
-        \a signalId is in the signal index range (see QObjectPrivate::signalIndex()).
-    */
-    QMetaCallEvent(QtPrivate::QSlotObjectBase *slotObj, const QObject *sender, int signalId,
-                   int nargs = 0, int *types = 0, void **args = 0, QSemaphore *semaphore = 0);
-
-    ~QMetaCallEvent();
-
-    inline int id() const { return method_offset_ + method_relative_; }
-    inline const QObject *sender() const { return sender_; }
-    inline int signalId() const { return signalId_; }
-    inline void **args() const { return args_; }
-
-    virtual void placeMetaCall(QObject *object);
-
-private:
-    QtPrivate::QSlotObjectBase *slotObj_;
-    const QObject *sender_;
-    int signalId_;
-    int nargs_;
-    int *types_;
-    void **args_;
-    QSemaphore *semaphore_;
-    QObjectPrivate::StaticMetaCallFunction callFunction_;
-    ushort method_offset_;
-    ushort method_relative_;
-};
-
-class QBoolBlocker
-{
-    Q_DISABLE_COPY(QBoolBlocker)
-public:
-    explicit inline QBoolBlocker(bool &b, bool value=true):block(b), reset(b){block = value;}
-    inline ~QBoolBlocker(){block = reset; }
-private:
-    bool &block;
-    bool reset;
-};
-
-void Q_CORE_EXPORT qDeleteInEventHandler(QObject *o);
-
-struct QAbstractDynamicMetaObject;
-struct Q_CORE_EXPORT QDynamicMetaObjectData
-{
-    virtual ~QDynamicMetaObjectData() {}
-    virtual void objectDestroyed(QObject *) { delete this; }
-
-    virtual QAbstractDynamicMetaObject *toDynamicMetaObject(QObject *) = 0;
-    virtual int metaCall(QObject *, QMetaObject::Call, int _id, void **) = 0;
-};
-
-struct Q_CORE_EXPORT QAbstractDynamicMetaObject : public QDynamicMetaObjectData, public QMetaObject
-{
-    virtual QAbstractDynamicMetaObject *toDynamicMetaObject(QObject *) { return this; }
-    virtual int createProperty(const char *, const char *) { return -1; }
-    virtual int metaCall(QObject *, QMetaObject::Call c, int _id, void **a)
-    { return metaCall(c, _id, a); }
-    virtual int metaCall(QMetaObject::Call, int _id, void **) { return _id; } // Compat overload
-};
-
-QT_END_NAMESPACE
-
-#endif // QOBJECT_P_H
diff -Nru akonadi-16.04.2/src/qsqlite/src/QtSql/private/qsqlcachedresult_p.h akonadi-16.04.2.patched/src/qsqlite/src/QtSql/private/qsqlcachedresult_p.h
--- akonadi-16.04.2/src/qsqlite/src/QtSql/private/qsqlcachedresult_p.h	2016-05-31 11:33:56.000000000 +0200
+++ akonadi-16.04.2.patched/src/qsqlite/src/QtSql/private/qsqlcachedresult_p.h	1970-01-01 01:00:00.000000000 +0100
@@ -1,100 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtSql module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Nokia.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QSQLCACHEDRESULT_P_H
-#define QSQLCACHEDRESULT_P_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "QtSql/qsqlresult.h"
-
-QT_BEGIN_NAMESPACE
-
-class QVariant;
-template <typename T> class QVector;
-
-class QSqlCachedResultPrivate;
-
-class Q_SQL_EXPORT QSqlCachedResult: public QSqlResult
-{
-public:
-    virtual ~QSqlCachedResult();
-
-    typedef QVector<QVariant> ValueCache;
-
-protected:
-    QSqlCachedResult(const QSqlDriver * db);
-
-    void init(int colCount);
-    void cleanup();
-    void clearValues();
-
-    virtual bool gotoNext(ValueCache &values, int index) = 0;
-
-    QVariant data(int i);
-    bool isNull(int i);
-    bool fetch(int i);
-    bool fetchNext();
-    bool fetchPrevious();
-    bool fetchFirst();
-    bool fetchLast();
-
-    int colCount() const;
-    ValueCache &cache();
-
-    void virtual_hook(int id, void *data);
-private:
-    bool cacheNext();
-    QSqlCachedResultPrivate *d;
-};
-
-QT_END_NAMESPACE
-
-#endif // QSQLCACHEDRESULT_P_H
diff -Nru akonadi-16.04.2/src/qsqlite/src/QtSql/private/qsqldriver_p.h akonadi-16.04.2.patched/src/qsqlite/src/QtSql/private/qsqldriver_p.h
--- akonadi-16.04.2/src/qsqlite/src/QtSql/private/qsqldriver_p.h	2016-05-31 11:33:56.000000000 +0200
+++ akonadi-16.04.2.patched/src/qsqlite/src/QtSql/private/qsqldriver_p.h	1970-01-01 01:00:00.000000000 +0100
@@ -1,86 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the QtSql module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.  For licensing terms and
-** conditions see http://qt.digia.com/licensing.  For further information
-** use the contact form at http://qt.digia.com/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights.  These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QSQLDRIVER_P_H
-#define QSQLDRIVER_P_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API. It exists for the convenience
-// of the QtSQL module. This header file may change from version to version
-// without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "qobject_p.h"
-#include "qsqldriver.h"
-#include "qsqlerror.h"
-
-QT_BEGIN_NAMESPACE
-
-class QSqlDriverPrivate : public QObjectPrivate
-{
-    Q_DECLARE_PUBLIC(QSqlDriver)
-
-public:
-    enum DBMSType {UnknownDB, MSSqlServer, MySqlServer, PostgreSQL, Oracle, Sybase, SQLite, Interbase, DB2};
-
-    QSqlDriverPrivate()
-      : QObjectPrivate(),
-        isOpen(false),
-        isOpenError(false),
-        precisionPolicy(QSql::LowPrecisionDouble),
-        dbmsType(UnknownDB)
-    { }
-
-    uint isOpen;
-    uint isOpenError;
-    QSqlError error;
-    QSql::NumericalPrecisionPolicy precisionPolicy;
-    DBMSType dbmsType;
-};
-
-QT_END_NAMESPACE
-
-#endif // QSQLDRIVER_P_H
diff -Nru akonadi-16.04.2/src/qsqlite/src/qsql_sqlite.cpp akonadi-16.04.2.patched/src/qsqlite/src/qsql_sqlite.cpp
--- akonadi-16.04.2/src/qsqlite/src/qsql_sqlite.cpp	2016-05-31 11:33:56.000000000 +0200
+++ akonadi-16.04.2.patched/src/qsqlite/src/qsql_sqlite.cpp	2016-06-30 22:27:54.490104785 +0200
@@ -51,8 +51,8 @@
 #include <qvector.h>
 #include <qdebug.h>
 
-#include "QtSql/private/qsqldriver_p.h"
-#include "QtSql/private/qsqlcachedresult_p.h"
+#include <QtSql/private/qsqldriver_p.h>
+#include <QtSql/private/qsqlcachedresult_p.h>
 
 #if defined Q_OS_WIN
 # include <qt_windows.h>
@@ -136,7 +136,10 @@
     void virtual_hook(int id, void *data);
 
 private:
-    QSQLiteResultPrivate* d;
+#if QT_VERSION < QT_VERSION_CHECK(5, 7, 0)
+    QSQLiteResultPrivate* d_ptr;
+#endif
+    Q_DECLARE_PRIVATE(QSQLiteResult)
 };
 
 
@@ -144,24 +147,33 @@
 {
 public:
     inline QSQLiteDriverPrivate() : access(0) {
-      dbmsType = SQLite;
+      dbmsType = QSqlDriver::SQLite;
     }
     sqlite3 *access;
     QList<QSQLiteResult *> results;
 };
 
 
+#if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)
+class QSQLiteResultPrivate : public QSqlCachedResultPrivate
+#else
 class QSQLiteResultPrivate
+#endif
 {
 public:
+#if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)
+    QSQLiteResultPrivate(QSQLiteResult *res, const QSQLiteDriver *drv);
+#else
     QSQLiteResultPrivate(QSQLiteResult *res);
+    QSQLiteResult* q_ptr;
+#endif
+
     void cleanup();
     bool fetchNext(QSqlCachedResult::ValueCache &values, int idx, bool initialFetch);
     // initializes the recordInfo and the cache
     void initColumns(bool emptyResultset);
     void finalize();
 
-    QSQLiteResult* q;
     sqlite3 *access;
 
     sqlite3_stmt *stmt;
@@ -170,15 +182,27 @@
     bool skipRow; // skip the next fetchNext()?
     QSqlRecord rInf;
     QVector<QVariant> firstRow;
+
+    Q_DECLARE_PUBLIC(QSQLiteResult)
 };
 
-QSQLiteResultPrivate::QSQLiteResultPrivate(QSQLiteResult* res) : q(res), access(0),
-    stmt(0), skippedStatus(false), skipRow(false)
+#if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)
+QSQLiteResultPrivate::QSQLiteResultPrivate(QSQLiteResult *res, const QSQLiteDriver *drv)
+    : QSqlCachedResultPrivate(res, drv)
+#else
+QSQLiteResultPrivate::QSQLiteResultPrivate(QSQLiteResult* res)
+    : q_ptr(res)
+#endif
+    , access(0)
+    , stmt(0)
+    , skippedStatus(false)
+    , skipRow(false)
 {
 }
 
 void QSQLiteResultPrivate::cleanup()
 {
+    Q_Q(QSQLiteResult);
     finalize();
     rInf.clear();
     skippedStatus = false;
@@ -199,6 +223,7 @@
 
 void QSQLiteResultPrivate::initColumns(bool emptyResultset)
 {
+    Q_Q(QSQLiteResult);
     int nCols = sqlite3_column_count(stmt);
     if (nCols <= 0)
         return;
@@ -251,6 +276,8 @@
 
 bool QSQLiteResultPrivate::fetchNext(QSqlCachedResult::ValueCache &values, int idx, bool initialFetch)
 {
+    Q_Q(QSQLiteResult);
+
     int res;
     int i;
 
@@ -351,20 +378,28 @@
 }
 
 QSQLiteResult::QSQLiteResult(const QSQLiteDriver* db)
+#if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)
+    : QSqlCachedResult(*new QSQLiteResultPrivate(this, db))
+#else
     : QSqlCachedResult(db)
+    , d_ptr(new QSQLiteResultPrivate(this))
+#endif
 {
-    d = new QSQLiteResultPrivate(this);
+    Q_D(QSQLiteResult);
     d->access = db->d_func()->access;
     const_cast<QSQLiteDriverPrivate*>(db->d_func())->results.append(this);
 }
 
 QSQLiteResult::~QSQLiteResult()
 {
+    Q_D(QSQLiteResult);
     const QSqlDriver *sqlDriver = driver();
     if (sqlDriver)
         const_cast<QSQLiteDriverPrivate*>(qobject_cast<const QSQLiteDriver *>(sqlDriver)->d_func())->results.removeOne(this);
     d->cleanup();
+#if QT_VERSION < QT_VERSION_CHECK(5, 7, 0)
     delete d;
+#endif
 }
 
 void QSQLiteResult::virtual_hook(int id, void *data)
@@ -381,6 +416,8 @@
 
 bool QSQLiteResult::prepare(const QString &query)
 {
+    Q_D(QSQLiteResult);
+
     if (!driver() || !driver()->isOpen() || driver()->isOpenError())
         return false;
 
@@ -416,6 +453,7 @@
 
 bool QSQLiteResult::exec()
 {
+    Q_D(QSQLiteResult);
     const QVector<QVariant> values = boundValues();
 
     d->skippedStatus = false;
@@ -510,7 +548,7 @@
 
 bool QSQLiteResult::gotoNext(QSqlCachedResult::ValueCache& row, int idx)
 {
-    return d->fetchNext(row, idx, false);
+    return d_func()->fetchNext(row, idx, false);
 }
 
 int QSQLiteResult::size()
@@ -520,13 +558,13 @@
 
 int QSQLiteResult::numRowsAffected()
 {
-    return sqlite3_changes(d->access);
+    return sqlite3_changes(d_func()->access);
 }
 
 QVariant QSQLiteResult::lastInsertId() const
 {
     if (isActive()) {
-        qint64 id = sqlite3_last_insert_rowid(d->access);
+        qint64 id = sqlite3_last_insert_rowid(d_func()->access);
         if (id)
             return id;
     }
@@ -537,18 +575,18 @@
 {
     if (!isActive() || !isSelect())
         return QSqlRecord();
-    return d->rInf;
+    return d_func()->rInf;
 }
 
 void QSQLiteResult::detachFromResultSet()
 {
-    if (d->stmt)
-        sqlite3_reset(d->stmt);
+    if (d_func()->stmt)
+        sqlite3_reset(d_func()->stmt);
 }
 
 QVariant QSQLiteResult::handle() const
 {
-    return qVariantFromValue(d->stmt);
+    return qVariantFromValue(d_func()->stmt);
 }
 
 /////////////////////////////////////////////////////////
@@ -660,7 +698,7 @@
 
     if (isOpen()) {
         Q_FOREACH (QSQLiteResult *result, d->results) {
-            result->d->finalize();
+            result->d_func()->finalize();
         }
 
         if (sqlite3_close(d->access) != SQLITE_OK)
