Warning, /education/marble/CMakeLists.txt is written in an unsupported language. File is not indexed.
0001 cmake_minimum_required(VERSION 3.10) 0002 0003 # Set minimum OS X target 0004 set(CMAKE_OSX_DEPLOYMENT_TARGET 10.9) 0005 0006 # KDE Application Version, managed by release script 0007 set (RELEASE_SERVICE_VERSION_MAJOR "23") 0008 set (RELEASE_SERVICE_VERSION_MINOR "03") 0009 set (RELEASE_SERVICE_VERSION_MICRO "80") 0010 set (RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE_VERSION_MINOR}.${RELEASE_SERVICE_VERSION_MICRO}") 0011 0012 project(marble VERSION ${RELEASE_SERVICE_VERSION}) 0013 0014 #################################################### 0015 # CMake Settings 0016 SET(CMAKE_COLOR_MAKEFILE ON) 0017 # SET(CMAKE_SKIP_RPATH ON) 0018 0019 set(CMAKE_POSITION_INDEPENDENT_CODE ON) 0020 0021 # Let CMake find the correct library dir instead of 0022 # relying on the obsolete LIB_SUFFIX parameter 0023 include(GNUInstallDirs) 0024 0025 # Taken from KDECompilerSettings.cmake: 0026 # Pick sensible versions of the C and C++ standards. 0027 # Note that MSVC does not have equivalent flags; the features are either 0028 # supported or they are not. 0029 if ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") 0030 # We use the C89 standard because that is what is common to all our 0031 # compilers (in particular, MSVC 2010 does not support C99) 0032 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=iso9899:1990") 0033 endif() 0034 if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") 0035 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") 0036 elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel" AND NOT WIN32) 0037 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") 0038 endif() 0039 # Default to hidden visibility for symbols 0040 set(CMAKE_C_VISIBILITY_PRESET hidden) 0041 set(CMAKE_CXX_VISIBILITY_PRESET hidden) 0042 set(CMAKE_VISIBILITY_INLINES_HIDDEN 1) 0043 if (POLICY CMP0063) 0044 cmake_policy(SET CMP0063 NEW) 0045 endif() 0046 0047 # RPATH/RUNPATH settings 0048 if (UNIX) 0049 # Add CMAKE_INSTALL_FULL_LIBDIR to the RPATH to be used when installing, 0050 # but only if it isn't a standard system directory. 0051 list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_FULL_LIBDIR}" isSystemLibDir) 0052 list(FIND CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_FULL_LIBDIR}" isSystemCxxLibDir) 0053 list(FIND CMAKE_C_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_FULL_LIBDIR}" isSystemCLibDir) 0054 if("${isSystemLibDir}" STREQUAL "-1" AND "${isSystemCxxLibDir}" STREQUAL "-1" AND "${isSystemCLibDir}" STREQUAL "-1") 0055 set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_FULL_LIBDIR}") 0056 endif() 0057 0058 # Add directories which are in the linker search path (but outside the project) 0059 # to the RPATH to be used when installing 0060 set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) 0061 # no libs or plugins are designed to be used from the build dir, so directly link with install rpath 0062 set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) 0063 endif (UNIX) 0064 0065 #################################################### 0066 # Where to look first for cmake modules, 0067 # before ${CMAKE_ROOT}/Modules/ is checked 0068 set ( CMAKE_MODULE_PATH 0069 ${CMAKE_SOURCE_DIR}/cmake/modules 0070 ${CMAKE_CURRENT_SOURCE_DIR} 0071 ${CMAKE_CURRENT_SOURCE_DIR}/src 0072 ${CMAKE_CURRENT_SOURCE_DIR}/cmake_find_rules 0073 ${CMAKE_CURRENT_SOURCE_DIR}/cmake_scripts 0074 ${CMAKE_MODULE_PATH} 0075 ) 0076 0077 # add cmake macros 0078 include(GenerateExportHeader) 0079 include( MarbleMacros ) 0080 0081 #################################################### 0082 # Generate the tiles with the tilecreator at compile time 0083 # if this option is set, srtm.jpg will not be installed but the generated tiles instead 0084 option(MOBILE "Create a Marble version optimized for handheld devices") 0085 0086 #################################################### 0087 # Provide opt-in switch for mobile variant, which is not only useful for Android. 0088 option(BUILD_TOUCH "Build touch-friendly Marble version (on Android this option is bypassed)" OFF) 0089 0090 #################################################### 0091 # Build a D-Bus interface for the Marble widget 0092 # This is disabled by default for all win32, apple and Android 0093 if(WIN32 OR APPLE OR ANDROID) 0094 option(BUILD_WITH_DBUS "Build the D-Bus interface for the Marble widget" OFF) 0095 else() 0096 option(BUILD_WITH_DBUS "Build the D-Bus interface for the Marble widget" ON) 0097 endif() 0098 0099 0100 ####################################################### 0101 # Specific options for building for different platforms 0102 0103 if(ANDROID) 0104 add_definitions(-DANDROID) 0105 endif() 0106 0107 0108 ####################################################### 0109 # Find Qt dependencies 0110 0111 find_package(Protobuf) 0112 set_package_properties(Protobuf PROPERTIES TYPE OPTIONAL PURPOSE "Parsing of OSM PBF files.") 0113 0114 if(ANDROID) 0115 set(REQUIRED_QT_VERSION 5.14.0) 0116 # TODO: still needed with ECM toolchain? 0117 SET(QT_QMAKE_EXECUTABLE "$ENV{Qt5_android}/bin/qmake") 0118 else() 0119 set(REQUIRED_QT_VERSION 5.14.0) 0120 endif() 0121 0122 find_package(Qt5 ${REQUIRED_QT_VERSION} REQUIRED 0123 COMPONENTS 0124 Core 0125 Xml 0126 Network 0127 Test 0128 Widgets 0129 Svg 0130 Sql 0131 Concurrent 0132 Quick 0133 PrintSupport 0134 ) 0135 0136 if(ANDROID) 0137 find_package(Qt5Positioning ${REQUIRED_QT_VERSION} REQUIRED) 0138 find_package(Qt5Multimedia ${REQUIRED_QT_VERSION} REQUIRED) 0139 0140 set ( MARBLE_NO_WEBKITWIDGETS TRUE ) 0141 else() 0142 find_package(Qt5WebChannel ${REQUIRED_QT_VERSION}) 0143 find_package(Qt5WebEngine ${REQUIRED_QT_VERSION}) 0144 find_package(Qt5WebEngineWidgets ${REQUIRED_QT_VERSION}) 0145 0146 if ( NOT Qt5WebEngineWidgets_FOUND ) 0147 set ( MARBLE_NO_WEBKITWIDGETS TRUE ) 0148 endif() 0149 endif() 0150 0151 if (BUILD_WITH_DBUS) 0152 find_package(Qt5DBus ${REQUIRED_QT_VERSION}) 0153 if (NOT Qt5DBus_FOUND) 0154 set(MARBLE_NO_DBUS TRUE) 0155 endif() 0156 else() 0157 set(MARBLE_NO_DBUS TRUE) 0158 endif() 0159 0160 SET(CMAKE_AUTOMOC TRUE) 0161 0162 # Use M_PI under Windows 0163 if( WIN32 ) 0164 add_definitions( -D_USE_MATH_DEFINES ) 0165 endif( WIN32 ) 0166 0167 #################################################### 0168 # build unit tests 0169 0170 INCLUDE (CTest) 0171 ENABLE_TESTING() 0172 0173 option( BUILD_MARBLE_TESTS "Build unit tests" ON ) 0174 add_feature_info("Unit tests" BUILD_MARBLE_TESTS "Build unit tests. Toggle with BUILD_MARBLE_TESTS=YES/NO. 'make test' will run all.") 0175 0176 if( BUILD_MARBLE_TESTS ) 0177 # SET (TEST_DATA_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/tests/test_data") 0178 #where unit test binaries should be installed to and run from 0179 # SET (MARBLE_TEST_DIR ${CMAKE_CURRENT_BINARY_DIR}/tests) 0180 endif( BUILD_MARBLE_TESTS ) 0181 0182 #################################################### 0183 set (PEDANTIC FALSE CACHE BOOL "Determines if we should compile with -Wall -Werror.") 0184 set (WITH_DESIGNER_PLUGIN TRUE CACHE BOOL "Build plugins for Qt Designer") 0185 add_feature_info("Qt Designer plugins" WITH_DESIGNER_PLUGIN "Marble widget support in Qt Designer. Toggle with WITH_DESIGNER_PLUGIN=YES/NO") 0186 0187 set(EXEC_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} CACHE PATH "Base directory for executables and libraries" FORCE) 0188 if (NOT QT_PLUGINS_DIR) 0189 set(QT_PLUGINS_DIR ${CMAKE_INSTALL_LIBDIR}/plugins) 0190 endif() 0191 0192 #################################################### 0193 # Detect default for the user configurable MARBLE_DATA_PATH option 0194 0195 if(WIN32) 0196 set(data_dir data) 0197 set(locale_dir "${data_dir}/locale") 0198 set(plugin_dir plugins) 0199 elseif(APPLE) 0200 # needed for finding bundle path in e.g. katlasdir.h 0201 FIND_LIBRARY(APP_SERVICES_LIBRARY ApplicationServices ) 0202 MARK_AS_ADVANCED (APP_SERVICES_LIBRARY) 0203 SET(MAC_EXTRA_LIBS ${APP_SERVICES_LIBRARY}) 0204 # for Mac OS X, everything is put inside an application bundle 0205 SET (CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}/) 0206 # path for library references 0207 SET (CMAKE_INSTALL_NAME_DIR @executable_path/lib) 0208 # install the Info.plist file 0209 install(FILES src/mac/Info.plist DESTINATION ${CMAKE_INSTALL_PREFIX}/Marble.app/Contents) 0210 #SET (lib_dir ${CMAKE_INSTALL_PREFIX}/Marble.app/Contents/MacOS/lib) 0211 SET (data_dir ${CMAKE_INSTALL_PREFIX}/Marble.app/Contents/MacOS/resources/data) 0212 set(locale_dir "${data_dir}/locale") 0213 SET (plugin_dir ${CMAKE_INSTALL_PREFIX}/Marble.app/Contents/MacOS/resources/plugins) 0214 elseif(ANDROID) 0215 set(plugin_dir "${CMAKE_INSTALL_PREFIX}/assets/plugins") 0216 set(data_dir "${CMAKE_INSTALL_PREFIX}/assets/data") 0217 set(locale_dir "${data_dir}/locale") 0218 else() # Linux / bsd etc... 0219 set(data_dir ${CMAKE_INSTALL_FULL_DATAROOTDIR}/marble/data) 0220 set(locale_dir "${CMAKE_INSTALL_FULL_DATAROOTDIR}/locale") 0221 set(plugin_dir ${CMAKE_INSTALL_FULL_LIBDIR}/marble/plugins) 0222 endif() 0223 0224 if(NOT ICON_INSTALL_DIR) 0225 set(ICON_INSTALL_DIR share/icons) 0226 endif(NOT ICON_INSTALL_DIR) 0227 0228 if(NOT APPS_INSTALL_DIR) 0229 set(APPS_INSTALL_DIR share/applications) 0230 endif(NOT APPS_INSTALL_DIR) 0231 0232 if(NOT INCLUDE_INSTALL_DIR) 0233 set(INCLUDE_INSTALL_DIR "include") 0234 endif() 0235 0236 if (NOT MARBLE_DATA_PATH) 0237 set (MARBLE_DATA_PATH ${data_dir}) 0238 endif (NOT MARBLE_DATA_PATH) 0239 0240 if (NOT MARBLE_PLUGIN_PATH) 0241 set (MARBLE_PLUGIN_PATH ${plugin_dir}) 0242 endif (NOT MARBLE_PLUGIN_PATH) 0243 0244 if (NOT MARBLE_DATA_INSTALL_PATH) 0245 set (MARBLE_DATA_INSTALL_PATH ${MARBLE_DATA_PATH}) 0246 endif (NOT MARBLE_DATA_INSTALL_PATH) 0247 0248 if (NOT MARBLE_PLUGIN_INSTALL_PATH) 0249 set (MARBLE_PLUGIN_INSTALL_PATH ${MARBLE_PLUGIN_PATH}) 0250 endif (NOT MARBLE_PLUGIN_INSTALL_PATH) 0251 0252 #MESSAGE( STATUS, "MARBLE_PLUGIN_INSTALL_PATH: ${MARBLE_PLUGIN_INSTALL_PATH}" ) 0253 0254 if(WIN32) 0255 set (STATIC_BUILD FALSE CACHE BOOL "Link to static Qt libs (win32 only)?") 0256 endif(WIN32) 0257 0258 add_definitions( 0259 -DQT_USE_QSTRINGBUILDER 0260 -DQT_NO_SIGNALS_SLOTS_KEYWORDS 0261 -DQT_NO_URL_CAST_FROM_STRING 0262 -DQT_NO_CAST_TO_ASCII 0263 -DQT_NO_CAST_FROM_BYTEARRAY 0264 -DQT_DISABLE_DEPRECATED_BEFORE=0x050700 0265 ) 0266 0267 if (NOT WIN32) 0268 # Strict iterators can't be used on Windows, they lead to a link error 0269 # when application code iterates over a QVector<QPoint> for instance 0270 # See example at https://bugreports.qt.io/browse/QTBUG-78112 0271 add_definitions(-DQT_STRICT_ITERATORS) 0272 endif() 0273 #################################################### 0274 # Options for static build 0275 if(STATIC_BUILD) 0276 set(BUILD_SHARED_LIBS FALSE) 0277 add_definitions(-DSTATIC_BUILD=1) 0278 else() 0279 set(BUILD_SHARED_LIBS TRUE) 0280 endif(STATIC_BUILD) 0281 0282 ############################################################# 0283 if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_C_COMPILER MATCHES "icc") 0284 # Its good programming practice to build with no warnings... 0285 add_definitions( -Wall -Wextra -Wundef -Wnon-virtual-dtor -Woverloaded-virtual -Wno-long-long 0286 -Wchar-subscripts -Wcast-align -Wpointer-arith -Wformat-security ) 0287 0288 # In pedantic mode, treat warnings as errors 0289 if (PEDANTIC) 0290 add_definitions( -Werror ) 0291 endif (PEDANTIC) 0292 endif (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_C_COMPILER MATCHES "icc") 0293 0294 ############################################################# 0295 # Add a compiler def so that we can conditionally compile 0296 # code in debug mode only (e.g. extra console messages) 0297 IF (CMAKE_BUILD_TYPE MATCHES Debug) 0298 IF(NOT MINGW) 0299 ADD_DEFINITIONS(-DDEBUG) 0300 ELSE(NOT MINGW) 0301 REMOVE_DEFINITIONS( -DQT_NO_DEBUG ) 0302 ENDIF(NOT MINGW) 0303 ENDIF (CMAKE_BUILD_TYPE MATCHES Debug) 0304 0305 #################################################### 0306 # on Win32 set the debug postfix 0307 if(WIN32) 0308 # distinguish between debug and release plugin 0309 SET(CMAKE_DEBUG_POSTFIX "d") 0310 endif(WIN32) 0311 #################################################### 0312 0313 0314 #################################################### 0315 # Add global ECM & KF5 settings 0316 set(REQUIRED_ECM_VERSION 1.7.0) 0317 set(KDE_INSTALL_DIRS_NO_DEPRECATED TRUE) 0318 set(KDE_SKIP_UNINSTALL_TARGET ON CACHE BOOL "KDE uninstall target must be disabled") 0319 set(REQUIRED_KF5_MIN_VERSION 5.7.0) 0320 0321 find_package(ECM ${REQUIRED_ECM_VERSION} QUIET) 0322 if(ECM_FOUND) 0323 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH}) 0324 0325 include(KDEInstallDirs) 0326 # KDECMakeSettings expects LIB_INSTALL_DIR set 0327 set(LIB_INSTALL_DIR ${KDE_INSTALL_LIBDIR}) 0328 include(KDECMakeSettings) 0329 include(ECMInstallIcons) 0330 include(ECMEnableSanitizers) 0331 include(ECMCoverageOption) 0332 endif() 0333 0334 #################################################### 0335 # Add the include directories 0336 0337 include_directories( 0338 ${CMAKE_CURRENT_SOURCE_DIR} 0339 ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/marble 0340 ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/marble/projections 0341 ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/marble/geodata 0342 ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/marble/geodata/data 0343 ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/marble/geodata/graphicsitem 0344 ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/marble/geodata/handlers/dgml 0345 ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/marble/geodata/parser 0346 ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/marble/geodata/writer 0347 ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/marble/geodata/scene 0348 ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/marble/graphicsview 0349 ${CMAKE_CURRENT_BINARY_DIR}/src 0350 ${CMAKE_CURRENT_BINARY_DIR}/src/lib/marble 0351 ) 0352 #################################################### 0353 # Descend into subdirectories 0354 add_subdirectory(doc) 0355 add_subdirectory(src) 0356 add_subdirectory(data) 0357 0358 include(DistTarget) 0359 0360 add_subdirectory(tests) 0361 0362 option(BUILD_MARBLE_TOOLS "Build various tools related to Marble" OFF) 0363 add_feature_info("Marble tools" BUILD_MARBLE_TOOLS "Build various Marble tools for e.g. file format conversion. Toggle with BUILD_MARBLE_TOOLS=YES/NO.") 0364 if(BUILD_MARBLE_TOOLS) 0365 add_subdirectory(tools) 0366 endif() 0367 0368 option(BUILD_MARBLE_EXAMPLES "Build C++ examples showing how to use the Marble library" OFF) 0369 add_feature_info("Marble library C++ examples" BUILD_MARBLE_EXAMPLES "Build C++ examples showing how to use the Marble library. Toggle with BUILD_MARBLE_EXAMPLES=YES/NO.") 0370 if(BUILD_MARBLE_EXAMPLES) 0371 add_subdirectory(examples/cpp) 0372 endif() 0373 0374 #################################################### 0375 # Handle translation catalogs of KDE Application release tarball of marble 0376 # (for custom bundle translation handling see data/lang/README) 0377 0378 # KDE Application release tarballs have the respective po files added on tarball creation, 0379 # which are otherwise stored and edited separately on the KDE svn servers. 0380 # Toplevel subdir "poqm/" holds all the po files which should be processed and installed as qm files 0381 marble_install_po_files_as_qm(poqm) 0382 0383 # Toplevel subdir "po/" holds all the po files which should be processed and installed as mo files 0384 # Those are used by app and plugin code building against KI18n. 0385 # So the respective macro ki18n_install can be used. 0386 # Likewise, it contains the translated user documentation, which is handled by kdoctools_install. 0387 # Just, the macros are not available here in the toplevel CMakeLists.txt file. 0388 # As a temporary hack (your task to improve it, dear reader :) ) the macros 0389 # are called only from src/apps/marble-kde/CMakeLists.txt. 0390 # That should catch 99.9 % cases of builds from released tarball, where all the 0391 # KF5-dependent apps and plugins will be built and installed together. 0392 # Currently these are: 0393 # src/apps/marble-kde 0394 # src/plasmarunner 0395 # src/plasma/applets/worldclock 0396 # src/plasma/wallpapers/worldmap 0397 # 0398 # Let releaseme know about this: 0399 # SKIP_PO_INSTALL 0400 0401 0402 #################################################### 0403 # Install extra files 0404 install(FILES LICENSES/LGPL-2.1-or-later.txt 0405 DESTINATION ${MARBLE_DATA_INSTALL_PATH} 0406 RENAME LICENSE.txt) 0407 0408 ############################################################ 0409 # Uninstall stuff 0410 CONFIGURE_FILE( 0411 "${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/cmake_uninstall.cmake.in" 0412 "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" 0413 IMMEDIATE @ONLY) 0414 0415 ADD_CUSTOM_TARGET(uninstall 0416 "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") 0417 0418 include(MarbleCPackOptions) 0419 0420 marble_feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES)