From 0527a0833f5ec294bcd202fb31fc5e608bcca4ba Mon Sep 17 00:00:00 2001 From: Po-Chuan Hsieh Date: Tue, 26 Dec 2023 00:02:59 +0800 Subject: [PATCH] graphics/gdal-grass: Use GetGDALDriverManager to register driver - Bump PORTREVISION for package change Obtained from: https://github.com/OSGeo/gdal-grass/commit/1f6a624e38a58cac80d754ae96131b5ee641bfda https://github.com/OSGeo/gdal-grass/commit/da141597b6d6cb9c230749ba07885c4f06e232cd --- graphics/gdal-grass/Makefile | 2 +- .../files/patch-GetGDALDriverManager | 197 ++++++++++++++++++ 2 files changed, 198 insertions(+), 1 deletion(-) create mode 100644 graphics/gdal-grass/files/patch-GetGDALDriverManager diff --git a/graphics/gdal-grass/Makefile b/graphics/gdal-grass/Makefile index ba652ea317a49..df91ee895fb04 100644 --- a/graphics/gdal-grass/Makefile +++ b/graphics/gdal-grass/Makefile @@ -1,6 +1,6 @@ PORTNAME= gdal-grass PORTVERSION= 1.0.2 -PORTREVISION= 3 +PORTREVISION= 4 PORTEPOCH= 1 CATEGORIES= graphics diff --git a/graphics/gdal-grass/files/patch-GetGDALDriverManager b/graphics/gdal-grass/files/patch-GetGDALDriverManager new file mode 100644 index 0000000000000..5674a39189a47 --- /dev/null +++ b/graphics/gdal-grass/files/patch-GetGDALDriverManager @@ -0,0 +1,197 @@ +Obtained from: https://github.com/OSGeo/gdal-grass/commit/1f6a624e38a58cac80d754ae96131b5ee641bfda + https://github.com/OSGeo/gdal-grass/commit/da141597b6d6cb9c230749ba07885c4f06e232cd + +--- ogrgrass.h.orig 2022-11-06 10:42:02 UTC ++++ ogrgrass.h +@@ -127,8 +127,8 @@ class OGRGRASSDataSource final: public OGRDataSource + OGRGRASSDataSource(); + virtual ~OGRGRASSDataSource(); + +- int Open( const char *, int bUpdate, int bTestOpen, +- int bSingleNewFile = FALSE ); ++ bool Open( const char *, bool bUpdate, bool bTestOpen, ++ bool bSingleNewFile = false ); + + const char *GetName() override { return pszName; } + int GetLayerCount() override { return nLayers; } +@@ -147,23 +147,9 @@ class OGRGRASSDataSource final: public OGRDataSource + struct Map_info map; + int nLayers; + +- int bOpened; ++ bool bOpened; + + static bool SplitPath ( char *, char **, char **, char **, char ** ); +-}; +- +-/************************************************************************/ +-/* OGRGRASSDriver */ +-/************************************************************************/ +-class OGRGRASSDriver final: public OGRSFDriver +-{ +- public: +- virtual ~OGRGRASSDriver(); +- +- const char *GetName() override; +- OGRDataSource *Open( const char *, int ) override; +- +- int TestCapability( const char * ) override; + }; + + #endif /* ndef OGRGRASS_H_INCLUDED */ +--- ogrgrassdatasource.cpp.orig 2022-11-06 10:42:02 UTC ++++ ogrgrassdatasource.cpp +@@ -87,8 +87,8 @@ OGRGRASSDataSource::~OGRGRASSDataSource() + + typedef int (*GrassErrorHandler)(const char *, int); + +-int OGRGRASSDataSource::Open( const char * pszNewName, int /*bUpdate*/, +- int bTestOpen, int /*bSingleNewFileIn*/ ) ++bool OGRGRASSDataSource::Open( const char * pszNewName, bool /*bUpdate*/, ++ bool bTestOpen, bool /*bSingleNewFileIn*/ ) + { + VSIStatBuf stat; + +@@ -99,14 +99,14 @@ int OGRGRASSDataSource::Open( const char * pszNewName, + /* -------------------------------------------------------------------- */ + /* Do the given path contains 'vector' and 'head'? */ + /* -------------------------------------------------------------------- */ +- if ( strstr(pszName,"vector") == NULL || strstr(pszName,"head") == NULL ) ++ if ( strstr(pszName,"vector") == nullptr || strstr(pszName,"head") == nullptr ) + { + if( !bTestOpen ) + { + CPLError( CE_Failure, CPLE_AppDefined, + "%s is not GRASS vector, access failed.\n", pszName ); + } +- return FALSE; ++ return false; + } + + /* -------------------------------------------------------------------- */ +@@ -120,7 +120,7 @@ int OGRGRASSDataSource::Open( const char * pszNewName, + "%s is not GRASS vector, access failed.\n", pszName ); + } + +- return FALSE; ++ return false; + } + + /* -------------------------------------------------------------------- */ +@@ -135,7 +135,7 @@ int OGRGRASSDataSource::Open( const char * pszNewName, + "%s is not GRASS datasource name, access failed.\n", + pszName ); + } +- return FALSE; ++ return false; + } + + CPLDebug ( "GRASS", "Gisdbase: %s", pszGisdbase ); +@@ -149,7 +149,7 @@ int OGRGRASSDataSource::Open( const char * pszNewName, + // GISBASE is path to the directory where GRASS is installed, + // it is necessary because there are database drivers. + if ( !getenv( "GISBASE" ) ) { +- static char* gisbaseEnv = NULL; ++ static char* gisbaseEnv = nullptr; + const char *gisbase = GRASS_GISBASE; + CPLError( CE_Warning, CPLE_AppDefined, "GRASS warning: GISBASE " + "environment variable was not set, using:\n%s", gisbase ); +@@ -191,7 +191,7 @@ int OGRGRASSDataSource::Open( const char * pszNewName, + if ( level < 2 ) { + CPLError( CE_Failure, CPLE_AppDefined, + "Cannot open GRASS vector %s on level 2.\n", pszName ); +- return FALSE; ++ return false; + } + + CPLDebug ( "GRASS", "Num lines = %d", Vect_get_num_lines(&map) ); +@@ -212,9 +212,9 @@ int OGRGRASSDataSource::Open( const char * pszNewName, + papoLayers[nLayers++] = poLayer; + } + +- bOpened = TRUE; ++ bOpened = true; + +- return TRUE; ++ return true; + } + + /************************************************************************/ +--- ogrgrassdriver.cpp.orig 2022-11-06 10:42:02 UTC ++++ ogrgrassdriver.cpp +@@ -37,32 +37,18 @@ extern "C" { + CPL_CVSID("$Id$") + + /************************************************************************/ +-/* ~OGRGRASSDriver() */ +-/************************************************************************/ +-OGRGRASSDriver::~OGRGRASSDriver() +-{ +-} +- +-/************************************************************************/ +-/* GetName() */ +-/************************************************************************/ +-const char *OGRGRASSDriver::GetName() +-{ +- return "OGR_GRASS"; +-} +- +-/************************************************************************/ + /* Open() */ + /************************************************************************/ +-OGRDataSource *OGRGRASSDriver::Open( const char * pszFilename, +- int bUpdate ) ++static auto GRASSDatasetOpen(GDALOpenInfo *poOpenInfo) -> GDALDataset* + { +- OGRGRASSDataSource *poDS = new OGRGRASSDataSource(); ++ auto *poDS = new OGRGRASSDataSource(); + +- if( !poDS->Open( pszFilename, bUpdate, TRUE ) ) ++ bool bUpdate = poOpenInfo->eAccess == GA_Update; ++ ++ if( !poDS->Open( poOpenInfo->pszFilename, bUpdate, true )) + { + delete poDS; +- return NULL; ++ return nullptr; + } + else + { +@@ -71,14 +57,6 @@ OGRDataSource *OGRGRASSDriver::Open( const char * pszF + } + + /************************************************************************/ +-/* TestCapability() */ +-/************************************************************************/ +-int OGRGRASSDriver::TestCapability( const char * /*pszCap*/ ) +-{ +- return FALSE; +-} +- +-/************************************************************************/ + /* RegisterOGRGRASS() */ + /************************************************************************/ + void RegisterOGRGRASS() +@@ -86,15 +64,17 @@ void RegisterOGRGRASS() + if (! GDAL_CHECK_VERSION("OGR/GRASS driver")) + return; + +- if( GDALGetDriverByName( "OGR_GRASS" ) != NULL ) ++ if( GDALGetDriverByName( "OGR_GRASS" ) != nullptr ) + return; + +- OGRGRASSDriver *poDriver = new OGRGRASSDriver(); ++ auto *poDriver = new GDALDriver(); + +- poDriver->SetDescription( "GRASS" ); ++ poDriver->SetDescription( "OGR_GRASS" ); + poDriver->SetMetadataItem( GDAL_DCAP_VECTOR, "YES" ); + poDriver->SetMetadataItem( GDAL_DMD_LONGNAME, "GRASS Vectors (5.7+)" ); + poDriver->SetMetadataItem( GDAL_DMD_HELPTOPIC, "drivers/vector/grass.html" ); + +- OGRSFDriverRegistrar::GetRegistrar()->RegisterDriver( poDriver ); ++ poDriver->pfnOpen = GRASSDatasetOpen; ++ ++ GetGDALDriverManager()->RegisterDriver(poDriver); + }