diff --git a/.gitignore b/.gitignore index 06473d7..7f40aa5 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -/kdelibs-4.14.15.tar.xz +/kdelibs-4.14.16.tar.xz diff --git a/0001-Revert-backport-commit-b72fc5e56579035bf987075e16324.patch b/0001-Revert-backport-commit-b72fc5e56579035bf987075e16324.patch deleted file mode 100644 index 7a3df3c..0000000 --- a/0001-Revert-backport-commit-b72fc5e56579035bf987075e16324.patch +++ /dev/null @@ -1,58 +0,0 @@ -From a02df05e4bd083f98147c86f88da2f818fc6c9f4 Mon Sep 17 00:00:00 2001 -From: Alex Merry -Date: Tue, 15 Dec 2015 19:26:47 +0000 -Subject: [PATCH 1/3] Revert "backport commit - b72fc5e56579035bf987075e16324ef95ef8e3d4" - -This reverts commit 4f7ea2f770cf062ef22293fbb21a086f3e0cbfcb. - -This change seems to be causing more problems than it fixes - it's -probably just too big of a behaviour change for kdelibs. Which means -that akregator will probably keep randomly crashing, but the alternative -seems to be various other applications consistently crashing at exit. - -If we can fix those applications (Kopete in particular), we can consider -re-applying this afterwards. - -BUG: 355275 ---- - kparts/part.cpp | 2 +- - kparts/tests/parttest.cpp | 2 -- - 2 files changed, 1 insertion(+), 3 deletions(-) - -diff --git a/kparts/part.cpp b/kparts/part.cpp -index 2cfee81..20089d4 100644 ---- a/kparts/part.cpp -+++ b/kparts/part.cpp -@@ -350,7 +350,7 @@ void Part::slotWidgetDestroyed() - d->m_widget = 0; - if (d->m_autoDeletePart) { - kDebug(1000) << "deleting part" << objectName(); -- this->deleteLater(); -+ delete this; // ouch, this should probably be deleteLater() - } - } - -diff --git a/kparts/tests/parttest.cpp b/kparts/tests/parttest.cpp -index 232aa07..e48b578 100644 ---- a/kparts/tests/parttest.cpp -+++ b/kparts/tests/parttest.cpp -@@ -48,7 +48,6 @@ void PartTest::testAutoDeletePart() - KParts::Part* part = new TestPart(0, 0); - QPointer partPointer(part); - delete part->widget(); -- QCoreApplication::sendPostedEvents(0, QEvent::DeferredDelete); - QVERIFY(partPointer.isNull()); - } - -@@ -58,7 +57,6 @@ void PartTest::testAutoDeleteWidget() - QPointer partPointer(part); - QPointer widgetPointer(part->widget()); - delete part; -- QCoreApplication::sendPostedEvents(0, QEvent::DeferredDelete); - QVERIFY(widgetPointer.isNull()); - } - --- -2.5.0 - diff --git a/0002-PythonMacros-specify-destination-directory-in-byte-c.patch b/0002-PythonMacros-specify-destination-directory-in-byte-c.patch deleted file mode 100644 index eaed0b9..0000000 --- a/0002-PythonMacros-specify-destination-directory-in-byte-c.patch +++ /dev/null @@ -1,97 +0,0 @@ -From 94f1d2fa9582a2942d5154b85c849cc3c6140e31 Mon Sep 17 00:00:00 2001 -From: Raphael Kubo da Costa -Date: Wed, 16 Dec 2015 18:25:13 +0100 -Subject: [PATCH 2/3] PythonMacros: specify destination directory in - byte-compiled files. - -The PYTHON_INSTALL() macro is a wrapper around the py_compile Python -module that also installs the byte-code (.pyc) file it generates. - -However, when a .py file is passed to py_compile without any additional -arguments, its full path is recorded in the .pyc file. This is -problematic, as most distributions install all files into a build root -instead of simply copying files to / as part of the packaging process. -In this case, the generated .pyc file will have something like - /wrkdir/buildroot/usr/lib/python2.7/site-packages/Foo/my_module.py -in it. Not only does this show up in exception tracebacks, but if the -user later invokes my_module.py and has write access to my_module's -directory, my_module.pyc will be rewritten with the right path to -my_module.py (without the build root). This can lead to uninstallation -errors if the package management system checks each file before removal, -for example. - -Fix it by rewritting the PythonCompile.py script so that it takes a ---destination-dir argument that we use to pass the full path to -my_module.py instead of letting it be (wrongly) deduced. - -It is important to note that PythonCompile.py now uses the argparse -module, which is not present in Python <= 2.6, Python 3.0 and Python -3.1. - -REVIEW: 126345 ---- - cmake/modules/PythonCompile.py | 29 +++++++++++++++++++++++++++-- - cmake/modules/PythonMacros.cmake | 4 ++-- - 2 files changed, 29 insertions(+), 4 deletions(-) - -diff --git a/cmake/modules/PythonCompile.py b/cmake/modules/PythonCompile.py -index 156fea2..d5f5ac4 100644 ---- a/cmake/modules/PythonCompile.py -+++ b/cmake/modules/PythonCompile.py -@@ -1,4 +1,29 @@ - # By Simon Edwards - # This file is in the public domain. --import py_compile, sys --sys.exit(py_compile.main()) -+ -+""" -+Byte-compiles a given Python source file, generating a .pyc file or, if the -+Python executable was invoked with -O, a .pyo file from it. -+It uses the --destination-dir option to set the path to the source file (which -+will appear in tracebacks, for example), so that if the .py file was in a build -+root will appear with the right path. -+""" -+ -+import argparse -+import os -+import py_compile -+ -+ -+if __name__ == '__main__': -+ parser = argparse.ArgumentParser('Byte-compiles a Python source file.') -+ parser.add_argument('-d', '--destination-dir', required=True, -+ help='Location where the source file will be ' -+ 'installed, without any build roots.') -+ parser.add_argument('source_file', -+ help='Source file to byte-compile.') -+ -+ args = parser.parse_args() -+ -+ dfile = os.path.join(args.destination_dir, -+ os.path.basename(args.source_file)) -+ py_compile.compile(args.source_file, dfile=dfile) -diff --git a/cmake/modules/PythonMacros.cmake b/cmake/modules/PythonMacros.cmake -index 6a82d88..7e3cf40 100644 ---- a/cmake/modules/PythonMacros.cmake -+++ b/cmake/modules/PythonMacros.cmake -@@ -60,7 +60,7 @@ macro(PYTHON_INSTALL SOURCE_FILE DESTINATION_DIR) - add_custom_command( - TARGET "${_rule_name}" - COMMAND "${CMAKE_COMMAND}" -E echo "${_message}" -- COMMAND "${PYTHON_EXECUTABLE}" "${_python_compile_py}" "${_bin_py}" -+ COMMAND "${PYTHON_EXECUTABLE}" "${_python_compile_py}" "--destination-dir" "${DESTINATION_DIR}" "${_bin_py}" - DEPENDS "${_absfilename}" - ) - else() -@@ -68,7 +68,7 @@ macro(PYTHON_INSTALL SOURCE_FILE DESTINATION_DIR) - TARGET "${_rule_name}" - COMMAND "${CMAKE_COMMAND}" -E echo "${_message}" - COMMAND "${CMAKE_COMMAND}" -E copy "${_absfilename}" "${_bin_py}" -- COMMAND "${PYTHON_EXECUTABLE}" "${_python_compile_py}" "${_bin_py}" -+ COMMAND "${PYTHON_EXECUTABLE}" "${_python_compile_py}" "--destination-dir" "${DESTINATION_DIR}" "${_bin_py}" - DEPENDS "${_absfilename}" - ) - endif() --- -2.5.0 - diff --git a/0002-Trigger-installation-of-missing-components-when-inst.patch b/0002-Trigger-installation-of-missing-components-when-inst.patch deleted file mode 100644 index c24de35..0000000 --- a/0002-Trigger-installation-of-missing-components-when-inst.patch +++ /dev/null @@ -1,140 +0,0 @@ -diff -up kdelibs-4.8.90/plasma/package.cpp.libplasma-pk-0002 kdelibs-4.8.90/plasma/package.cpp ---- kdelibs-4.8.90/plasma/package.cpp.libplasma-pk-0002 2012-06-05 10:47:01.000000000 +0200 -+++ kdelibs-4.8.90/plasma/package.cpp 2012-06-08 15:40:14.219728253 +0200 -@@ -43,8 +43,11 @@ - #include - - #include "authorizationmanager.h" -+#include "dataenginemanager.h" - #include "packagemetadata.h" -+#include "scripting/scriptengine.h" - #include "private/authorizationmanager_p.h" -+#include "private/componentinstaller_p.h" - #include "private/package_p.h" - #include "private/plasmoidservice_p.h" - #include "private/service_p.h" -@@ -580,6 +583,42 @@ bool Package::installPackage(const QStri - // no need to remove the temp dir (which has been successfully moved if it's an archive) - tempdir.setAutoRemove(false); - } -+ // check for missing dependencies -+ QString requiredScriptEngine = meta.implementationApi(); -+ if (!requiredScriptEngine.isEmpty()) { -+ // figure out the component type to query for -+ ComponentTypes componentTypes = static_cast(0); -+ QStringList serviceTypes = meta.serviceType().split(','); -+ if (serviceTypes.contains("Plasma/Applet")) { -+ componentTypes |= AppletComponent; -+ } -+ if (serviceTypes.contains("Plasma/DataEngine")) { -+ componentTypes |= DataEngineComponent; -+ } -+ if (serviceTypes.contains("Plasma/Runner")) { -+ componentTypes |= RunnerComponent; -+ } -+ if (serviceTypes.contains("Plasma/Wallpaper")) { -+ componentTypes |= WallpaperComponent; -+ } -+ if (componentTypes // ignore non-Plasma/* components (e.g. KWin/Script) -+ && !knownLanguages(componentTypes).contains(requiredScriptEngine)) { -+ // install the missing script engine -+ // force prompting because the user has just explicitly installed a widget -+ ComponentInstaller::self()->installMissingComponent("scriptengine", requiredScriptEngine, 0, true); -+ } -+ } -+ QStringList requiredDataEngines = meta.requiredDataEngines(); -+ if (!requiredDataEngines.isEmpty()) { -+ QStringList knownDataEngines = DataEngineManager::self()->listAllEngines(meta.application()); -+ foreach (const QString &requiredDataEngine, requiredDataEngines) { -+ if (!knownDataEngines.contains(requiredDataEngine)) { -+ // install the missing data engine -+ // force prompting because the user has just explicitly installed a widget -+ ComponentInstaller::self()->installMissingComponent("dataengine", requiredDataEngine, 0, true); -+ } -+ } -+ } - - if (!servicePrefix.isEmpty()) { - // and now we register it as a service =) -diff -up kdelibs-4.8.90/plasma/packagemetadata.cpp.libplasma-pk-0002 kdelibs-4.8.90/plasma/packagemetadata.cpp ---- kdelibs-4.8.90/plasma/packagemetadata.cpp.libplasma-pk-0002 2012-05-23 01:45:26.000000000 +0200 -+++ kdelibs-4.8.90/plasma/packagemetadata.cpp 2012-06-08 15:24:24.439149182 +0200 -@@ -52,6 +52,7 @@ class PackageMetadataPrivate - QString serviceType; - QString api; - KUrl location; -+ QStringList requiredDataEngines; - }; - - PackageMetadata::PackageMetadata(const PackageMetadata &other) -@@ -108,6 +109,7 @@ void PackageMetadata::write(const QStrin - config.writeEntry("X-KDE-ParentApp", d->app); - config.writeEntry("Type", d->type); - config.writeEntry("X-Plasma-RemoteLocation", d->location); -+ config.writeEntry("X-Plasma-RequiredDataEngines", d->requiredDataEngines); - } - - void PackageMetadata::read(const QString &filename) -@@ -154,6 +156,7 @@ void PackageMetadata::read(const QString - d->app = config.readEntry("X-KDE-ParentApp", d->app); - d->type = config.readEntry("Type", d->type); - d->location = config.readEntry("X-Plasma-RemoteLocation", d->location); -+ d->requiredDataEngines = config.readEntry("X-Plasma-RequiredDataEngines", d->requiredDataEngines); - } - - QString PackageMetadata::name() const -@@ -246,6 +249,11 @@ QString PackageMetadata::implementationA - return d->api; - } - -+QStringList PackageMetadata::requiredDataEngines() const -+{ -+ return d->requiredDataEngines; -+} -+ - void PackageMetadata::setImplementationApi(const QString &api) - { - d->api = api; -@@ -321,6 +329,11 @@ void PackageMetadata::setRemoteLocation( - d->location = location; - } - -+void PackageMetadata::setRequiredDataEngines(const QStringList &requiredDataEngines) -+{ -+ d->requiredDataEngines = requiredDataEngines; -+} -+ - void PackageMetadata::setType(const QString &type) - { - d->type = type; -diff -up kdelibs-4.8.90/plasma/packagemetadata.h.libplasma-pk-0002 kdelibs-4.8.90/plasma/packagemetadata.h ---- kdelibs-4.8.90/plasma/packagemetadata.h.libplasma-pk-0002 2012-05-23 01:45:26.000000000 +0200 -+++ kdelibs-4.8.90/plasma/packagemetadata.h 2012-06-08 15:24:24.481149665 +0200 -@@ -21,6 +21,7 @@ - #define PLASMA_PACKAGEMETADATA_H - - #include -+#include - - #include - -@@ -92,6 +93,7 @@ public: - QString pluginName() const; - QString implementationApi() const; - KUrl remoteLocation() const; -+ QStringList requiredDataEngines() const; - - QString type() const; - -@@ -205,6 +207,11 @@ public: - */ - void setImplementationApi(const QString &api); - -+ /** -+ * Set the required data engines for this package. -+ */ -+ void setRequiredDataEngines(const QStringList &); -+ - private: - PackageMetadataPrivate * const d; - }; diff --git a/0003-FindPyKDE4-Make-PYKDE4_INSTALL_PYTHON_FILES-use-PYTH.patch b/0003-FindPyKDE4-Make-PYKDE4_INSTALL_PYTHON_FILES-use-PYTH.patch deleted file mode 100644 index 4d7e08d..0000000 --- a/0003-FindPyKDE4-Make-PYKDE4_INSTALL_PYTHON_FILES-use-PYTH.patch +++ /dev/null @@ -1,85 +0,0 @@ -From 016841aeb0b180981122085e9b1d49ae66951670 Mon Sep 17 00:00:00 2001 -From: Raphael Kubo da Costa -Date: Fri, 18 Dec 2015 13:35:35 +0100 -Subject: [PATCH 3/3] FindPyKDE4: Make PYKDE4_INSTALL_PYTHON_FILES use - PYTHON_INSTALL. - -Commit 94f1d2f ("PythonMacros: specify destination directory in -byte-compiled files") broke Kajongg's build because it uses the -PYKDE4_INSTALL_PYTHON_FILES() macro, whose use of PythonCompile.py had -not been updated. - -Instead of just passing --destination-dir in FindPyKDE4.cmake, rewrite -the PYKDE4_INSTALL_PYTHON_FILES() macro to use PythonMacros's -PYTHON_INSTALL(). Not only does this fix Kajongg's build, but it also -removes a lot of code duplication and makes -PYKDE4_INSTALL_PYTHON_FILES() work with Python 3.2+'s different .pyc -location. - -REVIEW: 126413 ---- - cmake/modules/FindPyKDE4.cmake | 40 ++-------------------------------------- - 1 file changed, 2 insertions(+), 38 deletions(-) - -diff --git a/cmake/modules/FindPyKDE4.cmake b/cmake/modules/FindPyKDE4.cmake -index 3b87963..9b13794 100644 ---- a/cmake/modules/FindPyKDE4.cmake -+++ b/cmake/modules/FindPyKDE4.cmake -@@ -9,6 +9,7 @@ - # This file is in the public domain. - - INCLUDE(FindPythonInterp) -+include(PythonMacros) - - SET(PYKDE4_FOUND FALSE) - -@@ -104,45 +105,8 @@ ENDIF(PYTHONINTERP_FOUND) - # project.. - # - MACRO(PYKDE4_INSTALL_PYTHON_FILES) -- -- ADD_CUSTOM_TARGET(pysupport ALL) - FOREACH (_current_file ${ARGN}) -- -- # Install the source file. -- INSTALL(FILES ${_current_file} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) -- -- # Byte compile and install the .pyc file. -- GET_FILENAME_COMPONENT(_absfilename ${_current_file} ABSOLUTE) -- GET_FILENAME_COMPONENT(_filename ${_current_file} NAME) -- GET_FILENAME_COMPONENT(_filenamebase ${_current_file} NAME_WE) -- GET_FILENAME_COMPONENT(_basepath ${_current_file} PATH) -- SET(_bin_py ${CMAKE_BINARY_DIR}/${_basepath}/${_filename}) -- SET(_bin_pyc ${CMAKE_BINARY_DIR}/${_basepath}/${_filenamebase}.pyc) -- -- FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${_basepath}) -- -- SET(_message "-DMESSAGE=Byte-compiling ${_bin_py}") -- -- GET_FILENAME_COMPONENT(_abs_bin_py ${_bin_py} ABSOLUTE) -- IF(_abs_bin_py STREQUAL ${_absfilename}) # Don't copy the file onto itself. -- ADD_CUSTOM_COMMAND( -- TARGET pysupport -- COMMAND ${CMAKE_COMMAND} -E echo ${message} -- COMMAND ${PYTHON_EXECUTABLE} ${current_module_dir}/PythonCompile.py ${_bin_py} -- DEPENDS ${_absfilename} -- ) -- ELSE(_abs_bin_py STREQUAL ${_absfilename}) -- ADD_CUSTOM_COMMAND( -- TARGET pysupport -- COMMAND ${CMAKE_COMMAND} -E echo ${message} -- COMMAND ${CMAKE_COMMAND} -E copy ${_absfilename} ${_bin_py} -- COMMAND ${PYTHON_EXECUTABLE} ${current_module_dir}/PythonCompile.py ${_bin_py} -- DEPENDS ${_absfilename} -- ) -- ENDIF(_abs_bin_py STREQUAL ${_absfilename}) -- -- INSTALL(FILES ${_bin_pyc} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) -- -+ python_install(${_current_file} ${DATA_INSTALL_DIR}/${PROJECT_NAME}) - ENDFOREACH (_current_file) - ENDMACRO(PYKDE4_INSTALL_PYTHON_FILES) - --- -2.5.0 - diff --git a/0003-Implement-automatic-scanning-of-source-code-for-requ.patch b/0003-Implement-automatic-scanning-of-source-code-for-requ.patch deleted file mode 100644 index dc155f7..0000000 --- a/0003-Implement-automatic-scanning-of-source-code-for-requ.patch +++ /dev/null @@ -1,346 +0,0 @@ -From 89e4767148110a5566e463a03b3ed594276b7da0 Mon Sep 17 00:00:00 2001 -Message-Id: <89e4767148110a5566e463a03b3ed594276b7da0.1317166378.git.kevin.kofler@chello.at> -From: Kevin Kofler -Date: Wed, 17 Aug 2011 04:54:37 +0200 -Subject: [PATCH] Implement automatic scanning of source code for required - data engines. - -For packages in scripting languages and distributed through OCS, this is fully -automatic and triggered from Package::installPackage. If an -X-Plasma-RequiredDataEngines entry is present in the .desktop file (even if -empty), the dependency extraction is not run and the explicitly provided -information is trusted instead. - -For native distribution packages, we ship a tool called -plasma-dataengine-depextractor which can be run at any time during the build -process and which adds the dependency information to the relevant .desktop file. - -Authors of plasmoids are encouraged to run plasma-dataengine-depextractor and/or -fill in X-Plasma-RequiredDataEngines manually. (Please note that the list is -expected to be comma-separated.) ---- - plasma/CMakeLists.txt | 15 ++++ - plasma/depextractor/depextractor.cpp | 125 +++++++++++++++++++++++++++++++++ - plasma/package.cpp | 11 +++ - plasma/private/componentinstaller.cpp | 71 +++++++++++++++++++ - plasma/private/componentinstaller_p.h | 17 ++++- - 5 files changed, 238 insertions(+), 1 deletions(-) - -diff --git a/plasma/CMakeLists.txt b/plasma/CMakeLists.txt -index f929967..9a760ef 100644 ---- a/plasma/CMakeLists.txt -+++ b/plasma/CMakeLists.txt -@@ -304,6 +304,18 @@ set_target_properties(plasma PROPERTIES - - install(TARGETS plasma EXPORT kdelibsLibraryTargets ${INSTALL_TARGETS_DEFAULT_ARGS}) - -+if(NOT PLASMA_NO_PACKAGEKIT) -+ # we need a copy of the component installer because libplasma does not export it -+ # plus, this avoids depending on GUI stuff in this command-line utility -+ set(plasma_dataengine_depextractor_SRCS depextractor/depextractor.cpp -+ private/componentinstaller.cpp) -+ kde4_add_executable(plasma-dataengine-depextractor -+ ${plasma_dataengine_depextractor_SRCS}) -+ set_target_properties(plasma-dataengine-depextractor PROPERTIES -+ COMPILE_FLAGS -DPLASMA_COMPONENTINSTALLER_NO_QWIDGET=1) -+ target_link_libraries(plasma-dataengine-depextractor ${KDE4_KDECORE_LIBS}) -+endif(NOT PLASMA_NO_PACKAGEKIT) -+ - - ########### install files ############### - -@@ -460,3 +472,6 @@ install(FILES data/operations/dataengineservice.operations DESTINATION ${DATA_IN - install(FILES data/operations/plasmoidservice.operations DESTINATION ${DATA_INSTALL_DIR}/plasma/services) - install(FILES data/operations/storage.operations DESTINATION ${DATA_INSTALL_DIR}/plasma/services) - -+if(NOT PLASMA_NO_PACKAGEKIT) -+ install(TARGETS plasma-dataengine-depextractor DESTINATION ${BIN_INSTALL_DIR}) -+endif(NOT PLASMA_NO_PACKAGEKIT) -diff --git a/plasma/depextractor/depextractor.cpp b/plasma/depextractor/depextractor.cpp -new file mode 100644 -index 0000000..c489de7 ---- /dev/null -+++ b/plasma/depextractor/depextractor.cpp -@@ -0,0 +1,125 @@ -+/* Plasma Data Engine dependency extractor -+ Copyright (C) 2011 Kevin Kofler -+ -+ This program is free software: you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation, either version 2 of the License, or -+ (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program. If not, see . */ -+ -+#include -+#include -+#include -+#include -+ -+#include -+ -+#include -+#include -+#include -+#include -+ -+#include "private/componentinstaller_p.h" -+ -+static QString scriptingApi(const QString &desktopFile) -+{ -+ KDesktopFile desktop(desktopFile); -+ KConfigGroup desktopGroup = desktop.desktopGroup(); -+ if (desktopGroup.readEntry("X-KDE-ServiceTypes", QStringList()) -+ .contains("Plasma/ScriptEngine") -+ || desktopGroup.readEntry("ServiceTypes", QStringList()) -+ .contains("Plasma/ScriptEngine")) { -+ /* Script engines are always written in C++. Their X-Plasma-API is the -+ API they export, not the language they're written in. */ -+ return QString(); -+ } -+ return desktopGroup.readEntry("X-Plasma-API", QString()); -+} -+ -+static void writeDataEngineDependencies(const QStringList &deps, -+ const QString &desktopFile) -+{ -+ if (!deps.isEmpty()) { -+ KDesktopFile desktop(desktopFile); -+ desktop.desktopGroup().writeEntry("X-Plasma-RequiredDataEngines", deps); -+ } -+} -+ -+int main(int argc, char **argv) -+{ -+ KAboutData aboutData("plasma-dataengine-depextractor", QByteArray(), -+ ki18n("Plasma Data Engine dependency extractor"), -+ "2", -+ ki18n("Plasma Data Engine dependency extractor")); -+ aboutData.addAuthor(ki18n("Kevin Kofler"), ki18n("Author"), -+ "kevin.kofler@chello.at"); -+ -+ KCmdLineArgs::init(argc, argv, &aboutData); -+ KCmdLineOptions options; -+ options.add("+[path]", -+ ki18n("Source path (default: .)")); -+ options.add("+[file]", -+ ki18n(".desktop rel. to path (default: metadata.desktop)") -+ ); -+ KCmdLineArgs::addCmdLineOptions(options); -+ -+ QCoreApplication *app = new QCoreApplication(KCmdLineArgs::qtArgc(), -+ KCmdLineArgs::qtArgv()); -+ -+ KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); -+ -+ int exitCode = 0; -+ -+ QString path, desktopFile; -+ int argCount = args->count(); -+ switch (argCount) { -+ case 0: -+ path = "."; -+ desktopFile = "metadata.desktop"; -+ break; -+ case 1: -+ path = args->arg(0); -+ desktopFile = "metadata.desktop"; -+ break; -+ case 2: -+ path = args->arg(0); -+ desktopFile = args->arg(1); -+ break; -+ default: -+ { -+ QTextStream err(stderr, QIODevice::WriteOnly | QIODevice::Text); -+ err << i18n("Expected at most 2 arguments, but %1 given", argCount) -+ << endl; -+ exitCode = 1; -+ break; -+ } -+ } -+ -+ if (!exitCode) { -+ if (QFileInfo(desktopFile).isRelative()) -+ desktopFile = QDir(path).absoluteFilePath(desktopFile); -+ -+ if (QFileInfo(desktopFile).exists()) { -+ writeDataEngineDependencies(Plasma::ComponentInstaller::self() -+ ->extractDataEngineDependencies( -+ path, -+ scriptingApi(desktopFile)), -+ desktopFile); -+ } else { -+ QTextStream err(stderr, QIODevice::WriteOnly | QIODevice::Text); -+ err << i18n("Desktop file \"%1\" not found", desktopFile) << endl; -+ exitCode = 1; -+ } -+ } -+ -+ args->clear(); -+ delete app; -+ return exitCode; -+} -diff --git a/plasma/package.cpp b/plasma/package.cpp -index 0a45c87..131f204 100644 ---- a/plasma/package.cpp -+++ b/plasma/package.cpp -@@ -631,6 +631,17 @@ bool Package::installPackage(const QString &package, - } - } - QStringList requiredDataEngines = meta.requiredDataEngines(); -+ if (requiredDataEngines.isEmpty()) { -+ // check whether this was explicitly specified as empty -+ QString metaPath = targetName + "/metadata.desktop"; -+ KDesktopFile df(metaPath); -+ KConfigGroup cg = df.desktopGroup(); -+ if (!cg.hasKey("X-Plasma-RequiredDataEngines")) { -+ // not specified at all, try running the dependency extraction -+ requiredDataEngines = ComponentInstaller::self()->extractDataEngineDependencies(targetName, -+ requiredScriptEngine); -+ } -+ } - if (!requiredDataEngines.isEmpty()) { - QStringList knownDataEngines = DataEngineManager::self()->listAllEngines(meta.application()); - foreach (const QString &requiredDataEngine, requiredDataEngines) { -diff --git a/plasma/private/componentinstaller.cpp b/plasma/private/componentinstaller.cpp -index 870667f..087d1c6 100644 ---- a/plasma/private/componentinstaller.cpp -+++ b/plasma/private/componentinstaller.cpp -@@ -28,6 +28,10 @@ - #include - #include - #include -+#include -+#include -+#include -+#include - #endif - - namespace Plasma -@@ -85,9 +89,13 @@ void ComponentInstaller::installMissingComponent(const QString &type, - // We don't check packageKit.isValid() because the service is activated on - // demand, so it will show up as "not valid". - WId wid = 0; -+#ifndef PLASMA_COMPONENTINSTALLER_NO_QWIDGET - if (parent) { - wid = parent->winId(); - } -+#else -+ Q_UNUSED(parent); -+#endif - QStringList resources; - resources.append(searchString); - packageKit.asyncCall(QLatin1String("InstallResources"), (unsigned int) wid, -@@ -100,4 +108,67 @@ void ComponentInstaller::installMissingComponent(const QString &type, - #endif - } - -+QStringList ComponentInstaller::extractDataEngineDependencies(const QString &path, -+ const QString &api) -+{ -+ QStringList deps; -+ -+#ifdef PLASMA_ENABLE_PACKAGEKIT_SUPPORT -+ QStringList nameFilters; -+ QRegExp searchRegExp("dataEngine *\\( *\"([^\"]+)\" *\\)"); -+ if (api.isEmpty()) { -+ // no script engine API, this is native C++ code -+ nameFilters.append("*.cpp"); -+ nameFilters.append("*.cxx"); -+ nameFilters.append("*.cc"); -+ nameFilters.append("*.C"); -+ nameFilters.append("*.h"); -+ nameFilters.append("*.hpp"); -+ nameFilters.append("*.hxx"); -+ nameFilters.append("*.hh"); -+ nameFilters.append("*.H"); -+ } else if (api == "declarativeappletscript") { -+ nameFilters.append("*.qml"); -+ searchRegExp = QRegExp("(?:^\\s*engine:\\s*|dataEngine *\\( *)\"([^\"]+)\""); -+ } else if (api == "javascript") { -+ nameFilters.append("*.js"); -+ } else if (api == "python") { -+ nameFilters.append("*.py"); -+ searchRegExp = QRegExp("dataEngine *\\( *[\'\"]([^\'\"]+)[\'\"] *\\)"); -+ } else if (api == "ruby-script") { -+ nameFilters.append("*.rb"); -+ searchRegExp = QRegExp("dataEngine *\\( *[\'\"]([^\'\"]+)[\'\"] *\\)"); -+ } else { -+ // dependency extraction not supported for this API -+ return deps; -+ } -+ -+ QDirIterator it(path, nameFilters, QDir::Files | QDir::CaseSensitive, -+ QDirIterator::Subdirectories -+ | QDirIterator::FollowSymlinks); -+ while (it.hasNext()) { -+ QFile file(it.next()); -+ file.open(QIODevice::ReadOnly | QIODevice::Text); -+ QTextStream stream(&file); -+ QString line; -+ while (!(line = stream.readLine()).isNull()) { -+ int column = 0; -+ while ((column = searchRegExp.indexIn(line, column)) != -1) { -+ QString dep = searchRegExp.cap(1); -+ if (!deps.contains(dep)) { -+ deps.append(dep); -+ } -+ column += searchRegExp.matchedLength(); -+ } -+ } -+ file.close(); -+ } -+#else -+ Q_UNUSED(path); -+ Q_UNUSED(api); -+#endif -+ -+ return deps; -+} -+ - } // namespace Plasma -diff --git a/plasma/private/componentinstaller_p.h b/plasma/private/componentinstaller_p.h -index f85cbb6..d0d9c75 100644 ---- a/plasma/private/componentinstaller_p.h -+++ b/plasma/private/componentinstaller_p.h -@@ -20,7 +20,7 @@ - #ifndef PLASMA_COMPONENTINSTALLER_H - #define PLASMA_COMPONENTINSTALLER_H - --class QString; -+#include - class QWidget; - - namespace Plasma -@@ -76,6 +76,21 @@ class ComponentInstaller - void installMissingComponent(const QString &type, const QString &name, - QWidget *parent = 0, bool force = false); - -+ /** -+ * Extracts the list of required data engines from source code. -+ * -+ * If the scripting API is not supported for dependency extraction or -+ * if Plasma was compiled without support for missing component -+ * installation, an empty list of dependencies is returned. -+ * -+ * @param path the path containing the source code -+ * @param api the scripting API used; -+ * if empty (the default), assumes the native C++ API -+ */ -+ QStringList extractDataEngineDependencies(const QString &path, -+ const QString &api -+ = QString()); -+ - private: - /** - * Default constructor. The singleton method self() is the --- -1.7.6.2 - diff --git a/0015-Remove-bookmarks-syncing-from-KFilePlacesModel-and-u.patch b/0015-Remove-bookmarks-syncing-from-KFilePlacesModel-and-u.patch deleted file mode 100644 index 0406a77..0000000 --- a/0015-Remove-bookmarks-syncing-from-KFilePlacesModel-and-u.patch +++ /dev/null @@ -1,474 +0,0 @@ -From 5c0a31a2f2a46aa44b8c34baae67b6951b2abcaf Mon Sep 17 00:00:00 2001 -From: Emmanuel Pescosta -Date: Wed, 29 Apr 2015 16:02:02 +0200 -Subject: [PATCH 15/32] Remove bookmarks syncing from KFilePlacesModel and use - user-places.xbel only. - -FIXED-IN: 4.14.8 -BUG: 345174 -REVIEW: 123568 ---- - kfile/CMakeLists.txt | 1 - - kfile/kfileplacesmodel.cpp | 21 +-- - kfile/kfileplacessharedbookmarks.cpp | 276 ----------------------------------- - kfile/kfileplacessharedbookmarks_p.h | 56 ------- - 4 files changed, 3 insertions(+), 351 deletions(-) - delete mode 100644 kfile/kfileplacessharedbookmarks.cpp - delete mode 100644 kfile/kfileplacessharedbookmarks_p.h - -diff --git a/kfile/CMakeLists.txt b/kfile/CMakeLists.txt -index ceae140..e796908 100644 ---- a/kfile/CMakeLists.txt -+++ b/kfile/CMakeLists.txt -@@ -22,7 +22,6 @@ set(kfile_LIB_SRCS - kfilewidget.cpp - kfileplacesitem.cpp - kfileplacesmodel.cpp -- kfileplacessharedbookmarks.cpp - kfileplacesview.cpp - kfileplaceeditdialog.cpp - kfilepreviewgenerator.cpp -diff --git a/kfile/kfileplacesmodel.cpp b/kfile/kfileplacesmodel.cpp -index 24f95ad..a3ac9fb 100644 ---- a/kfile/kfileplacesmodel.cpp -+++ b/kfile/kfileplacesmodel.cpp -@@ -19,7 +19,6 @@ - */ - #include "kfileplacesmodel.h" - #include "kfileplacesitem_p.h" --#include "kfileplacessharedbookmarks_p.h" - - #ifdef _WIN32_WCE - #include "Windows.h" -@@ -61,10 +60,9 @@ - class KFilePlacesModel::Private - { - public: -- Private(KFilePlacesModel *self) : q(self), bookmarkManager(0), sharedBookmarks(0) {} -+ Private(KFilePlacesModel *self) : q(self), bookmarkManager(0) {} - ~Private() - { -- delete sharedBookmarks; - qDeleteAll(items); - } - -@@ -76,7 +74,6 @@ public: - - Solid::Predicate predicate; - KBookmarkManager *bookmarkManager; -- KFilePlacesSharedBookmarks * sharedBookmarks; - - void reloadAndSignal(); - QList loadBookmarkList(); -@@ -93,8 +90,8 @@ public: - KFilePlacesModel::KFilePlacesModel(QObject *parent) - : QAbstractItemModel(parent), d(new Private(this)) - { -- const QString file = KStandardDirs::locateLocal("data", "kfileplaces/bookmarks.xml"); -- d->bookmarkManager = KBookmarkManager::managerForFile(file, "kfilePlaces"); -+ const QString file = KStandardDirs().localxdgdatadir() + "user-places.xbel"; -+ d->bookmarkManager = KBookmarkManager::managerForExternalFile(file); - - // Let's put some places in there if it's empty. We have a corner case here: - // Given you have bookmarked some folders (which have been saved on -@@ -146,9 +143,6 @@ KFilePlacesModel::KFilePlacesModel(QObject *parent) - d->bookmarkManager->saveAs(file); - } - -- // create after, so if we have own places, they are added afterwards, in case of equal priorities -- d->sharedBookmarks = new KFilePlacesSharedBookmarks(d->bookmarkManager); -- - QString predicate("[[[[ StorageVolume.ignored == false AND [ StorageVolume.usage == 'FileSystem' OR StorageVolume.usage == 'Encrypted' ]]" - " OR " - "[ IS StorageAccess AND StorageDrive.driveType == 'Floppy' ]]" -@@ -632,8 +626,6 @@ bool KFilePlacesModel::dropMimeData(const QMimeData *data, Qt::DropAction action - return false; - } - -- d->sharedBookmarks->updateSharedBookmarks(); -- - d->reloadAndSignal(); - - return true; -@@ -661,8 +653,6 @@ void KFilePlacesModel::addPlace(const QString &text, const KUrl &url, - d->bookmarkManager->root().moveBookmark(bookmark, item->bookmark()); - } - -- d->sharedBookmarks->updateSharedBookmarks(); -- - d->reloadAndSignal(); - } - -@@ -684,8 +674,6 @@ void KFilePlacesModel::editPlace(const QModelIndex &index, const QString &text, - bookmark.setIcon(iconName); - bookmark.setMetaDataItem("OnlyInApp", appName); - -- d->sharedBookmarks->updateSharedBookmarks(); -- - d->reloadAndSignal(); - emit dataChanged(index, index); - } -@@ -703,7 +691,6 @@ void KFilePlacesModel::removePlace(const QModelIndex &index) const - if (bookmark.isNull()) return; - - d->bookmarkManager->root().deleteBookmark(bookmark); -- d->sharedBookmarks->updateSharedBookmarks(); - d->reloadAndSignal(); - } - -@@ -719,8 +706,6 @@ void KFilePlacesModel::setPlaceHidden(const QModelIndex &index, bool hidden) - - bookmark.setMetaDataItem("IsHidden", (hidden ? "true" : "false")); - -- d->sharedBookmarks->updateSharedBookmarks(); -- - d->reloadAndSignal(); - emit dataChanged(index, index); - } -diff --git a/kfile/kfileplacessharedbookmarks.cpp b/kfile/kfileplacessharedbookmarks.cpp -deleted file mode 100644 -index 5385d42..0000000 ---- a/kfile/kfileplacessharedbookmarks.cpp -+++ /dev/null -@@ -1,276 +0,0 @@ --/* This file is part of the KDE project -- Copyright (C) 2008 Norbert Frese -- -- This library is free software; you can redistribute it and/or -- modify it under the terms of the GNU Library General Public -- License version 2 as published by the Free Software Foundation. -- -- This library is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -- Library General Public License for more details. -- -- You should have received a copy of the GNU Library General Public License -- along with this library; see the file COPYING.LIB. If not, write to -- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -- Boston, MA 02110-1301, USA. -- --*/ -- --#include "kfileplacessharedbookmarks_p.h" -- --#include --#include --#include --#include --#include --#include --#include -- --//////////////// utility functions -- --static bool compareBookmarks(const KBookmark & bookmark1, const KBookmark & bookmark2) --{ -- return (bookmark1.url() == bookmark2.url() || bookmark1.text() == bookmark2.text()); --} -- --static bool deepCompareDomNodes(const QDomNode & node1, const QDomNode & node2) --{ -- -- // compare name and value -- if (node1.nodeName() != node2.nodeName() || node1.nodeValue() != node2.nodeValue()) -- return false; -- -- // recursively compare children -- const QDomNodeList node1Children = node1.childNodes(); -- const QDomNodeList node2Children = node2.childNodes(); -- -- if (node1Children.count () != node2Children.count ()) -- return false; -- -- for (int i=0; iroot(); -- KBookmark bookmark = root.first(); -- -- KBookmarkGroup sharedRoot = m_sharedBookmarkManager->root(); -- KBookmark sharedBookmark = sharedRoot.first(); -- -- bool dirty = false; -- -- while (!bookmark.isNull()) { -- //kDebug() << "importing" << bookmark.text(); -- -- // skip over system items -- if (bookmark.metaDataItem("isSystemItem") == "true") { -- bookmark = root.next(bookmark); -- continue; -- } -- -- // do the bookmarks match? -- if (!sharedBookmark.isNull() && compareBookmarks(bookmark, sharedBookmark)) { -- //kDebug() << "excat comparing: targetbk:\n" << nodeAsString(bookmark.internalElement()) << "\nsourcbk:\n" << nodeAsString(sharedBookmark.internalElement()); -- -- if (!exactCompareBookmarks(bookmark, sharedBookmark)) { -- KBookmark cloneTarget=bookmark; -- KBookmark cloneSource = sharedBookmark; -- -- sharedBookmark = sharedRoot.next(sharedBookmark); -- bookmark = root.next(bookmark); -- -- //kDebug() << "cloning" << cloneSource.text(); -- //kDebug() << "cloning: target=\n" << nodeAsString(cloneTarget.internalElement()) << "\n source:\n" << nodeAsString(cloneSource.internalElement()); -- -- cloneBookmarkContents(cloneTarget, cloneSource); -- dirty = true; -- continue; -- } else { -- //kDebug() << "keeping" << bookmark.text(); -- } -- sharedBookmark = sharedRoot.next(sharedBookmark); -- bookmark = root.next(bookmark); -- continue; -- } -- -- // they don't match -> remove -- //kDebug() << "removing" << bookmark.text(); -- KBookmark bookmarkToRemove = bookmark; -- bookmark = root.next(bookmark); -- root.deleteBookmark(bookmarkToRemove); -- -- dirty = true; -- } -- -- // append the remaining shared bookmarks -- while(!sharedBookmark.isNull()) { -- root.addBookmark(cloneBookmark(sharedBookmark)); -- sharedBookmark = sharedRoot.next(sharedBookmark); -- dirty = true; -- } -- -- return dirty; --} -- --bool KFilePlacesSharedBookmarks::exportSharedBookmarks() --{ -- KBookmarkGroup root = m_placesBookmarkManager->root(); -- KBookmark bookmark = root.first(); -- -- KBookmarkGroup sharedRoot = m_sharedBookmarkManager->root(); -- KBookmark sharedBookmark = sharedRoot.first(); -- -- bool dirty = false; -- -- // first check if they are the same -- int count=0; -- while (!bookmark.isNull()) { -- //kDebug() << "exporting..." << bookmark.text(); -- -- // skip over system items -- if (bookmark.metaDataItem("isSystemItem") == "true") { -- bookmark = root.next(bookmark); -- continue; -- } -- count++; -- -- // end of sharedBookmarks? -- if (sharedBookmark.isNull()) { -- dirty=true; -- break; -- } -- -- // do the bookmarks match? -- if (compareBookmarks(bookmark, sharedBookmark)) { -- if (!exactCompareBookmarks(bookmark, sharedBookmark)) { -- dirty = true; -- break; -- } -- } else { -- dirty=true; -- break; -- } -- sharedBookmark = sharedRoot.next(sharedBookmark); -- bookmark = root.next(bookmark); -- } -- -- //kDebug() << "dirty=" << dirty << " oldsize=" << bookmarkGroupSize(sharedRoot) << " count=" << count; -- -- if (bookmarkGroupSize(sharedRoot) != count) -- dirty=true; -- -- if (dirty) { -- emptyBookmarkGroup(sharedRoot); -- -- // append all bookmarks -- KBookmark bookmark = root.first(); -- -- while(!bookmark.isNull()) { -- -- if (bookmark.metaDataItem("isSystemItem") == "true") { -- bookmark = root.next(bookmark); -- continue; -- } -- -- sharedRoot.addBookmark(cloneBookmark(bookmark)); -- bookmark = root.next(bookmark); -- dirty = true; -- } -- } -- -- return dirty; -- --} -- --void KFilePlacesSharedBookmarks::slotSharedBookmarksChanged() --{ -- //kDebug() << "shared bookmarks changed"; -- bool dirty = integrateSharedBookmarks(); -- if (dirty) m_placesBookmarkManager->emitChanged(); --} -- --void KFilePlacesSharedBookmarks::updateSharedBookmarks() --{ -- //kDebug() << "places bookmarks changed"; -- bool dirty = exportSharedBookmarks(); -- if (dirty) m_sharedBookmarkManager->emitChanged(); --} -- --#include "kfileplacessharedbookmarks_p.moc" -diff --git a/kfile/kfileplacessharedbookmarks_p.h b/kfile/kfileplacessharedbookmarks_p.h -deleted file mode 100644 -index 654fe18..0000000 ---- a/kfile/kfileplacessharedbookmarks_p.h -+++ /dev/null -@@ -1,56 +0,0 @@ --/* This file is part of the KDE project -- Copyright (C) 2008 Norbert Frese -- -- This library is free software; you can redistribute it and/or -- modify it under the terms of the GNU Library General Public -- License version 2 as published by the Free Software Foundation. -- -- This library is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -- Library General Public License for more details. -- -- You should have received a copy of the GNU Library General Public License -- along with this library; see the file COPYING.LIB. If not, write to -- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -- Boston, MA 02110-1301, USA. -- --*/ -- --#ifndef KFILEPLACESSHAREDBOOKMARKS_P_H --#define KFILEPLACESSHAREDBOOKMARKS_P_H -- --#include --#include -- --/** -- * keeps the KFilePlacesModel bookmarks and the shared bookmark spec -- * shortcuts in sync -- */ --class KFilePlacesSharedBookmarks : public QObject --{ -- Q_OBJECT --public: -- -- KFilePlacesSharedBookmarks(KBookmarkManager * mgr); -- ~KFilePlacesSharedBookmarks() { /* delete m_sharedBookmarkManager; */} -- -- void updateSharedBookmarks(); -- --private: -- -- bool integrateSharedBookmarks(); -- bool exportSharedBookmarks(); -- -- KBookmarkManager *m_placesBookmarkManager; -- KBookmarkManager *m_sharedBookmarkManager; -- --private Q_SLOTS: -- -- void slotSharedBookmarksChanged(); --}; -- -- -- -- --#endif /*KFILEPLACESSHARED_P_H_*/ --- -2.4.2 - diff --git a/coding-style-fixes.patch b/coding-style-fixes.patch deleted file mode 100644 index 3c1fdba..0000000 --- a/coding-style-fixes.patch +++ /dev/null @@ -1,61 +0,0 @@ -From 2173580f070e806d4715e13048c697c49ec262e2 Mon Sep 17 00:00:00 2001 -From: Aaron Seigo -Date: Thu, 21 Feb 2013 17:59:58 +0100 -Subject: [PATCH 047/111] coding style fixes - ---- - kdeui/icons/kiconloader.cpp | 27 ++++++++++++--------------- - 1 file changed, 12 insertions(+), 15 deletions(-) - -diff --git a/kdeui/icons/kiconloader.cpp b/kdeui/icons/kiconloader.cpp -index 6fed667..dba474d 100644 ---- a/kdeui/icons/kiconloader.cpp -+++ b/kdeui/icons/kiconloader.cpp -@@ -938,32 +938,29 @@ K3Icon KIconLoaderPrivate::findMatchingIcon(const QString& name, int size) const - } - } - -- foreach (KIconThemeNode *themeNode, links) -- { -+ foreach (KIconThemeNode *themeNode, links) { - QString currentName = name; - -- while (!currentName.isEmpty()) -- { -- -+ while (!currentName.isEmpty()) { - //kDebug(264) << "Looking up" << currentName; - --// The following code has been commented out because the Qt SVG renderer needs --// to be improved. If you are going to change/remove some code from this part, --// please contact me before (ereslibre@kde.org), or kde-core-devel@kde.org. (ereslibre) -- for (int i = 0 ; i < 4 ; i++) -- { -+ for (int i = 0 ; i < 4 ; i++) { - icon = themeNode->theme->iconPath(currentName + ext[i], size, KIconLoader::MatchExact); -- if (icon.isValid()) -- return icon; -+ if (icon.isValid()) { -+ break; -+ } - - icon = themeNode->theme->iconPath(currentName + ext[i], size, KIconLoader::MatchBest); -- if (icon.isValid()) -- return icon; -+ if (icon.isValid()) { -+ break; -+ } - } -+ //kDebug(264) << "Looking up" << currentName; - -- if (genericFallback) -+ if (genericFallback) { - // we already tested the base name - break; -+ } - - int rindex = currentName.lastIndexOf('-'); - if (rindex > 1) { // > 1 so that we don't split x-content or x-epoc --- -1.8.1.4 - diff --git a/kdelibs.spec b/kdelibs.spec index 1e76475..1942851 100644 --- a/kdelibs.spec +++ b/kdelibs.spec @@ -31,10 +31,6 @@ %else %define upower 1 %endif -# enable plasma/packagekit feature -%if 0%{?fedora} < 22 -%define plasma_packagekit 1 -%endif # enable tests (disabled by default) #global tests 1 @@ -50,9 +46,9 @@ Summary: KDE Libraries # shipped with kde applications, version... -%global apps_version 15.12.0 -Version: 4.14.15 -Release: 3%{?dist} +%global apps_version 15.12.1 +Version: 4.14.16 +Release: 1%{?dist} Name: kdelibs Epoch: 6 @@ -136,15 +132,6 @@ Patch20: kdelibs-4.10.0-cmake.patch # -DCMAKE_SKIP_RPATH:BOOL=ON (finally) Patch27: kdelibs-4.10.0-no_rpath.patch -## libplasma PackageKit integration -# Trigger installation of missing components when installing a package. -# https://git.reviewboard.kde.org/r/102291/ -Patch41: 0002-Trigger-installation-of-missing-components-when-inst.patch - -# Implement automatic scanning of source code for required data engines. -# https://git.reviewboard.kde.org/r/102350/ -Patch42: 0003-Implement-automatic-scanning-of-source-code-for-requ.patch - # kbuildsycoca4 VFolderMenu::loadDoc spam, always complains about # ~/.config/menus/applications-merged/xdg-desktop-menu-dummy.menu # unexpected EOF @@ -194,23 +181,6 @@ Patch64: kdelibs-4.13.2-invokeTerminal.patch ## upstream # 4.14 branch -Patch101: 0001-Revert-backport-commit-b72fc5e56579035bf987075e16324.patch -Patch102: 0002-PythonMacros-specify-destination-directory-in-byte-c.patch -Patch103: 0003-FindPyKDE4-Make-PYKDE4_INSTALL_PYTHON_FILES-use-PYTH.patch - -# revert these commits for -#https://bugs.kde.org/315578 -# for now, causes regression, -#https://bugs.kde.org/317138 -Patch090: return-not-break.-copy-paste-error.patch -Patch091: coding-style-fixes.patch -Patch092: return-application-icons-properly.patch - -# revert disabling of packagekit -Patch093: turn-the-packagekit-support-feature-off-by-default.patch - -# plasma5 places syncing problems -Patch094: 0015-Remove-bookmarks-syncing-from-KFilePlacesModel-and-u.patch ## security fix @@ -449,10 +419,6 @@ sed -i -e "s|@@VERSION_RELEASE@@|%{version}-%{release}|" kio/kio/kprotocolmanage %patch20 -p1 -b .xxcmake %patch27 -p1 -b .no_rpath -# libplasma PackageKit integration -%patch41 -p1 -b .libplasma-pk-0002 -%patch42 -p1 -b .libplasma-pk-0003 - %patch48 -p1 -b .vfolder_spam %if "%{?udisks}" == "udisks2" %patch49 -p1 -b .solid_qt_no_debug_output @@ -472,21 +438,6 @@ sed -i -e "s|@@VERSION_RELEASE@@|%{version}-%{release}|" kio/kio/kprotocolmanage %patch64 -p1 -b .invokeTerminal # upstream patches -%patch101 -p1 -b .0001 -%patch102 -p1 -b .0002 -%patch103 -p1 -b .0003 - -%if 0%{?fedora} < 22 -%patch090 -p1 -R -b .return-not-break.-copy-paste-error -%patch091 -p1 -R -b .coding-style-fixes.patch -%patch092 -p1 -R -b .return-application-icons-properly -%endif -%if 0%{?plasma_packagekit} -%patch093 -p1 -R -b .turn-the-packagekit-support-feature-off-by-default -%endif -%if 0%{?fedora} < 22 -%patch094 -p1 -R -b .0015 -%endif # security fixes @@ -795,9 +746,6 @@ update-mime-database %{?fedora:-n} %{_datadir}/mime &> /dev/null || : %{_mandir}/man1/preparetips.1* %{_kde4_bindir}/kconfig_compiler4 %{_kde4_bindir}/makekdewidgets4 -%if 0%{?plasma_packagekit} -%{_kde4_bindir}/plasma-dataengine-depextractor -%endif %{_kde4_bindir}/kde4-doxygen.sh %{_kde4_appsdir}/cmake/ %{_kde4_includedir}/* @@ -844,6 +792,9 @@ update-mime-database %{?fedora:-n} %{_datadir}/mime &> /dev/null || : %changelog +* Fri Jan 08 2016 Rex Dieter 6:4.14.16-1 +- 4.14.16 (kde-apps-15.12.1), drop pre-f22 support patches + * Mon Dec 21 2015 Rex Dieter - 6:4.14.15-3 - move dbus xml interface files to -devel diff --git a/return-application-icons-properly.patch b/return-application-icons-properly.patch deleted file mode 100644 index 961d021..0000000 --- a/return-application-icons-properly.patch +++ /dev/null @@ -1,55 +0,0 @@ -From 613c951a1157df0d8a907a155a5eaa706816d5f9 Mon Sep 17 00:00:00 2001 -From: Aaron Seigo -Date: Thu, 21 Feb 2013 17:58:11 +0100 -Subject: return application icons properly - -BUG:315578 ---- - kdeui/icons/kiconloader.cpp | 31 ++++++++++++++++++++++++++++++- - 1 file changed, 30 insertions(+), 1 deletion(-) - -diff --git a/kdeui/icons/kiconloader.cpp b/kdeui/icons/kiconloader.cpp -index f65e941..6fed667 100644 ---- a/kdeui/icons/kiconloader.cpp -+++ b/kdeui/icons/kiconloader.cpp -@@ -909,7 +909,36 @@ K3Icon KIconLoaderPrivate::findMatchingIcon(const QString& name, int size) const - const char * const ext[4] = { ".png", ".svgz", ".svg", ".xpm" }; - bool genericFallback = name.endsWith(QLatin1String("-x-generic")); - -- foreach(KIconThemeNode *themeNode, links) -+ // Do two passes through themeNodes. -+ // -+ // The first pass looks for an exact match in each themeNode one after the other. -+ // If one is found and it is an app icon then return that icon. -+ // -+ // In the next pass (assuming the first pass failed), it looks for exact matches -+ // and then generic fallbacks in each themeNode one after the other -+ // -+ // The reasoning is that application icons should always match exactly, all other -+ // icons may fallback. Since we do not know what the context is here when we start -+ // looking for it, we can only go by the path found. -+ foreach (KIconThemeNode *themeNode, links) { -+ for (int i = 0 ; i < 4 ; i++) { -+ icon = themeNode->theme->iconPath(name + ext[i], size, KIconLoader::MatchExact); -+ if (icon.isValid()) { -+ break; -+ } -+ -+ icon = themeNode->theme->iconPath(name + ext[i], size, KIconLoader::MatchBest); -+ if (icon.isValid()) { -+ break; -+ } -+ } -+ -+ if (icon.isValid() && icon.path.contains("/apps/")) { -+ return icon; -+ } -+ } -+ -+ foreach (KIconThemeNode *themeNode, links) - { - QString currentName = name; - --- -1.8.1.4 - diff --git a/return-not-break.-copy-paste-error.patch b/return-not-break.-copy-paste-error.patch deleted file mode 100644 index b62818e..0000000 --- a/return-not-break.-copy-paste-error.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 0edfd42151ad57322a10a24ab4971b638e220e6e Mon Sep 17 00:00:00 2001 -From: Aaron Seigo -Date: Thu, 21 Feb 2013 18:14:54 +0100 -Subject: [PATCH 049/111] return, not break. copy/paste error - ---- - kdeui/icons/kiconloader.cpp | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/kdeui/icons/kiconloader.cpp b/kdeui/icons/kiconloader.cpp -index dba474d..ce6aeea 100644 ---- a/kdeui/icons/kiconloader.cpp -+++ b/kdeui/icons/kiconloader.cpp -@@ -947,12 +947,12 @@ K3Icon KIconLoaderPrivate::findMatchingIcon(const QString& name, int size) const - for (int i = 0 ; i < 4 ; i++) { - icon = themeNode->theme->iconPath(currentName + ext[i], size, KIconLoader::MatchExact); - if (icon.isValid()) { -- break; -+ return icon; - } - - icon = themeNode->theme->iconPath(currentName + ext[i], size, KIconLoader::MatchBest); - if (icon.isValid()) { -- break; -+ return icon; - } - } - //kDebug(264) << "Looking up" << currentName; --- -1.8.1.4 - diff --git a/sources b/sources index c291b9b..4f35fb7 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -9baf72bc13c7a97eb6a0c153c916a3fb kdelibs-4.14.15.tar.xz +0b5d055290b5d3506f9ae2ef1ac4bef3 kdelibs-4.14.16.tar.xz diff --git a/turn-the-packagekit-support-feature-off-by-default.patch b/turn-the-packagekit-support-feature-off-by-default.patch deleted file mode 100644 index 57c1856..0000000 --- a/turn-the-packagekit-support-feature-off-by-default.patch +++ /dev/null @@ -1,35 +0,0 @@ -From e87117d7074b112f46a7c9ebc66422c581c64fc1 Mon Sep 17 00:00:00 2001 -From: Aaron Seigo -Date: Wed, 5 Jun 2013 15:26:47 +0200 -Subject: [PATCH] turn the packagekit support feature off by default - -it only works on fedora, there is no way to tell the dialog to not show -again. these are fixable, but they aren't fixed yet and may not be for -a while and i'd rather not annoy people for the lifetime of 4.11 ---- - plasma/CMakeLists.txt | 5 +---- - 1 file changed, 1 insertion(+), 4 deletions(-) - -diff --git a/plasma/CMakeLists.txt b/plasma/CMakeLists.txt -index 674550d..eeda974 100644 ---- a/plasma/CMakeLists.txt -+++ b/plasma/CMakeLists.txt -@@ -6,14 +6,11 @@ if(KDE_PLATFORM_FEATURE_BINARY_COMPATIBLE_FEATURE_REDUCTION) - set(PLASMA_NO_KNEWSTUFF TRUE) - set(PLASMA_NO_SOLID TRUE) - set(PLASMA_NO_KIO TRUE) -- set(PLASMA_NO_PACKAGEKIT TRUE) - set(PLASMA_NO_KUTILS TRUE) - set(PLASMA_NO_GLOBAL_SHORTCUTS TRUE) - endif(KDE_PLATFORM_FEATURE_BINARY_COMPATIBLE_FEATURE_REDUCTION) - --if(NOT Q_WS_X11) -- set(PLASMA_NO_PACKAGEKIT TRUE) --endif(NOT Q_WS_X11) -+set(PLASMA_NO_PACKAGEKIT TRUE) - - include_directories(${CMAKE_CURRENT_SOURCE_DIR} - ${KDE4_KDECORE_INCLUDES} --- -1.8.3.1 -