Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Backport release-3_22] Unlock static build support for a bunch of providers #45751

Merged
merged 9 commits into from
Oct 31, 2021
17 changes: 16 additions & 1 deletion src/core/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2133,8 +2133,23 @@ endif()
if (FORCE_STATIC_LIBS)
target_link_libraries(qgis_core
provider_wms_a
provider_postgres_a
provider_wcs_a
provider_delimitedtext_a
provider_arcgisfeatureserver_a
provider_arcgismapserver_a
)
if (HAVE_SPATIALITE)
target_link_libraries(qgis_core
provider_spatialite_a
provider_wfs_a
provider_virtuallayer_a
)
endif()
if (HAVE_POSTGRESQL)
target_link_libraries(qgis_core
provider_postgres_a
)
endif()

if (WITH_AUTH)
target_link_libraries(qgis_core
Expand Down
24 changes: 24 additions & 0 deletions src/core/providers/qgsproviderregistry.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,20 @@

#ifdef HAVE_STATIC_PROVIDERS
#include "qgswmsprovider.h"
#include "qgswcsprovider.h"
#include "qgsdelimitedtextprovider.h"
#include "qgsafsprovider.h"
#include "qgsamsprovider.h"
#ifdef HAVE_SPATIALITE
#include "qgsspatialiteprovider.h"
#include "qgswfsprovider.h"
#include "qgsoapifprovider.h"
#include "qgsvirtuallayerprovider.h"
#endif
#ifdef HAVE_POSTGRESQL
#include "qgspostgresprovider.h"
#endif
#endif

#include <QString>
#include <QDir>
Expand Down Expand Up @@ -190,7 +202,19 @@ void QgsProviderRegistry::init()

#ifdef HAVE_STATIC_PROVIDERS
mProviders[ QgsWmsProvider::providerKey() ] = new QgsWmsProviderMetadata();
mProviders[ QgsWcsProvider::providerKey() ] = new QgsWcsProviderMetadata();
mProviders[ QgsDelimitedTextProvider::providerKey() ] = new QgsDelimitedTextProviderMetadata();
mProviders[ QgsAfsProvider::providerKey() ] = new QgsAfsProviderMetadata();
mProviders[ QgsAmsProvider::providerKey() ] = new QgsAmsProviderMetadata();
#ifdef HAVE_SPATIALITE
mProviders[ QgsSpatiaLiteProvider::providerKey() ] = new QgsSpatiaLiteProviderMetadata();
mProviders[ QgsWFSProvider::providerKey() ] = new QgsWfsProviderMetadata();
mProviders[ QgsOapifProvider::providerKey() ] = new QgsOapifProviderMetadata();
mProviders[ QgsVirtualLayerProvider::providerKey() ] = new QgsVirtualLayerProviderMetadata();
#endif
#ifdef HAVE_POSTGRESQL
mProviders[ QgsPostgresProvider::providerKey() ] = new QgsPostgresProviderMetadata();
#endif
#endif

// add dynamic providers
Expand Down
16 changes: 15 additions & 1 deletion src/gui/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1544,8 +1544,22 @@ endif()
if (FORCE_STATIC_LIBS)
target_link_libraries(qgis_gui
provider_wms_gui_a
provider_postgres_gui_a
provider_wcs_gui_a
provider_delimitedtext_gui_a
provider_arcgisfeatureserver_gui_a
)
if (HAVE_SPATIALITE)
target_link_libraries(qgis_gui
provider_spatialite_gui_a
provider_wfs_gui_a
provider_virtuallayer_gui_a
)
endif()
if (HAVE_POSTGRESQL)
target_link_libraries(qgis_gui
provider_postgres_gui_a
)
endif()
endif()

if(ENABLE_MODELTEST)
Expand Down
27 changes: 26 additions & 1 deletion src/gui/qgsproviderguiregistry.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,18 @@

#ifdef HAVE_STATIC_PROVIDERS
#include "qgswmsprovidergui.h"
#include "qgswcsprovidergui.h"
#include "qgsdelimitedtextprovidergui.h"
#include "qgsarcgisrestprovidergui.h"
#ifdef HAVE_SPATIALITE
#include "qgsspatialiteprovidergui.h"
#include "qgswfsprovidergui.h"
#include "qgsvirtuallayerprovidergui.h"
#endif
#ifdef HAVE_POSTGRESQL
#include "qgspostgresprovidergui.h"
#endif
#endif

/**
* Convenience function for finding any existing data providers that match "providerKey"
Expand Down Expand Up @@ -92,10 +102,25 @@ void QgsProviderGuiRegistry::loadStaticProviders( )
#ifdef HAVE_STATIC_PROVIDERS
QgsProviderGuiMetadata *wms = new QgsWmsProviderGuiMetadata();
mProviders[ wms->key() ] = wms;

QgsProviderGuiMetadata *wcs = new QgsWcsProviderGuiMetadata();
mProviders[ wcs->key() ] = wcs;
QgsProviderGuiMetadata *delimitedtext = new QgsDelimitedTextProviderGuiMetadata();
mProviders[ delimitedtext->key() ] = delimitedtext;
QgsProviderGuiMetadata *arc = new QgsArcGisRestProviderGuiMetadata();
mProviders[ arc->key() ] = arc;
#ifdef HAVE_SPATIALITE
QgsProviderGuiMetadata *spatialite = new QgsSpatiaLiteProviderGuiMetadata();
mProviders[ spatialite->key() ] = spatialite;
QgsProviderGuiMetadata *wfs = new QgsWfsProviderGuiMetadata();
mProviders[ wfs->key() ] = wfs;
QgsProviderGuiMetadata *virtuallayer = new QgsVirtualLayerProviderGuiMetadata();
mProviders[ virtuallayer->key() ] = virtuallayer;
#endif
#ifdef HAVE_POSTGRESQL
QgsProviderGuiMetadata *postgres = new QgsPostgresProviderGuiMetadata();
mProviders[ postgres->key() ] = postgres;
#endif
#endif
}

void QgsProviderGuiRegistry::loadDynamicProviders( const QString &pluginPath )
Expand Down
19 changes: 10 additions & 9 deletions src/providers/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,29 +4,30 @@ set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${QGIS_OUTPUT_DIRECTORY}/${QGIS_PLUGIN_SUBDI

# providers with implemented both static and dynamic building
add_subdirectory(wms)
add_subdirectory(wcs)
add_subdirectory(delimitedtext)
add_subdirectory(arcgisrest)

if (WITH_SPATIALITE)
add_subdirectory(spatialite)
add_subdirectory(wfs)
add_subdirectory(virtual)
endif()

if (POSTGRES_FOUND)
add_subdirectory(postgres)
endif()

if (NOT FORCE_STATIC_LIBS)
add_subdirectory(arcgisrest)
add_subdirectory(delimitedtext)
add_subdirectory(geonode)
add_subdirectory(mssql)
add_subdirectory(wcs)
add_subdirectory(gpx)
add_subdirectory(db2)
add_subdirectory(mdal)
if (WITH_ANALYSIS)
add_subdirectory(virtualraster)
endif()

if (WITH_SPATIALITE)
add_subdirectory(spatialite)
add_subdirectory(virtual)
add_subdirectory(wfs)
endif()

if (WITH_ORACLE)
add_subdirectory(oracle)
endif()
Expand Down
118 changes: 86 additions & 32 deletions src/providers/arcgisrest/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,14 +1,3 @@
include_directories(

${CMAKE_BINARY_DIR}/src/ui
)

if (WITH_GUI)
include_directories(SYSTEM
${QSCINTILLA_INCLUDE_DIR}
)
endif()

###############################################################################

set (AFS_SRCS
Expand All @@ -18,63 +7,128 @@ set (AFS_SRCS
qgsarcgisrestdataitems.cpp
)
if (WITH_GUI)
set(AFS_SRCS ${AFS_SRCS}
set(AFS_GUI_SRCS
qgsarcgisrestdataitemguiprovider.cpp
qgsarcgisrestprovidergui.cpp
qgsarcgisrestsourceselect.cpp
qgsarcgisrestsourcewidget.cpp
qgsnewarcgisrestconnection.cpp
)

set(AFS_UIS
qgsarcgisrestsourcewidgetbase.ui
qgsarcgisservicesourceselectbase.ui
qgsnewarcgisrestconnectionbase.ui
)
endif()

add_library (provider_arcgisfeatureserver_a STATIC ${AFS_SRCS})
add_library(provider_arcgisfeatureserver MODULE ${AFS_SRCS})

target_include_directories(provider_arcgisfeatureserver_a PUBLIC
${CMAKE_SOURCE_DIR}/src/providers/arcgisrest
)

# require c++17
target_compile_features(provider_arcgisfeatureserver_a PRIVATE cxx_std_17)
target_compile_features(provider_arcgisfeatureserver PRIVATE cxx_std_17)

target_link_libraries(provider_arcgisfeatureserver
qgis_core
${QCA_LIBRARY}
)

target_link_libraries (provider_arcgisfeatureserver_a
qgis_core
${QCA_LIBRARY}
)

if (WITH_GUI)
target_link_libraries(provider_arcgisfeatureserver
if (WITH_QT6)
QT6_WRAP_UI(AFS_UIS_H ${AFS_UIS})
else()
QT5_WRAP_UI(AFS_UIS_H ${AFS_UIS})
endif()

add_library(provider_arcgisfeatureserver_gui_a STATIC ${AFS_GUI_SRCS} ${AFS_UIS_H})

# require c++17
target_compile_features(provider_arcgisfeatureserver_gui_a PRIVATE cxx_std_17)

target_link_libraries(provider_arcgisfeatureserver_a
qgis_gui
)
target_link_libraries(provider_arcgisfeatureserver_a
target_link_libraries(provider_arcgisfeatureserver_gui_a
qgis_gui
)
add_dependencies(provider_arcgisfeatureserver ui)
add_dependencies(provider_arcgisfeatureserver_a ui)

include_directories(SYSTEM
${CMAKE_BINARY_DIR}/src/ui
${QSCINTILLA_INCLUDE_DIR}
)

add_dependencies(provider_arcgisfeatureserver_gui_a ui)
endif()

install (TARGETS provider_arcgisfeatureserver
RUNTIME DESTINATION ${QGIS_PLUGIN_DIR}
LIBRARY DESTINATION ${QGIS_PLUGIN_DIR})
if (FORCE_STATIC_LIBS)
# for (external) mobile apps to be able to pick up provider for linking
install (TARGETS provider_arcgisfeatureserver_a ARCHIVE DESTINATION ${QGIS_PLUGIN_DIR})
if (WITH_GUI)
install (TARGETS provider_arcgisfeatureserver_gui_a ARCHIVE DESTINATION ${QGIS_PLUGIN_DIR})
endif()
else()
add_library(provider_arcgisfeatureserver MODULE ${AFS_SRCS} ${AFS_GUI_SRCS} ${AFS_UIS_H})

target_link_libraries(provider_arcgisfeatureserver
qgis_core
${QCA_LIBRARY}
)

# require c++17
target_compile_features(provider_arcgisfeatureserver PRIVATE cxx_std_17)

if (WITH_GUI)
target_link_libraries(provider_arcgisfeatureserver
qgis_gui
)
add_dependencies(provider_arcgisfeatureserver ui)
endif()

install (TARGETS provider_arcgisfeatureserver
RUNTIME DESTINATION ${QGIS_PLUGIN_DIR}
LIBRARY DESTINATION ${QGIS_PLUGIN_DIR}
)
endif()

###############################################################################

set (AMS_SRCS
qgsamsprovider.cpp
)

add_library(provider_arcgismapserver MODULE ${AMS_SRCS})
add_library (provider_arcgismapserver_a STATIC ${AMS_SRCS})

target_include_directories(provider_arcgismapserver_a PUBLIC
${CMAKE_SOURCE_DIR}/src/providers/arcgisrest
)

# require c++17
target_compile_features(provider_arcgismapserver PRIVATE cxx_std_17)
target_compile_features(provider_arcgismapserver_a PRIVATE cxx_std_17)

target_link_libraries(provider_arcgismapserver
target_link_libraries (provider_arcgismapserver_a
qgis_core
${QCA_LIBRARY}
)

install (TARGETS provider_arcgismapserver
RUNTIME DESTINATION ${QGIS_PLUGIN_DIR}
LIBRARY DESTINATION ${QGIS_PLUGIN_DIR})
if (FORCE_STATIC_LIBS)
# for (external) mobile apps to be able to pick up provider for linking
install (TARGETS provider_arcgismapserver_a ARCHIVE DESTINATION ${QGIS_PLUGIN_DIR})
else()
add_library(provider_arcgismapserver MODULE ${AMS_SRCS})

# require c++17
target_compile_features(provider_arcgismapserver PRIVATE cxx_std_17)

target_link_libraries(provider_arcgismapserver
qgis_core
${QCA_LIBRARY}
)

install (TARGETS provider_arcgismapserver
RUNTIME DESTINATION ${QGIS_PLUGIN_DIR}
LIBRARY DESTINATION ${QGIS_PLUGIN_DIR}
)
endif()
7 changes: 7 additions & 0 deletions src/providers/arcgisrest/qgsafsprovider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,11 @@ QString QgsAfsProvider::name() const
return AFS_PROVIDER_KEY;
}

QString QgsAfsProvider::providerKey()
{
return AFS_PROVIDER_KEY;
}

QString QgsAfsProvider::description() const
{
return AFS_PROVIDER_DESCRIPTION;
Expand Down Expand Up @@ -469,7 +474,9 @@ QgsAfsProvider *QgsAfsProviderMetadata::createProvider( const QString &uri, cons
}


#ifndef HAVE_STATIC_PROVIDERS
QGISEXTERN QgsProviderMetadata *providerMetadataFactory()
{
return new QgsAfsProviderMetadata();
}
#endif
2 changes: 2 additions & 0 deletions src/providers/arcgisrest/qgsafsprovider.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,8 @@ class QgsAfsProvider : public QgsVectorDataProvider
QgsAbstractVectorLayerLabeling *createLabeling( const QVariantMap &configuration = QVariantMap() ) const override;
bool renderInPreview( const QgsDataProvider::PreviewContext &context ) override;

static QString providerKey();

private:
bool mValid = false;
std::shared_ptr<QgsAfsSharedData> mSharedData;
Expand Down
4 changes: 4 additions & 0 deletions src/providers/arcgisrest/qgsamsprovider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -350,6 +350,8 @@ QgsRasterDataProvider::ProviderCapabilities QgsAmsProvider::providerCapabilities

QString QgsAmsProvider::name() const { return AMS_PROVIDER_KEY; }

QString QgsAmsProvider::providerKey() { return AMS_PROVIDER_KEY; }

QString QgsAmsProvider::description() const { return AMS_PROVIDER_DESCRIPTION; }

QStringList QgsAmsProvider::subLayerStyles() const
Expand Down Expand Up @@ -1318,7 +1320,9 @@ QString QgsAmsProviderMetadata::encodeUri( const QVariantMap &parts ) const
return dsUri.uri( false );
}

#ifndef HAVE_STATIC_PROVIDERS
QGISEXTERN QgsProviderMetadata *providerMetadataFactory()
{
return new QgsAmsProviderMetadata();
}
#endif
2 changes: 2 additions & 0 deletions src/providers/arcgisrest/qgsamsprovider.h
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,8 @@ class QgsAmsProvider : public QgsRasterDataProvider
bool renderInPreview( const QgsDataProvider::PreviewContext &context ) override;
QgsLayerMetadata layerMetadata() const override;

static QString providerKey();

/* Inherited from QgsRasterInterface */
int bandCount() const override { return 1; }
int capabilities() const override { return Identify | IdentifyText | IdentifyFeature | Prefetch; }
Expand Down