This is an automated email from the git hooks/post-receive script. sebastic pushed a commit to branch master-2.14.15 in repository qgis.
commit d9e41f5a49bcd6a5283599b7970063b2f518e52c Author: Bas Couwenberg <[email protected]> Date: Sat Jul 1 15:11:43 2017 +0200 Add patches for GDAL 2.2 support. --- debian/changelog | 6 + ...Fix-build-of-dxf2shp-plugin-with-GDAL-2.2.patch | 588 +++++++++++++++++++++ ...r-Use-OGR_F_IsFieldSetAndNotNull-when-ava.patch | 76 +++ debian/patches/series | 2 + 4 files changed, 672 insertions(+) diff --git a/debian/changelog b/debian/changelog index 738704c..bf61e5a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +qgis (2.14.15+dfsg-3) UNRELEASED; urgency=medium + + * Add patches for GDAL 2.2 support. + + -- Bas Couwenberg <[email protected]> Sat, 01 Jul 2017 14:19:27 +0200 + qgis (2.14.15+dfsg-2) unstable; urgency=medium * Disable openscenegraph & osgearth build dependencies, diff --git a/debian/patches/0001-Fix-build-of-dxf2shp-plugin-with-GDAL-2.2.patch b/debian/patches/0001-Fix-build-of-dxf2shp-plugin-with-GDAL-2.2.patch new file mode 100644 index 0000000..670f420 --- /dev/null +++ b/debian/patches/0001-Fix-build-of-dxf2shp-plugin-with-GDAL-2.2.patch @@ -0,0 +1,588 @@ +Description: Fix build of dxf2shp plugin with GDAL 2.2 + Up to now the plugin relied on the fact that GDAL exported the symbols of + its internal shapelib. Since GDAL 2.2 this is no longer the case. So build + the internal copy of shapelib in the plugin, but to avoid symbol name clashes, + prefix the shapelib symbols with qgis_. And also use GDAL VSI large API for I/O + so that on Windows on particular non ASCII filenames are properly handled. +Author: Even Rouault <[email protected]> +Origin: https://github.com/qgis/QGIS/commit/b3579abc1e4e117c249b0979208fde972d155373 + +--- a/src/plugins/dxf2shp_converter/CMakeLists.txt ++++ b/src/plugins/dxf2shp_converter/CMakeLists.txt +@@ -8,6 +8,8 @@ SET (dxf2shpconverter_SRCS + builder.cpp + dxflib/src/dl_dxf.cpp + dxflib/src/dl_writer_ascii.cpp ++ shapelib-1.2.10/dbfopen.c ++ shapelib-1.2.10/shpopen.c + ) + + SET (dxf2shpconverter_UIS dxf2shpconvertergui.ui) +@@ -32,6 +34,7 @@ ADD_LIBRARY (dxf2shpconverterplugin MODU + + INCLUDE_DIRECTORIES( + ${CMAKE_CURRENT_BINARY_DIR} ++ ${GDAL_INCLUDE_DIR} + ../../core + ../../core/geometry + ../../core/raster +--- a/src/plugins/dxf2shp_converter/shapelib-1.2.10/dbfopen.c ++++ b/src/plugins/dxf2shp_converter/shapelib-1.2.10/dbfopen.c +@@ -182,8 +182,10 @@ + * Added header. + */ + ++#if 0 + static char rcsid[] = + "$Id: dbfopen.c,v 1.48 2003/03/10 14:51:27 warmerda Exp $"; ++#endif + + #include "shapefil.h" + +@@ -256,9 +258,9 @@ static void DBFWriteHeader( DBFHandle ps + /* Write the initial 32 byte file header, and all the field */ + /* descriptions. */ + /* -------------------------------------------------------------------- */ +- fseek( psDBF->fp, 0, 0 ); +- fwrite( abyHeader, XBASE_FLDHDR_SZ, 1, psDBF->fp ); +- fwrite( psDBF->pszHeader, XBASE_FLDHDR_SZ, psDBF->nFields, psDBF->fp ); ++ VSIFSeekL( psDBF->fp, 0, 0 ); ++ VSIFWriteL( abyHeader, XBASE_FLDHDR_SZ, 1, psDBF->fp ); ++ VSIFWriteL( psDBF->pszHeader, XBASE_FLDHDR_SZ, psDBF->nFields, psDBF->fp ); + + /* -------------------------------------------------------------------- */ + /* Write out the newline character if there is room for it. */ +@@ -268,7 +270,7 @@ static void DBFWriteHeader( DBFHandle ps + char cNewline; + + cNewline = 0x0d; +- fwrite( &cNewline, 1, 1, psDBF->fp ); ++ VSIFWriteL( &cNewline, 1, 1, psDBF->fp ); + } + } + +@@ -290,8 +292,8 @@ static void DBFFlushRecord( DBFHandle ps + nRecordOffset = psDBF->nRecordLength * psDBF->nCurrentRecord + + psDBF->nHeaderLength; + +- fseek( psDBF->fp, nRecordOffset, 0 ); +- fwrite( psDBF->pszCurrentRecord, psDBF->nRecordLength, 1, psDBF->fp ); ++ VSIFSeekL( psDBF->fp, nRecordOffset, 0 ); ++ VSIFWriteL( psDBF->pszCurrentRecord, psDBF->nRecordLength, 1, psDBF->fp ); + } + } + +@@ -342,12 +344,12 @@ DBFOpen( const char * pszFilename, const + sprintf( pszFullname, "%s.dbf", pszBasename ); + + psDBF = ( DBFHandle ) calloc( 1, sizeof( DBFInfo ) ); +- psDBF->fp = fopen( pszFullname, pszAccess ); ++ psDBF->fp = VSIFOpenL( pszFullname, pszAccess ); + + if ( psDBF->fp == NULL ) + { + sprintf( pszFullname, "%s.DBF", pszBasename ); +- psDBF->fp = fopen( pszFullname, pszAccess ); ++ psDBF->fp = VSIFOpenL( pszFullname, pszAccess ); + } + + free( pszBasename ); +@@ -367,9 +369,9 @@ DBFOpen( const char * pszFilename, const + /* Read Table Header info */ + /* -------------------------------------------------------------------- */ + pabyBuf = ( unsigned char * ) malloc( 500 ); +- if ( fread( pabyBuf, 32, 1, psDBF->fp ) != 1 ) ++ if ( VSIFReadL( pabyBuf, 32, 1, psDBF->fp ) != 1 ) + { +- fclose( psDBF->fp ); ++ VSIFCloseL( psDBF->fp ); + free( pabyBuf ); + free( psDBF ); + return NULL; +@@ -389,12 +391,13 @@ DBFOpen( const char * pszFilename, const + /* Read in Field Definitions */ + /* -------------------------------------------------------------------- */ + +- pabyBuf = psDBF->pszHeader = ( unsigned char * ) SfRealloc( pabyBuf, nHeadLen ); ++ psDBF->pszHeader = ( char * ) SfRealloc( pabyBuf, nHeadLen ); ++ pabyBuf = ( unsigned char* )psDBF->pszHeader; + +- fseek( psDBF->fp, 32, 0 ); +- if ( fread( pabyBuf, nHeadLen - 32, 1, psDBF->fp ) != 1 ) ++ VSIFSeekL( psDBF->fp, 32, 0 ); ++ if ( VSIFReadL( pabyBuf, nHeadLen - 32, 1, psDBF->fp ) != 1 ) + { +- fclose( psDBF->fp ); ++ VSIFCloseL( psDBF->fp ); + free( pabyBuf ); + free( psDBF ); + return NULL; +@@ -456,8 +459,8 @@ DBFClose( DBFHandle psDBF ) + { + unsigned char abyFileHeader[32]; + +- fseek( psDBF->fp, 0, 0 ); +- fread( abyFileHeader, 32, 1, psDBF->fp ); ++ VSIFSeekL( psDBF->fp, 0, 0 ); ++ VSIFReadL( abyFileHeader, 32, 1, psDBF->fp ); + + abyFileHeader[1] = 95; /* YY */ + abyFileHeader[2] = 7; /* MM */ +@@ -468,14 +471,14 @@ DBFClose( DBFHandle psDBF ) + abyFileHeader[6] = ( psDBF->nRecords / ( 256 * 256 ) ) % 256; + abyFileHeader[7] = ( psDBF->nRecords / ( 256 * 256 * 256 ) ) % 256; + +- fseek( psDBF->fp, 0, 0 ); +- fwrite( abyFileHeader, 32, 1, psDBF->fp ); ++ VSIFSeekL( psDBF->fp, 0, 0 ); ++ VSIFWriteL( abyFileHeader, 32, 1, psDBF->fp ); + } + + /* -------------------------------------------------------------------- */ + /* Close, and free resources. */ + /* -------------------------------------------------------------------- */ +- fclose( psDBF->fp ); ++ VSIFCloseL( psDBF->fp ); + + if ( psDBF->panFieldOffset != NULL ) + { +@@ -509,7 +512,7 @@ DBFCreate( const char *pszFilename ) + + { + DBFHandle psDBF; +- FILE *fp; ++ VSILFILE *fp; + char *pszFullname, *pszBasename; + int i; + +@@ -534,17 +537,20 @@ DBFCreate( const char *pszFilename ) + /* -------------------------------------------------------------------- */ + /* Create the file. */ + /* -------------------------------------------------------------------- */ +- fp = fopen( pszFullname, "wb" ); ++ fp = VSIFOpenL( pszFullname, "wb" ); + if ( fp == NULL ) + { + free( pszFullname ); + return( NULL ); + } + +- fputc( 0, fp ); +- fclose( fp ); ++ { ++ char ch = 0; ++ VSIFWriteL( &ch, 1, 1, fp ); ++ } ++ VSIFCloseL( fp ); + +- fp = fopen( pszFullname, "rb+" ); ++ fp = VSIFOpenL( pszFullname, "rb+" ); + if ( fp == NULL ) + { + free( pszFullname ); +@@ -716,17 +722,17 @@ static void *DBFReadAttribute( DBFHandle + + nRecordOffset = psDBF->nRecordLength * hEntity + psDBF->nHeaderLength; + +- if ( fseek( psDBF->fp, nRecordOffset, 0 ) != 0 ) ++ if ( VSIFSeekL( psDBF->fp, nRecordOffset, 0 ) != 0 ) + { + fprintf( stderr, "fseek(%d) failed on DBF file.\n", + nRecordOffset ); + return NULL; + } + +- if ( fread( psDBF->pszCurrentRecord, psDBF->nRecordLength, +- 1, psDBF->fp ) != 1 ) ++ if ( VSIFReadL( psDBF->pszCurrentRecord, psDBF->nRecordLength, ++ 1, psDBF->fp ) != 1 ) + { +- fprintf( stderr, "fread(%d) failed on DBF file.\n", ++ fprintf( stderr, "VSIFReadL(%d) failed on DBF file.\n", + psDBF->nRecordLength ); + return NULL; + } +@@ -790,7 +796,7 @@ static void *DBFReadAttribute( DBFHandle + } + + /************************************************************************/ +-/* DBFReadIntAttribute() */ ++/* DBFReadIntegerAttribute() */ + /* */ + /* Read an integer attribute. */ + /************************************************************************/ +@@ -1013,8 +1019,8 @@ static int DBFWriteAttribute( DBFHandle + + nRecordOffset = psDBF->nRecordLength * hEntity + psDBF->nHeaderLength; + +- fseek( psDBF->fp, nRecordOffset, 0 ); +- fread( psDBF->pszCurrentRecord, psDBF->nRecordLength, 1, psDBF->fp ); ++ VSIFSeekL( psDBF->fp, nRecordOffset, 0 ); ++ VSIFReadL( psDBF->pszCurrentRecord, psDBF->nRecordLength, 1, psDBF->fp ); + + psDBF->nCurrentRecord = hEntity; + } +@@ -1073,7 +1079,7 @@ static int DBFWriteAttribute( DBFHandle + { + int nWidth = psDBF->panFieldSize[iField]; + +- if ( sizeof( szSField ) - 2 < nWidth ) ++ if (( int )sizeof( szSField ) - 2 < nWidth ) + nWidth = sizeof( szSField ) - 2; + + sprintf( szFormat, "%%%dd", nWidth ); +@@ -1091,7 +1097,7 @@ static int DBFWriteAttribute( DBFHandle + { + int nWidth = psDBF->panFieldSize[iField]; + +- if ( sizeof( szSField ) - 2 < nWidth ) ++ if (( int )sizeof( szSField ) - 2 < nWidth ) + nWidth = sizeof( szSField ) - 2; + + sprintf( szFormat, "%%%d.%df", +@@ -1182,8 +1188,8 @@ int DBFWriteAttributeDirectly( DBFHandle + + nRecordOffset = psDBF->nRecordLength * hEntity + psDBF->nHeaderLength; + +- fseek( psDBF->fp, nRecordOffset, 0 ); +- fread( psDBF->pszCurrentRecord, psDBF->nRecordLength, 1, psDBF->fp ); ++ VSIFSeekL( psDBF->fp, nRecordOffset, 0 ); ++ VSIFReadL( psDBF->pszCurrentRecord, psDBF->nRecordLength, 1, psDBF->fp ); + + psDBF->nCurrentRecord = hEntity; + } +@@ -1328,8 +1334,8 @@ DBFWriteTuple( DBFHandle psDBF, int hEnt + + nRecordOffset = psDBF->nRecordLength * hEntity + psDBF->nHeaderLength; + +- fseek( psDBF->fp, nRecordOffset, 0 ); +- fread( psDBF->pszCurrentRecord, psDBF->nRecordLength, 1, psDBF->fp ); ++ VSIFSeekL( psDBF->fp, nRecordOffset, 0 ); ++ VSIFReadL( psDBF->pszCurrentRecord, psDBF->nRecordLength, 1, psDBF->fp ); + + psDBF->nCurrentRecord = hEntity; + } +@@ -1372,8 +1378,8 @@ DBFReadTuple( DBFHandle psDBF, int hEnti + + nRecordOffset = psDBF->nRecordLength * hEntity + psDBF->nHeaderLength; + +- fseek( psDBF->fp, nRecordOffset, 0 ); +- fread( psDBF->pszCurrentRecord, psDBF->nRecordLength, 1, psDBF->fp ); ++ VSIFSeekL( psDBF->fp, nRecordOffset, 0 ); ++ VSIFReadL( psDBF->pszCurrentRecord, psDBF->nRecordLength, 1, psDBF->fp ); + + psDBF->nCurrentRecord = hEntity; + } +--- a/src/plugins/dxf2shp_converter/shapelib-1.2.10/shapefil.h ++++ b/src/plugins/dxf2shp_converter/shapelib-1.2.10/shapefil.h +@@ -116,10 +116,61 @@ + + #include <stdio.h> + ++#include "cpl_vsi.h" ++ + #ifdef USE_DBMALLOC + #include <dbmalloc.h> + #endif + ++#define SHPOpen qgis_SHPOpen ++#define SHPCreate qgis_SHPCreate ++#define SHPGetInfo qgis_SHPGetInfo ++#define SHPReadObject qgis_SHPReadObject ++#define SHPWriteObject qgis_SHPWriteObject ++#define SHPDestroyObject qgis_SHPDestroyObject ++#define SHPComputeExtents qgis_SHPComputeExtents ++#define SHPCreateObject qgis_SHPCreateObject ++#define SHPCreateSimpleObject qgis_SHPCreateSimpleObject ++#define SHPRewindObject qgis_SHPRewindObject ++#define SHPClose qgis_SHPClose ++#define SHPTypeName qgis_SHPTypeName ++#define SHPPartTypeName qgis_SHPPartTypeName ++#define SHPCreateTree qgis_SHPCreateTree ++#define SHPDestroyTree qgis_SHPDestroyTree ++#define SHPWriteTree qgis_SHPWriteTree ++#define SHPReadTree qgis_SHPReadTree ++#define SHPTreeAddObject qgis_SHPTreeAddObject ++#define SHPTreeAddShapeId qgis_SHPTreeAddShapeId ++#define SHPTreeRemoveShapeId qgis_SHPTreeRemoveShapeId ++#define SHPTreeTrimExtraNodes qgis_SHPTreeTrimExtraNodes ++#define SHPTreeFindLikelyShapes qgis_SHPTreeFindLikelyShapes ++#define SHPCheckBoundsOverlap qgis_SHPCheckBoundsOverlap ++#define DBFOpen qgis_DBFOpen ++#define DBFCreate qgis_DBFCreate ++#define DBFGetFieldCount qgis_DBFGetFieldCount ++#define DBFGetRecordCount qgis_DBFGetRecordCount ++#define DBFAddField qgis_DBFAddField ++#define DBFFieldType qgis_DBFFieldType ++#define DBFGetFieldInfo qgis_DBFGetFieldInfo ++#define DBFGetFieldIndex qgis_DBFGetFieldIndex ++#define DBFReadIntegerAttribute qgis_DBFReadIntegerAttribute ++#define DBFReadDoubleAttribute qgis_DBFReadDoubleAttribute ++#define DBFReadStringAttribute qgis_DBFReadStringAttribute ++#define DBFReadLogicalAttribute qgis_DBFReadLogicalAttribute ++#define DBFIsAttributeNULL qgis_DBFIsAttributeNULL ++#define DBFWriteIntegerAttribute qgis_DBFWriteIntegerAttribute ++#define DBFWriteDoubleAttribute qgis_DBFWriteDoubleAttribute ++#define DBFWriteStringAttribute qgis_DBFWriteStringAttribute ++#define DBFWriteNULLAttribute qgis_DBFWriteNULLAttribute ++#define DBFWriteLogicalAttribute qgis_DBFWriteLogicalAttribute ++#define DBFWriteAttributeDirectly qgis_DBFWriteAttributeDirectly ++#define DBFReadTuple qgis_DBFReadTuple ++#define DBFWriteTuple qgis_DBFWriteTuple ++#define DBFCloneEmpty qgis_DBFCloneEmpty ++#define DBFClose qgis_DBFClose ++#define DBFGetNativeFieldType qgis_DBFGetNativeFieldType ++ ++ + #ifdef __cplusplus + extern "C" + { +@@ -189,8 +240,8 @@ extern "C" + /************************************************************************/ + typedef struct + { +- FILE *fpSHP; +- FILE *fpSHX; ++ VSILFILE *fpSHP; ++ VSILFILE *fpSHX; + + int nShapeType; /* SHPT_* */ + +@@ -382,7 +433,7 @@ extern "C" + /************************************************************************/ + typedef struct + { +- FILE *fp; ++ VSILFILE *fp; + + int nRecords; + +--- a/src/plugins/dxf2shp_converter/shapelib-1.2.10/shpopen.c ++++ b/src/plugins/dxf2shp_converter/shapelib-1.2.10/shpopen.c +@@ -158,8 +158,10 @@ + * + */ + ++#if 0 + static char rcsid[] = + "$Id: shpopen.c,v 1.39 2002/08/26 06:46:56 warmerda Exp $"; ++#endif + + #include "shapefil.h" + +@@ -299,8 +301,8 @@ static void SHPWriteHeader( SHPHandle ps + /* -------------------------------------------------------------------- */ + /* Write .shp file header. */ + /* -------------------------------------------------------------------- */ +- fseek( psSHP->fpSHP, 0, 0 ); +- fwrite( abyHeader, 100, 1, psSHP->fpSHP ); ++ VSIFSeekL( psSHP->fpSHP, 0, 0 ); ++ VSIFWriteL( abyHeader, 100, 1, psSHP->fpSHP ); + + /* -------------------------------------------------------------------- */ + /* Prepare, and write .shx file header. */ +@@ -309,8 +311,8 @@ static void SHPWriteHeader( SHPHandle ps + ByteCopy( &i32, abyHeader + 24, 4 ); + if ( !bBigEndian ) SwapWord( 4, abyHeader + 24 ); + +- fseek( psSHP->fpSHX, 0, 0 ); +- fwrite( abyHeader, 100, 1, psSHP->fpSHX ); ++ VSIFSeekL( psSHP->fpSHX, 0, 0 ); ++ VSIFWriteL( abyHeader, 100, 1, psSHP->fpSHX ); + + /* -------------------------------------------------------------------- */ + /* Write out the .shx contents. */ +@@ -325,7 +327,7 @@ static void SHPWriteHeader( SHPHandle ps + if ( !bBigEndian ) SwapWord( 4, panSHX + i*2 + 1 ); + } + +- fwrite( panSHX, sizeof( int32 ) * 2, psSHP->nRecords, psSHP->fpSHX ); ++ VSIFWriteL( panSHX, sizeof( int32 ) * 2, psSHP->nRecords, psSHP->fpSHX ); + + free( panSHX ); + } +@@ -395,11 +397,11 @@ SHPOpen( const char * pszLayer, const ch + /* -------------------------------------------------------------------- */ + pszFullname = ( char * ) malloc( strlen( pszBasename ) + 5 ); + sprintf( pszFullname, "%s.shp", pszBasename ); +- psSHP->fpSHP = fopen( pszFullname, pszAccess ); ++ psSHP->fpSHP = VSIFOpenL( pszFullname, pszAccess ); + if ( psSHP->fpSHP == NULL ) + { + sprintf( pszFullname, "%s.SHP", pszBasename ); +- psSHP->fpSHP = fopen( pszFullname, pszAccess ); ++ psSHP->fpSHP = VSIFOpenL( pszFullname, pszAccess ); + } + + if ( psSHP->fpSHP == NULL ) +@@ -411,16 +413,16 @@ SHPOpen( const char * pszLayer, const ch + } + + sprintf( pszFullname, "%s.shx", pszBasename ); +- psSHP->fpSHX = fopen( pszFullname, pszAccess ); ++ psSHP->fpSHX = VSIFOpenL( pszFullname, pszAccess ); + if ( psSHP->fpSHX == NULL ) + { + sprintf( pszFullname, "%s.SHX", pszBasename ); +- psSHP->fpSHX = fopen( pszFullname, pszAccess ); ++ psSHP->fpSHX = VSIFOpenL( pszFullname, pszAccess ); + } + + if ( psSHP->fpSHX == NULL ) + { +- fclose( psSHP->fpSHP ); ++ VSIFCloseL( psSHP->fpSHP ); + free( psSHP ); + free( pszBasename ); + free( pszFullname ); +@@ -434,7 +436,7 @@ SHPOpen( const char * pszLayer, const ch + /* Read the file size from the SHP file. */ + /* -------------------------------------------------------------------- */ + pabyBuf = ( uchar * ) malloc( 100 ); +- fread( pabyBuf, 100, 1, psSHP->fpSHP ); ++ VSIFReadL( pabyBuf, 100, 1, psSHP->fpSHP ); + + psSHP->nFileSize = ( pabyBuf[24] * 256 * 256 * 256 + + pabyBuf[25] * 256 * 256 +@@ -444,15 +446,15 @@ SHPOpen( const char * pszLayer, const ch + /* -------------------------------------------------------------------- */ + /* Read SHX file Header info */ + /* -------------------------------------------------------------------- */ +- fread( pabyBuf, 100, 1, psSHP->fpSHX ); ++ VSIFReadL( pabyBuf, 100, 1, psSHP->fpSHX ); + + if ( pabyBuf[0] != 0 + || pabyBuf[1] != 0 + || pabyBuf[2] != 0x27 + || ( pabyBuf[3] != 0x0a && pabyBuf[3] != 0x0d ) ) + { +- fclose( psSHP->fpSHP ); +- fclose( psSHP->fpSHX ); ++ VSIFCloseL( psSHP->fpSHP ); ++ VSIFCloseL( psSHP->fpSHX ); + free( psSHP ); + free( pabyBuf ); + +@@ -468,8 +470,8 @@ SHPOpen( const char * pszLayer, const ch + if ( psSHP->nRecords < 0 || psSHP->nRecords > 256000000 ) + { + /* this header appears to be corrupt. Give up. */ +- fclose( psSHP->fpSHP ); +- fclose( psSHP->fpSHX ); ++ VSIFCloseL( psSHP->fpSHP ); ++ VSIFCloseL( psSHP->fpSHX ); + free( psSHP ); + + free( pabyBuf ); +@@ -526,7 +528,7 @@ SHPOpen( const char * pszLayer, const ch + ( int * ) malloc( sizeof( int ) * MAX( 1, psSHP->nMaxRecords ) ); + + pabyBuf = ( uchar * ) malloc( 8 * MAX( 1, psSHP->nRecords ) ); +- fread( pabyBuf, 8, psSHP->nRecords, psSHP->fpSHX ); ++ VSIFReadL( pabyBuf, 8, psSHP->nRecords, psSHP->fpSHX ); + + for ( i = 0; i < psSHP->nRecords; i++ ) + { +@@ -570,8 +572,8 @@ SHPClose( SHPHandle psSHP ) + free( psSHP->panRecOffset ); + free( psSHP->panRecSize ); + +- fclose( psSHP->fpSHX ); +- fclose( psSHP->fpSHP ); ++ VSIFCloseL( psSHP->fpSHX ); ++ VSIFCloseL( psSHP->fpSHP ); + + if ( psSHP->pabyRec != NULL ) + { +@@ -622,7 +624,7 @@ SHPCreate( const char * pszLayer, int nS + { + char *pszBasename, *pszFullname; + int i; +- FILE *fpSHP, *fpSHX; ++ VSILFILE *fpSHP, *fpSHX; + uchar abyHeader[100]; + int32 i32; + double dValue; +@@ -655,7 +657,7 @@ SHPCreate( const char * pszLayer, int nS + /* -------------------------------------------------------------------- */ + pszFullname = ( char * ) malloc( strlen( pszBasename ) + 5 ); + sprintf( pszFullname, "%s.shp", pszBasename ); +- fpSHP = fopen( pszFullname, "wb" ); ++ fpSHP = VSIFOpenL( pszFullname, "wb" ); + if ( fpSHP == NULL ) + { + free( pszBasename ); +@@ -664,12 +666,12 @@ SHPCreate( const char * pszLayer, int nS + } + + sprintf( pszFullname, "%s.shx", pszBasename ); +- fpSHX = fopen( pszFullname, "wb" ); ++ fpSHX = VSIFOpenL( pszFullname, "wb" ); + if ( fpSHX == NULL ) + { + free( pszBasename ); + free( pszFullname ); +- fclose( fpSHP ); ++ VSIFCloseL( fpSHP ); + return( NULL ); + } + +@@ -706,7 +708,7 @@ SHPCreate( const char * pszLayer, int nS + /* -------------------------------------------------------------------- */ + /* Write .shp file header. */ + /* -------------------------------------------------------------------- */ +- fwrite( abyHeader, 100, 1, fpSHP ); ++ VSIFWriteL( abyHeader, 100, 1, fpSHP ); + + /* -------------------------------------------------------------------- */ + /* Prepare, and write .shx file header. */ +@@ -715,13 +717,13 @@ SHPCreate( const char * pszLayer, int nS + ByteCopy( &i32, abyHeader + 24, 4 ); + if ( !bBigEndian ) SwapWord( 4, abyHeader + 24 ); + +- fwrite( abyHeader, 100, 1, fpSHX ); ++ VSIFWriteL( abyHeader, 100, 1, fpSHX ); + + /* -------------------------------------------------------------------- */ + /* Close the files, and then open them as regular existing files. */ + /* -------------------------------------------------------------------- */ +- fclose( fpSHP ); +- fclose( fpSHX ); ++ VSIFCloseL( fpSHP ); ++ VSIFCloseL( fpSHX ); + + return( SHPOpen( pszLayer, "r+b" ) ); + } +@@ -1237,10 +1239,10 @@ SHPWriteObject( SHPHandle psSHP, int nSh + /* -------------------------------------------------------------------- */ + /* Write out record. */ + /* -------------------------------------------------------------------- */ +- if ( fseek( psSHP->fpSHP, nRecordOffset, 0 ) != 0 +- || fwrite( pabyRec, nRecordSize, 1, psSHP->fpSHP ) < 1 ) ++ if ( VSIFSeekL( psSHP->fpSHP, nRecordOffset, 0 ) != 0 ++ || VSIFWriteL( pabyRec, nRecordSize, 1, psSHP->fpSHP ) < 1 ) + { +- printf( "Error in fseek() or fwrite().\n" ); ++ printf( "Error in fseek() or VSIFWriteL().\n" ); + free( pabyRec ); + return -1; + } +@@ -1308,8 +1310,8 @@ SHPReadObject( SHPHandle psSHP, int hEnt + /* -------------------------------------------------------------------- */ + /* Read the record. */ + /* -------------------------------------------------------------------- */ +- fseek( psSHP->fpSHP, psSHP->panRecOffset[hEntity], 0 ); +- fread( psSHP->pabyRec, psSHP->panRecSize[hEntity] + 8, 1, psSHP->fpSHP ); ++ VSIFSeekL( psSHP->fpSHP, psSHP->panRecOffset[hEntity], 0 ); ++ VSIFReadL( psSHP->pabyRec, psSHP->panRecSize[hEntity] + 8, 1, psSHP->fpSHP ); + + /* -------------------------------------------------------------------- */ + /* Allocate and minimally initialize the object. */ +@@ -1738,6 +1740,7 @@ SHPRewindObject( SHPHandle hSHP, SHPObje + + { + int iOpRing, bAltered = 0; ++ ( void )hSHP; + + /* -------------------------------------------------------------------- */ + /* Do nothing if this is not a polygon object. */ diff --git a/debian/patches/0001-OGR-provider-Use-OGR_F_IsFieldSetAndNotNull-when-ava.patch b/debian/patches/0001-OGR-provider-Use-OGR_F_IsFieldSetAndNotNull-when-ava.patch new file mode 100644 index 0000000..25dd76e --- /dev/null +++ b/debian/patches/0001-OGR-provider-Use-OGR_F_IsFieldSetAndNotNull-when-ava.patch @@ -0,0 +1,76 @@ +Description: [OGR provider] Use OGR_F_IsFieldSetAndNotNull() when available. + Starting with GDAL 2.2, there are 2 concepts: unset fields and null fields + whereas previously there was only unset fields. For QGIS purposes, both + states (unset/null) are equivalent. + . + Cherry-picked from 47dd83dd75c7f86fa59510a4b65c453f27fb3771 +Author: Even Rouault <[email protected]> +Origin: https://github.com/qgis/QGIS/commit/5fdde8a5ba89e4bb4ba4e008979a6b67742df9b0 + +--- a/src/providers/ogr/qgsogrfeatureiterator.cpp ++++ b/src/providers/ogr/qgsogrfeatureiterator.cpp +@@ -33,6 +33,12 @@ + // - mAttributeFields + // - mEncoding + ++// Starting with GDAL 2.2, there are 2 concepts: unset fields and null fields ++// whereas previously there was only unset fields. For QGIS purposes, both ++// states (unset/null) are equivalent. ++#ifndef OGRNullMarker ++#define OGR_F_IsFieldSetAndNotNull OGR_F_IsFieldSet ++#endif + + QgsOgrFeatureIterator::QgsOgrFeatureIterator( QgsOgrFeatureSource* source, bool ownSource, const QgsFeatureRequest& request ) + : QgsAbstractFeatureIteratorFromSource<QgsOgrFeatureSource>( source, ownSource, request ) +@@ -335,7 +341,7 @@ void QgsOgrFeatureIterator::getFeatureAt + + QVariant value; + +- if ( OGR_F_IsFieldSet( ogrFet, attindex ) ) ++ if ( OGR_F_IsFieldSetAndNotNull( ogrFet, attindex ) ) + { + switch ( mSource->mFields.at( attindex ).type() ) + { +--- a/src/providers/ogr/qgsogrprovider.cpp ++++ b/src/providers/ogr/qgsogrprovider.cpp +@@ -55,6 +55,13 @@ email : sherman at mrcc.c + #include <sys/vfs.h> + #endif + ++// Starting with GDAL 2.2, there are 2 concepts: unset fields and null fields ++// whereas previously there was only unset fields. For QGIS purposes, both ++// states (unset/null) are equivalent. ++#ifndef OGRNullMarker ++#define OGR_F_IsFieldSetAndNotNull OGR_F_IsFieldSet ++#endif ++ + static const QString TEXT_PROVIDER_KEY = "ogr"; + static const QString TEXT_PROVIDER_DESCRIPTION = + QString( "OGR data provider" ) +@@ -2595,7 +2602,7 @@ void QgsOgrProvider::uniqueValues( int i + OGRFeatureH f; + while (( f = OGR_L_GetNextFeature( l ) ) ) + { +- uniqueValues << ( OGR_F_IsFieldSet( f, 0 ) ? convertValue( fld.type(), mEncoding->toUnicode( OGR_F_GetFieldAsString( f, 0 ) ) ) : QVariant( fld.type() ) ); ++ uniqueValues << ( OGR_F_IsFieldSetAndNotNull( f, 0 ) ? convertValue( fld.type(), mEncoding->toUnicode( OGR_F_GetFieldAsString( f, 0 ) ) ) : QVariant( fld.type() ) ); + OGR_F_Destroy( f ); + + if ( limit >= 0 && uniqueValues.size() >= limit ) +@@ -2637,7 +2644,7 @@ QVariant QgsOgrProvider::minimumValue( i + return QVariant(); + } + +- QVariant value = OGR_F_IsFieldSet( f, 0 ) ? convertValue( fld.type(), mEncoding->toUnicode( OGR_F_GetFieldAsString( f, 0 ) ) ) : QVariant( fld.type() ); ++ QVariant value = OGR_F_IsFieldSetAndNotNull( f, 0 ) ? convertValue( fld.type(), mEncoding->toUnicode( OGR_F_GetFieldAsString( f, 0 ) ) ) : QVariant( fld.type() ); + OGR_F_Destroy( f ); + + OGR_DS_ReleaseResultSet( ogrDataSource, l ); +@@ -2676,7 +2683,7 @@ QVariant QgsOgrProvider::maximumValue( i + return QVariant(); + } + +- QVariant value = OGR_F_IsFieldSet( f, 0 ) ? convertValue( fld.type(), mEncoding->toUnicode( OGR_F_GetFieldAsString( f, 0 ) ) ) : QVariant( fld.type() ); ++ QVariant value = OGR_F_IsFieldSetAndNotNull( f, 0 ) ? convertValue( fld.type(), mEncoding->toUnicode( OGR_F_GetFieldAsString( f, 0 ) ) ) : QVariant( fld.type() ); + OGR_F_Destroy( f ); + + OGR_DS_ReleaseResultSet( ogrDataSource, l ); diff --git a/debian/patches/series b/debian/patches/series index 47d4596..4fbf133 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -9,3 +9,5 @@ qtermwidget-hurd.patch qt4-without-qtwebkit.patch columns-typo.patch grass72.patch +0001-Fix-build-of-dxf2shp-plugin-with-GDAL-2.2.patch +0001-OGR-provider-Use-OGR_F_IsFieldSetAndNotNull-when-ava.patch -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/qgis.git _______________________________________________ Pkg-grass-devel mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-grass-devel

