[From nobody Mon May  4 16:03:09 2026
Received: (at submit) by bugs.debian.org; 17 Apr 2026 12:50:51 +0000
X-Spam-Checker-Version: SpamAssassin 4.0.1-bugs.debian.org_2005_01_02
 (2024-03-25) on buxtehude.debian.org
X-Spam-Level: 
X-Spam-Status: No, score=-107.6 required=4.0 tests=BAYES_00,BODY_FOREX,
 DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,
 FOURLA,FROMDEVELOPER,FVGT_m_MULTI_ODD,SPF_HELO_NONE,SPF_NONE,
 UNPARSEABLE_RELAY,USER_IN_DKIM_WELCOMELIST,XMAILER_REPORTBUG
 autolearn=ham autolearn_force=no
 version=4.0.1-bugs.debian.org_2005_01_02
X-Spam-Bayes: score:0.0000 Tokens: new, 221; hammy, 150; neutral, 240; spammy,
 0. spammytokens:
 hammytokens:0.000-+--Hx-spam-relays-external:sk:stravin,
 0.000-+--H*RT:sk:stravin, 0.000-+--Hx-spam-relays-external:311,
 0.000-+--H*RT:311, 0.000-+--H*RT:108
Return-path: &lt;sebastic@debian.org&gt;
Received: from stravinsky.debian.org ([2001:41b8:202:deb::311:108]:59840)
 by buxtehude.debian.org with esmtps
 (TLS1.3:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256)
 (Exim 4.96) (envelope-from &lt;sebastic@debian.org&gt;) id 1wDiep-00E0w4-09
 for submit@bugs.debian.org; Fri, 17 Apr 2026 12:50:51 +0000
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debian.org; 
 s=smtpauto.stravinsky;
 h=X-Debian-User:Date:Message-ID:Subject:To:From:
 MIME-Version:Content-Type:Reply-To:Cc:Content-Transfer-Encoding:Content-ID:
 Content-Description:In-Reply-To:References;
 bh=px3G0z4ibM6MUFmvDPUbeIB8HIzpu+z+rcZZ7DC6m3k=; b=eM1g+F+Vz8XjQkmi4/grQlbsZg
 N5KZnRYIyuh4hakOtQY89miwxY6Dx8n/1KkkbkprKFWyPvmJ21iEo83MI52vv6VZITVEewsNJr33I
 jzFL3O0n87URRoCq3j4lqPNy3R54Up3NqTG8Ep5F9SpIT0vsXEZ8CfgflLBrqDgNQz1fwzO+dZV5R
 sQxS1TBWHBsiTQ5EahLHGlgGCa910n6tlnz/OO4ygbXberUeXeobyJfvxKTp7rgc/Vmme/xB+cQqn
 CWgaxpv69YGgxwj6e6Aoq0QDG0C/YRI6bc812qzoQfu8/gBq68gy5WU9/wwp/1Um2x6vdZESDGNJW
 4RYyV07w==;
Received: from authenticated user by stravinsky.debian.org with esmtpsa
 (TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256)
 (Exim 4.96) (envelope-from &lt;sebastic@debian.org&gt;)
 id 1wDien-00FOI9-0x; Fri, 17 Apr 2026 12:50:49 +0000
Received: by osiris.linuxminded.xs4all.nl (Postfix, from userid 1000)
 id 18ECE17400E7; Fri, 17 Apr 2026 14:50:48 +0200 (CEST)
Content-Type: multipart/mixed; boundary=&quot;===============1147963464490243681==&quot;
MIME-Version: 1.0
From: Bas Couwenberg &lt;sebastic@debian.org&gt;
To: Debian Bug Tracking System &lt;submit@bugs.debian.org&gt;
Subject: qgis: FTBFS with GDAL 3.13.0
Message-ID: &lt;177643024801.2826795.11715475925254404191.reportbug@osiris.linuxminded.xs4all.nl&gt;
X-Mailer: reportbug 13.2.0
Date: Fri, 17 Apr 2026 14:50:48 +0200
X-Debian-User: sebastic
Delivered-To: submit@bugs.debian.org

This is a multi-part MIME message sent by reportbug.


--===============1147963464490243681==
Content-Type: text/plain; charset=&quot;us-ascii&quot;
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

Source: qgis
Version: 3.44.9+dfsg-1
Severity: important
Tags: upstream ftbfs patch
User: debian-gis@lists.debian.org
Usertags: gdal-3.13

Dear Maintainer,

Your package FTBFS with GDAL 3.13.0:

 error: invalid conversion from 'CSLConstList' {aka 'const char* const*'} to 'char**' [-fpermissive]

&gt;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

The attached patch fixes the issue.

Kind Regards,

Bas

--===============1147963464490243681==
Content-Type: text/plain; charset=&quot;us-ascii&quot;
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename=&quot;qgis_3.44.9+dfsg-1.debdiff&quot;

diff -Nru qgis-3.44.9+dfsg/debian/patches/gdal-3.13.patch qgis-3.44.9+dfsg/debian/patches/gdal-3.13.patch
--- qgis-3.44.9+dfsg/debian/patches/gdal-3.13.patch	1970-01-01 01:00:00.000000000 +0100
+++ qgis-3.44.9+dfsg/debian/patches/gdal-3.13.patch	2026-04-17 12:05:14.000000000 +0200
@@ -0,0 +1,244 @@
+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:
+ &quot;
+  * GDALMajorObject: Use CSLConstList for GetMetadata, SetMetadata (API breakage)
+ &quot;
+ https://github.com/OSGeo/gdal/blob/v3.13.0beta1/NEWS.md
+Author: Bas Couwenberg &lt;sebastic@debian.org&gt;
+
+--- 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 &gt;= GDAL_COMPUTE_VERSION(3, 13, 0)
++  CSLConstList driverMetadata = GDALGetMetadata( hDriver, nullptr );
++#else
+   char **driverMetadata = GDALGetMetadata( hDriver, nullptr );
++#endif
+ 
+ #if GDAL_VERSION_NUM &gt;= 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 &gt;= 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 &gt;= GDAL_COMPUTE_VERSION(3, 13, 0)
++    CSLConstList GDALmetadata = GDALGetMetadata( myGdalDriver, nullptr );
++#else
+     char **GDALmetadata = GDALGetMetadata( myGdalDriver, nullptr );
++#endif
+     message += QLatin1String( &quot;Format Details:\n&quot; );
+     message += QStringLiteral( &quot;  Extension: %1\n&quot; ).arg( CSLFetchNameValue( GDALmetadata, GDAL_DMD_EXTENSION ) );
+     message += QStringLiteral( &quot;  Short Name: %1&quot; ).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 &gt;= 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 &gt;= 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 &gt;= GDAL_COMPUTE_VERSION(3, 13, 0)
++    if ( CSLConstList GDALmetadata = GDALGetMetadata( mGdalDataset, &quot;xml:documentation&quot; ) )
++#else
+     if ( char **GDALmetadata = GDALGetMetadata( mGdalDataset, &quot;xml:documentation&quot; ) )
++#endif
+     {
+       const QString metadata( GDALmetadata[0] );
+       if ( !metadata.isEmpty() )
+@@ -565,7 +569,11 @@ QString QgsGdalProvider::htmlMetadata()
+   for ( int i = 1; i &lt;= GDALGetRasterCount( dsForMetadata ); ++i )
+   {
+     GDALRasterBandH gdalBand = GDALGetRasterBand( dsForMetadata, i );
++#if GDAL_VERSION_NUM &gt;= GDAL_COMPUTE_VERSION(3, 13, 0)
++    CSLConstList GDALmetadata = GDALGetMetadata( gdalBand, nullptr );
++#else
+     char **GDALmetadata = GDALGetMetadata( gdalBand, nullptr );
++#endif
+     myMetadata += QStringLiteral( &quot;&lt;tr&gt;&lt;td class=\&quot;highlight\&quot;&gt;&quot; ) + tr( &quot;Band %1&quot; ).arg( i ) + QStringLiteral( &quot;&lt;/td&gt;&lt;td&gt;&quot; );
+     if ( GDALmetadata )
+     {
+@@ -596,7 +604,11 @@ QString QgsGdalProvider::htmlMetadata()
+     myMetadata += tr( &quot;Mask band (exposed as alpha band)&quot; ) + QStringLiteral( &quot;&lt;br /&gt;\n&quot; );
+   }
+ 
++#if GDAL_VERSION_NUM &gt;= 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( &quot;netCDF&quot; ) || mDriverName == QLatin1String( &quot;GTiff&quot; ) )
+   {
++#if GDAL_VERSION_NUM &gt;= 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&lt;QgsProviderSublayerDetails&gt; QgsGda
+ 
+   QList&lt;QgsProviderSublayerDetails&gt; res;
+ 
++#if GDAL_VERSION_NUM &gt;= GDAL_COMPUTE_VERSION(3, 13, 0)
++  CSLConstList metadata = GDALGetMetadata( dataset, &quot;SUBDATASETS&quot; );
++#else
+   char **metadata = GDALGetMetadata( dataset, &quot;SUBDATASETS&quot; );
++#endif
+ 
+   QVariantMap uriParts = decodeGdalUri( baseUri );
+   const QString datasetPath = uriParts.value( QStringLiteral( &quot;path&quot; ) ).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 &gt;= 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 &gt;= 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(), &quot;EXIF&quot; );
+@@ -413,7 +417,11 @@ QVariantMap QgsImportPhotosAlgorithm::pr
+         continue;
+ 
+       QgsFeature f;
++#if GDAL_VERSION_NUM &gt;= 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 &gt;= 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 &gt;= 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 ) &amp;&amp; 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 &amp;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
diff -Nru qgis-3.44.9+dfsg/debian/patches/series qgis-3.44.9+dfsg/debian/patches/series
--- qgis-3.44.9+dfsg/debian/patches/series	2025-08-14 17:02:01.000000000 +0200
+++ qgis-3.44.9+dfsg/debian/patches/series	2026-04-17 12:05:14.000000000 +0200
@@ -2,3 +2,4 @@
 exclude-elvensword-resources.patch
 exclude-cc-by-nc-resources.patch
 spelling-errors.patch
+gdal-3.13.patch

--===============1147963464490243681==--
]