Skip to content

Commit

Permalink
Make it possible to build just core lib and providers: -DWITH_GUI=FALSE
Browse files Browse the repository at this point in the history
This is useful in some cases when working on a third party app/script
that only uses qgis_core. For example, I am working on qgis 3D project
and it is useful to be able to build QGIS core lib with custom Qt version
without having to spend too much time building what I do not need.
Also may be useful for QField to simplify the build of QGIS as a dependency
(no QScintilla, Qwt) and avoid bits of code in providers that would not
be used anyway.

No real source code changes, just configuration changes, mainly in providers.
  • Loading branch information
wonder-sk committed Jul 7, 2017
1 parent eb8f91a commit a8cceff
Show file tree
Hide file tree
Showing 57 changed files with 838 additions and 296 deletions.
28 changes: 23 additions & 5 deletions CMakeLists.txt
Expand Up @@ -58,6 +58,8 @@ IF(WITH_CORE)
ENDIF (WITH_GRASS${GRASS_CACHE_VERSION})
ENDFOREACH (GRASS_SEARCH_VERSION)

SET (WITH_GUI TRUE CACHE BOOL "Determines whether QGIS GUI library (and everything built on top of it) should be built")

SET (WITH_DESKTOP TRUE CACHE BOOL "Determines whether QGIS desktop should be built")

# server disabled default because it needs FastCGI (which is optional dependency)
Expand All @@ -74,6 +76,16 @@ IF(WITH_CORE)
# Custom widgets
SET (WITH_CUSTOM_WIDGETS FALSE CACHE BOOL "Determines whether QGIS custom widgets for Qt Designer should be built")

IF (NOT WITH_GUI)
SET (HAVE_GUI FALSE) # used in qgsconfig.h
# force value of some options
SET(WITH_DESKTOP FALSE)
SET(WITH_CUSTOM_WIDGETS FALSE)
SET(WITH_SERVER FALSE) # for some reason server also uses GUI library
ELSE ()
SET (HAVE_GUI TRUE) # used in qgsconfig.h
ENDIF()

# try to configure and build POSTGRESQL support
SET (WITH_POSTGRESQL TRUE CACHE BOOL "Determines whether POSTGRESQL support should be built")
IF (WITH_POSTGRESQL)
Expand Down Expand Up @@ -103,9 +115,11 @@ IF(WITH_CORE)
SET (WITH_STAGED_PLUGINS TRUE CACHE BOOL "Stage-install core Python plugins to run from build directory? (utilities and console are always staged)")
SET (WITH_PY_COMPILE FALSE CACHE BOOL "Determines whether Python modules in staged or installed locations are byte-compiled")
# concatenate QScintilla2 API files
SET (WITH_QSCIAPI TRUE CACHE BOOL "Whether to generate PyQGIS QScintilla2 API file. (For devs) run 'make qsci-pap-src' in between QGIS build and install to regenerate .pap file in source tree for console auto-completion.")
# keep casual users from updating their source tree via WITH_QSCIAPI
MARK_AS_ADVANCED (WITH_QSCIAPI)
IF (WITH_GUI)
SET (WITH_QSCIAPI TRUE CACHE BOOL "Whether to generate PyQGIS QScintilla2 API file. (For devs) run 'make qsci-pap-src' in between QGIS build and install to regenerate .pap file in source tree for console auto-completion.")
# keep casual users from updating their source tree via WITH_QSCIAPI
MARK_AS_ADVANCED (WITH_QSCIAPI)
ENDIF (WITH_GUI)
ADD_DEFINITIONS(-DWITH_BINDINGS)
ENDIF (WITH_BINDINGS)

Expand Down Expand Up @@ -196,7 +210,9 @@ IF(WITH_CORE)
FIND_PACKAGE(GDAL)
FIND_PACKAGE(Expat REQUIRED)
FIND_PACKAGE(Spatialindex REQUIRED)
FIND_PACKAGE(Qwt REQUIRED)
IF (WITH_GUI)
FIND_PACKAGE(Qwt REQUIRED)
ENDIF (WITH_GUI)

IF (WITH_INTERNAL_QEXTSERIALPORT)
SET(QEXTSERIALPORT_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/src/core/gps/qextserialport)
Expand Down Expand Up @@ -274,7 +290,9 @@ IF(WITH_CORE)
ENDIF (WITH_QTMOBILITY)

# search for QScintilla2 (C++ lib)
FIND_PACKAGE(QScintilla REQUIRED)
IF (WITH_GUI)
FIND_PACKAGE(QScintilla REQUIRED)
ENDIF (WITH_GUI)

# Password helper
FIND_PACKAGE(QtKeychain REQUIRED)
Expand Down
2 changes: 2 additions & 0 deletions cmake_templates/qgsconfig.h.in
Expand Up @@ -44,6 +44,8 @@

#cmakedefine USING_NINJA

#cmakedefine HAVE_GUI

#cmakedefine HAVE_POSTGRESQL

#cmakedefine HAVE_ORACLE
Expand Down
75 changes: 47 additions & 28 deletions python/CMakeLists.txt
Expand Up @@ -64,7 +64,9 @@ MACRO(PY_2TO3 TARGET_NAME RESOURCE_PATHS)
ENDMACRO(PY_2TO3)

ADD_SUBDIRECTORY(plugins)
ADD_SUBDIRECTORY(qsci_apis)
IF (WITH_GUI)
ADD_SUBDIRECTORY(qsci_apis)
ENDIF ()
ADD_SUBDIRECTORY(console)
ADD_SUBDIRECTORY(PyQt)
ADD_SUBDIRECTORY(pyplugin_installer)
Expand All @@ -87,11 +89,17 @@ INCLUDE_DIRECTORIES(SYSTEM
${GEOS_INCLUDE_DIR}
${QWT_INCLUDE_DIR}
${QEXTSERIALPORT_INCLUDE_DIR}
${QSCINTILLA_INCLUDE_DIR}
${QCA_INCLUDE_DIR}
${QTKEYCHAIN_INCLUDE_DIR}
${SQLITE3_INCLUDE_DIR}
)

IF (WITH_GUI)
INCLUDE_DIRECTORIES(SYSTEM
${QSCINTILLA_INCLUDE_DIR}
)
ENDIF ()

INCLUDE_DIRECTORIES(
${CMAKE_SOURCE_DIR}/src/core
${CMAKE_SOURCE_DIR}/src/core/annotations
Expand All @@ -114,26 +122,32 @@ INCLUDE_DIRECTORIES(
${CMAKE_SOURCE_DIR}/src/core/raster
${CMAKE_SOURCE_DIR}/src/core/scalebar
${CMAKE_SOURCE_DIR}/src/core/symbology-ng
${CMAKE_SOURCE_DIR}/src/gui
${CMAKE_SOURCE_DIR}/src/gui/symbology-ng
${CMAKE_SOURCE_DIR}/src/gui/raster
${CMAKE_SOURCE_DIR}/src/gui/attributetable
${CMAKE_SOURCE_DIR}/src/gui/auth
${CMAKE_SOURCE_DIR}/src/gui/editorwidgets
${CMAKE_SOURCE_DIR}/src/gui/editorwidgets/core
${CMAKE_SOURCE_DIR}/src/gui/effects
${CMAKE_SOURCE_DIR}/src/gui/layertree
${CMAKE_SOURCE_DIR}/src/gui/layout
${CMAKE_SOURCE_DIR}/src/gui/locator
${CMAKE_SOURCE_DIR}/src/plugins

${CMAKE_BINARY_DIR} # qgsconfig.h, qgsversion.h
${CMAKE_BINARY_DIR}/src/core
${CMAKE_BINARY_DIR}/src/gui
${CMAKE_BINARY_DIR}/src/ui
${CMAKE_BINARY_DIR}/src/analysis
)

IF (WITH_GUI)
INCLUDE_DIRECTORIES(
${CMAKE_SOURCE_DIR}/src/gui
${CMAKE_SOURCE_DIR}/src/gui/symbology-ng
${CMAKE_SOURCE_DIR}/src/gui/raster
${CMAKE_SOURCE_DIR}/src/gui/attributetable
${CMAKE_SOURCE_DIR}/src/gui/auth
${CMAKE_SOURCE_DIR}/src/gui/editorwidgets
${CMAKE_SOURCE_DIR}/src/gui/editorwidgets/core
${CMAKE_SOURCE_DIR}/src/gui/effects
${CMAKE_SOURCE_DIR}/src/gui/layertree
${CMAKE_SOURCE_DIR}/src/gui/layout
${CMAKE_SOURCE_DIR}/src/gui/locator

${CMAKE_BINARY_DIR}/src/gui
)
ENDIF ()

IF(NOT ENABLE_TESTS)
SET(SIP_DISABLE_FEATURES ${SIP_DISABLE_FEATURES} TESTS)
ENDIF(NOT ENABLE_TESTS)
Expand All @@ -159,26 +173,31 @@ GENERATE_SIP_PYTHON_MODULE_CODE(qgis._core core/core.sip cpp_files)
BUILD_SIP_PYTHON_MODULE(qgis._core core/core.sip ${cpp_files} "" qgis_core)
SET(SIP_CORE_CPP_FILES ${cpp_files})

# gui module
FILE(GLOB_RECURSE sip_files_gui gui/*.sip)
SET(SIP_EXTRA_FILES_DEPEND ${sip_files_core} ${sip_files_gui})
SET(SIP_EXTRA_OPTIONS ${PYQT_SIP_FLAGS} -o -a ${CMAKE_BINARY_DIR}/python/qgis.gui.api)
IF(QSCI_SIP_DIR)
SET(SIP_EXTRA_OPTIONS ${SIP_EXTRA_OPTIONS} -I ${QSCI_SIP_DIR})
ELSE(QSCI_SIP_DIR)
MESSAGE(STATUS "Qsci sip file not found - disabling bindings for derived classes")
SET(SIP_DISABLE_FEATURES ${SIP_DISABLE_FEATURES} HAVE_QSCI_SIP)
ENDIF(QSCI_SIP_DIR)

IF(UNIX AND NOT SIP_VERSION_NUM LESS 265984)
SET(SIP_EXTRA_OPTIONS -P ${SIP_EXTRA_OPTIONS})
ADD_DEFINITIONS(-Dprotected=public)
ENDIF(UNIX AND NOT SIP_VERSION_NUM LESS 265984)

GENERATE_SIP_PYTHON_MODULE_CODE(qgis._gui gui/gui.sip cpp_files)
BUILD_SIP_PYTHON_MODULE(qgis._gui gui/gui.sip ${cpp_files} "" qgis_core qgis_gui)
SET(PY_MODULES core analysis)

SET(PY_MODULES core gui analysis)
# gui module
IF (WITH_GUI)
SET(PY_MODULES ${PY_MODULES} gui)

FILE(GLOB_RECURSE sip_files_gui gui/*.sip)
SET(SIP_EXTRA_FILES_DEPEND ${sip_files_core} ${sip_files_gui})
SET(SIP_EXTRA_OPTIONS ${PYQT_SIP_FLAGS} -o -a ${CMAKE_BINARY_DIR}/python/qgis.gui.api)

IF(QSCI_SIP_DIR)
SET(SIP_EXTRA_OPTIONS ${SIP_EXTRA_OPTIONS} -I ${QSCI_SIP_DIR})
ELSE(QSCI_SIP_DIR)
MESSAGE(STATUS "Qsci sip file not found - disabling bindings for derived classes")
SET(SIP_DISABLE_FEATURES ${SIP_DISABLE_FEATURES} HAVE_QSCI_SIP)
ENDIF(QSCI_SIP_DIR)

GENERATE_SIP_PYTHON_MODULE_CODE(qgis._gui gui/gui.sip cpp_files)
BUILD_SIP_PYTHON_MODULE(qgis._gui gui/gui.sip ${cpp_files} "" qgis_core qgis_gui)
ENDIF (WITH_GUI)

# server module
IF (WITH_SERVER AND WITH_SERVER_PLUGINS)
Expand Down
8 changes: 5 additions & 3 deletions src/CMakeLists.txt
Expand Up @@ -2,9 +2,11 @@ ADD_SUBDIRECTORY(native)

ADD_SUBDIRECTORY(core)
ADD_SUBDIRECTORY(analysis)
ADD_SUBDIRECTORY(ui)
ADD_SUBDIRECTORY(gui)
ADD_SUBDIRECTORY(auth)
IF (WITH_GUI)
ADD_SUBDIRECTORY(ui)
ADD_SUBDIRECTORY(gui)
ADD_SUBDIRECTORY(auth)
ENDIF (WITH_GUI)
ADD_SUBDIRECTORY(providers)
ADD_SUBDIRECTORY(crssync)
ADD_SUBDIRECTORY(test)
Expand Down
43 changes: 36 additions & 7 deletions src/providers/arcgisrest/CMakeLists.txt
Expand Up @@ -14,9 +14,14 @@ INCLUDE_DIRECTORIES(

INCLUDE_DIRECTORIES(SYSTEM
${GEOS_INCLUDE_DIR}
${QSCINTILLA_INCLUDE_DIR}
)

IF (WITH_GUI)
INCLUDE_DIRECTORIES(SYSTEM
${QSCINTILLA_INCLUDE_DIR}
)
ENDIF ()

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

SET (AFS_SRCS
Expand All @@ -25,26 +30,38 @@ SET (AFS_SRCS
qgsafsfeatureiterator.cpp
qgsafsprovider.cpp
qgsafsproviderextern.cpp
qgsafssourceselect.cpp
qgsafsshareddata.cpp
)
SET (AFS_MOC_HDRS
qgsarcgisrestutils.h
qgsafsdataitems.h
qgsafsprovider.h
qgsafssourceselect.h
qgsafsshareddata.h
)

IF (WITH_GUI)
SET(AFS_SRCS ${AFS_SRCS}
qgsafssourceselect.cpp
)
SET(AFS_MOC_HDRS ${AFS_MOC_HDRS}
qgsafssourceselect.h
)
ENDIF ()

QT5_WRAP_CPP (AFS_MOC_SRCS ${AFS_MOC_HDRS})

ADD_LIBRARY(arcgisfeatureserverprovider MODULE ${AFS_SRCS} ${AFS_MOC_SRCS})

TARGET_LINK_LIBRARIES(arcgisfeatureserverprovider
qgis_core
qgis_gui
)

IF (WITH_GUI)
TARGET_LINK_LIBRARIES(arcgisfeatureserverprovider
qgis_gui
)
ENDIF ()

INSTALL (TARGETS arcgisfeatureserverprovider
RUNTIME DESTINATION ${QGIS_PLUGIN_DIR}
LIBRARY DESTINATION ${QGIS_PLUGIN_DIR})
Expand All @@ -56,24 +73,36 @@ SET (AMS_SRCS
qgsamsdataitems.cpp
qgsamsprovider.cpp
qgsamsproviderextern.cpp
qgsamssourceselect.cpp
)
SET (AMS_MOC_HDRS
qgsarcgisrestutils.h
qgsamsdataitems.h
qgsamsprovider.h
qgsamssourceselect.h
)

IF (WITH_GUI)
SET(AMS_SRCS ${AMS_SRCS}
qgsamssourceselect.cpp
)
SET(AMS_MOC_HDRS ${AMS_MOC_HDRS}
qgsamssourceselect.h
)
ENDIF ()

QT5_WRAP_CPP (AMS_MOC_SRCS ${AMS_MOC_HDRS})

ADD_LIBRARY(arcgismapserverprovider MODULE ${AMS_SRCS} ${AMS_MOC_SRCS})

TARGET_LINK_LIBRARIES(arcgismapserverprovider
qgis_core
qgis_gui
)

IF (WITH_GUI)
TARGET_LINK_LIBRARIES(arcgismapserverprovider
qgis_gui
)
ENDIF ()

INSTALL (TARGETS arcgismapserverprovider
RUNTIME DESTINATION ${QGIS_PLUGIN_DIR}
LIBRARY DESTINATION ${QGIS_PLUGIN_DIR})
9 changes: 8 additions & 1 deletion src/providers/arcgisrest/qgsafsdataitems.cpp
Expand Up @@ -13,12 +13,15 @@
* *
***************************************************************************/
#include "qgslogger.h"
#include "qgsnewhttpconnection.h"
#include "qgsowsconnection.h"
#include "qgsafsdataitems.h"
#include "qgsafsprovider.h"
#include "qgsarcgisrestutils.h"

#ifdef HAVE_GUI
#include "qgsnewhttpconnection.h"
#include "qgsafssourceselect.h"
#endif

#include <QCoreApplication>
#include <QSettings>
Expand Down Expand Up @@ -46,6 +49,7 @@ QVector<QgsDataItem *> QgsAfsRootItem::createChildren()
return connections;
}

#ifdef HAVE_GUI
QList<QAction *> QgsAfsRootItem::actions()
{
QAction *actionNew = new QAction( tr( "New Connection..." ), this );
Expand Down Expand Up @@ -75,6 +79,7 @@ void QgsAfsRootItem::newConnection()
refresh();
}
}
#endif

///////////////////////////////////////////////////////////////////////////////

Expand Down Expand Up @@ -114,6 +119,7 @@ bool QgsAfsConnectionItem::equal( const QgsDataItem *other )
return ( type() == other->type() && o != 0 && mPath == o->mPath && mName == o->mName );
}

#ifdef HAVE_GUI
QList<QAction *> QgsAfsConnectionItem::actions()
{
QList<QAction *> lst;
Expand Down Expand Up @@ -145,6 +151,7 @@ void QgsAfsConnectionItem::deleteConnection()
QgsOwsConnection::deleteConnection( QStringLiteral( "arcgisfeatureserver" ), mName );
mParent->refresh();
}
#endif

///////////////////////////////////////////////////////////////////////////////

Expand Down
8 changes: 8 additions & 0 deletions src/providers/arcgisrest/qgsafsdataitems.h
Expand Up @@ -25,12 +25,16 @@ class QgsAfsRootItem : public QgsDataCollectionItem
public:
QgsAfsRootItem( QgsDataItem *parent, const QString &name, const QString &path );
QVector<QgsDataItem *> createChildren() override;
#ifdef HAVE_GUI
QList<QAction *> actions() override;
QWidget *paramWidget() override;
#endif

public slots:
#ifdef HAVE_GUI
void connectionsChanged();
void newConnection();
#endif
};


Expand All @@ -41,11 +45,15 @@ class QgsAfsConnectionItem : public QgsDataCollectionItem
QgsAfsConnectionItem( QgsDataItem *parent, const QString &name, const QString &path, const QString &url );
QVector<QgsDataItem *> createChildren() override;
bool equal( const QgsDataItem *other ) override;
#ifdef HAVE_GUI
QList<QAction *> actions() override;
#endif

public slots:
#ifdef HAVE_GUI
void editConnection();
void deleteConnection();
#endif

private:
QString mUrl;
Expand Down

0 comments on commit a8cceff

Please sign in to comment.