Package: pykde4
Version: 4:4.7.4-2
Severity: wishlist
Tags: patch
User: ubuntu-de...@lists.ubuntu.com
Usertags: origin-ubuntu ubuntu-patch quantal

pykde4 already supports Python 3 in the upstream code.  Making this
available would be a simple matter of packaging.

Well ... almost.  There are a couple of things that complicate it.
Firstly, there's a patch from newer upstream releases to fix building
with >= 3.2.  Secondly, a bug in kdelibs5-dev (which I've filed
separately as #672552) causes a build failure; I worked around that by
shipping a local cut-down copy of PythonMacros.cmake, which I reckoned
would be temporarily acceptable because the resulting file is so short.

I've tested this by running a Python 3 port of the Ubuntu installer's
KDE frontend with it, and everything appears to be working fine.  I
built my test packages on Ubuntu rather than Debian because I ran into
#671893 and couldn't readily fix that, but I hope it will still be OK
once that's fixed.

  * Add Python 3 support.

diff --git a/debian/control b/debian/control
index 51ac67f..d634f34 100644
--- a/debian/control
+++ b/debian/control
@@ -8,8 +8,9 @@ Build-Depends: kde-sc-dev-latest (>= 4:4.7.4),
  libphonon-dev (>= 4:4.6.0really4.4.4), libsoprano-dev (>= 2.7.0),
  libqt4-dev (>= 4:4.7.1), libqt4-opengl-dev (>= 4:4.7.1), libqtwebkit-dev,
  libboost-dev, shared-desktop-ontologies (>= 0.8),
- python, python-all-dev, python-sip-dev (>= 4.12.0),
- python-qt4 (>= 4.8.3-3~), python-qt4-dev (>= 4.8.3-3~)
+ python, python-all-dev, python3-all-dev,
+ python-sip-dev (>= 4.12.0), python3-sip-dev,
+ python-qt4 (>= 4.8.3-3~), python3-pyqt4, python-qt4-dev (>= 4.8.3-3~)
 Uploaders: Sune Vuorela <s...@debian.org>, Modestas Vainius 
<mo...@debian.org>, Michael Meskes <mes...@debian.org>
 Standards-Version: 3.9.2
 X-Python-Version: >= 2.5
@@ -89,3 +90,50 @@ Description: debugging symbols for the PyKDE bindings
  are experiencing crashes of the PyKDE application and wish to report a problem
  to the developers.
 
+Package: python3-kde4
+Architecture: any
+Depends: ${shlibs:Depends}, ${python3:Depends}, ${misc:Depends},
+ python3-pyqt4, ${sip:Depends}, python3-sip
+Provides: ${python3:Provides}
+Description: Python 3 bindings for the KDE Development Platform
+ This package contains PyKDE, the Python 3 bindings for the KDE
+ libraries, that allow you to write KDE programs using Python 3 instead of
+ C++. It contains at least the following modules under the
+ PyKDE namespace:
+ .
+  * dnssd
+  * kdecore
+  * kdeui
+  * khtml
+  * kio
+  * knewstuff
+  * kparts
+  * kterminal
+  * ktexteditor
+  * kutils
+  * nepomuk
+  * plasma
+  * solid
+ .
+ And a few KDE related technologies like:
+ .
+  * akonadi
+  * phonon
+  * soprano
+ .
+ This package provides modules for all supported Python 3 versions.
+
+Package: python3-kde4-dbg
+Section: debug
+Architecture: any
+Priority: extra
+Depends: ${misc:Depends}, kdelibs5-dbg, python3-kde4 (= ${binary:Version})
+Recommends: python3-pyqt4-dbg
+Breaks: kdebindings-dbg
+Replaces: kdebindings-dbg
+Description: debugging symbols for the PyKDE bindings
+ This package contains debugging files used to investigate problems with
+ Python 3 bindings for the KDE Development Platform. Install this package if
+ you are experiencing crashes of the PyKDE application and wish to report a
+ problem to the developers.
+
diff --git a/debian/patches/cmake_no_bytecode.diff 
b/debian/patches/cmake_no_bytecode.diff
new file mode 100644
index 0000000..ab90706
--- /dev/null
+++ b/debian/patches/cmake_no_bytecode.diff
@@ -0,0 +1,31 @@
+Index: b/cmake/modules/PythonMacros.cmake
+===================================================================
+--- /dev/null
++++ b/cmake/modules/PythonMacros.cmake
+@@ -0,0 +1,26 @@
++# Python macros
++# ~~~~~~~~~~~~~
++# Copyright (c) 2007, Simon Edwards <si...@simonzone.com>
++# Cloned-and-hacked by Colin Watson <cjwat...@ubuntu.com>, removing bytecode
++# support.
++#
++# Redistribution and use is allowed according to the terms of the BSD license.
++# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
++#
++# This file defines the following macros:
++#
++# PYTHON_INSTALL (SOURCE_FILE DESINATION_DIR)
++#     Install the SOURCE_FILE, which is a Python .py file, into the
++#     destination directory during install.
++
++GET_FILENAME_COMPONENT(PYTHON_MACROS_MODULE_PATH ${CMAKE_CURRENT_LIST_FILE}  
PATH)
++
++MACRO(PYTHON_INSTALL SOURCE_FILE DESINATION_DIR)
++
++  FIND_FILE(_python_compile_py PythonCompile.py PATHS ${CMAKE_MODULE_PATH})
++
++  ADD_CUSTOM_TARGET(compile_python_files ALL)
++
++  # Install the source file.
++  INSTALL(FILES ${SOURCE_FILE} DESTINATION ${DESINATION_DIR})
++ENDMACRO(PYTHON_INSTALL)
diff --git a/debian/patches/python32_compile_fix.diff 
b/debian/patches/python32_compile_fix.diff
new file mode 100644
index 0000000..5440477
--- /dev/null
+++ b/debian/patches/python32_compile_fix.diff
@@ -0,0 +1,21 @@
+Description: Compile fix for Python 3.2 and higher
+Author: Simon Edwards <si...@simonzone.com>
+Origin: upstream, 
https://projects.kde.org/projects/kde/kdebindings/pykde4/repository/revisions/54bd6a7628e04efe5e1de53075227713f2526acf
+Last-Update: 2012-05-08
+
+Index: b/sip/kio/kfileitem.sip
+===================================================================
+--- a/sip/kio/kfileitem.sip
++++ b/sip/kio/kfileitem.sip
+@@ -236,7 +236,11 @@
+         
+         len = sipCpp->count();
+         
++#if PY_VERSION_HEX >= 0x03020000
++        if (PySlice_GetIndicesEx(a0, len, &start, &stop, &step, &slicelength) 
< 0)
++#else
+         if (PySlice_GetIndicesEx((PySliceObject *)a0, len, &start, &stop, 
&step, &slicelength) < 0)
++#endif
+             sipIsErr = 1;
+         else
+         {
diff --git a/debian/patches/series b/debian/patches/series
index 0474e82..04bb536 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -4,3 +4,5 @@ fix_kpythonpluginfactory_build.diff
 make_pykde4_respect_sip_flags.diff
 pythonpluginfactory_use_versioned_python_lib.diff
 optional_install_sip_files.diff
+python32_compile_fix.diff
+cmake_no_bytecode.diff
diff --git a/debian/python-kde4.install b/debian/python-kde4.install
index bb19869..824bdd6 100644
--- a/debian/python-kde4.install
+++ b/debian/python-kde4.install
@@ -1,6 +1,6 @@
 usr/lib/kde4/kpythonpluginfactory.so
-usr/lib/python*/*-packages/PyKDE4/*.so
-usr/lib/python*/*-packages/PyKDE4/__init__.py
-usr/lib/python*/*-packages/PyKDE4/pykdeconfig.py
-usr/lib/python*/*-packages/PyQt4/uic/pykdeuic4.py
-usr/lib/python*/*-packages/PyQt4/uic/widget-plugins/kde4.py
+usr/lib/python2.*/*-packages/PyKDE4/*.so
+usr/lib/python2.*/*-packages/PyKDE4/__init__.py
+usr/lib/python2.*/*-packages/PyKDE4/pykdeconfig.py
+usr/lib/python2.*/*-packages/PyQt4/uic/pykdeuic4.py
+usr/lib/python2.*/*-packages/PyQt4/uic/widget-plugins/kde4.py
diff --git a/debian/python3-kde4.docs b/debian/python3-kde4.docs
new file mode 100644
index 0000000..e845566
--- /dev/null
+++ b/debian/python3-kde4.docs
@@ -0,0 +1 @@
+README
diff --git a/debian/python3-kde4.install b/debian/python3-kde4.install
new file mode 100644
index 0000000..3367644
--- /dev/null
+++ b/debian/python3-kde4.install
@@ -0,0 +1,5 @@
+usr/lib/python3/*-packages/PyKDE4/*.so
+usr/lib/python3/*-packages/PyKDE4/__init__.py
+usr/lib/python3/*-packages/PyKDE4/pykdeconfig.py
+usr/lib/python3/*-packages/PyQt4/uic/pykdeuic4.py
+usr/lib/python3/*-packages/PyQt4/uic/widget-plugins/kde4.py
diff --git a/debian/rules b/debian/rules
index 90db410..e637de3 100755
--- a/debian/rules
+++ b/debian/rules
@@ -1,6 +1,6 @@
 #! /usr/bin/make -f
 
-dh = --with=python2
+dh = --with=python2,python3
 
 include /usr/share/pkg-kde-tools/qt-kde-team/2/debian-qt-kde.mk
 
@@ -8,6 +8,7 @@ pyversions = $(shell pyversions -vr)
 pydefaultversion = $(shell pyversions -vd)
 pyshared_nondefault = $(foreach v,$(filter-out 
$(pydefaultversion),$(pyversions)),\
     usr/lib/pyshared/python$v/PyKDE4 usr/lib/python$v/dist-packages/PyKDE4)
+py3versions = $(shell py3versions -vr)
 
 define nl
 
@@ -20,16 +21,24 @@ override_dh_auto_configure:
            -DPYTHON_EXECUTABLE=/usr/bin/python$v \
            -DDEFAULT_PYTHON_VERSION=$(if $(filter 
$(pydefaultversion),$v),true,false) \
            $(nl))
+       $(foreach v,$(py3versions),$(overridden_command) 
--builddirectory=builddir-$v -- \
+           -DPYTHON_EXECUTABLE=/usr/bin/python$v \
+           -DPYTHON_LIBRARY=/usr/lib/libpython${v}mu.so \
+           -DPYTHON_SITE_PACKAGES_INSTALL_DIR=/usr/lib/python3/dist-packages \
+           -DDEFAULT_PYTHON_VERSION=false \
+           $(nl))
 
 override_dh_auto_build override_dh_auto_install override_dh_auto_test 
override_dh_auto_clean:
        $(foreach v,$(pyversions),$(overridden_command) 
--builddirectory=builddir-$v $(nl))
+       $(foreach v,$(py3versions),$(overridden_command) 
--builddirectory=builddir-$v $(nl))
 
 override_dh_python2:
        $(overridden_command)
        dh_sip -ppython-kde4
 
 override_dh_strip:
-       $(overridden_command) --dbg-package=python-kde4-dbg
+       $(overridden_command) -ppython-kde4 --dbg-package=python-kde4-dbg
+       $(overridden_command) -ppython3-kde4 --dbg-package=python3-kde4-dbg
 
 override_dh_shlibdeps:
        if [ -d debian/python-kde4 ]; then \

Thanks,

-- 
Colin Watson                                       [cjwat...@ubuntu.com]



-- 
To UNSUBSCRIBE, email to debian-qt-kde-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: 
http://lists.debian.org/20120512020258.gb6...@riva.dynamic.greenend.org.uk

Reply via email to