summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kde/patch/akonadi4.patch4
-rw-r--r--kde/patch/akonadi4/akonadi_dont-leak-old-external-payload-files.patch138
-rw-r--r--kde/patch/kdepim.patch2
-rw-r--r--kde/patch/kdepim/kdepim-install_kleopatra_headers.patch63
-rw-r--r--kde/patch/libkdcraw.patch3
-rw-r--r--kde/patch/libkdcraw/libkdcraw_cmake_minver.patch7
-rw-r--r--kde/patch/libkexiv2.patch3
-rw-r--r--kde/patch/libkexiv2/libkexiv2_cmake_minver.patch7
-rw-r--r--kde/patch/marble.patch3
-rw-r--r--kde/patch/marble/marble_qt4.patch47
-rw-r--r--kde/patch/sddm-qt5.patch5
-rw-r--r--kde/patch/sddm-qt5/sddm_qstring.patch88
12 files changed, 340 insertions, 30 deletions
diff --git a/kde/patch/akonadi4.patch b/kde/patch/akonadi4.patch
new file mode 100644
index 0000000..388c3ea
--- /dev/null
+++ b/kde/patch/akonadi4.patch
@@ -0,0 +1,4 @@
+# Backport a patch from git master since there will not be another
+# official akonadi release after the current 1.13:
+cat $CWD/patch/akonadi4/akonadi_dont-leak-old-external-payload-files.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+
diff --git a/kde/patch/akonadi4/akonadi_dont-leak-old-external-payload-files.patch b/kde/patch/akonadi4/akonadi_dont-leak-old-external-payload-files.patch
new file mode 100644
index 0000000..f963636
--- /dev/null
+++ b/kde/patch/akonadi4/akonadi_dont-leak-old-external-payload-files.patch
@@ -0,0 +1,138 @@
+#
+# Patch gratefully taken from https://projects.archlinux.org/svntogit/packages.git/tree/trunk?h=packages/akonadi-qt4
+#
+From: Dan Vrátil <dvratil@redhat.com>
+Date: Mon, 29 Jun 2015 20:45:11 +0000
+Subject: Don't leak old external payload files
+X-Git-Url: http://quickgit.kde.org/?p=akonadi.git&a=commitdiff&h=9c0dc6b3f0826d32eac310b2e7ecd858ca3df681
+---
+Don't leak old external payload files
+
+Actually delete old payload files after we increase the payload revision or
+switch from external to internal payload. This caused ~/.local/share/akonadi/file_db_data
+to grow insanely for all users, leaving them with many duplicated files (just with
+different revisions).
+
+It is recommended that users run akonadictl fsck to clean up the leaked payload
+files.
+
+Note that there won't be any more releases of Akonadi 1.13 (and this has been
+fixed in master already), so I strongly recommend distributions to pick this
+patch into their packaging.
+
+BUG: 341884
+CCBUG: 338402
+---
+
+
+--- a/server/src/storage/partstreamer.cpp
++++ b/server/src/storage/partstreamer.cpp
+@@ -290,6 +290,12 @@
+ mDataChanged = true;
+ }
+
++ // If the part is external, remember it's current file name
++ QString originalFile;
++ if (part.isValid() && part.external()) {
++ originalFile = PartHelper::resolveAbsolutePath(part.data());
++ }
++
+ part.setPartType(partType);
+ part.setVersion(partVersion);
+ part.setPimItemId(mItem.id());
+@@ -306,6 +312,14 @@
+ *changed = mDataChanged;
+ }
+
++ if (!originalFile.isEmpty()) {
++ // If the part was external but is not anymore, or if it's still external
++ // but the filename has changed (revision update), remove the original file
++ if (!part.external() || (part.external() && originalFile != PartHelper::resolveAbsolutePath(part.data()))) {
++ PartHelper::removeFile(originalFile);
++ }
++ }
++
+ return ok;
+ }
+
+
+--- a/server/tests/unittest/partstreamertest.cpp
++++ b/server/tests/unittest/partstreamertest.cpp
+@@ -91,6 +91,7 @@
+ QTest::addColumn<qint64>("expectedPartSize");
+ QTest::addColumn<bool>("expectedChanged");
+ QTest::addColumn<bool>("isExternal");
++ QTest::addColumn<int>("version");
+ QTest::addColumn<PimItem>("pimItem");
+
+ PimItem item;
+@@ -101,22 +102,22 @@
+ QVERIFY(item.insert());
+
+ // Order of these tests matters!
+- QTest::newRow("item 1, internal") << QByteArray("PLD:DATA") << QByteArray("123") << 3ll << true << false << item;
+- QTest::newRow("item 1, change to external") << QByteArray("PLD:DATA") << QByteArray("123456789") << 9ll << true << true << item;
+- QTest::newRow("item 1, update external") << QByteArray("PLD:DATA") << QByteArray("987654321") << 9ll << true << true << item;
+- QTest::newRow("item 1, external, no change") << QByteArray("PLD:DATA") << QByteArray("987654321") << 9ll << false << true << item;
+- QTest::newRow("item 1, change to internal") << QByteArray("PLD:DATA") << QByteArray("1234") << 4ll << true << false << item;
+- QTest::newRow("item 1, internal, no change") << QByteArray("PLD:DATA") << QByteArray("1234") << 4ll << false << false << item;
++ QTest::newRow("item 1, internal") << QByteArray("PLD:DATA") << QByteArray("123") << 3ll << true << false << -1 << item;
++ QTest::newRow("item 1, change to external") << QByteArray("PLD:DATA") << QByteArray("123456789") << 9ll << true << true << 0 << item;
++ QTest::newRow("item 1, update external") << QByteArray("PLD:DATA") << QByteArray("987654321") << 9ll << true << true << 1 << item;
++ QTest::newRow("item 1, external, no change") << QByteArray("PLD:DATA") << QByteArray("987654321") << 9ll << false << true << 2 << item;
++ QTest::newRow("item 1, change to internal") << QByteArray("PLD:DATA") << QByteArray("1234") << 4ll << true << false << 2 << item;
++ QTest::newRow("item 1, internal, no change") << QByteArray("PLD:DATA") << QByteArray("1234") << 4ll << false << false << 2 << item;
+ }
+
+ void testStreamer()
+ {
+- return;
+ QFETCH(QByteArray, expectedPartName);
+ QFETCH(QByteArray, expectedData);
+ QFETCH(qint64, expectedPartSize);
+ QFETCH(bool, expectedChanged);
+ QFETCH(bool, isExternal);
++ QFETCH(int, version);
+ QFETCH(PimItem, pimItem);
+
+ FakeConnection connection;
+@@ -160,17 +161,18 @@
+
+ PimItem item = PimItem::retrieveById(pimItem.id());
+ const QVector<Part> parts = item.parts();
+- QVERIFY(parts.count() == 1);
++ QCOMPARE(parts.count(), 1);
+ const Part part = parts[0];
+ QCOMPARE(part.datasize(), expectedPartSize);
+ QCOMPARE(part.external(), isExternal);
++ qDebug() << part.version() << part.data();
+ const QByteArray data = part.data();
+ if (isExternal) {
+ QVERIFY(streamerSpy.count() == 1);
+ QVERIFY(streamerSpy.first().count() == 1);
+ const Response response = streamerSpy.first().first().value<Akonadi::Server::Response>();
+ const QByteArray str = response.asString();
+- const QByteArray expectedResponse = "+ STREAM [FILE " + QByteArray::number(part.id()) + "_r" + QByteArray::number(part.version()) + "]";
++ const QByteArray expectedResponse = "+ STREAM [FILE " + QByteArray::number(part.id()) + "_r" + QByteArray::number(version) + "]";
+ QCOMPARE(QString::fromUtf8(str), QString::fromUtf8(expectedResponse));
+
+ QFile file(PartHelper::resolveAbsolutePath(data));
+@@ -182,7 +184,7 @@
+ QCOMPARE(fileData, expectedData);
+
+ // Make sure no previous versions are left behind in file_db_data
+- for (int i = 0; i < part.version(); ++i) {
++ for (int i = 0; i < version; ++i) {
+ const QByteArray fileName = QByteArray::number(part.id()) + "_r" + QByteArray::number(part.version());
+ const QString filePath = PartHelper::resolveAbsolutePath(fileName);
+ QVERIFY(!QFile::exists(filePath));
+@@ -194,7 +196,7 @@
+ QCOMPARE(data, expectedData);
+
+ // Make sure nothing is left behind in file_db_data
+- for (int i = 0; i <= part.version(); ++i) {
++ for (int i = 0; i <= version; ++i) {
+ const QByteArray fileName = QByteArray::number(part.id()) + "_r" + QByteArray::number(part.version());
+ const QString filePath = PartHelper::resolveAbsolutePath(fileName);
+ QVERIFY(!QFile::exists(filePath));
+
diff --git a/kde/patch/kdepim.patch b/kde/patch/kdepim.patch
index f8b34ac..c5aeb9c 100644
--- a/kde/patch/kdepim.patch
+++ b/kde/patch/kdepim.patch
@@ -1,4 +1,4 @@
# Install Kleopatra headers, needed by kopete-cryptography:
# This used to be fixed?
-cat $CWD/patch/kdepim/kdepim-install_kleopatra_headers.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+#cat $CWD/patch/kdepim/kdepim-install_kleopatra_headers.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
diff --git a/kde/patch/kdepim/kdepim-install_kleopatra_headers.patch b/kde/patch/kdepim/kdepim-install_kleopatra_headers.patch
index 8960ab8..18662fd 100644
--- a/kde/patch/kdepim/kdepim-install_kleopatra_headers.patch
+++ b/kde/patch/kdepim/kdepim-install_kleopatra_headers.patch
@@ -1,21 +1,25 @@
-diff -up kdepim-4.11.90/kleopatra/libkleopatraclient/CMakeLists.txt.install_kleopatra_headers kdepim-4.11.90/kleopatra/libkleopatraclient/CMakeLists.txt
---- kdepim-4.11.90/kleopatra/libkleopatraclient/CMakeLists.txt.install_kleopatra_headers 2013-11-14 02:23:52.000000000 -0600
-+++ kdepim-4.11.90/kleopatra/libkleopatraclient/CMakeLists.txt 2013-11-16 13:17:30.289810575 -0600
-@@ -6,3 +6,7 @@ add_subdirectory(gui)
-
- add_subdirectory(tests)
+diff -uarN kdepim-15.08.0.orig/kleopatra/libkleopatraclient/CMakeLists.txt kdepim-15.08.0/kleopatra/libkleopatraclient/CMakeLists.txt
+--- kdepim-15.08.0.orig/kleopatra/libkleopatraclient/CMakeLists.txt 2015-08-10 21:56:00.000000000 +0200
++++ kdepim-15.08.0/kleopatra/libkleopatraclient/CMakeLists.txt 2015-08-24 23:05:07.650076668 +0200
+@@ -4,6 +4,11 @@
+ add_subdirectory(core)
+ add_subdirectory(gui)
+install(
+ FILES kleopatraclient_export.h
+ DESTINATION ${INCLUDE_INSTALL_DIR}/libkleopatraclient
+ )
-diff -up kdepim-4.11.90/kleopatra/libkleopatraclient/core/CMakeLists.txt.install_kleopatra_headers kdepim-4.11.90/kleopatra/libkleopatraclient/core/CMakeLists.txt
---- kdepim-4.11.90/kleopatra/libkleopatraclient/core/CMakeLists.txt.install_kleopatra_headers 2013-11-14 02:23:52.000000000 -0600
-+++ kdepim-4.11.90/kleopatra/libkleopatraclient/core/CMakeLists.txt 2013-11-16 13:17:30.290810557 -0600
-@@ -72,3 +72,13 @@ else()
++
+ if(BUILD_TESTING)
+ add_subdirectory(tests)
endif()
+diff -uarN kdepim-15.08.0.orig/kleopatra/libkleopatraclient/core/CMakeLists.txt kdepim-15.08.0/kleopatra/libkleopatraclient/core/CMakeLists.txt
+--- kdepim-15.08.0.orig/kleopatra/libkleopatraclient/core/CMakeLists.txt 2015-08-10 21:56:00.000000000 +0200
++++ kdepim-15.08.0/kleopatra/libkleopatraclient/core/CMakeLists.txt 2015-08-24 22:52:15.613045160 +0200
+@@ -67,3 +67,13 @@
+ target_link_libraries(kleopatraclientcore Qt5::Widgets KF5::I18n)
- install(TARGETS kleopatraclientcore ${INSTALL_TARGETS_DEFAULT_ARGS})
+ install(TARGETS kleopatraclientcore ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
+
+install(
+ FILES
@@ -26,25 +30,25 @@ diff -up kdepim-4.11.90/kleopatra/libkleopatraclient/core/CMakeLists.txt.install
+ decryptverifyfilescommand.h
+ DESTINATION ${INCLUDE_INSTALL_DIR}/libkleopatraclient/core
+ )
-diff -up kdepim-4.11.90/kleopatra/libkleopatraclient/gui/CMakeLists.txt.install_kleopatra_headers kdepim-4.11.90/kleopatra/libkleopatraclient/gui/CMakeLists.txt
---- kdepim-4.11.90/kleopatra/libkleopatraclient/gui/CMakeLists.txt.install_kleopatra_headers 2013-11-14 02:23:52.000000000 -0600
-+++ kdepim-4.11.90/kleopatra/libkleopatraclient/gui/CMakeLists.txt 2013-11-16 13:17:30.290810557 -0600
-@@ -16,3 +16,9 @@ set_target_properties(kleopatraclientgui
+diff -uarN kdepim-15.08.0.orig/kleopatra/libkleopatraclient/gui/CMakeLists.txt kdepim-15.08.0/kleopatra/libkleopatraclient/gui/CMakeLists.txt
+--- kdepim-15.08.0.orig/kleopatra/libkleopatraclient/gui/CMakeLists.txt 2015-08-10 21:56:00.000000000 +0200
++++ kdepim-15.08.0/kleopatra/libkleopatraclient/gui/CMakeLists.txt 2015-08-24 22:52:15.613045160 +0200
+@@ -16,3 +16,9 @@
)
- install(TARGETS kleopatraclientgui ${INSTALL_TARGETS_DEFAULT_ARGS})
+ install(TARGETS kleopatraclientgui ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
+
+install(
+ FILES
+ certificaterequester.h
+ DESTINATION ${INCLUDE_INSTALL_DIR}/libkleopatraclient/gui
+ )
-diff -up kdepim-4.11.90/libkleo/CMakeLists.txt.install_kleopatra_headers kdepim-4.11.90/libkleo/CMakeLists.txt
---- kdepim-4.11.90/libkleo/CMakeLists.txt.install_kleopatra_headers 2013-11-14 02:23:52.000000000 -0600
-+++ kdepim-4.11.90/libkleo/CMakeLists.txt 2013-11-16 13:17:30.290810557 -0600
-@@ -121,3 +121,61 @@ install ( FILES libkleopatrarc-win32.des
+diff -uarN kdepim-15.08.0.orig/libkleo/CMakeLists.txt kdepim-15.08.0/libkleo/CMakeLists.txt
+--- kdepim-15.08.0.orig/libkleo/CMakeLists.txt 2015-08-10 21:56:00.000000000 +0200
++++ kdepim-15.08.0/libkleo/CMakeLists.txt 2015-08-24 22:52:15.613045160 +0200
+@@ -126,3 +126,61 @@
else ()
- install ( FILES libkleopatrarc.desktop DESTINATION ${CONFIG_INSTALL_DIR} RENAME libkleopatrarc )
+ install ( FILES libkleopatrarc.desktop DESTINATION ${KDE_INSTALL_CONFDIR} RENAME libkleopatrarc )
endif ()
+
+install( FILES
@@ -104,12 +108,12 @@ diff -up kdepim-4.11.90/libkleo/CMakeLists.txt.install_kleopatra_headers kdepim-
+ ui/directoryserviceswidget.h
+ ui/filenamerequester.h
+ DESTINATION ${INCLUDE_INSTALL_DIR}/kleo/ui COMPONENT Devel)
-diff -up kdepim-4.11.90/libkpgp/CMakeLists.txt.install_kleopatra_headers kdepim-4.11.90/libkpgp/CMakeLists.txt
---- kdepim-4.11.90/libkpgp/CMakeLists.txt.install_kleopatra_headers 2013-11-16 13:17:30.290810557 -0600
-+++ kdepim-4.11.90/libkpgp/CMakeLists.txt 2013-11-16 13:20:55.258111864 -0600
-@@ -35,3 +35,11 @@ add_subdirectory( tests )
- install(FILES kconf_update/kpgp.upd DESTINATION ${KCONF_UPDATE_INSTALL_DIR})
- install(PROGRAMS kconf_update/kpgp-3.1-upgrade-address-data.pl DESTINATION ${KCONF_UPDATE_INSTALL_DIR})
+diff -uarN kdepim-15.08.0.orig/libkpgp/CMakeLists.txt kdepim-15.08.0/libkpgp/CMakeLists.txt
+--- kdepim-15.08.0.orig/libkpgp/CMakeLists.txt 2015-08-10 21:56:00.000000000 +0200
++++ kdepim-15.08.0/libkpgp/CMakeLists.txt 2015-08-24 23:04:02.505074051 +0200
+@@ -44,6 +44,15 @@
+ set_target_properties(kpgp PROPERTIES VERSION ${KDEPIM_LIB_VERSION} SOVERSION ${KDEPIM_LIB_SOVERSION})
+ install(TARGETS kpgp ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
+install(FILES
+ kpgp.h
@@ -119,4 +123,7 @@ diff -up kdepim-4.11.90/libkpgp/CMakeLists.txt.install_kleopatra_headers kdepim-
+ kpgpui.h
+ libkpgp_export.h
+ DESTINATION ${INCLUDE_INSTALL_DIR}/kpgp COMPONENT Devel )
-
++
+ if(BUILD_TESTING)
+ add_subdirectory( tests )
+ endif()
diff --git a/kde/patch/libkdcraw.patch b/kde/patch/libkdcraw.patch
new file mode 100644
index 0000000..fd8cf51
--- /dev/null
+++ b/kde/patch/libkdcraw.patch
@@ -0,0 +1,3 @@
+# Backport a patch from git to support our newer cmake:
+#cat $CWD/patch/libkdcraw/libkdcraw_cmake_minver.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+
diff --git a/kde/patch/libkdcraw/libkdcraw_cmake_minver.patch b/kde/patch/libkdcraw/libkdcraw_cmake_minver.patch
new file mode 100644
index 0000000..3446a19
--- /dev/null
+++ b/kde/patch/libkdcraw/libkdcraw_cmake_minver.patch
@@ -0,0 +1,7 @@
+--- libkdcraw-15.08.0.orig/CMakeLists.txt 2015-05-14 22:54:16.000000000 +0200
++++ libkdcraw-15.08.0/CMakeLists.txt 2015-08-25 13:37:50.880746449 +0200
+@@ -1,3 +1,4 @@
++cmake_minimum_required(VERSION 2.8.9)
+ #
+ # Copyright (c) 2010-2014, Gilles Caulier, <caulier dot gilles at gmail dot com>
+ #
diff --git a/kde/patch/libkexiv2.patch b/kde/patch/libkexiv2.patch
new file mode 100644
index 0000000..5a61c23
--- /dev/null
+++ b/kde/patch/libkexiv2.patch
@@ -0,0 +1,3 @@
+# Backport a patch from git to support our newer cmake:
+#cat $CWD/patch/libkexiv2/libkexiv2_cmake_minver.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+
diff --git a/kde/patch/libkexiv2/libkexiv2_cmake_minver.patch b/kde/patch/libkexiv2/libkexiv2_cmake_minver.patch
new file mode 100644
index 0000000..a83861c
--- /dev/null
+++ b/kde/patch/libkexiv2/libkexiv2_cmake_minver.patch
@@ -0,0 +1,7 @@
+--- libkexiv2-15.08.0.orig/CMakeLists.txt 2015-04-30 21:04:22.000000000 +0200
++++ libkexiv2-15.08.0/CMakeLists.txt 2015-08-25 13:14:34.093738317 +0200
+@@ -1,3 +1,4 @@
++cmake_minimum_required(VERSION 2.8.9)
+ #
+ # Copyright (c) 2010-2014, Gilles Caulier, <caulier dot gilles at gmail dot com>
+ #
diff --git a/kde/patch/marble.patch b/kde/patch/marble.patch
new file mode 100644
index 0000000..ba4fbde
--- /dev/null
+++ b/kde/patch/marble.patch
@@ -0,0 +1,3 @@
+# Ensure marble bindings for Qt4 get compiled:
+cat $CWD/patch/marble/marble_qt4.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+
diff --git a/kde/patch/marble/marble_qt4.patch b/kde/patch/marble/marble_qt4.patch
new file mode 100644
index 0000000..e497023
--- /dev/null
+++ b/kde/patch/marble/marble_qt4.patch
@@ -0,0 +1,47 @@
+--- marble-15.08.0.orig/CMakeLists.txt 2015-08-12 13:14:02.000000000 +0200
++++ marble-15.08.0/CMakeLists.txt 2015-08-29 00:24:00.767298683 +0200
+@@ -45,6 +45,8 @@
+ ####################################################
+ # Specific options for building with Qt 4 vs 5
+
++option(QT5BUILD "Build for Qt5" ON)
++
+ if(ANDROID)
+ if (NOT DEFINED ENV{Qt5_host})
+ message(FATAL_ERROR "Configure the env variable Qt5_host to point to your host Qt5 installation.")
+@@ -79,6 +81,7 @@
+ include_directories(SYSTEM "$ENV{ANDROID_NDK}/platforms/$ENV{ANDROID_PLATFORM}/arch-arm/usr/include")
+ message(STATUS "Include directories: " "$ENV{ANDROID_NDK}/platforms/$ENV{ANDROID_PLATFORM}/arch-arm/usr/include")
+ else()
++ if(QT5BUILD)
+ find_package(Qt5WebKit)
+ find_package(Qt5WebKitWidgets)
+ find_package(Qt5DBus)
+@@ -86,8 +89,10 @@
+ if ( NOT Qt5WebKit_FOUND )
+ set ( MARBLE_NO_WEBKIT TRUE )
+ endif()
++ endif()
+ endif()
+
++if(QT5BUILD)
+ find_package(Qt5Core)
+ find_package(Qt5Xml)
+ find_package(Qt5Network)
+@@ -100,6 +105,7 @@
+ find_package(Qt5Quick)
+ find_package(Qt5OpenGL)
+ find_package(Qt5PrintSupport)
++endif()
+
+ if(QTONLY)
+ # Forward the old QTONLY=TRUE option to the new WITH_KDE=FALSE
+@@ -111,8 +117,6 @@
+ unset(QTONLY)
+ endif()
+
+-option(QT5BUILD "Build for Qt5" ON)
+-
+ if(QT5BUILD AND Qt5Core_FOUND)
+ cmake_minimum_required(VERSION 2.8.12)
+ set(QT4BUILD FALSE)
diff --git a/kde/patch/sddm-qt5.patch b/kde/patch/sddm-qt5.patch
index d1a12dc..58f21c7 100644
--- a/kde/patch/sddm-qt5.patch
+++ b/kde/patch/sddm-qt5.patch
@@ -1,6 +1,9 @@
# Add missing consolekit support
-# (brings back the switch_user/shutdown/reboot functionality in KDE):
+# (brings back the switch_user functionality in KDE):
cat $CWD/patch/sddm-qt5/sddm_consolekit.diff | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
# Fix a compilation error on passwd backend:
#cat $CWD/patch/sddm-qt5/sddm_auth.diff | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+
+# Fix a compilation error on passwd backend:
+cat $CWD/patch/sddm-qt5/sddm_qstring.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
diff --git a/kde/patch/sddm-qt5/sddm_qstring.patch b/kde/patch/sddm-qt5/sddm_qstring.patch
new file mode 100644
index 0000000..40c3879
--- /dev/null
+++ b/kde/patch/sddm-qt5/sddm_qstring.patch
@@ -0,0 +1,88 @@
+Slightly modified from this patch in order to apply against SDDM master git:
+https://github.com/AOSC-Dev/sddm/commit/c6be72636f43a28f1b6aebff9d682d0182dd7a1e.patch
+
+From c6be72636f43a28f1b6aebff9d682d0182dd7a1e Mon Sep 17 00:00:00 2001
+From: Leslie Zhai <xiangzhai83@gmail.com>
+Date: Mon, 31 Aug 2015 14:04:17 +0800
+Subject: [PATCH] Disable pam backend because loginFailed
+
+---
+diff -uar sddm-d42700a_20150822git.orig/CMakeLists.txt sddm-d42700a_20150822git/CMakeLists.txt
+--- sddm-d42700a_20150822git.orig/CMakeLists.txt 2015-08-22 16:17:37.000000000 +0200
++++ sddm-d42700a_20150822git/CMakeLists.txt 2015-08-31 12:01:47.342810382 +0200
+@@ -31,6 +31,7 @@
+ # Options
+ option(BUILD_MAN_PAGES "Build man pages" OFF)
+ option(ENABLE_JOURNALD "Enable logging to journald" ON)
++option(ENABLE_PAM "Enable pam" OFF)
+
+ # Definitions
+ add_definitions(-Wall -std=c++11 -DQT_NO_CAST_FROM_ASCII)
+@@ -66,7 +67,7 @@
+ find_package(PkgConfig)
+
+ # PAM
+-if(NOT NO_PAM)
++if(ENABLE_PAM)
+ find_package(PAM)
+
+ if(PAM_FOUND)
+diff -uar sddm-d42700a_20150822git.orig/src/helper/backend/PasswdBackend.cpp sddm-d42700a_20150822git/src/helper/backend/PasswdBackend.cpp
+--- sddm-d42700a_20150822git.orig/src/helper/backend/PasswdBackend.cpp 2015-08-22 16:17:37.000000000 +0200
++++ sddm-d42700a_20150822git/src/helper/backend/PasswdBackend.cpp 2015-08-31 12:00:43.995324823 +0200
+@@ -38,7 +38,7 @@
+ if (m_autologin)
+ return true;
+
+- if (m_user == "sddm") {
++ if (m_user == QStringLiteral("sddm")) {
+ if (m_greeter)
+ return true;
+ else
+@@ -49,17 +49,17 @@
+ QString password;
+
+ if (m_user.isEmpty())
+- r.prompts << Prompt(AuthPrompt::LOGIN_USER, "Login", false);
+- r.prompts << Prompt(AuthPrompt::LOGIN_PASSWORD, "Password", true);
++ r.prompts << Prompt(AuthPrompt::LOGIN_USER, QStringLiteral("Login"), false);
++ r.prompts << Prompt(AuthPrompt::LOGIN_PASSWORD, QStringLiteral("Password"), true);
+
+ Request response = m_app->request(r);
+ Q_FOREACH(const Prompt &p, response.prompts) {
+ switch (p.type) {
+ case AuthPrompt::LOGIN_USER:
+- m_user = p.response;
++ m_user = QString::fromUtf8(p.response);
+ break;
+ case AuthPrompt::LOGIN_PASSWORD:
+- password = p.response;
++ password = QString::fromUtf8(p.response);
+ break;
+ default:
+ break;
+@@ -68,13 +68,13 @@
+
+ struct passwd *pw = getpwnam(qPrintable(m_user));
+ if (!pw) {
+- m_app->error(QString("Wrong user/password combination"), Auth::ERROR_AUTHENTICATION);
++ m_app->error(QStringLiteral("Wrong user/password combination"), Auth::ERROR_AUTHENTICATION);
+ return false;
+ }
+
+ struct spwd *spw = getspnam(pw->pw_name);
+ if (!spw) {
+- qWarning() << "[Passwd] Could get passwd but not shadow";
++ qWarning() << QStringLiteral("[Passwd] Could get passwd but not shadow");
+ return false;
+ }
+
+@@ -86,7 +86,7 @@
+ return true;
+ }
+
+- m_app->error(QString("Wrong user/password combination"), Auth::ERROR_AUTHENTICATION);
++ m_app->error(QStringLiteral("Wrong user/password combination"), Auth::ERROR_AUTHENTICATION);
+ return false;
+ }
+