diff --git a/PyQt4.spec b/PyQt4.spec new file mode 100644 index 0000000000000000000000000000000000000000..0d51377ebf3d82f90f71f901bc737f3dd0e5937a --- /dev/null +++ b/PyQt4.spec @@ -0,0 +1,137 @@ +%{!?python2_sitelib: %global python2_sitelib %(/usr/bin/python2 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")} +%{!?python2_sitearch:%global python2_sitearch %(/usr/bin/python2 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")} +%{!?python2_inc:%global python2_inc %(/usr/bin/python2 -c "from distutils.sysconfig import get_python_inc; print get_python_inc(1)")} +%{!?python3_inc:%global python3_inc %(%{__python3} -c "from distutils.sysconfig import get_python_inc; print(get_python_inc(1))")} +%global python2_dbus_dir %(/usr/bin/python2 -c "import dbus.mainloop; print(dbus.mainloop.__path__[0])") +%global python3_dbus_dir %(%{__python3} -c "import dbus.mainloop; print(dbus.mainloop.__path__[0])") +%global __provides_exclude_from ^(%{python2_sitearch}/.*\\.so|%{python3_sitearch}/.*\\.so|%{_qt4_plugindir}/.*\\.so)$ +Name: PyQt4 +Version: 4.12.1 +Release: 12 +Summary: Python bindings for Qt4 +License: (GPLv3 or GPLv2 with exceptions) and BSD +Url: http://www.riverbankcomputing.com/software/pyqt/ +Source0: http://sourceforge.net/projects/pyqt/files/PyQt4/PyQt-%{version}/PyQt4_gpl_x11-%{version}.tar.gz + +Patch0001: qreal_float_support.diff +BuildRequires: chrpath dbus-python findutils gcc-c++ pkgconfig(dbus-1) pkgconfig(dbus-python) pkgconfig(phonon) +BuildRequires: pkgconfig(QtDBus) pkgconfig(QtDeclarative) pkgconfig(QtDesigner) pkgconfig(QtGui) pkgconfig(QtHelp) +BuildRequires: pkgconfig(QtMultimedia) pkgconfig(QtNetwork) pkgconfig(QtOpenGL) pkgconfig(QtScript) pkgconfig(QtScriptTools) +BuildRequires: pkgconfig(QtSql) pkgconfig(QtSvg) pkgconfig(QtTest) pkgconfig(QtXml) pkgconfig(QtXmlPatterns) python2-devel +BuildRequires: python2-sip python2-sip-devel >= 4.19 python3-dbus python3-devel python3-sip python3-sip-devel >= 4.19 +Buildrequires: qt-assistant-adp-devel pkgconfig(QtWebKit) +Requires: dbus-python qt4 >= %{_qt4_version} sip-api(%{_sip_api_major}) >= %{_sip_api} +Provides: python-qt4 = %{version}-%{release} python2-qt4 = %{version}-%{release} python2-PyQt4 = %{version}-%{release} +Provides: PyQt4-qsci-api = %{version}-%{release} PyQt4-assistant = %{version}-%{release} PyQt4-webkit = %{version}-%{release} +Provides: python-qt4-qsci-api = %{version}-%{release} python2-qt4-qsci-api = %{version}-%{release} python2-pyqt4-qsci-api = %{version}-%{release} +Provides: python-qt4-assistant = %{version}-%{release} python2-qt4-assistant = %{version}-%{release} python2-pyqt4-assistant = %{version}-%{release} +Provides: python-qt4-webkit = %{version}-%{release} python2-qt4-webkit = %{version}-%{release} python2-PyQt4-webkit = %{version}-%{release} +Provides: pyqt4-webkit = %{version}-%{release} pyqt4 = %{version}-%{release} +Obsoletes: PyQt4 < 4.11.4-8 pyqt4-devel < 4.10.3-6 python3-pyqt4-devel < 4.10.3-6 +Obsoletes: PyQt4-qsci-api < %{version}-%{release} PyQt4-assistant < %{version}-%{release} PyQt4-webkit < %{version}-%{release} + +%description +These are Python bindings for Qt4. + +%package devel +Summary: Development files for the Qt4 library +Requires: PyQt4 = %{version}-%{release} qt4-devel sip-devel +Provides: PyQt4-webkit-devel = %{version}-%{release} python-qt4-devel = %{version}-%{release} +Provides: python2-qt4-doc = %{version}-%{release} python2-PyQt4-doc = %{version}-%{release} +Provides: pyqt4-devel = %{version}-%{release} +Obsoletes: PyQt4 < 4.11.4-8 PyQt4-devel < 4.10.3-6 PyQt4-webkit-devel < %{version}-%{release} + +%description devel +The Qt4-devel package includes header files and libraries necessary for the Qt4 library. + +%package help +Summary: This package contains help documents +BuildArch: noarch +Requires: PyQt4 = %{version}-%{release} +Provides: PyQt4-doc = %{version}-%{release} python-qt4-doc = %{version}-%{release} +Provides: python2-qt4-doc = %{version}-%{release} python2-PyQt4-doc = %{version}-%{release} +Obsoletes: PyQt4-doc < %{version}-%{release} PyQt4-devel < 4.10.3-6 python3-PyQt4-devel < 4.10.3-6 + +%description help +Files for help with PyQt4. + +%package -n python3-PyQt4 +Summary: Python 3 bindings for Qt4 +Requires: python3-dbus python3-PyQt4 = %{version}-%{release} python3-PyQt4 = %{version}-%{release} +Requires: qt4 >= %{_qt4_version} python3-sip-api(%{_sip_api_major}) >= %{_sip_api} +Provides: python3-qt4 = %{version}-%{release} python3-qt4-assistant = %{version}-%{release} python3-qt4-webkit = %{version}-%{release} +Provides: python3-PyQt4-assistant = %{version}-%{release} python3-PyQt4-webkit = %{version}-%{release} +Obsoletes: python3-PyQt4 < 4.11.4-8 python3-PyQt4-assistant < %{version}-%{release} python3-PyQt4-webkit < %{version}-%{release} + +%description -n python3-PyQt4 +These are Python 3 bindings for Qt4. + +%package -n python3-PyQt4-devel +Summary: Python 3 bindings for Qt4 +Provides: python3-PyQt4-webkit-devel = %{version}-%{release} python3-qt4-devel = %{version}-%{release} +Requires: python3-PyQt4 = %{version}-%{release} python3-sip-devel +Obsoletes: python3-PyQt4-devel < 4.10.3-6 + +%description -n python3-PyQt4-devel +The python3-PyQt4-devel package includes header files and libraries necessary for the python3 PyQt4 library. + +%prep +%autosetup -n PyQt4_gpl_x11-%{version} -p1 +install -D ./sip/QtGui/opengl_types.sip ./sip/QtGui/opengl_types.sip.orig +find examples/ -name "*.py" | xargs chmod a-x + +%build +QT4DIR=%{_qt4_prefix} +PATH=%{_qt4_bindir}:$PATH ; export PATH +install -d %{_target_platform} +cd %{_target_platform} +/usr/bin/python2 ../configure.py --assume-shared --confirm-license --no-timestamp --qmake=%{_qt4_qmake} --qsci-api \ + --qsci-api-destdir=%{_qt4_datadir}/qsci --verbose CFLAGS="%{optflags}" CXXFLAGS="%{optflags}" LFLAGS="%{?__global_ldflags}" +%make_build +cd .. +install -d %{_target_platform}-python3 +cd %{_target_platform}-python3 +%{__python3} ../configure.py --assume-shared --confirm-license --no-timestamp --qmake=%{_qt4_qmake} --no-qsci-api \ + --sipdir=%{_datadir}/python3-sip/PyQt4 --verbose CFLAGS="%{optflags}" CXXFLAGS="%{optflags}" LFLAGS="%{?__global_ldflags}" +%make_build + +%install +%make_install INSTALL_ROOT=%{buildroot} -C %{_target_platform}-python3 +%make_install -C %{_target_platform} +rm -rfv %{buildroot}%{python2_sitearch}/PyQt4/uic/port_v3/ +rm -rfv %{buildroot}%{python3_sitearch}/PyQt4/uic/port_v2/ + +%check +diff -u ./sip/QtGui/opengl_types.sip.orig ./sip/QtGui/opengl_types.sip ||: + +%files +%doc LICENSE +%{python2_dbus_dir}/qt.so +%dir %{python2_sitearch}/PyQt4/ +%{python2_sitearch}/PyQt4/* +%{_qt4_plugindir}/designer/* +%dir %{_qt4_datadir}/qsci/ +%dir %{_qt4_datadir}/qsci/api/ +%dir %{_qt4_datadir}/qsci/api/python/ +%{_qt4_datadir}/qsci/api/python/PyQt4.api + +%files devel +%{_bindir}/* +%{_datadir}/sip/PyQt4/ + +%files help +%doc doc/* examples/ NEWS README + +%files -n python3-PyQt4 +%{python3_dbus_dir}/qt.so +%dir %{python3_sitearch}/PyQt4/ +%{python3_sitearch}/PyQt4/* + +%files -n python3-PyQt4-devel +%{_bindir}/* +%dir %{_datadir}/python3-sip/ +%{_datadir}/python3-sip/PyQt4/ + +%changelog +* Fri Feb 14 2020 fengbing - 4.12.1-12 +- Pakcage init diff --git a/PyQt4_gpl_x11-4.12.1.tar.gz b/PyQt4_gpl_x11-4.12.1.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..61ae1d9f546b60e0e088b64e70818941300805e0 Binary files /dev/null and b/PyQt4_gpl_x11-4.12.1.tar.gz differ diff --git a/qreal_float_support.diff b/qreal_float_support.diff new file mode 100644 index 0000000000000000000000000000000000000000..8d51149134b71172f1f4a90771ad6b74c79e298c --- /dev/null +++ b/qreal_float_support.diff @@ -0,0 +1,233 @@ +## 03_qreal_float_support.dpatch by Michael Casadevall +Index: python-qt4-4.10.3/sip/QtCore/qlist.sip +=================================================================== +--- python-qt4-4.10.3.orig/sip/QtCore/qlist.sip 2013-09-20 07:55:07.028033774 +0100 ++++ python-qt4-4.10.3/sip/QtCore/qlist.sip 2013-09-20 07:55:07.024033774 +0100 +@@ -819,3 +819,227 @@ + return sipGetState(sipTransferObj); + %End + }; ++ ++// If we're on an architecture where qreal != double, then we need to also ++// explicately handle doubles. On architectures where qreal == double, they ++// will automaticially be cast upwards ++ ++%If (!PyQt_qreal_double) ++ ++%If (Qt_4_3_0 -) ++// QList > is implemented as a Python list of 2-element tuples. ++%MappedType QList > ++{ ++%TypeHeaderCode ++#include ++#include ++%End ++ ++%ConvertFromTypeCode ++ // Create the list. ++ PyObject *l; ++ ++ if ((l = PyList_New(sipCpp->size())) == NULL) ++ return NULL; ++ ++ // Set the list elements. ++ for (int i = 0; i < sipCpp->size(); ++i) ++ { ++ const QPair &p = sipCpp->at(i); ++ PyObject *pobj; ++ ++ if ((pobj = Py_BuildValue((char *)"dd", p.first, p.second)) == NULL) ++ { ++ Py_DECREF(l); ++ ++ return NULL; ++ } ++ ++ PyList_SET_ITEM(l, i, pobj); ++ } ++ ++ return l; ++%End ++ ++%ConvertToTypeCode ++ SIP_SSIZE_T len; ++ ++ // Check the type if that is all that is required. ++ if (sipIsErr == NULL) ++ { ++ if (!PySequence_Check(sipPy) || (len = PySequence_Size(sipPy)) < 0) ++ return 0; ++ ++ for (SIP_SSIZE_T i = 0; i < len; ++i) ++ { ++ PyObject *tup = PySequence_ITEM(sipPy, i); ++ ++ if (!PySequence_Check(tup) || PySequence_Size(tup) != 2) ++ return 0; ++ } ++ ++ return 1; ++ } ++ ++ QList > *ql = new QList >; ++ len = PySequence_Size(sipPy); ++ ++ 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)); ++ ++ ql->append(QPair(first, second)); ++ } ++ ++ *sipCppPtr = ql; ++ ++ return sipGetState(sipTransferObj); ++%End ++}; ++%End ++%If (Qt_4_3_0 -) ++// QList > is implemented as a Python list of 2-element tuples. ++template ++%MappedType QList > ++{ ++%TypeHeaderCode ++#include ++#include ++%End ++ ++%ConvertFromTypeCode ++ // Create the list. ++ PyObject *l; ++ ++ if ((l = PyList_New(sipCpp->size())) == NULL) ++ return NULL; ++ ++ // Set the list elements. ++ for (int i = 0; i < sipCpp->size(); ++i) ++ { ++ const QPair &p = sipCpp->at(i); ++ TYPE *t = new TYPE(p.second); ++ PyObject *pobj; ++ ++ if ((pobj = sipBuildResult(NULL, "(dB)", p.first, t, sipClass_TYPE, sipTransferObj)) == NULL) ++ { ++ Py_DECREF(l); ++ delete t; ++ ++ return NULL; ++ } ++ ++ PyList_SET_ITEM(l, i, pobj); ++ } ++ ++ return l; ++%End ++ ++%ConvertToTypeCode ++ SIP_SSIZE_T len; ++ ++ // Check the type if that is all that is required. ++ if (sipIsErr == NULL) ++ { ++ if (!PySequence_Check(sipPy) || (len = PySequence_Size(sipPy)) < 0) ++ return 0; ++ ++ for (SIP_SSIZE_T i = 0; i < len; ++i) ++ { ++ PyObject *tup = PySequence_ITEM(sipPy, i); ++ ++ if (!PySequence_Check(tup) || PySequence_Size(tup) != 2) ++ return 0; ++ ++ if (!sipCanConvertToInstance(PySequence_ITEM(tup, 1), sipClass_TYPE, SIP_NOT_NONE)) ++ return 0; ++ } ++ ++ return 1; ++ } ++ ++ QList > *ql = new QList >; ++ len = PySequence_Size(sipPy); ++ ++ for (SIP_SSIZE_T i = 0; i < len; ++i) ++ { ++ PyObject *tup = PySequence_ITEM(sipPy, i); ++ double d; ++ int state; ++ ++ d = PyFloat_AsDouble(PySequence_ITEM(tup, 0)); ++ TYPE *t = reinterpret_cast(sipConvertToInstance(PySequence_ITEM(tup, 1), sipClass_TYPE, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr)); ++ ++ if (*sipIsErr) ++ { ++ sipReleaseInstance(t, sipClass_TYPE, state); ++ ++ delete ql; ++ return 0; ++ } ++ ++ ql->append(QPair(d, *t)); ++ ++ sipReleaseInstance(t, sipClass_TYPE, state); ++ } ++ ++ *sipCppPtr = ql; ++ ++ return sipGetState(sipTransferObj); ++%End ++}; ++%End ++ ++// QList is implemented as a Python list of doubles. ++%MappedType QList ++{ ++%TypeHeaderCode ++#include ++%End ++ ++%ConvertFromTypeCode ++ // Create the list. ++ PyObject *l; ++ ++ if ((l = PyList_New(sipCpp->size())) == NULL) ++ return NULL; ++ ++ // Set the list elements. ++ for (int i = 0; i < sipCpp->size(); ++i) ++ { ++ PyObject *pobj; ++ ++ if ((pobj = PyFloat_FromDouble(sipCpp->value(i))) == NULL) ++ { ++ Py_DECREF(l); ++ ++ return NULL; ++ } ++ ++ PyList_SET_ITEM(l, i, pobj); ++ } ++ ++ return l; ++%End ++ ++%ConvertToTypeCode ++ // Check the type if that is all that is required. ++ if (sipIsErr == NULL) ++ return (PySequence_Check(sipPy) && PySequence_Size(sipPy) >= 0); ++ ++ QList *ql = new QList; ++ SIP_SSIZE_T len = PySequence_Size(sipPy); ++ ++ for (SIP_SSIZE_T i = 0; i < len; ++i) ++ ql->append(PyFloat_AsDouble(PySequence_ITEM(sipPy, i))); ++ ++ *sipCppPtr = ql; ++ ++ return sipGetState(sipTransferObj); ++%End ++}; ++ ++%End