From cde4b63a4d030c700d0da154ce7180525ea0581a Mon Sep 17 00:00:00 2001 From: nirvn Date: Sun, 31 Oct 2021 11:50:34 +0700 Subject: [PATCH] [afs][ams] Unlick static build support --- src/core/CMakeLists.txt | 2 + src/core/providers/qgsproviderregistry.cpp | 4 + src/gui/CMakeLists.txt | 1 + src/gui/qgsproviderguiregistry.cpp | 4 +- src/providers/CMakeLists.txt | 2 +- src/providers/arcgisrest/CMakeLists.txt | 114 +++++++++++++----- src/providers/arcgisrest/qgsafsprovider.cpp | 7 ++ src/providers/arcgisrest/qgsafsprovider.h | 2 + src/providers/arcgisrest/qgsamsprovider.cpp | 4 + src/providers/arcgisrest/qgsamsprovider.h | 2 + .../arcgisrest/qgsarcgisrestprovidergui.cpp | 51 ++++---- .../arcgisrest/qgsarcgisrestprovidergui.h | 28 +++++ 12 files changed, 161 insertions(+), 60 deletions(-) create mode 100644 src/providers/arcgisrest/qgsarcgisrestprovidergui.h diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index bf316d58b849..876762df27c4 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -2134,6 +2134,8 @@ if (FORCE_STATIC_LIBS) target_link_libraries(qgis_core provider_wms_a provider_delimitedtext_a + provider_arcgisfeatureserver_a + provider_arcgismapserver_a ) if (HAVE_SPATIALITE) target_link_libraries(qgis_core diff --git a/src/core/providers/qgsproviderregistry.cpp b/src/core/providers/qgsproviderregistry.cpp index 68e1d501cfc4..059c4a142697 100644 --- a/src/core/providers/qgsproviderregistry.cpp +++ b/src/core/providers/qgsproviderregistry.cpp @@ -45,6 +45,8 @@ #ifdef HAVE_STATIC_PROVIDERS #include "qgswmsprovider.h" #include "qgsdelimitedtextprovider.h" +#include "qgsafsprovider.h" +#include "qgsamsprovider.h" #ifdef HAVE_SPATIALITE #include "qgsspatialiteprovider.h" #include "qgswfsprovider.h" @@ -200,6 +202,8 @@ void QgsProviderRegistry::init() #ifdef HAVE_STATIC_PROVIDERS mProviders[ QgsWmsProvider::providerKey() ] = new QgsWmsProviderMetadata(); 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(); diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index c0bd79c5f7dc..3c34af27f7d7 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -1545,6 +1545,7 @@ if (FORCE_STATIC_LIBS) target_link_libraries(qgis_gui provider_wms_gui_a provider_delimitedtext_gui_a + provider_arcgisfeatureserver_gui_a ) if (HAVE_SPATIALITE) target_link_libraries(qgis_gui diff --git a/src/gui/qgsproviderguiregistry.cpp b/src/gui/qgsproviderguiregistry.cpp index 47221e8e4327..2dbebf7954d9 100644 --- a/src/gui/qgsproviderguiregistry.cpp +++ b/src/gui/qgsproviderguiregistry.cpp @@ -36,6 +36,7 @@ #ifdef HAVE_STATIC_PROVIDERS #include "qgswmsprovidergui.h" #include "qgsdelimitedtextprovidergui.h" +#include "qgsarcgisrestprovidergui.h" #ifdef HAVE_SPATIALITE #include "qgsspatialiteprovidergui.h" #include "qgswfsprovidergui.h" @@ -100,9 +101,10 @@ void QgsProviderGuiRegistry::loadStaticProviders( ) #ifdef HAVE_STATIC_PROVIDERS QgsProviderGuiMetadata *wms = new QgsWmsProviderGuiMetadata(); mProviders[ wms->key() ] = wms; - 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; diff --git a/src/providers/CMakeLists.txt b/src/providers/CMakeLists.txt index f928dceca1cb..00f80cc7e7f1 100644 --- a/src/providers/CMakeLists.txt +++ b/src/providers/CMakeLists.txt @@ -5,6 +5,7 @@ set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${QGIS_OUTPUT_DIRECTORY}/${QGIS_PLUGIN_SUBDI # providers with implemented both static and dynamic building add_subdirectory(wms) add_subdirectory(delimitedtext) +add_subdirectory(arcgisrest) if (WITH_SPATIALITE) add_subdirectory(spatialite) @@ -17,7 +18,6 @@ if (POSTGRES_FOUND) endif() if (NOT FORCE_STATIC_LIBS) - add_subdirectory(arcgisrest) add_subdirectory(geonode) add_subdirectory(mssql) add_subdirectory(wcs) diff --git a/src/providers/arcgisrest/CMakeLists.txt b/src/providers/arcgisrest/CMakeLists.txt index 3c672c4f6707..7e7fb2115847 100644 --- a/src/providers/arcgisrest/CMakeLists.txt +++ b/src/providers/arcgisrest/CMakeLists.txt @@ -1,14 +1,3 @@ -include_directories( - - ${CMAKE_BINARY_DIR}/src/ui -) - -if (WITH_GUI) - include_directories(SYSTEM - ${QSCINTILLA_INCLUDE_DIR} - ) -endif() - ############################################################################### set (AFS_SRCS @@ -18,26 +7,29 @@ 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 @@ -45,19 +37,55 @@ target_link_libraries (provider_arcgisfeatureserver_a ) 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}) + + target_link_libraries(provider_arcgisfeatureserver_gui_a qgis_gui ) - target_link_libraries(provider_arcgisfeatureserver_a - qgis_gui + + include_directories(SYSTEM + ${CMAKE_BINARY_DIR}/src/ui + ${QSCINTILLA_INCLUDE_DIR} ) - add_dependencies(provider_arcgisfeatureserver ui) - add_dependencies(provider_arcgisfeatureserver_a ui) + + 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() ############################################################################### @@ -65,16 +93,36 @@ 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() diff --git a/src/providers/arcgisrest/qgsafsprovider.cpp b/src/providers/arcgisrest/qgsafsprovider.cpp index 4cf204187b48..20e1c2692317 100644 --- a/src/providers/arcgisrest/qgsafsprovider.cpp +++ b/src/providers/arcgisrest/qgsafsprovider.cpp @@ -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; @@ -469,7 +474,9 @@ QgsAfsProvider *QgsAfsProviderMetadata::createProvider( const QString &uri, cons } +#ifndef HAVE_STATIC_PROVIDERS QGISEXTERN QgsProviderMetadata *providerMetadataFactory() { return new QgsAfsProviderMetadata(); } +#endif diff --git a/src/providers/arcgisrest/qgsafsprovider.h b/src/providers/arcgisrest/qgsafsprovider.h index a49b4cd3791c..205f3271e1c3 100644 --- a/src/providers/arcgisrest/qgsafsprovider.h +++ b/src/providers/arcgisrest/qgsafsprovider.h @@ -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 mSharedData; diff --git a/src/providers/arcgisrest/qgsamsprovider.cpp b/src/providers/arcgisrest/qgsamsprovider.cpp index 9823c6dec363..ba5b87aab2ea 100644 --- a/src/providers/arcgisrest/qgsamsprovider.cpp +++ b/src/providers/arcgisrest/qgsamsprovider.cpp @@ -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 @@ -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 diff --git a/src/providers/arcgisrest/qgsamsprovider.h b/src/providers/arcgisrest/qgsamsprovider.h index 6786a2eed481..eb6117f501e7 100644 --- a/src/providers/arcgisrest/qgsamsprovider.h +++ b/src/providers/arcgisrest/qgsamsprovider.h @@ -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; } diff --git a/src/providers/arcgisrest/qgsarcgisrestprovidergui.cpp b/src/providers/arcgisrest/qgsarcgisrestprovidergui.cpp index 55a533e32fc1..e6102aae7379 100644 --- a/src/providers/arcgisrest/qgsarcgisrestprovidergui.cpp +++ b/src/providers/arcgisrest/qgsarcgisrestprovidergui.cpp @@ -13,6 +13,8 @@ * * ***************************************************************************/ +#include "qgsarcgisrestprovidergui.h" + #include "qgsapplication.h" #include "qgsproviderguimetadata.h" #include "qgssourceselectprovider.h" @@ -63,38 +65,37 @@ class QgsArcGisRestSourceWidgetProvider : public QgsProviderSourceWidgetProvider } }; -class QgsArcGisRestProviderGuiMetadata: public QgsProviderGuiMetadata + +QgsArcGisRestProviderGuiMetadata::QgsArcGisRestProviderGuiMetadata() + : QgsProviderGuiMetadata( QgsAfsProvider::AFS_PROVIDER_KEY ) { - public: - QgsArcGisRestProviderGuiMetadata() - : QgsProviderGuiMetadata( QgsAfsProvider::AFS_PROVIDER_KEY ) - { - } +} - QList dataItemGuiProviders() override - { - QList providers; - providers << new QgsArcGisRestDataItemGuiProvider(); - return providers; - } +QList QgsArcGisRestProviderGuiMetadata::dataItemGuiProviders() override +{ + QList providers; + providers << new QgsArcGisRestDataItemGuiProvider(); + return providers; +} - QList sourceSelectProviders() override - { - QList providers; - providers << new QgsArcGisRestSourceSelectProvider; - return providers; - } +QList QgsArcGisRestProviderGuiMetadata::sourceSelectProviders() override +{ + QList providers; + providers << new QgsArcGisRestSourceSelectProvider; + return providers; +} - QList sourceWidgetProviders() override - { - QList providers; - providers << new QgsArcGisRestSourceWidgetProvider(); - return providers; - } -}; +QList QgsArcGisRestProviderGuiMetadata::sourceWidgetProviders() override +{ + QList providers; + providers << new QgsArcGisRestSourceWidgetProvider(); + return providers; +} +#ifndef HAVE_STATIC_PROVIDERS QGISEXTERN QgsProviderGuiMetadata *providerGuiMetadataFactory() { return new QgsArcGisRestProviderGuiMetadata(); } +#endif diff --git a/src/providers/arcgisrest/qgsarcgisrestprovidergui.h b/src/providers/arcgisrest/qgsarcgisrestprovidergui.h new file mode 100644 index 000000000000..cb001e01d950 --- /dev/null +++ b/src/providers/arcgisrest/qgsarcgisrestprovidergui.h @@ -0,0 +1,28 @@ +/*************************************************************************** + qgsafsprovidergui.h + -------------------------------------- + Date : June 2019 + Copyright : (C) 2019 by Martin Dobias + Email : wonder dot sk at gmail dot com + *************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include "qgsproviderguimetadata.h" +#include "qgssourceselectprovider.h" +#include "qgsafsprovider.h" + +class QgsArcGisRestProviderGuiMetadata: public QgsProviderGuiMetadata +{ + public: + QgsArcGisRestProviderGuiMetadata(); + + QList dataItemGuiProviders() override; + QList sourceSelectProviders() override; + QList sourceWidgetProviders() override; +};