From 1878f5d8d706ce86de5884bd9676c8b534b1919e8f238ca388289a792d01ec49 Mon Sep 17 00:00:00 2001 From: Dirk Stoecker Date: Sat, 21 Nov 2020 14:07:08 +0000 Subject: [PATCH] Accepting request 849848 from home:bnavigator:sip5 - support SIP5 with qgis-pr37842-sip5.patch gh#qgis/QGIS#37842 OBS-URL: https://build.opensuse.org/request/show/849848 OBS-URL: https://build.opensuse.org/package/show/Application:Geo/qgis?expand=0&rev=313 --- qgis-pr37842-sip5.patch | 385 ++++++++++++++++++++++++++++++++++++++++ qgis.changes | 5 + qgis.spec | 7 +- 3 files changed, 394 insertions(+), 3 deletions(-) create mode 100644 qgis-pr37842-sip5.patch diff --git a/qgis-pr37842-sip5.patch b/qgis-pr37842-sip5.patch new file mode 100644 index 0000000..10222e7 --- /dev/null +++ b/qgis-pr37842-sip5.patch @@ -0,0 +1,385 @@ +From 33192f38bc7db93ffe201110cab19fe082851f5f Mon Sep 17 00:00:00 2001 +From: Dmitry Shachnev +Date: Wed, 15 Jul 2020 21:29:37 +0300 +Subject: [PATCH 1/3] Replace deprecated sipMappedType with sipTypeDef + +--- + .../geometry/qgsgeometry.sip.in | 12 ++--- + python/core/conversions.sip | 44 +++++++++---------- + src/core/geometry/qgsgeometry.h | 12 ++--- + 3 files changed, 34 insertions(+), 34 deletions(-) + +diff --git a/python/core/auto_generated/geometry/qgsgeometry.sip.in b/python/core/auto_generated/geometry/qgsgeometry.sip.in +index 7ac9c015e142..d6c060a78dca 100644 +--- a/python/core/auto_generated/geometry/qgsgeometry.sip.in ++++ b/python/core/auto_generated/geometry/qgsgeometry.sip.in +@@ -1533,7 +1533,7 @@ is null, a ValueError will be raised. + } + else + { +- const sipMappedType *qvector_type = sipFindMappedType( "QVector" ); ++ const sipTypeDef *qvector_type = sipFindType( "QVector" ); + sipRes = sipConvertFromNewType( new QVector< QgsPointXY >( sipCpp->randomPointsInPolygon( a0, a1 ) ), qvector_type, Py_None ); + } + %End +@@ -1681,7 +1681,7 @@ will be raised. + } + else + { +- const sipMappedType *qvector_type = sipFindMappedType( "QVector< QgsPointXY >" ); ++ const sipTypeDef *qvector_type = sipFindType( "QVector< QgsPointXY >" ); + sipRes = sipConvertFromNewType( new QgsPolylineXY( sipCpp->asPolyline() ), qvector_type, Py_None ); + } + %End +@@ -1712,7 +1712,7 @@ will be raised. + } + else + { +- const sipMappedType *qvector_type = sipFindMappedType( "QVector>" ); ++ const sipTypeDef *qvector_type = sipFindType( "QVector>" ); + sipRes = sipConvertFromNewType( new QgsPolygonXY( sipCpp->asPolygon() ), qvector_type, Py_None ); + } + %End +@@ -1742,7 +1742,7 @@ will be raised. + } + else + { +- const sipMappedType *qvector_type = sipFindMappedType( "QVector< QgsPointXY >" ); ++ const sipTypeDef *qvector_type = sipFindType( "QVector< QgsPointXY >" ); + sipRes = sipConvertFromNewType( new QgsPolylineXY( sipCpp->asMultiPoint() ), qvector_type, Py_None ); + } + %End +@@ -1773,7 +1773,7 @@ will be raised. + } + else + { +- const sipMappedType *qvector_type = sipFindMappedType( "QVector>" ); ++ const sipTypeDef *qvector_type = sipFindType( "QVector>" ); + sipRes = sipConvertFromNewType( new QgsMultiPolylineXY( sipCpp->asMultiPolyline() ), qvector_type, Py_None ); + } + %End +@@ -1804,7 +1804,7 @@ will be raised. + } + else + { +- const sipMappedType *qvector_type = sipFindMappedType( "QVector>>" ); ++ const sipTypeDef *qvector_type = sipFindType( "QVector>>" ); + sipRes = sipConvertFromNewType( new QgsMultiPolygonXY( sipCpp->asMultiPolygon() ), qvector_type, Py_None ); + } + %End +diff --git a/python/core/conversions.sip b/python/core/conversions.sip +index fb355d1b09d5..abe85ecca4cb 100644 +--- a/python/core/conversions.sip ++++ b/python/core/conversions.sip +@@ -41,7 +41,7 @@ template + if ((l = PyList_New(sipCpp->size())) == NULL) + return NULL; + +- const sipMappedType *qvector_type = sipFindMappedType("QVector"); ++ const sipTypeDef *qvector_type = sipFindType("QVector"); + + // Set the list elements. + for (int i = 0; i < sipCpp->size(); ++i) +@@ -62,7 +62,7 @@ template + %End + + %ConvertToTypeCode +- const sipMappedType *qvector_type = sipFindMappedType("QVector"); ++ const sipTypeDef *qvector_type = sipFindType("QVector"); + + // Check the type if that is all that is required. + if (sipIsErr == NULL) +@@ -71,7 +71,7 @@ template + return 0; + + for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i) +- if (!sipCanConvertToMappedType(PyList_GET_ITEM(sipPy, i), qvector_type, SIP_NOT_NONE)) ++ if (!sipCanConvertToType(PyList_GET_ITEM(sipPy, i), qvector_type, SIP_NOT_NONE)) + return 0; + + return 1; +@@ -84,16 +84,16 @@ template + { + int state; + //TYPE *t = reinterpret_cast(sipConvertToType(PyList_GET_ITEM(sipPy, i), sipType_TYPE, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr)); +- QVector *t = reinterpret_cast< QVector * >(sipConvertToMappedType(PyList_GET_ITEM(sipPy, i), qvector_type, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr)); ++ QVector *t = reinterpret_cast< QVector * >(sipConvertToType(PyList_GET_ITEM(sipPy, i), qvector_type, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr)); + + if (*sipIsErr) + { +- sipReleaseMappedType(t, qvector_type, state); ++ sipReleaseType(t, qvector_type, state); + delete ql; + return 0; + } + ql->append(*t); +- sipReleaseMappedType(t, qvector_type, state); ++ sipReleaseType(t, qvector_type, state); + } + + *sipCppPtr = ql; +@@ -118,7 +118,7 @@ template + if ((l = PyList_New(sipCpp->size())) == NULL) + return NULL; + +- const sipMappedType *qvector_type = sipFindMappedType("QVector >"); ++ const sipTypeDef *qvector_type = sipFindType("QVector >"); + + // Set the list elements. + for (int i = 0; i < sipCpp->size(); ++i) +@@ -139,7 +139,7 @@ template + + %ConvertToTypeCode + +- const sipMappedType *qvector_type = sipFindMappedType("QVector >"); ++ const sipTypeDef *qvector_type = sipFindType("QVector >"); + + // Check the type if that is all that is required. + if (sipIsErr == NULL) +@@ -148,7 +148,7 @@ template + return 0; + + for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i) +- if (!sipCanConvertToMappedType(PyList_GET_ITEM(sipPy, i), qvector_type, SIP_NOT_NONE)) ++ if (!sipCanConvertToType(PyList_GET_ITEM(sipPy, i), qvector_type, SIP_NOT_NONE)) + return 0; + + return 1; +@@ -161,16 +161,16 @@ template + { + int state; + //TYPE *t = reinterpret_cast(sipConvertToType(PyList_GET_ITEM(sipPy, i), sipType_TYPE, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr)); +- QVector > *t = reinterpret_cast< QVector< QVector > * >(sipConvertToMappedType(PyList_GET_ITEM(sipPy, i), qvector_type, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr)); ++ QVector > *t = reinterpret_cast< QVector< QVector > * >(sipConvertToType(PyList_GET_ITEM(sipPy, i), qvector_type, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr)); + + if (*sipIsErr) + { +- sipReleaseMappedType(t, qvector_type, state); ++ sipReleaseType(t, qvector_type, state); + delete ql; + return 0; + } + ql->append(*t); +- sipReleaseMappedType(t, qvector_type, state); ++ sipReleaseType(t, qvector_type, state); + } + + *sipCppPtr = ql; +@@ -194,7 +194,7 @@ template + if ((l = PyList_New(sipCpp->size())) == NULL) + return NULL; + +- const sipMappedType *qlist_type = sipFindMappedType("QList"); ++ const sipTypeDef *qlist_type = sipFindType("QList"); + + // Set the list elements. + for (int i = 0; i < sipCpp->size(); ++i) +@@ -215,7 +215,7 @@ template + %End + + %ConvertToTypeCode +- const sipMappedType *qlist_type = sipFindMappedType("QList"); ++ const sipTypeDef *qlist_type = sipFindType("QList"); + + // Check the type if that is all that is required. + if (sipIsErr == NULL) +@@ -224,7 +224,7 @@ template + return 0; + + for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i) +- if (!sipCanConvertToMappedType(PyList_GET_ITEM(sipPy, i), qlist_type, SIP_NOT_NONE)) ++ if (!sipCanConvertToType(PyList_GET_ITEM(sipPy, i), qlist_type, SIP_NOT_NONE)) + return 0; + + return 1; +@@ -237,16 +237,16 @@ template + { + int state; + //TYPE *t = reinterpret_cast(sipConvertToType(PyList_GET_ITEM(sipPy, i), sipType_TYPE, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr)); +- QList *t = reinterpret_cast< QList * >(sipConvertToMappedType(PyList_GET_ITEM(sipPy, i), qlist_type, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr)); ++ QList *t = reinterpret_cast< QList * >(sipConvertToType(PyList_GET_ITEM(sipPy, i), qlist_type, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr)); + + if (*sipIsErr) + { +- sipReleaseMappedType(t, qlist_type, state); ++ sipReleaseType(t, qlist_type, state); + delete ql; + return 0; + } + ql->append(*t); +- sipReleaseMappedType(t, qlist_type, state); ++ sipReleaseType(t, qlist_type, state); + } + + *sipCppPtr = ql; +@@ -462,7 +462,7 @@ template + if ((d = PyDict_New()) == NULL) + return NULL; + +- const sipMappedType *qmap2 = sipFindMappedType("QMap"); ++ const sipTypeDef *qmap2 = sipFindType("QMap"); + + // Set the list elements. + for (QMap >::iterator it = sipCpp->begin(); it != sipCpp->end(); ++it) +@@ -531,7 +531,7 @@ template + { + qint64 k = PyLong_AsLongLong(kobj); + +- // using sipConvertToMappedType to convert directly to QMap doesn't work ++ // using sipConvertToType to convert directly to QMap doesn't work + // and ends with a segfault + + QMap qm2; +@@ -1025,7 +1025,7 @@ template + Py_ssize_t i = 0; + + +- const sipMappedType *qlist_type = sipFindMappedType("QList"); ++ const sipTypeDef *qlist_type = sipFindType("QList"); + + + // Check the type if that is all that is required. +@@ -1051,7 +1051,7 @@ template + + QString *t1 = reinterpret_cast(sipConvertToType(t1obj, sipType_QString, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr)); + +- QList *t2 = reinterpret_cast< QList * >(sipConvertToMappedType(t2obj, qlist_type, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr)); ++ QList *t2 = reinterpret_cast< QList * >(sipConvertToType(t2obj, qlist_type, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr)); + if (*sipIsErr) + { + sipReleaseType(t2, sipType_TYPE2, state); +diff --git a/src/core/geometry/qgsgeometry.h b/src/core/geometry/qgsgeometry.h +index 98aaa1e3cf2c..a7599b1265f3 100644 +--- a/src/core/geometry/qgsgeometry.h ++++ b/src/core/geometry/qgsgeometry.h +@@ -1558,7 +1558,7 @@ class CORE_EXPORT QgsGeometry + } + else + { +- const sipMappedType *qvector_type = sipFindMappedType( "QVector" ); ++ const sipTypeDef *qvector_type = sipFindType( "QVector" ); + sipRes = sipConvertFromNewType( new QVector< QgsPointXY >( sipCpp->randomPointsInPolygon( a0, a1 ) ), qvector_type, Py_None ); + } + % End +@@ -1731,7 +1731,7 @@ class CORE_EXPORT QgsGeometry + } + else + { +- const sipMappedType *qvector_type = sipFindMappedType( "QVector< QgsPointXY >" ); ++ const sipTypeDef *qvector_type = sipFindType( "QVector< QgsPointXY >" ); + sipRes = sipConvertFromNewType( new QgsPolylineXY( sipCpp->asPolyline() ), qvector_type, Py_None ); + } + % End +@@ -1775,7 +1775,7 @@ class CORE_EXPORT QgsGeometry + } + else + { +- const sipMappedType *qvector_type = sipFindMappedType( "QVector>" ); ++ const sipTypeDef *qvector_type = sipFindType( "QVector>" ); + sipRes = sipConvertFromNewType( new QgsPolygonXY( sipCpp->asPolygon() ), qvector_type, Py_None ); + } + % End +@@ -1817,7 +1817,7 @@ class CORE_EXPORT QgsGeometry + } + else + { +- const sipMappedType *qvector_type = sipFindMappedType( "QVector< QgsPointXY >" ); ++ const sipTypeDef *qvector_type = sipFindType( "QVector< QgsPointXY >" ); + sipRes = sipConvertFromNewType( new QgsPolylineXY( sipCpp->asMultiPoint() ), qvector_type, Py_None ); + } + % End +@@ -1861,7 +1861,7 @@ class CORE_EXPORT QgsGeometry + } + else + { +- const sipMappedType *qvector_type = sipFindMappedType( "QVector>" ); ++ const sipTypeDef *qvector_type = sipFindType( "QVector>" ); + sipRes = sipConvertFromNewType( new QgsMultiPolylineXY( sipCpp->asMultiPolyline() ), qvector_type, Py_None ); + } + % End +@@ -1905,7 +1905,7 @@ class CORE_EXPORT QgsGeometry + } + else + { +- const sipMappedType *qvector_type = sipFindMappedType( "QVector>>" ); ++ const sipTypeDef *qvector_type = sipFindType( "QVector>>" ); + sipRes = sipConvertFromNewType( new QgsMultiPolygonXY( sipCpp->asMultiPolygon() ), qvector_type, Py_None ); + } + % End + +From 12203f0ce52705c95c477934c7cdf09d02fccbe6 Mon Sep 17 00:00:00 2001 +From: Dmitry Shachnev +Date: Wed, 15 Jul 2020 21:48:44 +0300 +Subject: [PATCH 2/3] Remove use of deprecated sipCanConvertToEnum + +sipConvertToEnum will raise an exception itself if the type is wrong. +--- + python/core/auto_generated/geometry/qgspoint.sip.in | 3 +-- + src/core/geometry/qgspoint.h | 3 +-- + 2 files changed, 2 insertions(+), 4 deletions(-) + +diff --git a/python/core/auto_generated/geometry/qgspoint.sip.in b/python/core/auto_generated/geometry/qgspoint.sip.in +index 464892212925..80e579894c3d 100644 +--- a/python/core/auto_generated/geometry/qgspoint.sip.in ++++ b/python/core/auto_generated/geometry/qgspoint.sip.in +@@ -88,8 +88,7 @@ based on the following rules: + ( a0 == Py_None || PyFloat_AsDouble( a0 ) != -1.0 || !PyErr_Occurred() ) && + ( a1 == Py_None || PyFloat_AsDouble( a1 ) != -1.0 || !PyErr_Occurred() ) && + ( a2 == Py_None || PyFloat_AsDouble( a2 ) != -1.0 || !PyErr_Occurred() ) && +- ( a3 == Py_None || PyFloat_AsDouble( a3 ) != -1.0 || !PyErr_Occurred() ) && +- ( a4 == Py_None || sipCanConvertToEnum( a4, sipType_QgsWkbTypes_Type ) ) ) ++ ( a3 == Py_None || PyFloat_AsDouble( a3 ) != -1.0 || !PyErr_Occurred() ) ) + { + double x = a0 == Py_None ? std::numeric_limits::quiet_NaN() : PyFloat_AsDouble( a0 ); + double y = a1 == Py_None ? std::numeric_limits::quiet_NaN() : PyFloat_AsDouble( a1 ); +diff --git a/src/core/geometry/qgspoint.h b/src/core/geometry/qgspoint.h +index 1b28d2a9c83e..9840f5615f1f 100644 +--- a/src/core/geometry/qgspoint.h ++++ b/src/core/geometry/qgspoint.h +@@ -110,8 +110,7 @@ class CORE_EXPORT QgsPoint: public QgsAbstractGeometry + ( a0 == Py_None || PyFloat_AsDouble( a0 ) != -1.0 || !PyErr_Occurred() ) && + ( a1 == Py_None || PyFloat_AsDouble( a1 ) != -1.0 || !PyErr_Occurred() ) && + ( a2 == Py_None || PyFloat_AsDouble( a2 ) != -1.0 || !PyErr_Occurred() ) && +- ( a3 == Py_None || PyFloat_AsDouble( a3 ) != -1.0 || !PyErr_Occurred() ) && +- ( a4 == Py_None || sipCanConvertToEnum( a4, sipType_QgsWkbTypes_Type ) ) ) ++ ( a3 == Py_None || PyFloat_AsDouble( a3 ) != -1.0 || !PyErr_Occurred() ) ) + { + double x = a0 == Py_None ? std::numeric_limits::quiet_NaN() : PyFloat_AsDouble( a0 ); + double y = a1 == Py_None ? std::numeric_limits::quiet_NaN() : PyFloat_AsDouble( a1 ); + +From 6e9d42d70099ac5d21e421fb75f55d428ea9e994 Mon Sep 17 00:00:00 2001 +From: Dmitry Shachnev +Date: Wed, 15 Jul 2020 21:50:25 +0300 +Subject: [PATCH 3/3] Replace deprecated sipTransferBreak with sipTransferTo + +--- + python/core/auto_generated/raster/qgsrasterpipe.sip.in | 2 +- + src/core/raster/qgsrasterpipe.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/python/core/auto_generated/raster/qgsrasterpipe.sip.in b/python/core/auto_generated/raster/qgsrasterpipe.sip.in +index 5e65eec71451..d5a71e9d48b0 100644 +--- a/python/core/auto_generated/raster/qgsrasterpipe.sip.in ++++ b/python/core/auto_generated/raster/qgsrasterpipe.sip.in +@@ -54,7 +54,7 @@ if connection would fail, the interface is not inserted and ``False`` is returne + // if insertion failed transfer ownership back to python + PyObject *o = sipGetPyObject( a1, sipType_QgsRasterInterface ); + if ( o ) +- sipTransferBreak( o ); ++ sipTransferTo( o, NULL ); + } + %End + +diff --git a/src/core/raster/qgsrasterpipe.h b/src/core/raster/qgsrasterpipe.h +index 424a02279fdc..0da814011ae0 100644 +--- a/src/core/raster/qgsrasterpipe.h ++++ b/src/core/raster/qgsrasterpipe.h +@@ -83,7 +83,7 @@ class CORE_EXPORT QgsRasterPipe + // if insertion failed transfer ownership back to python + PyObject *o = sipGetPyObject( a1, sipType_QgsRasterInterface ); + if ( o ) +- sipTransferBreak( o ); ++ sipTransferTo( o, NULL ); + } + % End + #endif diff --git a/qgis.changes b/qgis.changes index b50c8e3..df46f4a 100644 --- a/qgis.changes +++ b/qgis.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Fri Sep 25 20:41:44 UTC 2020 - Benjamin Greiner + +- support SIP5 with qgis-pr37842-sip5.patch gh#qgis/QGIS#37842 + ------------------------------------------------------------------- Wed Sep 16 15:37:24 UTC 2020 - Michel Normand diff --git a/qgis.spec b/qgis.spec index f4d14e5..5efe3a7 100644 --- a/qgis.spec +++ b/qgis.spec @@ -28,6 +28,8 @@ Source: https://qgis.org/downloads/%{name}-%{version}.tar.bz2 Source1: https://qgis.org/downloads/%{name}-%{version}.tar.bz2.sha256 Source2: %{name}.rpmlintrc Source3: qgis_sample_data.zip +# PATCH-FIX-UPSTREAM https://github.com/qgis/QGIS/pull/37842 Get rid of SIP deprecated functions (support sip5) +Patch0: https://github.com/qgis/QGIS/pull/37842.patch#/qgis-pr37842-sip5.patch BuildRequires: FastCGI-devel BuildRequires: bison >= 2.4 BuildRequires: cmake >= 3.0.0 @@ -49,7 +51,6 @@ BuildRequires: opencl-cpp-headers BuildRequires: pkgconfig BuildRequires: poppler-tools BuildRequires: protobuf-devel -BuildRequires: python-qscintilla-qt5-sip BuildRequires: python3-GDAL BuildRequires: python3-Jinja2 BuildRequires: python3-OWSLib @@ -58,8 +59,9 @@ BuildRequires: python3-future BuildRequires: python3-psycopg2 BuildRequires: python3-pygments BuildRequires: python3-qscintilla-qt5 +BuildRequires: python3-qscintilla-qt5-sip BuildRequires: python3-qt5-devel -BuildRequires: python3-sip-devel > 4.12 +BuildRequires: python3-sip-devel > 5.3 BuildRequires: python3-six BuildRequires: python3-termcolor BuildRequires: qtkeychain-qt5-devel >= 0.5 @@ -127,7 +129,6 @@ Requires: python3-future Requires: python3-psycopg2 # Those are not picked by obs Requires: python3-qscintilla-qt5 -Requires: python3-sip > 4.12 Requires: python3-six Requires: python3-termcolor Recommends: %{name}-sample-data