[Git][debian-gis-team/qgis][master] Add patches by Dmitry Shachnev to fix sip5 support.

Bas Couwenberg gitlab at salsa.debian.org
Mon Sep 21 15:37:47 BST 2020



Bas Couwenberg pushed to branch master at Debian GIS Project / qgis


Commits:
89973f43 by Bas Couwenberg at 2020-09-21T16:37:23+02:00
Add patches by Dmitry Shachnev to fix sip5 support.

- - - - -


4 changed files:

- debian/changelog
- + debian/patches/pr37842.patch
- + debian/patches/pr37901.patch
- debian/patches/series


Changes:

=====================================
debian/changelog
=====================================
@@ -1,3 +1,9 @@
+qgis (3.10.10+dfsg-2) UNRELEASED; urgency=medium
+
+  * Add patches by Dmitry Shachnev to fix sip5 support.
+
+ -- Bas Couwenberg <sebastic at debian.org>  Mon, 21 Sep 2020 16:33:45 +0200
+
 qgis (3.10.10+dfsg-1) unstable; urgency=medium
 
   * Update symbols for other architectures.


=====================================
debian/patches/pr37842.patch
=====================================
@@ -0,0 +1,343 @@
+Description: Get rid of SIP deprecated functions
+Author: Dmitry Shachnev <mitya57 at gmail.com>
+Origin: https://github.com/qgis/QGIS/pull/37842
+Bug: https://github.com/qgis/QGIS/issues/37542
+Bug-Debian: https://bugs.debian.org/964132
+
+--- a/python/core/auto_generated/geometry/qgsgeometry.sip.in
++++ b/python/core/auto_generated/geometry/qgsgeometry.sip.in
+@@ -1502,7 +1502,7 @@ is null, a ValueError will be raised.
+     }
+     else
+     {
+-      const sipMappedType *qvector_type = sipFindMappedType( "QVector<QgsPointXY>" );
++      const sipTypeDef *qvector_type = sipFindType( "QVector<QgsPointXY>" );
+       sipRes = sipConvertFromNewType( new QVector< QgsPointXY >( sipCpp->randomPointsInPolygon( a0, a1 ) ), qvector_type, Py_None );
+     }
+ %End
+@@ -1616,7 +1616,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
+@@ -1647,7 +1647,7 @@ will be raised.
+     }
+     else
+     {
+-      const sipMappedType *qvector_type = sipFindMappedType( "QVector<QVector<QgsPointXY>>" );
++      const sipTypeDef *qvector_type = sipFindType( "QVector<QVector<QgsPointXY>>" );
+       sipRes = sipConvertFromNewType( new QgsPolygonXY( sipCpp->asPolygon() ), qvector_type, Py_None );
+     }
+ %End
+@@ -1677,7 +1677,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
+@@ -1708,7 +1708,7 @@ will be raised.
+     }
+     else
+     {
+-      const sipMappedType *qvector_type = sipFindMappedType( "QVector<QVector<QgsPointXY>>" );
++      const sipTypeDef *qvector_type = sipFindType( "QVector<QVector<QgsPointXY>>" );
+       sipRes = sipConvertFromNewType( new QgsMultiPolylineXY( sipCpp->asMultiPolyline() ), qvector_type, Py_None );
+     }
+ %End
+@@ -1739,7 +1739,7 @@ will be raised.
+     }
+     else
+     {
+-      const sipMappedType *qvector_type = sipFindMappedType( "QVector<QVector<QVector<QgsPointXY>>>" );
++      const sipTypeDef *qvector_type = sipFindType( "QVector<QVector<QVector<QgsPointXY>>>" );
+       sipRes = sipConvertFromNewType( new QgsMultiPolygonXY( sipCpp->asMultiPolygon() ), qvector_type, Py_None );
+     }
+ %End
+--- a/python/core/conversions.sip
++++ b/python/core/conversions.sip
+@@ -41,7 +41,7 @@ template <TYPE>
+   if ((l = PyList_New(sipCpp->size())) == NULL)
+     return NULL;
+ 
+-  const sipMappedType *qvector_type = sipFindMappedType("QVector<TYPE>");
++  const sipTypeDef *qvector_type = sipFindType("QVector<TYPE>");
+ 
+   // Set the list elements.
+   for (int i = 0; i < sipCpp->size(); ++i)
+@@ -62,7 +62,7 @@ template <TYPE>
+ %End
+ 
+ %ConvertToTypeCode
+-  const sipMappedType *qvector_type = sipFindMappedType("QVector<TYPE>");
++  const sipTypeDef *qvector_type = sipFindType("QVector<TYPE>");
+ 
+   // Check the type if that is all that is required.
+   if (sipIsErr == NULL)
+@@ -71,7 +71,7 @@ template <TYPE>
+       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 <TYPE>
+   {
+     int state;
+     //TYPE *t = reinterpret_cast<TYPE *>(sipConvertToType(PyList_GET_ITEM(sipPy, i), sipType_TYPE, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr));
+-    QVector<TYPE> *t = reinterpret_cast< QVector<TYPE> * >(sipConvertToMappedType(PyList_GET_ITEM(sipPy, i), qvector_type, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr));
++    QVector<TYPE> *t = reinterpret_cast< QVector<TYPE> * >(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 <TYPE>
+   if ((l = PyList_New(sipCpp->size())) == NULL)
+     return NULL;
+ 
+-  const sipMappedType *qvector_type = sipFindMappedType("QVector<QVector<TYPE> >");
++  const sipTypeDef *qvector_type = sipFindType("QVector<QVector<TYPE> >");
+ 
+   // Set the list elements.
+   for (int i = 0; i < sipCpp->size(); ++i)
+@@ -139,7 +139,7 @@ template <TYPE>
+ 
+ %ConvertToTypeCode
+ 
+-  const sipMappedType *qvector_type = sipFindMappedType("QVector<QVector<TYPE> >");
++  const sipTypeDef *qvector_type = sipFindType("QVector<QVector<TYPE> >");
+ 
+   // Check the type if that is all that is required.
+   if (sipIsErr == NULL)
+@@ -148,7 +148,7 @@ template <TYPE>
+       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 <TYPE>
+   {
+     int state;
+     //TYPE *t = reinterpret_cast<TYPE *>(sipConvertToType(PyList_GET_ITEM(sipPy, i), sipType_TYPE, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr));
+-    QVector<QVector<TYPE> > *t = reinterpret_cast< QVector< QVector<TYPE> > * >(sipConvertToMappedType(PyList_GET_ITEM(sipPy, i), qvector_type, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr));
++    QVector<QVector<TYPE> > *t = reinterpret_cast< QVector< QVector<TYPE> > * >(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 <TYPE>
+   if ((l = PyList_New(sipCpp->size())) == NULL)
+     return NULL;
+ 
+-  const sipMappedType *qlist_type = sipFindMappedType("QList<TYPE>");
++  const sipTypeDef *qlist_type = sipFindType("QList<TYPE>");
+ 
+   // Set the list elements.
+   for (int i = 0; i < sipCpp->size(); ++i)
+@@ -215,7 +215,7 @@ template <TYPE>
+ %End
+ 
+ %ConvertToTypeCode
+-  const sipMappedType *qlist_type = sipFindMappedType("QList<TYPE>");
++  const sipTypeDef *qlist_type = sipFindType("QList<TYPE>");
+ 
+   // Check the type if that is all that is required.
+   if (sipIsErr == NULL)
+@@ -224,7 +224,7 @@ template <TYPE>
+       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 <TYPE>
+   {
+     int state;
+     //TYPE *t = reinterpret_cast<TYPE *>(sipConvertToType(PyList_GET_ITEM(sipPy, i), sipType_TYPE, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr));
+-    QList<TYPE> *t = reinterpret_cast< QList<TYPE> * >(sipConvertToMappedType(PyList_GET_ITEM(sipPy, i), qlist_type, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr));
++    QList<TYPE> *t = reinterpret_cast< QList<TYPE> * >(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<TYPE>
+   if ((d = PyDict_New()) == NULL)
+     return NULL;
+ 
+-  const sipMappedType *qmap2 = sipFindMappedType("QMap<int, TYPE>");
++  const sipTypeDef *qmap2 = sipFindType("QMap<int, TYPE>");
+ 
+   // Set the list elements.
+   for (QMap<qint64, QMap<int, TYPE> >::iterator it = sipCpp->begin(); it != sipCpp->end(); ++it)
+@@ -531,7 +531,7 @@ template<TYPE>
+   {
+     qint64 k = PyLong_AsLongLong(kobj);
+ 
+-    // using sipConvertToMappedType to convert directly to QMap<int, TYPE> doesn't work
++    // using sipConvertToType to convert directly to QMap<int, TYPE> doesn't work
+     // and ends with a segfault
+ 
+     QMap<int, TYPE> qm2;
+@@ -1025,7 +1025,7 @@ template<TYPE2>
+     Py_ssize_t i = 0;
+ 
+ 
+-    const sipMappedType *qlist_type = sipFindMappedType("QList<TYPE2>");
++    const sipTypeDef *qlist_type = sipFindType("QList<TYPE2>");
+ 
+ 
+     // Check the type if that is all that is required.
+@@ -1051,7 +1051,7 @@ template<TYPE2>
+ 
+         QString *t1 = reinterpret_cast<QString *>(sipConvertToType(t1obj, sipType_QString, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr));
+ 
+-    QList<TYPE2> *t2 = reinterpret_cast< QList<TYPE2> * >(sipConvertToMappedType(t2obj, qlist_type, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr));
++    QList<TYPE2> *t2 = reinterpret_cast< QList<TYPE2> * >(sipConvertToType(t2obj, qlist_type, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr));
+         if (*sipIsErr)
+         {
+             sipReleaseType(t2, sipType_TYPE2, state);
+--- a/src/core/geometry/qgsgeometry.h
++++ b/src/core/geometry/qgsgeometry.h
+@@ -1521,7 +1521,7 @@ class CORE_EXPORT QgsGeometry
+     }
+     else
+     {
+-      const sipMappedType *qvector_type = sipFindMappedType( "QVector<QgsPointXY>" );
++      const sipTypeDef *qvector_type = sipFindType( "QVector<QgsPointXY>" );
+       sipRes = sipConvertFromNewType( new QVector< QgsPointXY >( sipCpp->randomPointsInPolygon( a0, a1 ) ), qvector_type, Py_None );
+     }
+     % End
+@@ -1662,7 +1662,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
+@@ -1706,7 +1706,7 @@ class CORE_EXPORT QgsGeometry
+     }
+     else
+     {
+-      const sipMappedType *qvector_type = sipFindMappedType( "QVector<QVector<QgsPointXY>>" );
++      const sipTypeDef *qvector_type = sipFindType( "QVector<QVector<QgsPointXY>>" );
+       sipRes = sipConvertFromNewType( new QgsPolygonXY( sipCpp->asPolygon() ), qvector_type, Py_None );
+     }
+     % End
+@@ -1748,7 +1748,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
+@@ -1792,7 +1792,7 @@ class CORE_EXPORT QgsGeometry
+     }
+     else
+     {
+-      const sipMappedType *qvector_type = sipFindMappedType( "QVector<QVector<QgsPointXY>>" );
++      const sipTypeDef *qvector_type = sipFindType( "QVector<QVector<QgsPointXY>>" );
+       sipRes = sipConvertFromNewType( new QgsMultiPolylineXY( sipCpp->asMultiPolyline() ), qvector_type, Py_None );
+     }
+     % End
+@@ -1836,7 +1836,7 @@ class CORE_EXPORT QgsGeometry
+     }
+     else
+     {
+-      const sipMappedType *qvector_type = sipFindMappedType( "QVector<QVector<QVector<QgsPointXY>>>" );
++      const sipTypeDef *qvector_type = sipFindType( "QVector<QVector<QVector<QgsPointXY>>>" );
+       sipRes = sipConvertFromNewType( new QgsMultiPolygonXY( sipCpp->asMultiPolygon() ), qvector_type, Py_None );
+     }
+     % End
+--- a/python/core/auto_generated/geometry/qgspoint.sip.in
++++ b/python/core/auto_generated/geometry/qgspoint.sip.in
+@@ -87,8 +87,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<double>::quiet_NaN() : PyFloat_AsDouble( a0 );
+       double y = a1 == Py_None ? std::numeric_limits<double>::quiet_NaN() : PyFloat_AsDouble( a1 );
+--- a/src/core/geometry/qgspoint.h
++++ b/src/core/geometry/qgspoint.h
+@@ -109,8 +109,7 @@ class CORE_EXPORT QgsPoint: public QgsAb
+       ( 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<double>::quiet_NaN() : PyFloat_AsDouble( a0 );
+       double y = a1 == Py_None ? std::numeric_limits<double>::quiet_NaN() : PyFloat_AsDouble( a1 );
+--- 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
+       // if insertion failed transfer ownership back to python
+       PyObject *o = sipGetPyObject( a1, sipType_QgsRasterInterface );
+       if ( o )
+-        sipTransferBreak( o );
++        sipTransferTo( o, NULL );
+     }
+ %End
+ 
+--- 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


=====================================
debian/patches/pr37901.patch
=====================================
@@ -0,0 +1,184 @@
+Description: Add support for SIP v5 to the build system
+Author: Dmitry Shachnev <mitya57 at gmail.com>
+Origin: https://github.com/qgis/QGIS/pull/37901
+Bug: https://github.com/qgis/QGIS/issues/37542
+Bug-Debian: https://bugs.debian.org/964132
+
+--- a/cmake/FindSIP.py
++++ b/cmake/FindSIP.py
+@@ -30,17 +30,31 @@
+ # Redistribution and use is allowed according to the terms of the BSD license.
+ # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+ 
+-import sipconfig
++try:
++    import sipbuild
++except ImportError:  # Code for SIP v4
++    import sipconfig
+ 
+-sipcfg = sipconfig.Configuration()
+-print("sip_version:%06.0x" % sipcfg.sip_version)
+-print("sip_version_num:%d" % sipcfg.sip_version)
+-print("sip_version_str:%s" % sipcfg.sip_version_str)
+-print("sip_bin:%s" % sipcfg.sip_bin)
+-print("default_sip_dir:%s" % sipcfg.default_sip_dir)
+-print("sip_inc_dir:%s" % sipcfg.sip_inc_dir)
+-# SIP 4.19.10+ has new sipcfg.sip_module_dir
+-if hasattr(sipcfg, "sip_module_dir"):
+-    print("sip_module_dir:%s" % sipcfg.sip_module_dir)
+-else:
+-    print("sip_module_dir:%s" % sipcfg.sip_mod_dir)
++    sipcfg = sipconfig.Configuration()
++    print("sip_version:%06.0x" % sipcfg.sip_version)
++    print("sip_version_num:%d" % sipcfg.sip_version)
++    print("sip_version_str:%s" % sipcfg.sip_version_str)
++    print("sip_bin:%s" % sipcfg.sip_bin)
++    print("default_sip_dir:%s" % sipcfg.default_sip_dir)
++    print("sip_inc_dir:%s" % sipcfg.sip_inc_dir)
++    # SIP 4.19.10+ has new sipcfg.sip_module_dir
++    if hasattr(sipcfg, "sip_module_dir"):
++        print("sip_module_dir:%s" % sipcfg.sip_module_dir)
++    else:
++        print("sip_module_dir:%s" % sipcfg.sip_mod_dir)
++else:  # Code for SIP v5
++    print("sip_version:%06.0x" % sipbuild.version.SIP_VERSION)
++    print("sip_version_num:%d" % sipbuild.version.SIP_VERSION)
++    print("sip_version_str:%s" % sipbuild.version.SIP_VERSION_STR)
++
++    import shutil
++    print("sip_bin:%s" % shutil.which("sip5"))
++
++    from distutils.sysconfig import get_python_lib
++    python_modules_dir = get_python_lib(plat_specific=1)
++    print("default_sip_dir:%s" % python_modules_dir)
+--- a/cmake/FindSIP.cmake
++++ b/cmake/FindSIP.cmake
+@@ -40,8 +40,12 @@ ELSE(SIP_VERSION)
+     STRING(REGEX REPLACE ".*\nsip_version_str:([^\n]+).*$" "\\1" SIP_VERSION_STR ${sip_config})
+     STRING(REGEX REPLACE ".*\nsip_bin:([^\n]+).*$" "\\1" SIP_BINARY_PATH ${sip_config})
+     STRING(REGEX REPLACE ".*\ndefault_sip_dir:([^\n]+).*$" "\\1" SIP_DEFAULT_SIP_DIR ${sip_config})
+-    STRING(REGEX REPLACE ".*\nsip_inc_dir:([^\n]+).*$" "\\1" SIP_INCLUDE_DIR ${sip_config})
+-    STRING(REGEX REPLACE ".*\nsip_module_dir:([^\n]+).*$" "\\1" SIP_MODULE_DIR ${sip_config})
++    IF(${SIP_VERSION_STR} VERSION_LESS 5)
++      STRING(REGEX REPLACE ".*\nsip_inc_dir:([^\n]+).*$" "\\1" SIP_INCLUDE_DIR ${sip_config})
++      STRING(REGEX REPLACE ".*\nsip_module_dir:([^\n]+).*$" "\\1" SIP_MODULE_DIR ${sip_config})
++    ELSE(${SIP_VERSION_STR} VERSION_LESS 5)
++      FIND_PROGRAM(SIP_MODULE_EXECUTABLE sip-module)
++    ENDIF(${SIP_VERSION_STR} VERSION_LESS 5)
+     SET(SIP_FOUND TRUE)
+   ENDIF(sip_config)
+ 
+--- a/python/CMakeLists.txt
++++ b/python/CMakeLists.txt
+@@ -84,6 +84,12 @@ INCLUDE_DIRECTORIES(SYSTEM
+   ${SQLITE3_INCLUDE_DIR}
+ )
+ 
++IF (${SIP_VERSION_STR} VERSION_LESS 5)
++  INCLUDE_DIRECTORIES(SYSTEM
++    ${SIP_INCLUDE_DIR}
++  )
++ENDIF (${SIP_VERSION_STR} VERSION_LESS 5)
++
+ IF (WITH_GUI)
+   INCLUDE_DIRECTORIES(SYSTEM
+     ${QSCINTILLA_INCLUDE_DIR}
+--- a/cmake/SIPMacros.cmake
++++ b/cmake/SIPMacros.cmake
+@@ -121,6 +121,12 @@ MACRO(GENERATE_SIP_PYTHON_MODULE_CODE MO
+     DEPENDS ${SIP_EXTRA_FILES_DEPEND}
+     VERBATIM
+   )
++  IF (SIP_MODULE_EXECUTABLE)
++    ADD_CUSTOM_COMMAND(
++      OUTPUT ${_sip_output_files} APPEND
++      COMMAND ${SIP_MODULE_EXECUTABLE} --target-dir ${CMAKE_CURRENT_BINARY_DIR}/${_module_path} --sip-h ${PYQT5_SIP_IMPORT}
++    )
++  ENDIF (SIP_MODULE_EXECUTABLE)
+ 
+   ADD_CUSTOM_TARGET(generate_sip_${MODULE_NAME}_cpp_files DEPENDS ${_sip_output_files})
+ 
+--- a/cmake/FindPyQt5.py
++++ b/cmake/FindPyQt5.py
+@@ -30,14 +30,15 @@
+ # Redistribution and use is allowed according to the terms of the BSD license.
+ # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+ 
++import os.path
++import PyQt5.QtCore
++
+ try:
+-    import PyQt5.pyqtconfig
+-    pyqtcfg = PyQt5.pyqtconfig.Configuration()
++    __import__('sipbuild')
+ except ImportError:
+-    import PyQt5.QtCore
+-    import sipconfig # won't work for SIP v5
+-    import os.path
++    import sipconfig  # won't work for SIP v5
+     import sys
++
+     cfg = sipconfig.Configuration()
+     sip_dir = cfg.default_sip_dir
+     if sys.platform.startswith('freebsd'):
+@@ -50,39 +51,47 @@ except ImportError:
+         if os.path.exists(os.path.join(p, "QtCore", "QtCoremod.sip")):
+             sip_dir = p
+             break
++    else:
++        sys.exit(1)
+     cfg = {
+-        'pyqt_version': PyQt5.QtCore.PYQT_VERSION,
+-        'pyqt_version_str': PyQt5.QtCore.PYQT_VERSION_STR,
+-        'pyqt_sip_flags': PyQt5.QtCore.PYQT_CONFIGURATION['sip_flags'],
+         'pyqt_mod_dir': os.path.join(cfg.default_mod_dir, "PyQt5"),
+         'pyqt_sip_dir': sip_dir,
+         'pyqt_bin_dir': cfg.default_bin_dir,
+     }
+-    pyqtcfg = sipconfig.Configuration([cfg])
++else:  # Code for SIP v5
++    from distutils.sysconfig import get_python_lib
++    import shutil
++    cfg = {
++        'pyqt_mod_dir': os.path.dirname(PyQt5.__file__),
++        'pyqt_sip_dir': os.path.join(get_python_lib(plat_specific=1), "PyQt5", "bindings"),
++        'pyqt_bin_dir': os.path.dirname(shutil.which("pyuic5")),
++    }
+ 
+-print("pyqt_version:%06.0x" % pyqtcfg.pyqt_version)
+-print("pyqt_version_num:%d" % pyqtcfg.pyqt_version)
+-print("pyqt_version_str:%s" % pyqtcfg.pyqt_version_str)
++print("pyqt_version:%06.0x" % PyQt5.QtCore.PYQT_VERSION)
++print("pyqt_version_num:%d" % PyQt5.QtCore.PYQT_VERSION)
++print("pyqt_version_str:%s" % PyQt5.QtCore.PYQT_VERSION_STR)
+ 
+ pyqt_version_tag = ""
+ in_t = False
+-for item in pyqtcfg.pyqt_sip_flags.split(' '):
++pyqt_config_list = PyQt5.QtCore.PYQT_CONFIGURATION["sip_flags"].split(' ')
++for item in pyqt_config_list:
+     if item == "-t":
+         in_t = True
+     elif in_t:
+-        if item.startswith("Qt_4"):
++        if item.startswith("Qt_5"):
+             pyqt_version_tag = item
+     else:
+         in_t = False
+ print("pyqt_version_tag:%s" % pyqt_version_tag)
+ 
+-print("pyqt_mod_dir:%s" % pyqtcfg.pyqt_mod_dir)
+-print("pyqt_sip_dir:%s" % pyqtcfg.pyqt_sip_dir)
+-print("pyqt_sip_flags:%s" % pyqtcfg.pyqt_sip_flags)
+-print("pyqt_bin_dir:%s" % pyqtcfg.pyqt_bin_dir)
++print("pyqt_mod_dir:%s" % cfg['pyqt_mod_dir'])
++print("pyqt_sip_dir:%s" % cfg['pyqt_sip_dir'])
++print("pyqt_sip_flags:%s" % PyQt5.QtCore.PYQT_CONFIGURATION['sip_flags'])
++print("pyqt_bin_dir:%s" % cfg['pyqt_bin_dir'])
+ 
+ try:
+     import PyQt5.sip
++
+     print("pyqt_sip_module:PyQt5.sip")
+ except:
+     print("pyqt_sip_module:sip")


=====================================
debian/patches/series
=====================================
@@ -3,3 +3,5 @@ developersmap-use-debian-package.patch
 exclude-elvensword-resources.patch
 grass78.patch
 spelling-errors.patch
+pr37842.patch
+pr37901.patch



View it on GitLab: https://salsa.debian.org/debian-gis-team/qgis/-/commit/89973f430f8ee8b1c657bcea92ed4396da29bbb3

-- 
View it on GitLab: https://salsa.debian.org/debian-gis-team/qgis/-/commit/89973f430f8ee8b1c657bcea92ed4396da29bbb3
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-grass-devel/attachments/20200921/4190197f/attachment-0001.html>


More information about the Pkg-grass-devel mailing list