[arch-commits] Commit in kdelibs/trunk (3 files)

Andrea Scarpino andrea at archlinux.org
Thu Mar 15 09:55:48 EDT 2012


    Date: Thursday, March 15, 2012 @ 09:55:48
  Author: andrea
Revision: 153517

Fix a kmail bug with nepomuk (FS#28907); Set PYTHONDONTWRITEBYTECODE to build PyKDE4 with Python3 support (KDEBUG#276151)

Added:
  kdelibs/trunk/fix-kmail-crash.patch
  kdelibs/trunk/use-pythondontwritebytecode.patch
Modified:
  kdelibs/trunk/PKGBUILD

-----------------------------------+
 PKGBUILD                          |   16 +++++--
 fix-kmail-crash.patch             |   71 +++++++++++++++++++++++++++++++
 use-pythondontwritebytecode.patch |   80 ++++++++++++++++++++++++++++++++++++
 3 files changed, 164 insertions(+), 3 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2012-03-15 13:53:43 UTC (rev 153516)
+++ PKGBUILD	2012-03-15 13:55:48 UTC (rev 153517)
@@ -4,7 +4,7 @@
 
 pkgname=kdelibs
 pkgver=4.8.1
-pkgrel=1
+pkgrel=2
 pkgdesc="KDE Core Libraries"
 arch=('i686' 'x86_64')
 url='http://www.kde.org'
@@ -17,10 +17,14 @@
 replaces=('kdelibs-experimental')
 install=${pkgname}.install
 source=("http://download.kde.org/stable/${pkgver}/src/${pkgname}-${pkgver}.tar.xz"
-        'kde-applications-menu.patch' 'archlinux-menu.patch')
+        'kde-applications-menu.patch' 'archlinux-menu.patch'
+        'fix-kmail-crash.patch'
+        'use-pythondontwritebytecode.patch')
 sha1sums=('da4e13f63ac340619351e9a2f4211cce8ec4fdf8'
           '86ee8c8660f19de8141ac99cd6943964d97a1ed7'
-          '63a850ab4196b9d06934f2b4a13acd9f7739bc67')
+          '63a850ab4196b9d06934f2b4a13acd9f7739bc67'
+          '081b0663480568359120b573d26abb91e1a348c0'
+          'a1e35760d5b4e29471ad357c963a343c67200f32')
 
 build() {
        cd "${srcdir}"/${pkgname}-${pkgver}
@@ -30,6 +34,12 @@
        # add Archlinux menu entry
        patch -p1 -i "${srcdir}"/archlinux-menu.patch
 
+       # Upstream (FS#28907)
+       patch -p1 -i "${srcdir}"/fix-kmail-crash.patch
+
+       # Set PYTHONDONTWRITEBYTECODE (KDEBUG#276151)
+       patch -p0 -i "${srcdir}"/use-pythondontwritebytecode.patch
+
        cd "${srcdir}"
        mkdir build
        cd build

Added: fix-kmail-crash.patch
===================================================================
--- fix-kmail-crash.patch	                        (rev 0)
+++ fix-kmail-crash.patch	2012-03-15 13:55:48 UTC (rev 153517)
@@ -0,0 +1,71 @@
+commit 979b0436510e7807c054e79c40c3753834ac2863
+Author: Sebastian Trueg <trueg at kde.org>
+Date:   Thu Mar 15 09:14:35 2012 +0100
+
+    Thread-safe ResourceWatcher handling.
+    
+    We simply perform all RW operations in the manager thread.
+    
+    BUG: 295474
+    FIXED-IN: 4.8.2
+
+diff --git a/nepomuk/core/resourcedata.cpp b/nepomuk/core/resourcedata.cpp
+index abe55ea..9d45228 100644
+--- a/nepomuk/core/resourcedata.cpp
++++ b/nepomuk/core/resourcedata.cpp
+@@ -175,7 +175,8 @@ void Nepomuk::ResourceData::resetAll( bool isDelete )
+     if( !m_uri.isEmpty() ) {
+         m_rm->m_initializedData.remove( m_uri );
+         if( m_rm->m_watcher && m_addedToWatcher ) {
+-            m_rm->m_watcher->removeResource(Resource::fromResourceUri(m_uri));
++            // See load() for an explanation of the QMetaObject call
++            QMetaObject::invokeMethod(m_rm->m_watcher, "removeResource", Qt::AutoConnection, Q_ARG(Nepomuk::Resource, Resource::fromResourceUri(m_uri)));
+             m_addedToWatcher = false;
+         }
+     }
+@@ -393,16 +394,23 @@ bool Nepomuk::ResourceData::load()
+         m_cache.clear();
+ 
+         if(!m_rm->m_watcher) {
++            //
++            // The ResourceWatcher is not thread-safe. Thus, we need to ensure the safety ourselves.
++            // We do that by simply handling all RW related operations in the manager thread.
++            // This also means to invoke methods on the watcher through QMetaObject to make sure they
++            // get queued in case of calls between different threads.
++            //
+             m_rm->m_watcher = new ResourceWatcher(m_rm->m_manager);
++            m_rm->m_watcher->moveToThread(m_rm->m_manager->thread());
+             QObject::connect( m_rm->m_watcher, SIGNAL(propertyAdded(Nepomuk::Resource, Nepomuk::Types::Property, QVariant)),
+                               m_rm->m_manager, SLOT(slotPropertyAdded(Nepomuk::Resource, Nepomuk::Types::Property, QVariant)) );
+             QObject::connect( m_rm->m_watcher, SIGNAL(propertyRemoved(Nepomuk::Resource, Nepomuk::Types::Property, QVariant)),
+                               m_rm->m_manager, SLOT(slotPropertyRemoved(Nepomuk::Resource, Nepomuk::Types::Property, QVariant)) );
+             m_rm->m_watcher->addResource( Nepomuk::Resource::fromResourceUri(m_uri) );
+-            m_rm->m_watcher->start();
++            QMetaObject::invokeMethod(m_rm->m_watcher, "start", Qt::AutoConnection);
+         }
+         else {
+-            m_rm->m_watcher->addResource( Nepomuk::Resource::fromResourceUri(m_uri) );
++            QMetaObject::invokeMethod(m_rm->m_watcher, "addResource", Qt::AutoConnection, Q_ARG(Nepomuk::Resource, Nepomuk::Resource::fromResourceUri(m_uri)) );
+         }
+         m_addedToWatcher = true;
+ 
+diff --git a/nepomuk/core/resourcewatcher.h b/nepomuk/core/resourcewatcher.h
+index 06b9622..92b12f5 100644
+--- a/nepomuk/core/resourcewatcher.h
++++ b/nepomuk/core/resourcewatcher.h
+@@ -93,6 +93,7 @@ namespace Nepomuk {
+          */
+         virtual ~ResourceWatcher();
+ 
++    public Q_SLOTS:
+         /**
+          * \brief Add a type to be watched.
+          *
+@@ -204,7 +205,6 @@ namespace Nepomuk {
+          */
+         QList<Types::Property> properties() const;
+ 
+-    public Q_SLOTS:
+         /**
+          * \brief Start the signalling of changes.
+          *

Added: use-pythondontwritebytecode.patch
===================================================================
--- use-pythondontwritebytecode.patch	                        (rev 0)
+++ use-pythondontwritebytecode.patch	2012-03-15 13:55:48 UTC (rev 153517)
@@ -0,0 +1,80 @@
+--- cmake/modules/PythonMacros.cmake
++++ cmake/modules/PythonMacros.cmake
+@@ -23,40 +23,42 @@
+   # Install the source file.
+   INSTALL(FILES ${SOURCE_FILE} DESTINATION ${DESINATION_DIR})
+ 
+-  # Byte compile and install the .pyc file.        
+-  GET_FILENAME_COMPONENT(_absfilename ${SOURCE_FILE} ABSOLUTE)
+-  GET_FILENAME_COMPONENT(_filename ${SOURCE_FILE} NAME)
+-  GET_FILENAME_COMPONENT(_filenamebase ${SOURCE_FILE} NAME_WE)
+-  GET_FILENAME_COMPONENT(_basepath ${SOURCE_FILE} PATH)
+-
+-  if(WIN32)
+-    string(REGEX REPLACE ".:/" "/" _basepath "${_basepath}")
+-  endif(WIN32)
+-
+-  SET(_bin_py ${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/${_filename})
+-  SET(_bin_pyc ${CMAKE_CURRENT_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 compile_python_files
+-      COMMAND ${CMAKE_COMMAND} -E echo ${message}
+-      COMMAND ${PYTHON_EXECUTABLE} ${_python_compile_py} ${_bin_py}
+-      DEPENDS ${_absfilename}
+-    )
+-  ELSE(_abs_bin_py STREQUAL ${_absfilename})
+-    ADD_CUSTOM_COMMAND(
+-      TARGET compile_python_files
+-      COMMAND ${CMAKE_COMMAND} -E echo ${message} 
+-      COMMAND ${CMAKE_COMMAND} -E copy ${_absfilename} ${_bin_py}
+-      COMMAND ${PYTHON_EXECUTABLE} ${_python_compile_py} ${_bin_py}
+-      DEPENDS ${_absfilename}
+-    )
+-  ENDIF(_abs_bin_py STREQUAL ${_absfilename})
++  # Byte compile and install the .pyc file.
++  IF("$ENV{PYTHONDONTWRITEBYTECODE}" STREQUAL "")
++    GET_FILENAME_COMPONENT(_absfilename ${SOURCE_FILE} ABSOLUTE)
++    GET_FILENAME_COMPONENT(_filename ${SOURCE_FILE} NAME)
++    GET_FILENAME_COMPONENT(_filenamebase ${SOURCE_FILE} NAME_WE)
++    GET_FILENAME_COMPONENT(_basepath ${SOURCE_FILE} PATH)
++
++    if(WIN32)
++      string(REGEX REPLACE ".:/" "/" _basepath "${_basepath}")
++    endif(WIN32)
++
++    SET(_bin_py ${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/${_filename})
++    SET(_bin_pyc ${CMAKE_CURRENT_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 compile_python_files
++        COMMAND ${CMAKE_COMMAND} -E echo ${message}
++        COMMAND ${PYTHON_EXECUTABLE} ${_python_compile_py} ${_bin_py}
++        DEPENDS ${_absfilename}
++      )
++    ELSE(_abs_bin_py STREQUAL ${_absfilename})
++      ADD_CUSTOM_COMMAND(
++        TARGET compile_python_files
++        COMMAND ${CMAKE_COMMAND} -E echo ${message}
++        COMMAND ${CMAKE_COMMAND} -E copy ${_absfilename} ${_bin_py}
++        COMMAND ${PYTHON_EXECUTABLE} ${_python_compile_py} ${_bin_py}
++        DEPENDS ${_absfilename}
++      )
++    ENDIF(_abs_bin_py STREQUAL ${_absfilename})
+ 
+-  INSTALL(FILES ${_bin_pyc} DESTINATION ${DESINATION_DIR})
++    INSTALL(FILES ${_bin_pyc} DESTINATION ${DESINATION_DIR})
++  ENDIF("$ENV{PYTHONDONTWRITEBYTECODE}" STREQUAL "")
+ ENDMACRO(PYTHON_INSTALL)



More information about the arch-commits mailing list