[Git][debian-gis-team/qgis][master] Add patch to fix FTBFS with GDAL 3.13.0. (closes: #1134181)
Bas Couwenberg (@sebastic)
gitlab at salsa.debian.org
Fri Apr 17 14:00:29 BST 2026
Bas Couwenberg pushed to branch master at Debian GIS Project / qgis
Commits:
c07362f5 by Bas Couwenberg at 2026-04-17T15:00:20+02:00
Add patch to fix FTBFS with GDAL 3.13.0. (closes: #1134181)
- - - - -
3 changed files:
- debian/changelog
- + debian/patches/gdal-3.13.patch
- debian/patches/series
Changes:
=====================================
debian/changelog
=====================================
@@ -1,3 +1,10 @@
+qgis (3.44.9+dfsg-2) UNRELEASED; urgency=medium
+
+ * Add patch to fix FTBFS with GDAL 3.13.0.
+ (closes: #1134181)
+
+ -- Bas Couwenberg <sebastic at debian.org> Fri, 17 Apr 2026 14:51:17 +0200
+
qgis (3.44.9+dfsg-1) unstable; urgency=medium
* Bump Standards-Version to 4.7.4, no changes.
=====================================
debian/patches/gdal-3.13.patch
=====================================
@@ -0,0 +1,245 @@
+Description: Fix FTBFS with GDAL 3.13.0.
+ error: invalid conversion from 'CSLConstList' {aka 'const char* const*'} to 'char**' [-fpermissive]
+ .
+ From GDAL 3.13.0 NEWS:
+ "
+ * GDALMajorObject: Use CSLConstList for GetMetadata, SetMetadata (API breakage)
+ "
+ https://github.com/OSGeo/gdal/blob/v3.13.0beta1/NEWS.md
+Author: Bas Couwenberg <sebastic at debian.org>
+Forwarded: not-needed
+
+--- a/src/core/providers/ogr/qgsogrproviderconnection.cpp
++++ b/src/core/providers/ogr/qgsogrproviderconnection.cpp
+@@ -419,7 +419,11 @@ void QgsOgrProviderConnection::setDefaul
+ mGeometryColumnCapabilities |= GeometryColumnCapability::SinglePolygon;
+ #endif
+
++#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(3, 13, 0)
++ CSLConstList driverMetadata = GDALGetMetadata( hDriver, nullptr );
++#else
+ char **driverMetadata = GDALGetMetadata( hDriver, nullptr );
++#endif
+
+ #if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(3,6,0)
+ if ( CSLFetchBoolean( driverMetadata, GDAL_DCAP_Z_GEOMETRIES, false ) )
+--- a/external/mdal/frmts/mdal_gdal.cpp
++++ b/external/mdal/frmts/mdal_gdal.cpp
+@@ -175,7 +175,11 @@ double MDAL::DriverGdal::parseMetadataTi
+ MDAL::DriverGdal::metadata_hash MDAL::DriverGdal::parseMetadata( GDALMajorObjectH gdalObject, const char *pszDomain /* = 0 */ )
+ {
+ MDAL::DriverGdal::metadata_hash meta;
++#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(3, 13, 0)
++ CSLConstList GDALmetadata = nullptr;
++#else
+ char **GDALmetadata = nullptr;
++#endif
+ GDALmetadata = GDALGetMetadata( gdalObject, pszDomain );
+
+ if ( GDALmetadata )
+--- a/src/core/qgsgdalutils.cpp
++++ b/src/core/qgsgdalutils.cpp
+@@ -496,7 +496,11 @@ QString QgsGdalUtils::helpCreationOption
+ if ( myGdalDriver )
+ {
+ // first report details and help page
++#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(3, 13, 0)
++ CSLConstList GDALmetadata = GDALGetMetadata( myGdalDriver, nullptr );
++#else
+ char **GDALmetadata = GDALGetMetadata( myGdalDriver, nullptr );
++#endif
+ message += QLatin1String( "Format Details:\n" );
+ message += QStringLiteral( " Extension: %1\n" ).arg( CSLFetchNameValue( GDALmetadata, GDAL_DMD_EXTENSION ) );
+ message += QStringLiteral( " Short Name: %1" ).arg( GDALGetDriverShortName( myGdalDriver ) );
+--- a/src/core/raster/qgsrasterfilewriter.cpp
++++ b/src/core/raster/qgsrasterfilewriter.cpp
+@@ -1090,7 +1090,11 @@ QString QgsRasterFileWriter::driverForEx
+ GDALDriverH drv = GDALGetDriver( i );
+ if ( drv )
+ {
++#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(3, 13, 0)
++ CSLConstList driverMetadata = GDALGetMetadata( drv, nullptr );
++#else
+ char **driverMetadata = GDALGetMetadata( drv, nullptr );
++#endif
+ if ( CSLFetchBoolean( driverMetadata, GDAL_DCAP_RASTER, false ) )
+ {
+ QString drvName = GDALGetDriverShortName( drv );
+@@ -1113,7 +1117,11 @@ QStringList QgsRasterFileWriter::extensi
+ GDALDriverH drv = GDALGetDriverByName( format.toLocal8Bit().data() );
+ if ( drv )
+ {
++#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(3, 13, 0)
++ CSLConstList driverMetadata = GDALGetMetadata( drv, nullptr );
++#else
+ char **driverMetadata = GDALGetMetadata( drv, nullptr );
++#endif
+ if ( CSLFetchBoolean( driverMetadata, GDAL_DCAP_RASTER, false ) )
+ {
+ return QString( GDALGetMetadataItem( drv, GDAL_DMD_EXTENSIONS, nullptr ) ).split( ' ' );
+--- a/src/core/providers/gdal/qgsgdalprovider.cpp
++++ b/src/core/providers/gdal/qgsgdalprovider.cpp
+@@ -517,7 +517,11 @@ void QgsGdalProvider::loadMetadata()
+ // read ESRI FileGeodatabase/Personal Geodatabase layer metadata
+ // (This branch is only possible on GDAL 3.7+, in earlier releases there was
+ // no raster OpenFileGDB driver)
++#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(3, 13, 0)
++ if ( CSLConstList GDALmetadata = GDALGetMetadata( mGdalDataset, "xml:documentation" ) )
++#else
+ if ( char **GDALmetadata = GDALGetMetadata( mGdalDataset, "xml:documentation" ) )
++#endif
+ {
+ const QString metadata( GDALmetadata[0] );
+ if ( !metadata.isEmpty() )
+@@ -565,7 +569,11 @@ QString QgsGdalProvider::htmlMetadata()
+ for ( int i = 1; i <= GDALGetRasterCount( dsForMetadata ); ++i )
+ {
+ GDALRasterBandH gdalBand = GDALGetRasterBand( dsForMetadata, i );
++#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(3, 13, 0)
++ CSLConstList GDALmetadata = GDALGetMetadata( gdalBand, nullptr );
++#else
+ char **GDALmetadata = GDALGetMetadata( gdalBand, nullptr );
++#endif
+ myMetadata += QStringLiteral( "<tr><td class=\"highlight\">" ) + tr( "Band %1" ).arg( i ) + QStringLiteral( "</td><td>" );
+ if ( GDALmetadata )
+ {
+@@ -596,7 +604,11 @@ QString QgsGdalProvider::htmlMetadata()
+ myMetadata += tr( "Mask band (exposed as alpha band)" ) + QStringLiteral( "<br />\n" );
+ }
+
++#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(3, 13, 0)
++ CSLConstList GDALmetadata = GDALGetMetadata( dsForMetadata, nullptr );
++#else
+ char **GDALmetadata = GDALGetMetadata( dsForMetadata, nullptr );
++#endif
+ if ( GDALmetadata )
+ {
+ QStringList metadata = QgsOgrUtils::cStringListToQStringList( GDALmetadata );
+@@ -1304,7 +1316,11 @@ QString QgsGdalProvider::generateBandNam
+
+ if ( mDriverName == QLatin1String( "netCDF" ) || mDriverName == QLatin1String( "GTiff" ) )
+ {
++#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(3, 13, 0)
++ CSLConstList GDALmetadata = GDALGetMetadata( mGdalDataset, nullptr );
++#else
+ char **GDALmetadata = GDALGetMetadata( mGdalDataset, nullptr );
++#endif
+ if ( GDALmetadata )
+ {
+ QStringList metadata = QgsOgrUtils::cStringListToQStringList( GDALmetadata );
+@@ -1847,7 +1863,11 @@ QList<QgsProviderSublayerDetails> QgsGda
+
+ QList<QgsProviderSublayerDetails> res;
+
++#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(3, 13, 0)
++ CSLConstList metadata = GDALGetMetadata( dataset, "SUBDATASETS" );
++#else
+ char **metadata = GDALGetMetadata( dataset, "SUBDATASETS" );
++#endif
+
+ QVariantMap uriParts = decodeGdalUri( baseUri );
+ const QString datasetPath = uriParts.value( QStringLiteral( "path" ) ).toString();
+--- a/src/core/providers/ogr/qgsogrprovidermetadata.cpp
++++ b/src/core/providers/ogr/qgsogrprovidermetadata.cpp
+@@ -103,7 +103,11 @@ bool QgsOgrProviderMetadata::createDatab
+ return false;
+ }
+
++#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(3, 13, 0)
++ CSLConstList metadata = GDALGetMetadata( poDriver, nullptr );
++#else
+ char **metadata = GDALGetMetadata( poDriver, nullptr );
++#endif
+
+ if ( !CSLFetchBoolean( metadata, GDAL_DCAP_VECTOR, false )
+ || !CSLFetchBoolean( metadata, GDAL_DCAP_CREATE, false ) )
+--- a/src/analysis/processing/qgsalgorithmimportphotos.cpp
++++ b/src/analysis/processing/qgsalgorithmimportphotos.cpp
+@@ -397,7 +397,11 @@ QVariantMap QgsImportPhotosAlgorithm::pr
+ continue;
+ }
+
++#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(3, 13, 0)
++ CSLConstList GDALmetadata = GDALGetMetadata( hDS.get(), nullptr );
++#else
+ char **GDALmetadata = GDALGetMetadata( hDS.get(), nullptr );
++#endif
+ if ( !GDALmetadata )
+ {
+ GDALmetadata = GDALGetMetadata( hDS.get(), "EXIF" );
+@@ -413,7 +417,11 @@ QVariantMap QgsImportPhotosAlgorithm::pr
+ continue;
+
+ QgsFeature f;
++#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(3, 13, 0)
++ const QVariantMap metadata = parseMetadataList( QgsOgrUtils::CSLConstListToQStringList( GDALmetadata ) );
++#else
+ const QVariantMap metadata = parseMetadataList( QgsOgrUtils::cStringListToQStringList( GDALmetadata ) );
++#endif
+
+ QgsPointXY tag;
+ if ( !extractGeoTagFromMetadata( metadata, tag ) )
+--- a/src/core/qgsvectorfilewriter.cpp
++++ b/src/core/qgsvectorfilewriter.cpp
+@@ -158,7 +158,11 @@ bool QgsVectorFileWriter::supportsFeatur
+ if ( !gdalDriver )
+ return false;
+
++#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(3, 13, 0)
++ CSLConstList driverMetadata = GDALGetMetadata( gdalDriver, nullptr );
++#else
+ char **driverMetadata = GDALGetMetadata( gdalDriver, nullptr );
++#endif
+ if ( !driverMetadata )
+ return false;
+
+@@ -4187,7 +4191,11 @@ QString QgsVectorFileWriter::driverForEx
+ GDALDriverH drv = GDALGetDriver( i );
+ if ( drv )
+ {
++#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(3, 13, 0)
++ CSLConstList driverMetadata = GDALGetMetadata( drv, nullptr );
++#else
+ char **driverMetadata = GDALGetMetadata( drv, nullptr );
++#endif
+ if ( CSLFetchBoolean( driverMetadata, GDAL_DCAP_CREATE, false ) && CSLFetchBoolean( driverMetadata, GDAL_DCAP_VECTOR, false ) )
+ {
+ QString drvName = GDALGetDriverShortName( drv );
+--- a/src/core/qgsogrutils.cpp
++++ b/src/core/qgsogrutils.cpp
+@@ -1153,6 +1153,21 @@ QgsFields QgsOgrUtils::stringToFields( c
+ return fields;
+ }
+
++QStringList QgsOgrUtils::CSLConstListToQStringList( CSLConstList stringList )
++{
++ if ( !stringList )
++ return {};
++
++ QStringList strings;
++ // presume null terminated string list
++ for ( qgssize i = 0; stringList[i]; ++i )
++ {
++ strings.append( QString::fromUtf8( stringList[i] ) );
++ }
++
++ return strings;
++}
++
+ QStringList QgsOgrUtils::cStringListToQStringList( char **stringList )
+ {
+ if ( !stringList )
+--- a/src/core/qgsogrutils.h
++++ b/src/core/qgsogrutils.h
+@@ -308,6 +308,11 @@ class CORE_EXPORT QgsOgrUtils
+ static QgsFields stringToFields( const QString &string, QTextCodec *encoding );
+
+ /**
++ * Converts a CSLConstList to a QStringList.
++ */
++ static QStringList CSLConstListToQStringList( CSLConstList stringList );
++
++ /**
+ * Converts a c string list to a QStringList. Presumes a null terminated string list.
+ *
+ * \since QGIS 3.2
=====================================
debian/patches/series
=====================================
@@ -2,3 +2,4 @@ developersmap-use-debian-package.patch
exclude-elvensword-resources.patch
exclude-cc-by-nc-resources.patch
spelling-errors.patch
+gdal-3.13.patch
View it on GitLab: https://salsa.debian.org/debian-gis-team/qgis/-/commit/c07362f5622a30ec16ddc1c74764464a9eca7989
--
View it on GitLab: https://salsa.debian.org/debian-gis-team/qgis/-/commit/c07362f5622a30ec16ddc1c74764464a9eca7989
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/20260417/ba3ffd29/attachment-0001.htm>
More information about the Pkg-grass-devel
mailing list