summaryrefslogtreecommitdiff
path: root/source/kde/patch
diff options
context:
space:
mode:
Diffstat (limited to 'source/kde/patch')
-rw-r--r--source/kde/patch/README18
-rw-r--r--source/kde/patch/amarok.patch3
-rw-r--r--source/kde/patch/amarok/amarok-liblastfm1.patch704
-rw-r--r--source/kde/patch/calligra.patch3
-rw-r--r--source/kde/patch/calligra/calligra.words.fix_overflow.diff16
-rw-r--r--source/kde/patch/kde-workspace.patch5
-rw-r--r--source/kde/patch/kde-workspace/kde-workspace.batteryapplet.diff16
-rw-r--r--source/kde/patch/kde-workspace/kde-workspace.kdm.server.timeout.diff14
-rw-r--r--source/kde/patch/kdelibs.patch8
-rw-r--r--source/kde/patch/kdelibs/kdelibs.docbook.patch11
-rw-r--r--source/kde/patch/kdelibs/kdelibs.upnp_conditional.patch15
-rw-r--r--source/kde/patch/kdepim.patch3
-rw-r--r--source/kde/patch/kdepim/kdepim-4.5.85-install-headers.patch124
-rw-r--r--source/kde/patch/kdewebdev.patch5
-rw-r--r--source/kde/patch/kdewebdev/include-tidy.patch13
-rw-r--r--source/kde/patch/korundum.patch4
-rw-r--r--source/kde/patch/korundum/korundum_ruby19.patch31
17 files changed, 993 insertions, 0 deletions
diff --git a/source/kde/patch/README b/source/kde/patch/README
new file mode 100644
index 00000000..2478e45f
--- /dev/null
+++ b/source/kde/patch/README
@@ -0,0 +1,18 @@
+
+IMPORTANT!
+
+To fail/exit a script, use this:
+
+[command that fails] || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+
+DO NOT USE THIS:
+
+[command that fails] || exit 1
+
+as it will cause the parent script to exit in the wrong location and possibly
+silently skip building some packages.
+
+Thanks,
+
+The Management
+
diff --git a/source/kde/patch/amarok.patch b/source/kde/patch/amarok.patch
new file mode 100644
index 00000000..35d43831
--- /dev/null
+++ b/source/kde/patch/amarok.patch
@@ -0,0 +1,3 @@
+# Build against liblastfm 1.0.1.
+cat $CWD/patch/amarok/amarok-liblastfm1.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+
diff --git a/source/kde/patch/amarok/amarok-liblastfm1.patch b/source/kde/patch/amarok/amarok-liblastfm1.patch
new file mode 100644
index 00000000..43499312
--- /dev/null
+++ b/source/kde/patch/amarok/amarok-liblastfm1.patch
@@ -0,0 +1,704 @@
+diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/CMakeLists.txt amarok-2.5.96/CMakeLists.txt
+--- amarok-2.5.96.orig/CMakeLists.txt 2012-07-31 12:17:20.000000000 +0200
++++ amarok-2.5.96/CMakeLists.txt 2012-08-02 16:34:08.465503197 +0200
+@@ -129,7 +129,7 @@
+ # macro_log_feature( STRIGI_FOUND "strigi" "Index metadata of files" "http://strigi.sourceforge.net" FALSE "" "" )
+
+ macro_optional_find_package(LibLastFm)
+- macro_log_feature( LIBLASTFM_FOUND "liblastfm" "Enable Last.Fm service, including scrobbling, song submissions, and suggested song dynamic playlists" "http://cdn.last.fm/src/liblastfm-0.3.0.tar.bz2" FALSE "" "version 0.3.x (versions 1.0 or higher are incompatible)" )
++ macro_log_feature( LIBLASTFM_FOUND "liblastfm" "Enable Last.Fm service, including scrobbling, song submissions, and suggested song dynamic playlists" "http://cdn.last.fm/src/liblastfm-1.0.0.tar.gz" FALSE "1.0.0" "" )
+ macro_bool_to_01( LIBLASTFM_FOUND HAVE_LIBLASTFM )
+
+ macro_optional_find_package( FFmpeg )
+diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/cmake/modules/FindLibLastFm.cmake amarok-2.5.96/cmake/modules/FindLibLastFm.cmake
+--- amarok-2.5.96.orig/cmake/modules/FindLibLastFm.cmake 2012-07-31 12:10:56.000000000 +0200
++++ amarok-2.5.96/cmake/modules/FindLibLastFm.cmake 2012-08-02 16:32:36.418653940 +0200
+@@ -6,7 +6,7 @@
+ # LIBLASTFM_FOUND, whether liblastfm was found
+
+
+-find_path(LIBLASTFM_INCLUDE_DIR NAMES Audioscrobbler
++find_path(LIBLASTFM_INCLUDE_DIR NAMES lastfm
+ HINTS
+ ~/usr/include
+ /opt/local/include
+diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/src/LastfmReadLabelCapability.cpp amarok-2.5.96/src/LastfmReadLabelCapability.cpp
+--- amarok-2.5.96.orig/src/LastfmReadLabelCapability.cpp 2012-07-31 12:10:56.000000000 +0200
++++ amarok-2.5.96/src/LastfmReadLabelCapability.cpp 2012-08-02 16:32:36.419653927 +0200
+@@ -22,8 +22,7 @@
+ #include <QMap>
+ #include <QNetworkReply>
+
+-#include <lastfm/XmlQuery>
+-#include <ws.h>
++#include <lastfm/XmlQuery.h>
+ #include "core/support/Amarok.h"
+
+ namespace Capabilities
+@@ -72,7 +71,8 @@
+ {
+ case QNetworkReply::NoError:
+ {
+- lastfm::XmlQuery lfm = m_job->readAll();
++ lastfm::XmlQuery lfm;
++ lfm.parse(m_job->readAll());
+ QList<lastfm::XmlQuery> tags = lfm.children( "tag" );
+ QStringList ret;
+ foreach( const lastfm::XmlQuery &child, tags )
+diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/src/context/engines/upcomingevents/UpcomingEventsEngine.cpp amarok-2.5.96/src/context/engines/upcomingevents/UpcomingEventsEngine.cpp
+--- amarok-2.5.96.orig/src/context/engines/upcomingevents/UpcomingEventsEngine.cpp 2012-07-31 12:10:56.000000000 +0200
++++ amarok-2.5.96/src/context/engines/upcomingevents/UpcomingEventsEngine.cpp 2012-08-02 16:32:35.962659642 +0200
+@@ -27,10 +27,6 @@
+ #include "EngineController.h"
+ #include "LastFmEventXmlParser.h"
+
+-// LastFm
+-#include <lastfm/XmlQuery>
+-#include <lastfm/ws.h>
+-
+ // KDE
+ #include <KDateTime>
+
+diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/src/core/support/Amarok.h amarok-2.5.96/src/core/support/Amarok.h
+--- amarok-2.5.96.orig/src/core/support/Amarok.h 2012-07-31 12:10:56.000000000 +0200
++++ amarok-2.5.96/src/core/support/Amarok.h 2012-08-02 16:32:35.962659642 +0200
+@@ -203,6 +203,7 @@
+
+ inline const char* discogsApiKey() { return "91734dd989"; }
+ inline const char* lastfmApiKey() { return "402d3ca8e9bc9d3cf9b85e1202944ca5"; }
++ inline const char* lastfmApiSharedSecret() { return "fe0dcde9fcd14c2d1d50665b646335e9"; }
+ inline const char* yahooBossApiKey() { return "oQepTNrV34G9Satb1dgRZ8hdl1uhJvguDSU5Knl2Xd4ALK85knYt6ylr.FTA57XMRBA-"; }
+ inline const char* flickrApiKey() { return "9c5a288116c34c17ecee37877397fe31"; }
+ }
+diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/src/services/ampache/LastfmInfoParser.cpp amarok-2.5.96/src/services/ampache/LastfmInfoParser.cpp
+--- amarok-2.5.96.orig/src/services/ampache/LastfmInfoParser.cpp 2012-07-31 12:10:56.000000000 +0200
++++ amarok-2.5.96/src/services/ampache/LastfmInfoParser.cpp 2012-08-02 16:32:35.954659742 +0200
+@@ -20,8 +20,7 @@
+ #include "core/support/Amarok.h"
+ #include "core/support/Debug.h"
+
+-#include <lastfm/XmlQuery>
+-#include <lastfm/ws.h>
++#include <lastfm/XmlQuery.h>
+
+ #include <KLocale>
+
+@@ -55,7 +54,8 @@
+ {
+ case QNetworkReply::NoError:
+ {
+- lastfm::XmlQuery lfm = m_jobs[ "getTrackInfo" ]->readAll();
++ lastfm::XmlQuery lfm;
++ lfm.parse( m_jobs[ "getTrackInfo" ]->readAll() );
+ lastfm::XmlQuery wiki = lfm["track"]["wiki"];
+ const QString contentText = wiki["content"].text();
+ const QString publishedDate = wiki["published"].text();
+@@ -103,7 +103,8 @@
+ {
+ case QNetworkReply::NoError:
+ {
+- lastfm::XmlQuery lfm = m_jobs[ "getAlbumInfo" ]->readAll();
++ lastfm::XmlQuery lfm;
++ lfm.parse( m_jobs[ "getAlbumInfo" ]->readAll() );
+ lastfm::XmlQuery wiki = lfm["album"]["wiki"];
+ const QString summaryText = wiki["summary"].text();
+ const QString contentText = wiki["content"].text();
+@@ -155,7 +156,8 @@
+ {
+ case QNetworkReply::NoError:
+ {
+- lastfm::XmlQuery lfm = m_jobs[ "getArtistInfo" ]->readAll();
++ lastfm::XmlQuery lfm;
++ lfm.parse( m_jobs[ "getArtistInfo" ]->readAll() );
+ debug() << lfm.text();
+ lastfm::XmlQuery bio = lfm["artist"]["bio"];
+ const QString summaryText = bio["summary"].text();
+diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/src/services/lastfm/LastFmService.cpp amarok-2.5.96/src/services/lastfm/LastFmService.cpp
+--- amarok-2.5.96.orig/src/services/lastfm/LastFmService.cpp 2012-07-31 12:10:56.000000000 +0200
++++ amarok-2.5.96/src/services/lastfm/LastFmService.cpp 2012-08-02 16:32:35.955659729 +0200
+@@ -46,8 +46,8 @@
+ #include "widgets/SearchWidget.h"
+ #include "NetworkAccessManagerProxy.h"
+
+-#include <lastfm/Audioscrobbler> // from liblastfm
+-#include <lastfm/XmlQuery>
++#include <lastfm/Audioscrobbler.h> // from liblastfm
++#include <lastfm/XmlQuery.h>
+
+ #include <KLocale>
+ #include <KPasswordDialog>
+@@ -224,10 +224,7 @@
+ {
+ // set the global static Lastfm::Ws stuff
+ lastfm::ws::ApiKey = Amarok::lastfmApiKey();
+- lastfm::ws::SharedSecret = "fe0dcde9fcd14c2d1d50665b646335e9";
+- // testing w/ official keys
+- //Ws::SharedSecret = "73582dfc9e556d307aead069af110ab8";
+- //Ws::ApiKey = "c8c7b163b11f92ef2d33ba6cd3c2c3c3";
++ lastfm::ws::SharedSecret = Amarok::lastfmApiSharedSecret();
+ m_userNameArray = qstrdup( m_userName.toLatin1().data() );
+ lastfm::ws::Username = m_userNameArray;
+ if( lastfm::nam() != The::networkAccessManager() )
+@@ -309,7 +306,8 @@
+ case QNetworkReply::NoError:
+ {
+
+- lastfm::XmlQuery lfm = lastfm::XmlQuery( m_jobs[ "auth" ]->readAll() );
++ lastfm::XmlQuery lfm;
++ lfm.parse( m_jobs[ "auth" ]->readAll() );
+ LastFmServiceConfig config;
+
+ if( lfm.children( "error" ).size() > 0 )
+@@ -359,10 +357,8 @@
+ {
+ case QNetworkReply::NoError:
+ {
+- try
+- {
+- lastfm::XmlQuery lfm( m_jobs[ "getUserInfo" ]->readAll() );
+-
++ lastfm::XmlQuery lfm;
++ if( lfm.parse( m_jobs[ "getUserInfo" ]->readAll() ) ) {
+ m_country = lfm["user"]["country"].text();
+ m_age = lfm["user"]["age"].text();
+ m_gender = lfm["user"]["gender"].text();
+@@ -381,9 +377,10 @@
+ }
+ updateProfileInfo();
+
+- } catch( lastfm::ws::ParseError& e )
++ }
++ else
+ {
+- debug() << "Got exception in parsing from last.fm:" << e.what();
++ debug() << "Got exception in parsing from last.fm:" << lfm.parseError().message();
+ }
+ break;
+ } case QNetworkReply::AuthenticationRequiredError:
+diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/src/services/lastfm/LastFmServiceCollection.cpp amarok-2.5.96/src/services/lastfm/LastFmServiceCollection.cpp
+--- amarok-2.5.96.orig/src/services/lastfm/LastFmServiceCollection.cpp 2012-07-31 12:10:56.000000000 +0200
++++ amarok-2.5.96/src/services/lastfm/LastFmServiceCollection.cpp 2012-08-02 16:32:35.956659716 +0200
+@@ -26,7 +26,7 @@
+ #include "core-impl/collections/support/MemoryQueryMaker.h"
+
+ #include <lastfm/ws.h>
+-#include <lastfm/XmlQuery>
++#include <lastfm/XmlQuery.h>
+
+ #include <QNetworkReply>
+
+@@ -154,10 +154,9 @@
+ case QNetworkReply::NoError:
+ {
+ // iterate through each neighbour
+- try
++ lastfm::XmlQuery lfm;
++ if( lfm.parse( m_jobs[ "user.getNeighbours" ]->readAll() ) )
+ {
+- lastfm::XmlQuery lfm( m_jobs[ "user.getNeighbours" ]->readAll() );
+-
+ foreach( const lastfm::XmlQuery &e, lfm[ "neighbours" ].children( "user" ) )
+ {
+ const QString name = e[ "name" ].text();
+@@ -168,9 +167,10 @@
+ addTrack( trackPtr );
+ }
+
+- } catch( lastfm::ws::ParseError& e )
++ }
++ else
+ {
+- debug() << "Got exception in parsing from last.fm:" << e.what();
++ debug() << "Got exception in parsing from last.fm:" << lfm.parseError().message();
+ }
+ break;
+ }
+@@ -195,15 +195,14 @@
+ case QNetworkReply::NoError:
+ {
+ // iterate through each neighbour
+- try
++ if( !m_jobs[ "user.getNeighbours" ] )
++ {
++ debug() << "BAD! got no result object";
++ return;
++ }
++ lastfm::XmlQuery lfm;
++ if( lfm.parse( m_jobs[ "user.getNeighbours" ]->readAll() ) )
+ {
+- if( !m_jobs[ "user.getNeighbours" ] )
+- {
+- debug() << "BAD! got no result object";
+- return;
+- }
+- lastfm::XmlQuery lfm( m_jobs[ "user.getNeighbours" ]->readAll() );
+-
+ // iterate through each neighbour
+ foreach( const lastfm::XmlQuery &e, lfm[ "neighbours" ].children( "user" ) )
+ {
+@@ -218,9 +217,10 @@
+
+ // should be safe, as both slots SHOULD get called before we return to the event loop...
+ m_jobs[ "user.getNeighbours" ]->deleteLater();
+- } catch( lastfm::ws::ParseError& e )
++ }
++ else
+ {
+- debug() << "Got exception in parsing from last.fm:" << e.what();
++ debug() << "Got exception in parsing from last.fm:" << lfm.parseError().message();
+ }
+ break;
+ }
+@@ -248,10 +248,9 @@
+ {
+ case QNetworkReply::NoError:
+ {
+- try
++ lastfm::XmlQuery lfm;
++ if( lfm.parse( m_jobs[ "user.getFriends" ]->readAll() ) )
+ {
+- lastfm::XmlQuery lfm( m_jobs[ "user.getFriends" ]->readAll() );
+-
+ foreach( const lastfm::XmlQuery &e, lfm[ "friends" ].children( "user" ) )
+ {
+ const QString name = e[ "name" ].text();
+@@ -261,9 +260,10 @@
+ addTrack( trackPtr );
+ }
+
+- } catch( lastfm::ws::ParseError& e )
++ }
++ else
+ {
+- debug() << "Got exception in parsing from last.fm:" << e.what();
++ debug() << "Got exception in parsing from last.fm:" << lfm.parseError().message();
+ }
+ break;
+ }
+@@ -293,10 +293,9 @@
+ {
+ case QNetworkReply::NoError:
+ {
+- try
++ lastfm::XmlQuery lfm;
++ if( lfm.parse( m_jobs[ "user.getFriends" ]->readAll() ) )
+ {
+- lastfm::XmlQuery lfm( m_jobs[ "user.getFriends" ]->readAll() );
+-
+ foreach( const lastfm::XmlQuery &e, lfm[ "friends" ].children( "user" ) )
+ {
+ const QString name = e[ "name" ].text();
+@@ -306,9 +305,10 @@
+ addTrack( trackPtr );
+ }
+
+- } catch( lastfm::ws::ParseError& e )
++ }
++ else
+ {
+- debug() << "Got exception in parsing from last.fm:" << e.what();
++ debug() << "Got exception in parsing from last.fm:" << lfm.parseError().message();
+ }
+ break;
+ }
+diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/src/services/lastfm/LastFmServiceSettings.cpp amarok-2.5.96/src/services/lastfm/LastFmServiceSettings.cpp
+--- amarok-2.5.96.orig/src/services/lastfm/LastFmServiceSettings.cpp 2012-07-31 12:10:56.000000000 +0200
++++ amarok-2.5.96/src/services/lastfm/LastFmServiceSettings.cpp 2012-08-02 16:32:35.957659703 +0200
+@@ -23,9 +23,9 @@
+ #include "NetworkAccessManagerProxy.h"
+ #include "ui_LastFmConfigWidget.h"
+
+-#include <lastfm/Audioscrobbler> // from liblastfm
++#include <lastfm/Audioscrobbler.h> // from liblastfm
+ #include <lastfm/ws.h>
+-#include <lastfm/XmlQuery>
++#include <lastfm/XmlQuery.h>
+
+ #include <QCryptographicHash>
+ #include <QNetworkAccessManager>
+@@ -100,7 +100,7 @@
+ m_configDialog->testLogin->setText( i18n( "Testing..." ) );
+ // set the global static Lastfm::Ws stuff
+ lastfm::ws::ApiKey = Amarok::lastfmApiKey();
+- lastfm::ws::SharedSecret = "fe0dcde9fcd14c2d1d50665b646335e9";
++ lastfm::ws::SharedSecret = Amarok::lastfmApiSharedSecret();
+ lastfm::ws::Username = qstrdup( m_configDialog->kcfg_ScrobblerUsername->text().toLatin1().data() );
+ if( lastfm::nam() != The::networkAccessManager() )
+ lastfm::setNetworkAccessManager( The::networkAccessManager() );
+@@ -126,7 +126,8 @@
+ {
+ DEBUG_BLOCK
+
+- lastfm::XmlQuery lfm = lastfm::XmlQuery( m_authQuery->readAll() );
++ lastfm::XmlQuery lfm;
++ lfm.parse( m_authQuery->readAll() );
+
+ switch( m_authQuery->error() )
+ {
+diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/src/services/lastfm/LastFmTreeModel.cpp amarok-2.5.96/src/services/lastfm/LastFmTreeModel.cpp
+--- amarok-2.5.96.orig/src/services/lastfm/LastFmTreeModel.cpp 2012-07-31 12:10:56.000000000 +0200
++++ amarok-2.5.96/src/services/lastfm/LastFmTreeModel.cpp 2012-08-02 16:32:35.958659691 +0200
+@@ -26,8 +26,8 @@
+ #include "AmarokMimeData.h"
+
+ #include <lastfm/ws.h>
+-#include <lastfm/Tag>
+-#include <lastfm/XmlQuery>
++#include <lastfm/Tag.h>
++#include <lastfm/XmlQuery.h>
+
+ #include <KIcon>
+ #include <KLocale>
+@@ -68,11 +68,12 @@
+ {
+ DEBUG_BLOCK
+
+- try
+- {
+ // Iterate over each neighbor, in two passes: 1) Get data 2) Sort data, store in model
+
+- lastfm::XmlQuery lfm( m_jobs[ "getNeighbours" ]->readAll() );
++ lastfm::XmlQuery lfm;
++ lfm.parse( m_jobs[ "getNeighbours" ]->readAll() );
++ if( lfm.parseError().enumValue() == lastfm::ws::NoError )
++ {
+ foreach( const lastfm::XmlQuery &e, lfm[ "neighbours" ].children ( "user" ) )
+ {
+ const QString name = e[ "name" ].text();
+@@ -88,11 +89,11 @@
+ appendUserStations( neighbor, name );
+ }
+ m_neighbors.sort();
++ } else {
++ debug() << "Got exception in parsing from last.fm:" << lfm.parseError().message();
++ return;
+ }
+- catch( lastfm::ws::ParseError e )
+- {
+- debug() << "Got exception in parsing from last.fm:" << e.what();
+- }
++
+ emitRowChanged(LastFm::Neighbors);
+ m_jobs[ "getNeighbours" ]->deleteLater();
+ }
+@@ -102,11 +103,11 @@
+ {
+ DEBUG_BLOCK
+
+- try
+- {
+- // Iterate over each friend, in two passes: 1) Get data 2) Sort data, store in model
++ // Iterate over each friend, in two passes: 1) Get data 2) Sort data, store in model
+
+- lastfm::XmlQuery lfm( m_jobs[ "getFriends" ]->readAll() );
++ lastfm::XmlQuery lfm;
++ if( lfm.parse( m_jobs[ "getFriends" ]->readAll() ) )
++ {
+ foreach( const lastfm::XmlQuery &e, lfm[ "friends" ].children ( "user" ) )
+ {
+ const QString name = e[ "name" ].text();
+@@ -123,11 +124,11 @@
+ appendUserStations( afriend, name );
+ }
+ m_friends.sort();
++ } else {
++ debug() << "Got exception in parsing from last.fm:" << lfm.parseError().message();
++ return;
+ }
+- catch( lastfm::ws::ParseError e )
+- {
+- debug() << "Got exception in parsing from last.fm:" << e.what();
+- }
++
+ emitRowChanged(LastFm::Friends);
+ m_jobs[ "getFriends" ]->deleteLater();
+ }
+@@ -137,10 +138,9 @@
+ {
+ DEBUG_BLOCK
+ WeightedStringList list;
+- try
++ lastfm::XmlQuery lfm;
++ if( lfm.parse( m_jobs[ "getTopArtists" ]->readAll() ) )
+ {
+- lastfm::XmlQuery lfm( m_jobs[ "getTopArtists" ]->readAll() );
+-
+ foreach( const lastfm::XmlQuery &e, lfm[ "topartists" ].children ( "artist" ) )
+ {
+ const QString name = e[ "name" ].text();
+@@ -158,9 +158,10 @@
+ m_myTopArtists->appendChild ( artist );
+ }
+
+- } catch( lastfm::ws::ParseError e )
++ }
++ else
+ {
+- debug() << "Got exception in parsing from last.fm:" << e.what();
++ debug() << "Got exception in parsing from last.fm:" << lfm.parseError().message();
+ }
+ emitRowChanged(LastFm::TopArtists);
+ m_jobs[ "getTopArtists" ]->deleteLater();
+diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/src/services/lastfm/LastFmTreeModel.h amarok-2.5.96/src/services/lastfm/LastFmTreeModel.h
+--- amarok-2.5.96.orig/src/services/lastfm/LastFmTreeModel.h 2012-07-31 12:10:56.000000000 +0200
++++ amarok-2.5.96/src/services/lastfm/LastFmTreeModel.h 2012-08-02 16:32:35.957659703 +0200
+@@ -22,7 +22,7 @@
+ #include "core/meta/Meta.h"
+ #include "WeightedStringList.h"
+
+-#include <lastfm/User>
++#include <lastfm/User.h>
+
+ #include <QAbstractItemModel>
+ #include <QHash>
+@@ -136,7 +136,7 @@
+ LastFmTreeItem *m_myTopArtists;
+
+ QString m_userName;
+- lastfm::AuthenticatedUser m_user;
++ lastfm::User m_user;
+
+ QStringList m_friends;
+ QStringList m_neighbors;
+diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/src/services/lastfm/ScrobblerAdapter.h amarok-2.5.96/src/services/lastfm/ScrobblerAdapter.h
+--- amarok-2.5.96.orig/src/services/lastfm/ScrobblerAdapter.h 2012-07-31 12:10:56.000000000 +0200
++++ amarok-2.5.96/src/services/lastfm/ScrobblerAdapter.h 2012-08-02 16:32:35.958659691 +0200
+@@ -20,8 +20,8 @@
+
+ #include "core/meta/Meta.h"
+
+-#include <lastfm/Audioscrobbler>
+-#include <lastfm/Track>
++#include <lastfm/Audioscrobbler.h>
++#include <lastfm/Track.h>
+
+ #include <QVariant>
+
+diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/src/services/lastfm/biases/LastFmBias.cpp amarok-2.5.96/src/services/lastfm/biases/LastFmBias.cpp
+--- amarok-2.5.96.orig/src/services/lastfm/biases/LastFmBias.cpp 2012-07-31 12:10:56.000000000 +0200
++++ amarok-2.5.96/src/services/lastfm/biases/LastFmBias.cpp 2012-08-02 16:32:35.958659691 +0200
+@@ -34,9 +34,8 @@
+ #include "core/collections/QueryMaker.h"
+ #include "core-impl/collections/support/CollectionManager.h"
+
+-#include "lastfm/Artist"
+-#include "lastfm/ws.h"
+-#include "lastfm/XmlQuery"
++#include <lastfm/Artist.h>
++#include <lastfm/ws.h>
+
+ #include <QLabel>
+ #include <QComboBox>
+diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/src/services/lastfm/biases/WeeklyTopBias.cpp amarok-2.5.96/src/services/lastfm/biases/WeeklyTopBias.cpp
+--- amarok-2.5.96.orig/src/services/lastfm/biases/WeeklyTopBias.cpp 2012-07-31 12:10:56.000000000 +0200
++++ amarok-2.5.96/src/services/lastfm/biases/WeeklyTopBias.cpp 2012-08-02 16:32:35.960659667 +0200
+@@ -34,9 +34,9 @@
+ #include "core/collections/QueryMaker.h"
+ #include "core-impl/collections/support/CollectionManager.h"
+
+-#include "lastfm/Artist"
+-#include "lastfm/ws.h"
+-#include "lastfm/XmlQuery"
++#include <lastfm/Artist.h>
++#include <lastfm/ws.h>
++#include <lastfm/XmlQuery.h>
+
+ #include <QNetworkReply>
+
+@@ -371,10 +371,9 @@
+ }
+
+
+- try
++ lastfm::XmlQuery lfm;
++ if( lfm.parse( reply->readAll() ) )
+ {
+- lastfm::XmlQuery lfm( reply->readAll() );
+-
+ // debug() << "got response:" << lfm;
+ QStringList artists;
+ for( int i = 0; i < lfm[ "weeklyartistchart" ].children( "artist" ).size(); i++ )
+@@ -398,10 +397,10 @@
+ warning() << "Got a reply for a week"<<week<<"that was not requested.";
+ return;
+ }
+-
+- } catch( lastfm::ws::ParseError& e )
++ }
++ else
+ {
+- debug() << "caught exception parsing weekly artist chart.";
++ debug() << "failed to parse weekly artist chart.";
+ }
+
+ reply->deleteLater();
+diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/src/services/lastfm/meta/LastFmMeta.cpp amarok-2.5.96/src/services/lastfm/meta/LastFmMeta.cpp
+--- amarok-2.5.96.orig/src/services/lastfm/meta/LastFmMeta.cpp 2012-07-31 12:10:56.000000000 +0200
++++ amarok-2.5.96/src/services/lastfm/meta/LastFmMeta.cpp 2012-08-02 16:32:35.961659655 +0200
+@@ -41,7 +41,7 @@
+ #include <QWeakPointer>
+ #include <QUrl>
+
+-#include <lastfm/Track>
++#include <lastfm/Track.h>
+
+ namespace LastFm {
+
+@@ -451,8 +451,7 @@
+ DEBUG_BLOCK
+
+ debug() << "info:" << d->lastFmTrack.artist() << d->lastFmTrack.title();
+- d->wsReply = lastfm::MutableTrack( d->lastFmTrack ).love();
+- connect( d->wsReply, SIGNAL( finished() ), this, SLOT( slotWsReply() ) );
++ lastfm::MutableTrack( d->lastFmTrack ).love();
+ }
+
+ void
+@@ -477,9 +476,9 @@
+ {
+ if( d->trackFetch->error() == QNetworkReply::NoError )
+ {
+- try
++ lastfm::XmlQuery lfm;
++ if( lfm.parse( d->trackFetch->readAll() ) )
+ {
+- lastfm::XmlQuery lfm( d->trackFetch->readAll() );
+ QString id = lfm[ "track" ][ "id" ].text();
+ QString streamable = lfm[ "track" ][ "streamable" ].text();
+ if( streamable.toInt() == 1 )
+@@ -487,9 +486,10 @@
+ else
+ init();
+
+- } catch( lastfm::ws::ParseError& e )
++ }
++ else
+ {
+- debug() << "Got exception in parsing from last.fm:" << e.what();
++ debug() << "Got exception in parsing from last.fm:" << lfm.parseError().message();
+ }
+ } else
+ {
+diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/src/services/lastfm/meta/LastFmMeta.h amarok-2.5.96/src/services/lastfm/meta/LastFmMeta.h
+--- amarok-2.5.96.orig/src/services/lastfm/meta/LastFmMeta.h 2012-07-31 12:10:56.000000000 +0200
++++ amarok-2.5.96/src/services/lastfm/meta/LastFmMeta.h 2012-08-02 16:32:35.960659667 +0200
+@@ -24,7 +24,7 @@
+ #include "ServiceMetaBase.h" // for the SourceInfoProvider
+
+
+-#include <lastfm/Track>
++#include <lastfm/Track.h>
+
+
+ #include <QObject>
+diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/src/services/lastfm/meta/LastFmMeta_p.h amarok-2.5.96/src/services/lastfm/meta/LastFmMeta_p.h
+--- amarok-2.5.96.orig/src/services/lastfm/meta/LastFmMeta_p.h 2012-07-31 12:10:56.000000000 +0200
++++ amarok-2.5.96/src/services/lastfm/meta/LastFmMeta_p.h 2012-08-02 16:32:35.961659655 +0200
+@@ -26,10 +26,10 @@
+ #include "core/statistics/StatisticsProvider.h"
+ #include "core-impl/statistics/providers/tag/TagStatisticsProvider.h"
+
+-#include <lastfm/Track>
++#include <lastfm/Track.h>
+ #include <lastfm/ws.h>
+-#include <lastfm/RadioTuner>
+-#include <lastfm/XmlQuery>
++#include <lastfm/RadioTuner.h>
++#include <lastfm/XmlQuery.h>
+
+ #include <kio/job.h>
+ #include <kio/jobclasses.h>
+@@ -144,26 +144,24 @@
+ return;
+ if( m_userFetch->error() == QNetworkReply::NoError )
+ {
+- try
++ lastfm::XmlQuery lfm;
++ if( !lfm.parse( m_userFetch->readAll() ) )
+ {
+- lastfm::XmlQuery lfm( m_userFetch->readAll() );
+- albumUrl = lfm[ "track" ][ "album" ][ "url" ].text();
+- trackUrl = lfm[ "track" ][ "url" ].text();
+- artistUrl = lfm[ "track" ][ "artist" ][ "url" ].text();
+-
+- notifyObservers();
++ debug() << "Got exception in parsing from last.fm:" << lfm.parseError().message();
++ return;
++ }
++ albumUrl = lfm[ "track" ][ "album" ][ "url" ].text();
++ trackUrl = lfm[ "track" ][ "url" ].text();
++ artistUrl = lfm[ "track" ][ "artist" ][ "url" ].text();
+
+- imageUrl = lfm[ "track" ][ "album" ][ "image size=large" ].text();
++ notifyObservers();
+
+- if( !imageUrl.isEmpty() )
+- {
+- KIO::Job* job = KIO::storedGet( KUrl( imageUrl ), KIO::Reload, KIO::HideProgressInfo );
+- connect( job, SIGNAL( result( KJob* ) ), this, SLOT( fetchImageFinished( KJob* ) ) );
+- }
++ imageUrl = lfm[ "track" ][ "album" ][ "image size=large" ].text();
+
+- } catch( lastfm::ws::ParseError& e )
++ if( !imageUrl.isEmpty() )
+ {
+- debug() << "Got exception in parsing from last.fm:" << e.what();
++ KIO::Job* job = KIO::storedGet( KUrl( imageUrl ), KIO::Reload, KIO::HideProgressInfo );
++ connect( job, SIGNAL( result( KJob* ) ), this, SLOT( fetchImageFinished( KJob* ) ) );
+ }
+ }
+
+diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/src/services/lastfm/meta/MultiPlayableCapabilityImpl_p.h amarok-2.5.96/src/services/lastfm/meta/MultiPlayableCapabilityImpl_p.h
+--- amarok-2.5.96.orig/src/services/lastfm/meta/MultiPlayableCapabilityImpl_p.h 2012-07-31 12:10:56.000000000 +0200
++++ amarok-2.5.96/src/services/lastfm/meta/MultiPlayableCapabilityImpl_p.h 2012-08-02 16:32:35.962659642 +0200
+@@ -25,8 +25,9 @@
+ #include "core/meta/Meta.h"
+ #include "core/capabilities/MultiPlayableCapability.h"
+
+-#include <lastfm/Track>
+-#include <lastfm/RadioTuner>
++#include <lastfm/Track.h>
++#include <lastfm/RadioStation.h>
++#include <lastfm/RadioTuner.h>
+ #include <lastfm/ws.h>
+
+ #include <KLocale>
+@@ -55,24 +56,23 @@
+ {
+ DEBUG_BLOCK
+ m_tuner = new lastfm::RadioTuner( lastfm::RadioStation( m_track->uidUrl() ) );
+-
++
+ connect( m_tuner, SIGNAL( trackAvailable() ), this, SLOT( slotNewTrackAvailable() ) );
+- connect( m_tuner, SIGNAL( error( lastfm::ws::Error ) ), this, SLOT( error( lastfm::ws::Error ) ) );
++ connect( m_tuner, SIGNAL( error(lastfm::ws::Error,QString) ), this, SLOT( error( lastfm::ws::Error ) ) );
+ }
+-
++
+ virtual void fetchNext()
+ {
+ DEBUG_BLOCK
+ m_currentTrack = m_tuner->takeNextTrack();
+ m_track->setTrackInfo( m_currentTrack );
+-
+ }
+-
++
+ using Observer::metadataChanged;
+ virtual void metadataChanged( Meta::TrackPtr track )
+ {
+ const LastFm::TrackPtr ltrack = LastFm::TrackPtr::dynamicCast( track );
+-
++
+ if( ltrack.isNull() )
+ return;
+
+@@ -94,7 +94,7 @@
+ m_track->setTrackInfo( m_currentTrack );
+ }
+ }
+-
++
+ virtual void skip()
+ {
+ fetchNext();
diff --git a/source/kde/patch/calligra.patch b/source/kde/patch/calligra.patch
new file mode 100644
index 00000000..aac4ebf9
--- /dev/null
+++ b/source/kde/patch/calligra.patch
@@ -0,0 +1,3 @@
+# Patch an overflow vulnerability in calligra:
+zcat $CWD/patch/calligra/calligra.words.fix_overflow.diff.gz | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+
diff --git a/source/kde/patch/calligra/calligra.words.fix_overflow.diff b/source/kde/patch/calligra/calligra.words.fix_overflow.diff
new file mode 100644
index 00000000..1a68b3f9
--- /dev/null
+++ b/source/kde/patch/calligra/calligra.words.fix_overflow.diff
@@ -0,0 +1,16 @@
+diff --git a/filters/words/msword-odf/wv2/src/styles.cpp b/filters/words/msword-odf/wv2/src/styles.cpp
+index 02a82a0..78ac31d 100644
+--- a/filters/words/msword-odf/wv2/src/styles.cpp
++++ b/filters/words/msword-odf/wv2/src/styles.cpp
+@@ -248,6 +248,11 @@ throw(InvalidFormatException)
+ #ifdef WV2_DEBUG_STYLESHEET
+ wvlog << "cbUPX: " << cbUPX << endl;
+ #endif
++ // do not overflow the allocated buffer grupx
++ if (offset + cbUPX > grupxLen) {
++ wvlog << "====> Error: grupx would overflow!" << endl;
++ return false;
++ }
+ for ( U16 j = 0; j < cbUPX; ++j ) {
+ grupx[ offset + j ] = stream->readU8(); // read the whole UPX
+ #ifdef WV2_DEBUG_STYLESHEET
diff --git a/source/kde/patch/kde-workspace.patch b/source/kde/patch/kde-workspace.patch
new file mode 100644
index 00000000..27eab874
--- /dev/null
+++ b/source/kde/patch/kde-workspace.patch
@@ -0,0 +1,5 @@
+# Increase the timeout to accomodate slow-to-initialize video chipset drivers:
+zcat $CWD/patch/kde-workspace/kde-workspace.kdm.server.timeout.diff.gz | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+
+# Always show 'remaining time' in the popup of the battery plasmoid:
+zcat $CWD/patch/kde-workspace/kde-workspace.batteryapplet.diff.gz | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
diff --git a/source/kde/patch/kde-workspace/kde-workspace.batteryapplet.diff b/source/kde/patch/kde-workspace/kde-workspace.batteryapplet.diff
new file mode 100644
index 00000000..ef899e83
--- /dev/null
+++ b/source/kde/patch/kde-workspace/kde-workspace.batteryapplet.diff
@@ -0,0 +1,16 @@
+diff -ur kdebase-workspace-4.5.80/plasma/generic/applets/battery/battery.cpp kdebase-workspace-4.5.80-battery-plasmoid-showremainingtime/plasma/generic/applets/battery/battery.cpp
+--- kdebase-workspace-4.5.80/plasma/generic/applets/battery/battery.cpp 2010-11-19 11:51:21.000000000 +0100
++++ kdebase-workspace-4.5.80-battery-plasmoid-showremainingtime/plasma/generic/applets/battery/battery.cpp 2010-11-20 20:39:11.000000000 +0100
+@@ -712,7 +712,11 @@
+ m_acInfoLabel->setText(i18n("<b>Not plugged in</b>"));
+ }
+
+- if (batteryCount && showRemainingTime && m_remainingMSecs > 0) {
++ // Always show the remaining time in the popup.
++ // We don't just set m_showRemainingTime to true by default because
++ // that'd try to use the time also for the icon. That won't fit on
++ // small panels.
++ if (batteryCount && m_remainingMSecs > 0) {
+ m_remainingTimeLabel->show();
+ m_remainingInfoLabel->show();
+ // we don't have too much accuracy so only give hours and minutes
diff --git a/source/kde/patch/kde-workspace/kde-workspace.kdm.server.timeout.diff b/source/kde/patch/kde-workspace/kde-workspace.kdm.server.timeout.diff
new file mode 100644
index 00000000..4dd98484
--- /dev/null
+++ b/source/kde/patch/kde-workspace/kde-workspace.kdm.server.timeout.diff
@@ -0,0 +1,14 @@
+--- ./kdm/config.def.orig 2010-09-30 16:20:21.000000000 -0500
++++ ./kdm/config.def 2010-12-01 19:13:02.356002453 -0600
+@@ -1343,9 +1343,9 @@
+
+ Key: ServerTimeout
+ Type: int
+-Default: 30
++Default: 45
+ User: core
+-Instance: #:*/
++Instance: :*/
+ Comment:
+ How long to wait for a local &X-Server; to come up.
+ Description:
diff --git a/source/kde/patch/kdelibs.patch b/source/kde/patch/kdelibs.patch
new file mode 100644
index 00000000..d66622e0
--- /dev/null
+++ b/source/kde/patch/kdelibs.patch
@@ -0,0 +1,8 @@
+# Slackware ships a different version of XML DTDs:
+zcat $CWD/patch/kdelibs/kdelibs.docbook.patch.gz | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+
+# Make uPnP support depend on the environment variable SOLID_UPNP,
+# e.g. by creating an /etc/profile.d/upnp.sh file with the following contents:
+# export SOLID_UPNP=1
+cat $CWD/patch/kdelibs/kdelibs.upnp_conditional.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+
diff --git a/source/kde/patch/kdelibs/kdelibs.docbook.patch b/source/kde/patch/kdelibs/kdelibs.docbook.patch
new file mode 100644
index 00000000..6a20cd27
--- /dev/null
+++ b/source/kde/patch/kdelibs/kdelibs.docbook.patch
@@ -0,0 +1,11 @@
+--- kdelibs-4.4.85/cmake/modules/FindDocBookXML.cmake.orig 2010-05-27 19:25:00.000000000 +0200
++++ kdelibs-4.4.85/cmake/modules/FindDocBookXML.cmake 2010-06-07 16:18:35.000000000 +0200
+@@ -12,7 +12,7 @@
+ # Redistribution and use is allowed according to the terms of the BSD license.
+ # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+
+-set (DOCBOOKXML_CURRENTDTD_VERSION "4.2"
++set (DOCBOOKXML_CURRENTDTD_VERSION "4.5"
+ CACHE INTERNAL "Required version of XML DTDs")
+
+ set (DTD_PATH_LIST
diff --git a/source/kde/patch/kdelibs/kdelibs.upnp_conditional.patch b/source/kde/patch/kdelibs/kdelibs.upnp_conditional.patch
new file mode 100644
index 00000000..3a194477
--- /dev/null
+++ b/source/kde/patch/kdelibs/kdelibs.upnp_conditional.patch
@@ -0,0 +1,15 @@
+--- kdelibs-4.8.0/solid/solid/managerbase.cpp.orig 2011-07-27 20:34:39.000000000 +0200
++++ kdelibs-4.8.0/solid/solid/managerbase.cpp 2012-01-26 09:17:49.409993419 +0100
+@@ -90,7 +90,11 @@
+ # endif
+
+ # if defined (HUPNP_FOUND)
+- m_backends << new Solid::Backends::UPnP::UPnPDeviceManager(0);
++ bool solidUpnpEnabled
++ = QString::fromLocal8Bit(qgetenv("SOLID_UPNP")).toInt()==1;
++ if (solidUpnpEnabled) {
++ m_backends << new Solid::Backends::UPnP::UPnPDeviceManager(0);
++ }
+ # endif
+ }
+ }
diff --git a/source/kde/patch/kdepim.patch b/source/kde/patch/kdepim.patch
new file mode 100644
index 00000000..7618dc8a
--- /dev/null
+++ b/source/kde/patch/kdepim.patch
@@ -0,0 +1,3 @@
+# Install the kleopatra headers, or else kopete-cryptography will not build:
+cat $CWD/patch/kdepim/kdepim-4.5.85-install-headers.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+
diff --git a/source/kde/patch/kdepim/kdepim-4.5.85-install-headers.patch b/source/kde/patch/kdepim/kdepim-4.5.85-install-headers.patch
new file mode 100644
index 00000000..aa43059a
--- /dev/null
+++ b/source/kde/patch/kdepim/kdepim-4.5.85-install-headers.patch
@@ -0,0 +1,124 @@
+diff -ur kdepim-4.5.85/kleopatra/libkleopatraclient/CMakeLists.txt kdepim-4.5.85-install-headers/kleopatra/libkleopatraclient/CMakeLists.txt
+--- kdepim-4.5.85/kleopatra/libkleopatraclient/CMakeLists.txt 2010-01-27 01:22:34.000000000 +0100
++++ kdepim-4.5.85-install-headers/kleopatra/libkleopatraclient/CMakeLists.txt 2010-12-08 14:40:45.000000000 +0100
+@@ -6,3 +6,7 @@
+
+ add_subdirectory( tests )
+
++install(
++ FILES kleopatraclient_export.h
++ DESTINATION ${INCLUDE_INSTALL_DIR}/libkleopatraclient
++ )
+diff -ur kdepim-4.5.85/kleopatra/libkleopatraclient/core/CMakeLists.txt kdepim-4.5.85-install-headers/kleopatra/libkleopatraclient/core/CMakeLists.txt
+--- kdepim-4.5.85/kleopatra/libkleopatraclient/core/CMakeLists.txt 2010-11-19 11:51:51.000000000 +0100
++++ kdepim-4.5.85-install-headers/kleopatra/libkleopatraclient/core/CMakeLists.txt 2010-12-08 14:42:12.000000000 +0100
+@@ -55,4 +55,12 @@
+ DESTINATION ${LIB_INSTALL_DIR}
+ )
+
+-
++install(
++ FILES
++ initialization.h
++ command.h
++ selectcertificatecommand.h
++ signencryptfilescommand.h
++ decryptverifyfilescommand.h
++ DESTINATION ${INCLUDE_INSTALL_DIR}/libkleopatraclient/core
++ )
+diff -ur kdepim-4.5.85/kleopatra/libkleopatraclient/gui/CMakeLists.txt kdepim-4.5.85-install-headers/kleopatra/libkleopatraclient/gui/CMakeLists.txt
+--- kdepim-4.5.85/kleopatra/libkleopatraclient/gui/CMakeLists.txt 2010-07-29 11:58:45.000000000 +0200
++++ kdepim-4.5.85-install-headers/kleopatra/libkleopatraclient/gui/CMakeLists.txt 2010-12-08 14:42:41.000000000 +0100
+@@ -20,3 +20,8 @@
+ DESTINATION ${LIB_INSTALL_DIR}
+ )
+
++install(
++ FILES
++ certificaterequester.h
++ DESTINATION ${INCLUDE_INSTALL_DIR}/libkleopatraclient/gui
++ )
+diff -ur kdepim-4.5.85/libkleo/CMakeLists.txt kdepim-4.5.85-install-headers/libkleo/CMakeLists.txt
+--- kdepim-4.5.85/libkleo/CMakeLists.txt 2010-12-01 23:23:12.000000000 +0100
++++ kdepim-4.5.85-install-headers/libkleo/CMakeLists.txt 2010-12-08 15:22:00.000000000 +0100
+@@ -112,6 +112,64 @@
+ set_target_properties(kleo PROPERTIES VERSION ${GENERIC_LIB_VERSION} SOVERSION ${GENERIC_LIB_SOVERSION} )
+ install(TARGETS kleo ${INSTALL_TARGETS_DEFAULT_ARGS})
+
++install( FILES
++ kleo/kleo_export.h
++ kleo/enum.h
++ kleo/oidmap.h
++ kleo/cryptobackend.h
++ kleo/cryptobackendfactory.h
++ kleo/cryptoconfig.h
++ kleo/dn.h
++ kleo/job.h
++ kleo/keylistjob.h
++ kleo/keygenerationjob.h
++ kleo/abstractimportjob.h
++ kleo/importjob.h
++ kleo/importfromkeyserverjob.h
++ kleo/exportjob.h
++ kleo/changeexpiryjob.h
++ kleo/changeownertrustjob.h
++ kleo/downloadjob.h
++ kleo/deletejob.h
++ kleo/encryptjob.h
++ kleo/decryptjob.h
++ kleo/signjob.h
++ kleo/specialjob.h
++ kleo/verifydetachedjob.h
++ kleo/verifyopaquejob.h
++ kleo/decryptverifyjob.h
++ kleo/signencryptjob.h
++ kleo/signkeyjob.h
++ kleo/adduseridjob.h
++ kleo/refreshkeysjob.h
++ kleo/multideletejob.h
++ kleo/hierarchicalkeylistjob.h
++ kleo/keyfilter.h
++ kleo/keyfiltermanager.h
++ kleo/changepasswdjob.h
++ kleo/checksumdefinition.h
++ kleo/exception.h
++ kleo/kconfigbasedkeyfilter.h
++ kleo/listallkeysjob.h
++ kleo/stl_util.h
++ DESTINATION ${INCLUDE_INSTALL_DIR}/kleo COMPONENT Devel)
++
++install ( FILES
++ ui/kdhorizontalline.h
++ ui/messagebox.h
++ ui/progressbar.h
++ ui/progressdialog.h
++ ui/keylistview.h
++ ui/keyselectiondialog.h
++ ui/keyrequester.h
++ ui/keyapprovaldialog.h
++ ui/dnattributeorderconfigwidget.h
++ ui/cryptoconfigmodule.h
++ ui/cryptoconfigdialog.h
++ ui/directoryserviceswidget.h
++ ui/filenamerequester.h
++ DESTINATION ${INCLUDE_INSTALL_DIR}/kleo/ui COMPONENT Devel)
++
+ if ( WIN32 )
+ install ( FILES libkleopatrarc-win32.desktop DESTINATION ${CONFIG_INSTALL_DIR} RENAME libkleopatrarc )
+ else ( WIN32 )
+diff -ur kdepim-4.5.85/libkpgp/CMakeLists.txt kdepim-4.5.85-install-headers/libkpgp/CMakeLists.txt
+--- kdepim-4.5.85/libkpgp/CMakeLists.txt 2010-07-29 11:59:00.000000000 +0200
++++ kdepim-4.5.85-install-headers/libkpgp/CMakeLists.txt 2010-12-08 14:43:33.000000000 +0100
+@@ -35,3 +35,11 @@
+ install(FILES kpgp.upd DESTINATION ${KCONF_UPDATE_INSTALL_DIR})
+ install(PROGRAMS kpgp-3.1-upgrade-address-data.pl DESTINATION ${KCONF_UPDATE_INSTALL_DIR})
+
++install(FILES
++ kpgp.h
++ kpgpbase.h
++ kpgpblock.h
++ kpgpkey.h
++ kpgpui.h
++ libkpgp_export.h
++ DESTINATION ${INCLUDE_INSTALL_DIR}/kpgp COMPONENT Devel )
+
diff --git a/source/kde/patch/kdewebdev.patch b/source/kde/patch/kdewebdev.patch
new file mode 100644
index 00000000..ccac0a79
--- /dev/null
+++ b/source/kde/patch/kdewebdev.patch
@@ -0,0 +1,5 @@
+# Make it find tidy:
+zcat $CWD/patch/kdewebdev/include-tidy.patch.gz \
+ | sed -e "s#/tmp/package-kdewebdev#${SLACK_KDE_BUILD_DIR}/${module}/package-kdewebdev#" \
+ | patch -p0 --verbose \
+ || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
diff --git a/source/kde/patch/kdewebdev/include-tidy.patch b/source/kde/patch/kdewebdev/include-tidy.patch
new file mode 100644
index 00000000..fd4de940
--- /dev/null
+++ b/source/kde/patch/kdewebdev/include-tidy.patch
@@ -0,0 +1,13 @@
+--- klinkstatus/src/tidy/tidyx.h.orig 2009-09-03 09:55:38.886267704 -0500
++++ klinkstatus/src/tidy/tidyx.h 2009-09-03 09:57:29.032269520 -0500
+@@ -48,8 +48,8 @@
+ Created 2002-07-11 by Charles Reitzel
+ */
+
+-#include <tidy.h>
+-#include <buffio.h>
++#include "/tmp/package-kdewebdev/usr/include/tidy/tidy.h"
++#include "/tmp/package-kdewebdev/usr/include/tidy/buffio.h"
+
+ #include <config-tidy.h>
+
diff --git a/source/kde/patch/korundum.patch b/source/kde/patch/korundum.patch
new file mode 100644
index 00000000..7a8b7cfa
--- /dev/null
+++ b/source/kde/patch/korundum.patch
@@ -0,0 +1,4 @@
+# Build against Ruby 1.9.3.
+# See also https://bugs.kde.org/show_bug.cgi?id=287057
+cat $CWD/patch/korundum/korundum_ruby19.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+
diff --git a/source/kde/patch/korundum/korundum_ruby19.patch b/source/kde/patch/korundum/korundum_ruby19.patch
new file mode 100644
index 00000000..561d8de1
--- /dev/null
+++ b/source/kde/patch/korundum/korundum_ruby19.patch
@@ -0,0 +1,31 @@
+diff -up korundum-4.8.0/src/krubypluginfactory.cpp.ruby19 korundum-4.8.0/src/krubypluginfactory.cpp
+--- korundum-4.8.0/src/krubypluginfactory.cpp.ruby19 2011-07-27 13:37:29.000000000 -0500
++++ korundum-4.8.0/src/krubypluginfactory.cpp 2012-02-17 08:30:38.785635819 -0600
+@@ -39,7 +39,7 @@
+ extern "C" {
+ extern VALUE rb_load_path;
+ extern VALUE qt_internal_module;
+-void Init_prelude(void);
++// void Init_prelude(void);
+ }
+
+ //
+@@ -165,7 +165,7 @@ QObject *KRubyPluginFactory::create(cons
+ #if RUBY_VERSION >= 0x10900
+ VALUE gem = rb_define_module("Gem");
+ rb_const_set(gem, rb_intern("Enable"), Qtrue);
+- Init_prelude();
++// Init_prelude();
+ #endif
+
+ ruby_incpush(QFile::encodeName(program.path()));
+@@ -342,7 +342,7 @@ int kdemain(int argc, char **argv)
+ #if RUBY_VERSION >= 0x10900
+ VALUE gem = rb_define_module("Gem");
+ rb_const_set(gem, rb_intern("Enable"), Qtrue);
+- Init_prelude();
++// Init_prelude();
+ #endif
+
+ ruby_incpush(QFile::encodeName(program.path()));
+