summaryrefslogtreecommitdiff
path: root/recipes/python/python-pyqt
diff options
context:
space:
mode:
authorDenys Dmytriyenko <denis@denix.org>2009-03-17 14:32:59 -0400
committerDenys Dmytriyenko <denis@denix.org>2009-03-17 14:32:59 -0400
commit709c4d66e0b107ca606941b988bad717c0b45d9b (patch)
tree37ee08b1eb308f3b2b6426d5793545c38396b838 /recipes/python/python-pyqt
parentfa6cd5a3b993f16c27de4ff82b42684516d433ba (diff)
rename packages/ to recipes/ per earlier agreement
See links below for more details: http://thread.gmane.org/gmane.comp.handhelds.openembedded/21326 http://thread.gmane.org/gmane.comp.handhelds.openembedded/21816 Signed-off-by: Denys Dmytriyenko <denis@denix.org> Acked-by: Mike Westerhof <mwester@dls.net> Acked-by: Philip Balister <philip@balister.org> Acked-by: Khem Raj <raj.khem@gmail.com> Acked-by: Marcin Juszkiewicz <hrw@openembedded.org> Acked-by: Koen Kooi <koen@openembedded.org> Acked-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
Diffstat (limited to 'recipes/python/python-pyqt')
-rw-r--r--recipes/python/python-pyqt/01_configure.dpatch288
-rw-r--r--recipes/python/python-pyqt/02_htmllinks.dpatch18
-rw-r--r--recipes/python/python-pyqt/03_qreal.dpatch18
-rw-r--r--recipes/python/python-pyqt/04_qreal_api_fixes-for-4.4.3.dpatch260
-rw-r--r--recipes/python/python-pyqt/04_qreal_api_fixes.dpatch259
-rw-r--r--recipes/python/python-pyqt/assistantclient-fix.patch13
-rw-r--r--recipes/python/python-pyqt/cross-compile.patch33
7 files changed, 889 insertions, 0 deletions
diff --git a/recipes/python/python-pyqt/01_configure.dpatch b/recipes/python/python-pyqt/01_configure.dpatch
new file mode 100644
index 0000000000..d7c45b9a44
--- /dev/null
+++ b/recipes/python/python-pyqt/01_configure.dpatch
@@ -0,0 +1,288 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 01_configure.dpatch by Torsten Marek <shlomme@debian.org>
+##
+## DP: Make PyQt4 objectdir-buildable
+
+@DPATCH@
+diff -urNad python-qt4-4.2+snapshot20070727~/configure.py python-qt4-4.2+snapshot20070727/configure.py
+--- python-qt4-4.2+snapshot20070727~/configure.py 2007-07-29 23:58:48.000000000 +0200
++++ python-qt4-4.2+snapshot20070727/configure.py 2007-07-30 00:00:17.000000000 +0200
+@@ -20,6 +20,8 @@
+ # Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
++# Modified for Debian by Torsten Marek <shlomme@gmx.net>
++
+ import sys
+ import os
+ import string
+@@ -29,6 +31,23 @@
+
+ import sipconfig
+
++topsrcdir = os.path.dirname(os.path.abspath(__file__))
++has_objdir = topsrcdir != os.path.abspath(os.path.curdir)
++if not has_objdir:
++ topsrcdir = None
++
++
++def makeDir(dirname):
++ try:
++ os.mkdir(dirname)
++ except OSError, e:
++ if e.errno != 17:
++ raise
++
++def srcPath(filename):
++ if topsrcdir is not None:
++ return os.path.join(topsrcdir, filename)
++ return filename
+
+ # Initialise the globals.
+ pyqt_version = 0x040200
+@@ -134,6 +153,8 @@
+ p.add_option("-g", "--consolidate", action="store_true", default=False,
+ dest="bigqt", help="create a single module which links against "
+ "all the Qt libraries")
++ p.add_option("--disable-designer-plugin", action="store_true", default=False,
++ help="do not build the Qt Designer plugin")
+
+ # These are internal options used to build the mega Windows GPL package.
+ p.add_option("--mwg-openssl", action="callback", default=None,
+@@ -282,6 +303,7 @@
+ check_module("QAxContainer", "qaxobject.h", "new QAxObject()",
+ extra_libs=["QAxContainer"])
+
++ makeDir("dbus")
+ if os.path.isdir("dbus"):
+ check_dbus()
+
+@@ -354,7 +376,7 @@
+ generate_code("QtAssistant")
+
+ if "QtDesigner" in pyqt_modules:
+- qpy_dir = os.path.abspath(os.path.join("qpy", "QtDesigner"))
++ qpy_dir = os.path.abspath(srcPath(os.path.join("qpy", "QtDesigner")))
+
+ if sys.platform == "win32":
+ if opts.debug:
+@@ -380,10 +402,10 @@
+
+ # Generate the composite module.
+ qtmod_sipdir = os.path.join("sip", "Qt")
+- mk_clean_dir(qtmod_sipdir)
++ mk_clean_dir(srcPath(qtmod_sipdir))
+
+ qtmod_sipfile = os.path.join(qtmod_sipdir, "Qtmod.sip")
+- f = open(qtmod_sipfile, "w")
++ f = open(srcPath(qtmod_sipfile), "w")
+
+ f.write("""%CompositeModule PyQt4.Qt
+
+@@ -555,7 +577,7 @@
+ return libs, libdirs
+
+ def module_installs(self):
+- return ["__init__.py", "pyqtconfig.py"]
++ return [srcPath("__init__.py"), "pyqtconfig.py"]
+
+ def qpylibs(self):
+ # See which QPy libraries to build.
+@@ -571,8 +593,8 @@
+ for qpy, pro in qpylibs.iteritems():
+ sipconfig.inform("Creating QPy library for %s Makefile..." % qpy)
+
+- os.chdir(os.path.join("qpy", qpy))
+-
++ os.chdir(srcPath(os.path.join("qpy", qpy)))
++
+ if sipcfg.universal:
+ upro = "u_" + pro
+
+@@ -596,6 +618,8 @@
+
+ sipconfig.inform("Creating QPy libraries Makefile...")
+
++ makeDir("qpy")
++ os.system("ln -s %s qpy/QtDesigner" % (srcPath("qpy/QtDesigner"),))
+ sipconfig.ParentMakefile(
+ configuration=sipcfg,
+ dir="qpy",
+@@ -617,6 +641,7 @@
+ install_dir=pydbusmoddir,
+ qt=["QtCore"],
+ debug=opts.debug,
++ topsrcdir=topsrcdir,
+ universal=sipcfg.universal
+ )
+
+@@ -625,18 +650,19 @@
+ makefile.generate()
+ tool.append("dbus")
+
+- # Only include ElementTree for older versions of Python.
+- if sipcfg.py_version < 0x020500:
+- sipconfig.inform("Creating elementtree Makefile...")
++ # Don't include elementtree on Debian
++## # Only include ElementTree for older versions of Python.
++## if sipcfg.py_version < 0x020500:
++## sipconfig.inform("Creating elementtree Makefile...")
+
+- makefile = sipconfig.PythonModuleMakefile(
+- configuration=sipcfg,
+- dstdir=os.path.join(pyqt_modroot, "elementtree"),
+- dir="elementtree"
+- )
++## makefile = sipconfig.PythonModuleMakefile(
++## configuration=sipcfg,
++## dstdir=os.path.join(pyqt_modroot, "elementtree"),
++## dir="elementtree"
++## )
+
+- makefile.generate()
+- tool.append("elementtree")
++## makefile.generate()
++## tool.append("elementtree")
+
+ # Create the pyuic4 wrapper. Use the GUI version on MacOS (so that
+ # previews work properly and normal console use will work anyway), but
+@@ -644,16 +670,18 @@
+ sipconfig.inform("Creating pyuic4 wrapper...")
+
+ uicdir=os.path.join(pyqt_modroot, "uic")
+- wrapper = sipconfig.create_wrapper(os.path.join(uicdir, "pyuic.py"), os.path.join("pyuic", "pyuic4"), (sys.platform == "darwin"))
++ makeDir("pyuic")
++ # Wrapper script is not needed on Debian
++ #wrapper = sipconfig.create_wrapper(os.path.join(uicdir, "pyuic.py"), os.path.join("pyuic", "pyuic4"), (sys.platform == "darwin"))
+
+ sipconfig.inform("Creating pyuic4 Makefile...")
+
+ makefile = sipconfig.PythonModuleMakefile(
+ configuration=sipcfg,
+ dstdir=uicdir,
+- srcdir="uic",
++ srcdir=srcPath(os.path.join("pyuic", "uic")),
+ dir="pyuic",
+- installs=[[os.path.basename(wrapper), opts.pyqtbindir]]
++ #installs=[[os.path.basename(wrapper), opts.pyqtbindir]]
+ )
+
+ makefile.generate()
+@@ -661,7 +689,7 @@
+
+ if "QtXml" in pyqt_modules:
+ sipconfig.inform("Creating pylupdate4 Makefile...")
+-
++ makeDir("pylupdate")
+ makefile = sipconfig.ProgramMakefile(
+ configuration=sipcfg,
+ build_file="pylupdate.sbf",
+@@ -671,14 +699,15 @@
+ qt=["QtCore", "QtGui", "QtXml"],
+ debug=opts.debug,
+ warnings=1,
++ topsrcdir=topsrcdir,
+ universal=sipcfg.universal
+ )
+-
++ makefile.extra_include_dirs.append(srcPath("pylupdate"))
+ makefile.generate()
+ tool.append("pylupdate")
+
+ sipconfig.inform("Creating pyrcc4 Makefile...")
+-
++ makeDir("pyrcc")
+ makefile = sipconfig.ProgramMakefile(
+ configuration=sipcfg,
+ build_file="pyrcc.sbf",
+@@ -688,6 +717,7 @@
+ qt=["QtCore", "QtXml"],
+ debug=opts.debug,
+ warnings=1,
++ topsrcdir=topsrcdir,
+ universal=sipcfg.universal
+ )
+
+@@ -697,7 +727,7 @@
+ sipconfig.inform("pylupdate4 and pyrcc4 will not be built because the Qt XML module is missing.")
+
+ if "QtDesigner" in pyqt_modules:
+- enabled = True
++ enabled = not opts.disable_designer_plugin
+
+ py_major = sipcfg.py_version >> 16
+ py_minor = (sipcfg.py_version >> 8) & 0x0ff
+@@ -731,7 +761,7 @@
+ # Run qmake to generate the Makefile.
+ qmake_args = fix_qmake_args()
+ cwd = os.getcwd()
+- os.chdir("designer")
++ os.chdir(srcPath("designer"))
+
+ # Create the qmake project file.
+ fin = open("python.pro-in")
+@@ -755,7 +785,7 @@
+ run_command("%s %s" % (opts.qmake, qmake_args))
+ os.chdir(cwd)
+
+- tool.append("designer")
++ tool.append(srcPath("designer"))
+
+ return tool
+
+@@ -899,7 +929,6 @@
+ add_makefile_extras(makefile, extra_include_dirs, extra_lib_dirs, extra_libs)
+
+ exe, build = makefile.build_command(name)
+-
+ # Make sure the executable file doesn't exist.
+ remove_file(exe)
+ run_command(build)
+@@ -1025,7 +1054,7 @@
+ return
+
+ # Check the module's main .sip file exists.
+- if os.access(os.path.join("sip", mname, mname + "mod.sip"), os.F_OK):
++ if os.access(srcPath(os.path.join("sip", mname, mname + "mod.sip")), os.F_OK):
+ sipconfig.inform("Checking to see if the %s module should be built..." % mname)
+
+ if check_api(incfile, test, mname, extra_include_dirs=extra_include_dirs, extra_lib_dirs=extra_lib_dirs, extra_libs=extra_libs):
+@@ -1226,10 +1255,14 @@
+ argv.append(buildfile)
+
+ argv.append("-I")
+- argv.append("sip")
++ argv.append(srcPath("sip"))
+
+ # SIP assumes POSIX style path separators.
+- argv.append(string.join(["sip", mname, mname + "mod.sip"], "/"))
++ if topsrcdir is not None:
++ argv.append(string.join([topsrcdir, "sip", mname, mname + "mod.sip"], "/"))
++ else:
++ argv.append(string.join(["sip", mname, mname + "mod.sip"], "/"))
++
+
+ cmd = string.join(argv)
+
+@@ -1251,7 +1284,11 @@
+ sipfiles = []
+
+ for s in glob.glob("sip/" + mname + "/*.sip"):
+- sipfiles.append(os.path.join("..", "sip", mname, os.path.basename(s)))
++ if has_objdir:
++ topdir = topsrcdir
++ else:
++ topdir = ".."
++ sipfiles.append(os.path.join(topdir, "sip", mname, os.path.basename(s)))
+
+ installs.append([sipfiles, os.path.join(opts.pyqtsipdir, mname)])
+
+@@ -1835,7 +1872,7 @@
+ ).generate()
+
+ # Install the configuration module.
+- create_config("pyqtconfig.py", "pyqtconfig.py.in", macros)
++ create_config("pyqtconfig.py", srcPath("pyqtconfig.py.in"), macros)
+
+
+ ###############################################################################
diff --git a/recipes/python/python-pyqt/02_htmllinks.dpatch b/recipes/python/python-pyqt/02_htmllinks.dpatch
new file mode 100644
index 0000000000..f65509ae2c
--- /dev/null
+++ b/recipes/python/python-pyqt/02_htmllinks.dpatch
@@ -0,0 +1,18 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 02_htmllinks.dpatch by Torsten Marek <shlomme@debian.org>
+
+## DP: Fix the links in the documentation HTML files.
+
+@DPATCH@
+diff -urNad python-qt4-4.1~/doc/pyqt4ref.html python-qt4-4.1/doc/pyqt4ref.html
+--- python-qt4-4.1~/doc/pyqt4ref.html 2006-11-05 00:51:19.000000000 +0100
++++ python-qt4-4.1/doc/pyqt4ref.html 2006-11-21 23:35:52.000000000 +0100
+@@ -85,7 +85,7 @@
+ <p>This is the reference guide for PyQt 4.1. PyQt v4 is a set of
+ <a class="reference" href="http://www.python.org">Python</a> bindings for v4 of the Qt application
+ framework from <a class="reference" href="http://www.trolltech.com">Trolltech</a>.</p>
+-<p>There is a separate <a class="reference" href="html/classes.html">PyQt API Reference</a>.</p>
++<p>There is a separate <a class="reference" href="classes.html">PyQt API Reference</a>.</p>
+ <p>Qt is a set of C++ libraries and development tools that includes platform
+ independent abstractions for graphical user interfaces, networking, threads,
+ Unicode, regular expressions, SQL databases, SVG, OpenGL, XML, and user and
diff --git a/recipes/python/python-pyqt/03_qreal.dpatch b/recipes/python/python-pyqt/03_qreal.dpatch
new file mode 100644
index 0000000000..8f9568656c
--- /dev/null
+++ b/recipes/python/python-pyqt/03_qreal.dpatch
@@ -0,0 +1,18 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 03_qreal.dpatch by Torsten Marek <shlomme@debian.org>
+##
+## DP: On ARM, ARMEL, Mips and Mipsel, qreal is a float, not a double.
+
+@DPATCH@
+diff -urNad python-qt4-4.3~/sip/QtCore/qglobal.sip python-qt4-4.3/sip/QtCore/qglobal.sip
+--- python-qt4-4.3~/sip/QtCore/qglobal.sip 2007-08-07 21:52:15.000000000 +0200
++++ python-qt4-4.3/sip/QtCore/qglobal.sip 2007-08-07 22:10:14.000000000 +0200
+@@ -46,7 +46,7 @@
+ typedef unsigned long long quint64;
+ typedef qint64 qlonglong;
+ typedef quint64 qulonglong;
+-typedef double qreal;
++typedef float qreal;
+ typedef unsigned char uchar;
+ typedef unsigned short ushort;
+ typedef unsigned int uint;
diff --git a/recipes/python/python-pyqt/04_qreal_api_fixes-for-4.4.3.dpatch b/recipes/python/python-pyqt/04_qreal_api_fixes-for-4.4.3.dpatch
new file mode 100644
index 0000000000..0701238afb
--- /dev/null
+++ b/recipes/python/python-pyqt/04_qreal_api_fixes-for-4.4.3.dpatch
@@ -0,0 +1,260 @@
+diff --git a/sip/QtCore/qlist.sip b/sip/QtCore/qlist.sip
+index d387763..bbb2e08 100644
+--- a/sip/QtCore/qlist.sip
++++ b/sip/QtCore/qlist.sip
+@@ -343,8 +343,8 @@ template<TYPE1, TYPE2>
+ %End
+ };
+ %If (Qt_4_3_0 -)
+-// QList<QPair<double, double> > is implemented as a Python list of 2-element tuples.
+-%MappedType QList<QPair<double, double> >
++// QList<QPair<float, float> > is implemented as a Python list of 2-element tuples.
++%MappedType QList<QPair<float, float> >
+ {
+ %TypeHeaderCode
+ #include <qlist.h>
+@@ -361,7 +361,7 @@ template<TYPE1, TYPE2>
+ // Set the list elements.
+ for (int i = 0; i < sipCpp->size(); ++i)
+ {
+- const QPair<double, double> &p = sipCpp->at(i);
++ const QPair<float, float> &p = sipCpp->at(i);
+ PyObject *pobj;
+
+ if ((pobj = Py_BuildValue((char *)"dd", p.first, p.second)) == NULL)
+@@ -393,16 +393,16 @@ template<TYPE1, TYPE2>
+ return 1;
+ }
+
+- QList<QPair<double, double> > *ql = new QList<QPair<double, double> >;
++ QList<QPair<float, float> > *ql = new QList<QPair<float, float> >;
+
+ for (SIP_SSIZE_T i = 0; i < len; ++i)
+ {
+ PyObject *tup = PySequence_ITEM(sipPy, i);
+
+- double first = PyFloat_AsDouble(PySequence_ITEM(tup, 0));
+- double second = PyFloat_AsDouble(PySequence_ITEM(tup, 1));
++ float first = PyFloat_AsDouble(PySequence_ITEM(tup, 0));
++ float second = PyFloat_AsDouble(PySequence_ITEM(tup, 1));
+
+- ql->append(QPair<double, double>(first, second));
++ ql->append(QPair<float, float>(first, second));
+ }
+
+ *sipCppPtr = ql;
+@@ -412,9 +412,9 @@ template<TYPE1, TYPE2>
+ };
+ %End
+ %If (Qt_4_3_0 -)
+-// QList<QPair<double, TYPE> > is implemented as a Python list of 2-element tuples.
+-template<double, TYPE>
+-%MappedType QList<QPair<double, TYPE> >
++// QList<QPair<float, TYPE> > is implemented as a Python list of 2-element tuples.
++template<float, TYPE>
++%MappedType QList<QPair<float, TYPE> >
+ {
+ %TypeHeaderCode
+ #include <qlist.h>
+@@ -431,7 +431,7 @@ template<double, TYPE>
+ // Set the list elements.
+ for (int i = 0; i < sipCpp->size(); ++i)
+ {
+- const QPair<double, TYPE> &p = sipCpp->at(i);
++ const QPair<float, TYPE> &p = sipCpp->at(i);
+ TYPE *t = new TYPE(p.second);
+ PyObject *pobj;
+
+@@ -472,12 +472,12 @@ template<double, TYPE>
+ return 1;
+ }
+
+- QList<QPair<double, TYPE> > *ql = new QList<QPair<double, TYPE> >;
++ QList<QPair<float, TYPE> > *ql = new QList<QPair<float, TYPE> >;
+
+ for (SIP_SSIZE_T i = 0; i < len; ++i)
+ {
+ PyObject *tup = PySequence_ITEM(sipPy, i);
+- double d;
++ float d;
+ int state;
+
+ d = PyFloat_AsDouble(PySequence_ITEM(tup, 0));
+@@ -491,7 +491,7 @@ template<double, TYPE>
+ return 0;
+ }
+
+- ql->append(QPair<double, TYPE>(d, *t));
++ ql->append(QPair<float, TYPE>(d, *t));
+
+ sipReleaseInstance(t, sipClass_TYPE, state);
+ }
+@@ -551,8 +551,8 @@ template<double, TYPE>
+ return sipGetState(sipTransferObj);
+ %End
+ };
+-// QList<double> is implemented as a Python list of floats.
+-%MappedType QList<double>
++// QList<float> is implemented as a Python list of floats.
++%MappedType QList<float>
+ {
+ %TypeHeaderCode
+ #include <qlist.h>
+@@ -590,7 +590,7 @@ template<double, TYPE>
+ if (sipIsErr == NULL)
+ return (len >= 0);
+
+- QList<double> *ql = new QList<double>;
++ QList<float> *ql = new QList<float>;
+
+ for (SIP_SSIZE_T i = 0; i < len; ++i)
+ ql->append(PyFloat_AsDouble(PySequence_ITEM(sipPy, i)));
+diff --git a/sip/QtCore/qvector.sip b/sip/QtCore/qvector.sip
+index d652bfe..dea5601 100644
+--- a/sip/QtCore/qvector.sip
++++ b/sip/QtCore/qvector.sip
+@@ -156,8 +156,8 @@ template<TYPE>
+ return sipGetState(sipTransferObj);
+ %End
+ };
+-// QVector<double> is implemented as a Python list of floats.
+-%MappedType QVector<double>
++// QVector<float> is implemented as a Python list of floats.
++%MappedType QVector<float>
+ {
+ %TypeHeaderCode
+ #include <qvector.h>
+@@ -193,7 +193,7 @@ template<TYPE>
+ if (sipIsErr == NULL)
+ return PyList_Check(sipPy);
+
+- QVector<double> *ql = new QVector<double>;
++ QVector<float> *ql = new QVector<float>;
+
+ for (SIP_SSIZE_T i = 0; i < PyList_GET_SIZE(sipPy); ++i)
+ ql->append(PyFloat_AsDouble(PyList_GET_ITEM(sipPy, i)));
+@@ -203,9 +203,9 @@ template<TYPE>
+ return sipGetState(sipTransferObj);
+ %End
+ };
+-// QVector<QPair<double, TYPE> > is implemented as a Python list of 2-element tuples.
++// QVector<QPair<float, TYPE> > is implemented as a Python list of 2-element tuples.
+ template<TYPE>
+-%MappedType QVector<QPair<double, TYPE> >
++%MappedType QVector<QPair<float, TYPE> >
+ {
+ %TypeHeaderCode
+ #include <qvector.h>
+@@ -222,7 +222,7 @@ template<TYPE>
+ // Set the list elements.
+ for (int i = 0; i < sipCpp->size(); ++i)
+ {
+- const QPair<double, TYPE> &p = sipCpp->at(i);
++ const QPair<float, TYPE> &p = sipCpp->at(i);
+ TYPE *pt = new TYPE(p.second);
+ PyObject *pobj;
+
+@@ -261,14 +261,14 @@ template<TYPE>
+ return 1;
+ }
+
+- QVector<QPair<double, TYPE> > *qv = new QVector<QPair<double, TYPE> >;
++ QVector<QPair<float, TYPE> > *qv = new QVector<QPair<float, TYPE> >;
+
+ for (SIP_SSIZE_T i = 0; i < PyList_GET_SIZE(sipPy); ++i)
+ {
+ PyObject *tup = PyList_GET_ITEM(sipPy, i);
+ int state;
+ TYPE *s;
+- QPair<double, TYPE> p;
++ QPair<float, TYPE> p;
+
+ p.first = PyFloat_AsDouble(PyTuple_GET_ITEM(tup, 0));
+
+diff --git a/sip/QtGui/qbrush.sip b/sip/QtGui/qbrush.sip
+index 7813bec..3993ef1 100644
+--- a/sip/QtGui/qbrush.sip
++++ b/sip/QtGui/qbrush.sip
+@@ -151,7 +151,7 @@ public:
+
+ QDataStream &operator>>(QDataStream &, QBrush & /Constrained/);
+ QDataStream &operator<<(QDataStream &, const QBrush & /Constrained/);
+-typedef QVector<QPair<double, QColor> > QGradientStops;
++typedef QVector<QPair<float, QColor> > QGradientStops;
+
+ class QGradient
+ {
+diff --git a/sip/QtGui/qgraphicsitemanimation.sip b/sip/QtGui/qgraphicsitemanimation.sip
+index f60107f..dbb7900 100644
+--- a/sip/QtGui/qgraphicsitemanimation.sip
++++ b/sip/QtGui/qgraphicsitemanimation.sip
+@@ -77,19 +77,19 @@ signals:
+
+ public:
+ %If (Qt_4_3_0 -)
+- QList<QPair<double, QPointF> > posList() const;
++ QList<QPair<float, QPointF> > posList() const;
+ %End
+ %If (Qt_4_3_0 -)
+- QList<QPair<double, double> > rotationList() const;
++ QList<QPair<float, float> > rotationList() const;
+ %End
+ %If (Qt_4_3_0 -)
+- QList<QPair<double, QPointF> > translationList() const;
++ QList<QPair<float, QPointF> > translationList() const;
+ %End
+ %If (Qt_4_3_0 -)
+- QList<QPair<double, QPointF> > scaleList() const;
++ QList<QPair<float, QPointF> > scaleList() const;
+ %End
+ %If (Qt_4_3_0 -)
+- QList<QPair<double, QPointF> > shearList() const;
++ QList<QPair<float, QPointF> > shearList() const;
+ %End
+
+ private:
+diff --git a/sip/QtGui/qpainterpath.sip b/sip/QtGui/qpainterpath.sip
+index 924174a..8fcb9e7 100644
+--- a/sip/QtGui/qpainterpath.sip
++++ b/sip/QtGui/qpainterpath.sip
+@@ -219,8 +219,8 @@ public:
+ void setCurveThreshold(qreal threshold);
+ qreal curveThreshold() const;
+ void setDashPattern(Qt::PenStyle);
+- void setDashPattern(const QVector<double> &dashPattern);
+- QVector<double> dashPattern() const;
++ void setDashPattern(const QVector<float> &dashPattern);
++ QVector<float> dashPattern() const;
+ QPainterPath createStroke(const QPainterPath &path) const;
+ %If (Qt_4_3_0 -)
+ void setDashOffset(qreal offset);
+diff --git a/sip/QtGui/qpen.sip b/sip/QtGui/qpen.sip
+index 0d78d8f..0cefacd 100644
+--- a/sip/QtGui/qpen.sip
++++ b/sip/QtGui/qpen.sip
+@@ -104,8 +104,8 @@ public:
+ void setCapStyle(Qt::PenCapStyle pcs);
+ Qt::PenJoinStyle joinStyle() const;
+ void setJoinStyle(Qt::PenJoinStyle pcs);
+- QVector<double> dashPattern() const;
+- void setDashPattern(const QVector<double> &pattern);
++ QVector<float> dashPattern() const;
++ void setDashPattern(const QVector<float> &pattern);
+ qreal miterLimit() const;
+ void setMiterLimit(qreal limit);
+ bool operator==(const QPen &p) const;
+diff --git a/sip/QtGui/qtextoption.sip b/sip/QtGui/qtextoption.sip
+index 2075e99..f748a63 100644
+--- a/sip/QtGui/qtextoption.sip
++++ b/sip/QtGui/qtextoption.sip
+@@ -75,8 +75,8 @@ public:
+ typedef QFlags<QTextOption::Flag> Flags;
+ QFlags<QTextOption::Flag> flags() const;
+ qreal tabStop() const;
+- void setTabArray(QList<double> tabStops);
+- QList<double> tabArray() const;
++ void setTabArray(QList<float> tabStops);
++ QList<float> tabArray() const;
+ void setUseDesignMetrics(bool b);
+ bool useDesignMetrics() const;
+ void setAlignment(Qt::Alignment aalignment);
diff --git a/recipes/python/python-pyqt/04_qreal_api_fixes.dpatch b/recipes/python/python-pyqt/04_qreal_api_fixes.dpatch
new file mode 100644
index 0000000000..abd9e3f4cd
--- /dev/null
+++ b/recipes/python/python-pyqt/04_qreal_api_fixes.dpatch
@@ -0,0 +1,259 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 04_qreal_api_fixes.dpatch by Torsten Marek <shlomme@debian.org>
+##
+## DP: Exchanges double by qreal in some wrapped methods.
+
+@DPATCH@
+diff -urNad python-qt4-4.3~/sip/QtCore/qlist.sip python-qt4-4.3/sip/QtCore/qlist.sip
+--- python-qt4-4.3~/sip/QtCore/qlist.sip 2007-09-02 00:35:50.000000000 +0200
++++ python-qt4-4.3/sip/QtCore/qlist.sip 2007-09-02 00:35:53.000000000 +0200
+@@ -322,8 +322,8 @@
+ %End
+ };
+ %If (Qt_4_3_0 -)
+-// QList<QPair<double, double> > is implemented as a Python list of 2-element tuples.
+-%MappedType QList<QPair<double, double> >
++// QList<QPair<float, float> > is implemented as a Python list of 2-element tuples.
++%MappedType QList<QPair<float, float> >
+ {
+ %TypeHeaderCode
+ #include <qlist.h>
+@@ -340,7 +340,7 @@
+ // Set the list elements.
+ for (int i = 0; i < sipCpp->size(); ++i)
+ {
+- const QPair<double, double> &p = sipCpp->at(i);
++ const QPair<float, float> &p = sipCpp->at(i);
+ PyObject *pobj;
+
+ if ((pobj = Py_BuildValue((char *)"dd", p.first, p.second)) == NULL)
+@@ -370,16 +370,16 @@
+ return 1;
+ }
+
+- QList<QPair<double, double> > *ql = new QList<QPair<double, double> >;
++ QList<QPair<float, float> > *ql = new QList<QPair<float, float> >;
+
+ for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i)
+ {
+ PyObject *tup = PyList_GET_ITEM(sipPy, i);
+
+- double first = PyFloat_AsDouble(PyTuple_GET_ITEM(tup, 0));
+- double second = PyFloat_AsDouble(PyTuple_GET_ITEM(tup, 1));
++ float first = PyFloat_AsDouble(PyTuple_GET_ITEM(tup, 0));
++ float second = PyFloat_AsDouble(PyTuple_GET_ITEM(tup, 1));
+
+- ql->append(QPair<double, double>(first, second));
++ ql->append(QPair<float, float>(first, second));
+ }
+
+ *sipCppPtr = ql;
+@@ -389,9 +389,9 @@
+ };
+ %End
+ %If (Qt_4_3_0 -)
+-// QList<QPair<double, TYPE> > is implemented as a Python list of 2-element tuples.
+-template<double, TYPE>
+-%MappedType QList<QPair<double, TYPE> >
++// QList<QPair<float, TYPE> > is implemented as a Python list of 2-element tuples.
++template<float, TYPE>
++%MappedType QList<QPair<float, TYPE> >
+ {
+ %TypeHeaderCode
+ #include <qlist.h>
+@@ -408,7 +408,7 @@
+ // Set the list elements.
+ for (int i = 0; i < sipCpp->size(); ++i)
+ {
+- const QPair<double, TYPE> &p = sipCpp->at(i);
++ const QPair<float, TYPE> &p = sipCpp->at(i);
+ TYPE *t = new TYPE(p.second);
+ PyObject *pobj;
+
+@@ -447,12 +447,12 @@
+ return 1;
+ }
+
+- QList<QPair<double, TYPE> > *ql = new QList<QPair<double, TYPE> >;
++ QList<QPair<float, TYPE> > *ql = new QList<QPair<float, TYPE> >;
+
+ for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i)
+ {
+ PyObject *tup = PyList_GET_ITEM(sipPy, i);
+- double d;
++ float d;
+ int state;
+
+ d = PyFloat_AsDouble(PyTuple_GET_ITEM(tup, 0));
+@@ -466,7 +466,7 @@
+ return 0;
+ }
+
+- ql->append(QPair<double, TYPE>(d, *t));
++ ql->append(QPair<float, TYPE>(d, *t));
+
+ sipReleaseInstance(t, sipClass_TYPE, state);
+ }
+@@ -524,8 +524,8 @@
+ return sipGetState(sipTransferObj);
+ %End
+ };
+-// QList<double> is implemented as a Python list of floats.
+-%MappedType QList<double>
++// QList<float> is implemented as a Python list of floats.
++%MappedType QList<float>
+ {
+ %TypeHeaderCode
+ #include <qlist.h>
+@@ -561,7 +561,7 @@
+ if (sipIsErr == NULL)
+ return PyList_Check(sipPy);
+
+- QList<double> *ql = new QList<double>;
++ QList<float> *ql = new QList<float>;
+
+ for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i)
+ ql->append(PyFloat_AsDouble(PyList_GET_ITEM(sipPy, i)));
+diff -urNad python-qt4-4.3~/sip/QtCore/qvector.sip python-qt4-4.3/sip/QtCore/qvector.sip
+--- python-qt4-4.3~/sip/QtCore/qvector.sip 2007-09-02 00:35:50.000000000 +0200
++++ python-qt4-4.3/sip/QtCore/qvector.sip 2007-09-02 00:35:53.000000000 +0200
+@@ -143,8 +143,8 @@
+ return sipGetState(sipTransferObj);
+ %End
+ };
+-// QVector<double> is implemented as a Python list of floats.
+-%MappedType QVector<double>
++// QVector<float> is implemented as a Python list of floats.
++%MappedType QVector<float>
+ {
+ %TypeHeaderCode
+ #include <qvector.h>
+@@ -180,7 +180,7 @@
+ if (sipIsErr == NULL)
+ return PyList_Check(sipPy);
+
+- QVector<double> *ql = new QVector<double>;
++ QVector<float> *ql = new QVector<float>;
+
+ for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i)
+ ql->append(PyFloat_AsDouble(PyList_GET_ITEM(sipPy, i)));
+@@ -190,9 +190,9 @@
+ return sipGetState(sipTransferObj);
+ %End
+ };
+-// QVector<QPair<double, TYPE> > is implemented as a Python list of 2-element tuples.
++// QVector<QPair<float, TYPE> > is implemented as a Python list of 2-element tuples.
+ template<TYPE>
+-%MappedType QVector<QPair<double, TYPE> >
++%MappedType QVector<QPair<float, TYPE> >
+ {
+ %TypeHeaderCode
+ #include <qvector.h>
+@@ -209,7 +209,7 @@
+ // Set the list elements.
+ for (int i = 0; i < sipCpp->size(); ++i)
+ {
+- const QPair<double, TYPE> &p = sipCpp->at(i);
++ const QPair<float, TYPE> &p = sipCpp->at(i);
+ TYPE *pt = new TYPE(p.second);
+ PyObject *pobj;
+
+@@ -248,14 +248,14 @@
+ return 1;
+ }
+
+- QVector<QPair<double, TYPE> > *qv = new QVector<QPair<double, TYPE> >;
++ QVector<QPair<float, TYPE> > *qv = new QVector<QPair<float, TYPE> >;
+
+ for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i)
+ {
+ PyObject *tup = PyList_GET_ITEM(sipPy, i);
+ int state;
+ TYPE *s;
+- QPair<double, TYPE> p;
++ QPair<float, TYPE> p;
+
+ p.first = PyFloat_AsDouble(PyTuple_GET_ITEM(tup, 0));
+
+diff -urNad python-qt4-4.3~/sip/QtGui/qbrush.sip python-qt4-4.3/sip/QtGui/qbrush.sip
+--- python-qt4-4.3~/sip/QtGui/qbrush.sip 2007-09-02 00:35:50.000000000 +0200
++++ python-qt4-4.3/sip/QtGui/qbrush.sip 2007-09-02 00:35:53.000000000 +0200
+@@ -138,7 +138,7 @@
+
+ QDataStream &operator>>(QDataStream &, QBrush & /Constrained/);
+ QDataStream &operator<<(QDataStream &, const QBrush & /Constrained/);
+-typedef QVector<QPair<double, QColor> > QGradientStops;
++typedef QVector<QPair<float, QColor> > QGradientStops;
+
+ class QGradient
+ {
+diff -urNad python-qt4-4.3~/sip/QtGui/qgraphicsitemanimation.sip python-qt4-4.3/sip/QtGui/qgraphicsitemanimation.sip
+--- python-qt4-4.3~/sip/QtGui/qgraphicsitemanimation.sip 2007-09-02 00:35:50.000000000 +0200
++++ python-qt4-4.3/sip/QtGui/qgraphicsitemanimation.sip 2007-09-02 00:35:53.000000000 +0200
+@@ -64,19 +64,19 @@
+
+ public:
+ %If (Qt_4_3_0 -)
+- QList<QPair<double, QPointF> > posList() const;
++ QList<QPair<float, QPointF> > posList() const;
+ %End
+ %If (Qt_4_3_0 -)
+- QList<QPair<double, double> > rotationList() const;
++ QList<QPair<float, float> > rotationList() const;
+ %End
+ %If (Qt_4_3_0 -)
+- QList<QPair<double, QPointF> > translationList() const;
++ QList<QPair<float, QPointF> > translationList() const;
+ %End
+ %If (Qt_4_3_0 -)
+- QList<QPair<double, QPointF> > scaleList() const;
++ QList<QPair<float, QPointF> > scaleList() const;
+ %End
+ %If (Qt_4_3_0 -)
+- QList<QPair<double, QPointF> > shearList() const;
++ QList<QPair<float, QPointF> > shearList() const;
+ %End
+
+ private:
+diff -urNad python-qt4-4.3~/sip/QtGui/qpainterpath.sip python-qt4-4.3/sip/QtGui/qpainterpath.sip
+--- python-qt4-4.3~/sip/QtGui/qpainterpath.sip 2007-09-02 00:35:50.000000000 +0200
++++ python-qt4-4.3/sip/QtGui/qpainterpath.sip 2007-09-02 00:35:53.000000000 +0200
+@@ -194,8 +194,8 @@
+ void setCurveThreshold(qreal threshold);
+ qreal curveThreshold() const;
+ void setDashPattern(Qt::PenStyle);
+- void setDashPattern(const QVector<double> &dashPattern);
+- QVector<double> dashPattern() const;
++ void setDashPattern(const QVector<float> &dashPattern);
++ QVector<float> dashPattern() const;
+ QPainterPath createStroke(const QPainterPath &path) const;
+ %If (Qt_4_3_0 -)
+ void setDashOffset(qreal offset);
+diff -urNad python-qt4-4.3~/sip/QtGui/qpen.sip python-qt4-4.3/sip/QtGui/qpen.sip
+--- python-qt4-4.3~/sip/QtGui/qpen.sip 2007-09-02 00:35:50.000000000 +0200
++++ python-qt4-4.3/sip/QtGui/qpen.sip 2007-09-02 00:35:53.000000000 +0200
+@@ -91,8 +91,8 @@
+ void setCapStyle(Qt::PenCapStyle pcs);
+ Qt::PenJoinStyle joinStyle() const;
+ void setJoinStyle(Qt::PenJoinStyle pcs);
+- QVector<double> dashPattern() const;
+- void setDashPattern(const QVector<double> &pattern);
++ QVector<float> dashPattern() const;
++ void setDashPattern(const QVector<float> &pattern);
+ qreal miterLimit() const;
+ void setMiterLimit(qreal limit);
+ bool operator==(const QPen &p) const;
+diff -urNad python-qt4-4.3~/sip/QtGui/qtextoption.sip python-qt4-4.3/sip/QtGui/qtextoption.sip
+--- python-qt4-4.3~/sip/QtGui/qtextoption.sip 2007-09-02 00:35:50.000000000 +0200
++++ python-qt4-4.3/sip/QtGui/qtextoption.sip 2007-09-02 00:35:53.000000000 +0200
+@@ -62,8 +62,8 @@
+ typedef QFlags<QTextOption::Flag> Flags;
+ QFlags<QTextOption::Flag> flags() const;
+ qreal tabStop() const;
+- void setTabArray(QList<double> tabStops);
+- QList<double> tabArray() const;
++ void setTabArray(QList<float> tabStops);
++ QList<float> tabArray() const;
+ void setUseDesignMetrics(bool b);
+ bool useDesignMetrics() const;
+ void setAlignment(Qt::Alignment aalignment);
diff --git a/recipes/python/python-pyqt/assistantclient-fix.patch b/recipes/python/python-pyqt/assistantclient-fix.patch
new file mode 100644
index 0000000000..eef0847c7c
--- /dev/null
+++ b/recipes/python/python-pyqt/assistantclient-fix.patch
@@ -0,0 +1,13 @@
+Index: PyQt-x11-gpl-4.3.3/sip/QtAssistant/qassistantclient.sip
+===================================================================
+--- PyQt-x11-gpl-4.3.3.orig/sip/QtAssistant/qassistantclient.sip 2008-01-07 13:31:35.000000000 +0100
++++ PyQt-x11-gpl-4.3.3/sip/QtAssistant/qassistantclient.sip 2008-01-07 13:32:20.000000000 +0100
+@@ -26,7 +26,7 @@
+ {
+
+ %TypeHeaderCode
+-#include <qassistantclient.h>
++#include <QtAssistant/qassistantclient.h>
+ %End
+
+ %ConvertToSubClassCode
diff --git a/recipes/python/python-pyqt/cross-compile.patch b/recipes/python/python-pyqt/cross-compile.patch
new file mode 100644
index 0000000000..fb1524c09d
--- /dev/null
+++ b/recipes/python/python-pyqt/cross-compile.patch
@@ -0,0 +1,33 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- PyQt4-gpl-4.0beta1/configure.py~cross-compile.patch
++++ PyQt4-gpl-4.0beta1/configure.py
+@@ -471,7 +471,7 @@
+ sipconfig.error("Unable to create the %s directory." % mname)
+
+ # Build the SIP command line.
+- argv = ['"' + sipcfg.sip_bin + '"']
++ argv = ['"' + sipcfg.sip_bin + '4"']
+
+ argv.extend(qt_sip_flags)
+
+@@ -846,7 +846,15 @@
+ """Set the qt_dir, qt_incdir, qt_libdir, qt_bindir and qt_datadir globals
+ for the Qt installation.
+ """
+- sipconfig.inform("Determining the layout of your Qt installation...")
++ sipconfig.inform("Determining the layout of your Qt installation... - patched for OpenEmbedded by :M:")
++
++ global qt_dir, qt_incdir, qt_libdir, qt_bindir, qt_datadir
++ qt_dir = os.getenv( "QTDIR" )
++ qt_incdir = "%s/include" % qt_dir
++ qt_libdir = "%s/lib" % qt_dir
++ qt_bindir = "%s/bin" % qt_dir
++ qt_datadir = "%s/share" % qt_dir
++ return
+
+ if not opt_qmake:
+ sipconfig.error("Make sure you have a working Qt v4 qmake on your PATH or use the -q argument to explicitly specify a working Qt v4 qmake.")