2015-03-26 20:50:28 +00:00
# cmake based build of Subsurface
2016-03-16 07:57:41 +00:00
# Uncomment his to see all commands cmake actually executes
# set(CMAKE_VERBOSE_MAKEFILE ON)
2014-04-14 17:21:01 +00:00
project(Subsurface)
2015-02-02 15:52:35 +00:00
cmake_minimum_required(VERSION 2.8.11)
2014-04-14 19:47:12 +00:00
2017-12-24 21:33:06 +00:00
# don't process generated files - this is new in 3.10 - but
# VERSION_GREATER_EQUAL did get added until 3.7
if(${CMAKE_VERSION} VERSION_EQUAL "3.10.0" OR ${CMAKE_VERSION} VERSION_GREATER "3.10.0")
cmake_policy(SET CMP0071 OLD)
endif()
2017-12-24 19:34:43 +00:00
2015-03-26 20:50:28 +00:00
# global settings
2018-02-13 13:38:51 +00:00
set(CMAKE_MODULE_PATH
${${PROJECT_NAME}_SOURCE_DIR}/cmake/Modules
${CMAKE_MODULE_PATH}
)
2015-04-18 12:22:11 +00:00
set(CMAKE_AUTOMOC ON)
2018-02-13 13:38:51 +00:00
include(MacroOutOfSourceBuild)
2015-11-17 19:08:42 +00:00
MACRO_ENSURE_OUT_OF_SOURCE_BUILD(
2017-10-07 23:36:49 +00:00
"We don't support building in source, please create a build folder elsewhere and remember to run git clean -xdf to remove temporary files created by CMake."
2015-11-17 19:08:42 +00:00
)
2015-11-09 20:57:47 +00:00
2015-11-17 21:16:51 +00:00
#Options regarding usage of pkgconfig
2015-04-18 12:22:11 +00:00
option(LIBGIT2_FROM_PKGCONFIG "use pkg-config to retrieve libgit2" OFF)
option(LIBDC_FROM_PKGCONFIG "use pkg-config to retrieve libdivecomputer" OFF)
2015-05-26 10:51:49 +00:00
option(LIBGRANTLEE_FROM_PKGCONFIG "use pkg-config to retrieve grantlee" OFF)
2015-11-17 18:48:17 +00:00
2015-11-17 21:16:51 +00:00
#Library Handling
option(FORCE_LIBSSH "force linking with libssh to workaround libgit2 bug" ON)
2017-01-16 23:56:56 +00:00
option(LIBGIT2_DYNAMIC "search for libgit2.so before libgit2.a" OFF)
2015-11-17 21:16:51 +00:00
#Options regarding disabling parts of subsurface.
2015-04-18 12:22:11 +00:00
option(NO_DOCS "disable the docs" OFF)
2015-09-01 16:49:57 +00:00
option(NO_PRINTING "disable the printing support" OFF)
2015-07-01 15:08:33 +00:00
option(NO_USERMANUAL "don't include a viewer for the user manual" OFF)
2015-11-17 21:16:51 +00:00
#Options regarding enabling parts of subsurface
2015-07-06 19:11:07 +00:00
option(FBSUPPORT "allow posting to Facebook" ON)
2015-07-20 16:35:00 +00:00
option(BTSUPPORT "enable support for QtBluetooth (requires Qt5.4 or newer)" ON)
2015-08-20 22:19:45 +00:00
option(FTDISUPPORT "enable support for libftdi based serial" OFF)
2016-08-08 22:12:12 +00:00
option(USE_WEBENGINE "Use QWebEngine instead of QWebKit" OFF)
2015-11-17 21:16:51 +00:00
# Options regarding What should we build on subsurface
option(MAKE_TESTS "Make the tests" ON)
2015-11-23 14:34:14 +00:00
SET(SUBSURFACE_TARGET_EXECUTABLE "DesktopExecutable" CACHE STRING "The type of application, DesktopExecutable or MobileExecutable")
LIST(APPEND SUBSURFACE_ACCEPTED_EXECUTABLES "DesktopExecutable" "MobileExecutable")
2015-12-16 17:09:32 +00:00
SET_PROPERTY(CACHE SUBSURFACE_TARGET_EXECUTABLE PROPERTY STRINGS ${SUBSURFACE_ACCEPTED_EXECUTABLES})
2015-11-23 14:34:14 +00:00
2015-11-23 14:13:24 +00:00
#verify if Platform is correct and warn on wxit with example.
2015-12-16 16:30:56 +00:00
list (FIND SUBSURFACE_ACCEPTED_EXECUTABLES ${SUBSURFACE_TARGET_EXECUTABLE} _index)
2015-11-23 14:13:24 +00:00
if (${_index} EQUAL -1)
message(FATAL_ERROR "Requested platform not supported, please use one of the following:
2015-12-16 16:30:56 +00:00
${SUBSURFACE_ACCEPTED_EXECUTABLES}
2015-11-23 14:13:24 +00:00
2015-12-16 16:30:56 +00:00
inputted value was: ${SUBSURFACE_TARGET_EXECUTABLE}
2015-11-23 14:13:24 +00:00
2015-12-16 17:48:20 +00:00
Example: -DSUBSURFACE_TARGET_EXECUTABLE=DesktopExecutable")
2015-12-01 19:46:59 +00:00
endif()
2017-02-24 06:52:07 +00:00
# SUBSURFACE_SOURCE may be used in subdirectories (tests)
set(SUBSURFACE_SOURCE ${CMAKE_SOURCE_DIR})
add_definitions(-DSUBSURFACE_SOURCE="${SUBSURFACE_SOURCE}")
2015-09-02 23:52:34 +00:00
2015-11-17 19:21:42 +00:00
#
# TODO: This Compilation part should go on the Target specific CMake.
#
2015-11-09 00:33:19 +00:00
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
2015-11-09 00:01:05 +00:00
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 ")
2018-09-01 16:51:26 +00:00
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu99 -Wno-inconsistent-missing-override")
2017-01-01 18:31:47 +00:00
if((${CMAKE_SYSTEM_NAME} MATCHES "Darwin") AND
((${CMAKE_SYSTEM_VERSION} MATCHES "11.4.") OR
(${CMAKE_OSX_DEPLOYMENT_TARGET} MATCHES "10.7") OR
(${CMAKE_OSX_DEPLOYMENT_TARGET} MATCHES "10.8")))
2017-01-01 05:17:02 +00:00
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -stdlib=libc++")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
endif()
2015-11-09 00:33:19 +00:00
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang")
2015-11-09 00:01:05 +00:00
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 ")
2018-09-01 16:51:26 +00:00
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wno-inconsistent-missing-override")
2015-11-09 00:33:19 +00:00
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
2015-11-09 00:01:05 +00:00
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")
2016-06-23 20:56:26 +00:00
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
2017-03-09 16:07:30 +00:00
# Warn about possible float conversion errors
# Use NOT VERSION_LESS since VERSION_GREATER_EQUAL is not available
# in currently used cmake version.
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.9.0")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wfloat-conversion")
2017-03-23 01:13:49 +00:00
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wfloat-conversion")
2017-03-09 16:07:30 +00:00
endif()
2015-11-09 00:33:19 +00:00
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
# using Intel C++
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
# using Visual Studio C++
2014-04-14 17:21:01 +00:00
endif()
2017-12-17 03:36:32 +00:00
# every compiler understands -Wall
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
2018-04-28 19:28:22 +00:00
# by detault optimize with -O2 even for debug builds
set (GCC_OPTIMIZATION_FLAGS "-O2" CACHE STRING "GCC optimization flags")
message (STATUS "GCC optimization flags: " ${GCC_OPTIMIZATION_FLAGS})
set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${GCC_OPTIMIZATION_FLAGS}")
set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${GCC_OPTIMIZATION_FLAGS}")
2017-12-18 07:50:12 +00:00
2015-03-26 20:50:28 +00:00
# pkgconfig for required libraries
2015-04-18 12:22:11 +00:00
find_package(PkgConfig)
2018-02-13 13:38:51 +00:00
include(pkgconfig_helper)
2015-11-17 19:21:42 +00:00
# The 'HandleFindXXX' are special libraries that subsurface needs
# to find and configure in a few different ways because of a few
# developers that prefer pkg-config over CMake, so we try to make
# everyone happy. It also sets some variables for each library, so
# if you think a module miss anything, take a look on the specific
# module file.
2018-02-13 13:38:51 +00:00
include(HandleFindGit2)
include(HandleFindLibDiveComputer)
2015-12-30 17:55:24 +00:00
if(${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "DesktopExecutable")
2018-02-13 13:38:51 +00:00
include(HandleFindGrantlee)
include(HandleUserManual)
2015-12-30 17:55:24 +00:00
endif()
2018-02-13 13:38:51 +00:00
include(HandleFtdiSupport)
include(HandleVersionGeneration)
include(RunOnBuildDir)
include(cmake_variables_helper)
2015-11-17 20:23:32 +00:00
2017-10-23 15:48:43 +00:00
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
include_directories(${CMAKE_OSX_SYSROOT}/usr/include/libxml2)
set(SUBSURFACE_LINK_LIBRARIES ${SUBSURFACE_LINK_LIBRARIES} -lxml2 -lxslt -lsqlite3)
else()
pkg_config_library(LIBXML libxml-2.0 REQUIRED)
pkg_config_library(LIBSQLITE3 sqlite3 REQUIRED)
pkg_config_library(LIBXSLT libxslt REQUIRED)
endif()
2015-04-10 19:08:26 +00:00
pkg_config_library(LIBZIP libzip REQUIRED)
pkg_config_library(LIBUSB libusb-1.0 QUIET)
2015-03-26 20:50:28 +00:00
2015-11-17 21:22:02 +00:00
include_directories(.
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_BINARY_DIR}
${CMAKE_BINARY_DIR}/desktop-widgets
)
2015-11-23 14:19:38 +00:00
# Project Target specific configuration should go here,
# if the configuration is too big or would disrupt the normal code flux,
# move it somewhere else (another file) and include it.
2015-12-16 17:48:20 +00:00
if(${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "DesktopExecutable")
2015-12-17 19:08:21 +00:00
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
set(SUBSURFACE_TARGET Subsurface)
else()
set(SUBSURFACE_TARGET subsurface)
endif()
2017-07-14 21:52:29 +00:00
list(APPEND QT_EXTRA_COMPONENTS QuickWidgets)
list(APPEND QT_EXTRA_LIBRARIES Qt5::QuickWidgets)
2016-01-07 16:38:16 +00:00
remove_definitions(-DSUBSURFACE_MOBILE)
2015-12-16 18:41:28 +00:00
elseif(${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "MobileExecutable")
2015-12-17 19:08:21 +00:00
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
set(SUBSURFACE_TARGET Subsurface-mobile)
else()
set(SUBSURFACE_TARGET subsurface-mobile)
endif()
2017-04-01 07:35:26 +00:00
list(APPEND QT_EXTRA_COMPONENTS QuickControls2)
list(APPEND QT_EXTRA_LIBRARIES Qt5::QuickControls2)
2015-12-17 19:08:21 +00:00
add_definitions(-DSUBSURFACE_MOBILE)
2017-12-05 19:47:34 +00:00
message(STATUS "Building Subsurface-mobile requires BT support")
set(BTSUPPORT ON)
2015-12-16 16:50:41 +00:00
endif()
if(ANDROID)
set(NO_PRINTING ON)
list(APPEND QT_EXTRA_COMPONENTS AndroidExtras)
list(APPEND QT_EXTRA_LIBRARIES Qt5::AndroidExtras)
set(SUBSURFACE_LINK_LIBRARIES ${SUBSURFACE_LINK_LIBRARIES} -llog)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
2015-12-16 16:33:52 +00:00
# add pthread to the end of the library list on Linux
# this is only needed on Ubuntu
# but shouldn't hurt on other Linux versions
# in some builds we appear to be missing libz for some strange reason...
2016-07-21 10:55:23 +00:00
# Add ssh2 at the end for openSUSE builds (for recent cmake?)
set(SUBSURFACE_LINK_LIBRARIES ${SUBSURFACE_LINK_LIBRARIES} -lssh2 -lz -lpthread)
2015-12-16 16:33:52 +00:00
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
execute_process(
COMMAND sh scripts/get-version linux
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE SSRF_VERSION_STRING
OUTPUT_STRIP_TRAILING_WHITESPACE
)
find_library(APP_SERVICES_LIBRARY ApplicationServices)
find_library(HID_LIB HidApi)
set(SUBSURFACE_LINK_LIBRARIES ${SUBSURFACE_LINK_LIBRARIES} ${HID_LIB})
set(EXTRA_LIBS ${APP_SERVICES_LIBRARY})
set(ICON_FILE ${CMAKE_SOURCE_DIR}/packaging/macosx/Subsurface.icns)
2015-12-16 22:34:33 +00:00
if(${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "MobileExecutable")
set(MACOSX_BUNDLE_INFO_STRING "Subsurface-mobile")
set(MACOSX_BUNDLE_BUNDLE_NAME "Subsurface-mobile")
else()
set(MACOSX_BUNDLE_INFO_STRING "Subsurface")
set(MACOSX_BUNDLE_BUNDLE_NAME "Subsurface")
endif()
2015-12-17 16:28:43 +00:00
set(MACOSX_BUNDLE_ICON_FILE Subsurface.icns)
set(MACOSX_BUNDLE_GUI_IDENTIFIER "org.subsurface-divelog")
2015-12-16 16:33:52 +00:00
set(MACOSX_BUNDLE_BUNDLE_VERSION "${SSRF_VERSION_STRING}")
set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${SSRF_VERSION_STRING}")
set(MACOSX_BUNDLE_LONG_VERSION_STRING "${SSRF_VERSION_STRING}")
set(MACOSX_BUNDLE_COPYRIGHT "Linus Torvalds, Dirk Hohndel, Tomaz Canabrava, and others")
set_source_files_properties(${ICON_FILE} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
set(SUBSURFACE_PKG MACOSX_BUNDLE ${ICON_FILE})
elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
set(SUBSURFACE_LINK_LIBRARIES ${SUBSURFACE_LINK_LIBRARIES} -lwsock32 -lws2_32)
remove_definitions(-DUNICODE)
add_definitions(-mwindows -D_WIN32)
2015-07-01 15:08:36 +00:00
endif()
2015-11-23 14:13:24 +00:00
2015-10-26 13:05:27 +00:00
if(BTSUPPORT)
2015-11-20 13:49:56 +00:00
list(APPEND QT_EXTRA_COMPONENTS Bluetooth)
list(APPEND QT_EXTRA_LIBRARIES Qt5::Bluetooth)
2015-10-26 13:05:27 +00:00
endif()
2015-11-20 13:49:56 +00:00
2018-07-07 16:55:24 +00:00
find_package(Qt5 REQUIRED COMPONENTS Core Concurrent Widgets Network Svg Test QuickTest LinguistTools Positioning Quick Location ${QT_EXTRA_COMPONENTS})
2018-07-10 06:22:58 +00:00
set(QT_LIBRARIES Qt5::Core Qt5::Concurrent Qt5::Widgets Qt5::Network Qt5::Svg Qt5::Positioning Qt5::Quick Qt5::Location ${QT_EXTRA_LIBRARIES})
2018-07-07 18:55:27 +00:00
set(QT_TEST_LIBRARIES ${QT_LIBRARIES} Qt5::Test Qt5::QuickTest)
2015-02-02 15:52:35 +00:00
2015-11-23 14:13:24 +00:00
#disable bluetooth if Qt version is ancient.
2017-12-05 19:47:34 +00:00
if (BTSUPPORT AND Qt5Widgets_VERSION VERSION_LESS 5.4.0)
if (${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "MobileExecutable")
message(FATAL_ERROR "Subsurface-mobile requires BT and Qt version ${Qt5Widgets_VERSION} is too old for that")
endif()
2015-07-20 16:35:00 +00:00
set(BTSUPPORT OFF)
2017-05-23 14:16:18 +00:00
message(STATUS "Turning off Bluetooth support as Qt version ${Qt5Core_VERSION} is insufficient for that")
2015-10-26 21:51:07 +00:00
list(REMOVE_ITEM QT_LIBRARIES Qt5::Bluetooth)
2015-07-20 16:35:00 +00:00
endif()
2017-06-30 23:55:53 +00:00
# Windows Qt doesn't support BLE at all
# the rest of them need at least 5.6 to be reasonable but really, you want 5.9.1
2017-09-17 03:13:36 +00:00
if (BTSUPPORT AND NOT CMAKE_SYSTEM_NAME STREQUAL "Windows")
2017-06-30 23:55:53 +00:00
if ("${Qt5Core_VERSION}" VERSION_LESS 5.6.0)
message(STATUS "Turning off BLE support as Qt version ${Qt5Core_VERSION} is insufficient for that")
else()
set(BLESUPPORT ON)
if ("${Qt5Core_VERSION}" VERSION_LESS 5.9.1)
message(STATUS "BLE support has been enabled, but for best results you really want Qt 5.9.1")
endif()
endif()
2017-06-13 02:47:50 +00:00
endif()
2016-01-02 12:26:23 +00:00
if(BTSUPPORT)
add_definitions(-DBT_SUPPORT)
endif()
2017-06-13 02:47:50 +00:00
if(BLESUPPORT)
add_definitions(-DBLE_SUPPORT)
endif()
2015-11-23 14:13:24 +00:00
#set up the subsurface_link_libraries variable
2015-11-20 13:49:56 +00:00
set(SUBSURFACE_LINK_LIBRARIES ${SUBSURFACE_LINK_LIBRARIES} ${LIBDIVECOMPUTER_LIBRARIES} ${LIBGIT2_LIBRARIES} ${LIBUSB_LIBRARIES})
2018-06-20 14:06:49 +00:00
qt5_add_resources(SUBSURFACE_RESOURCES subsurface.qrc map-widget/qml/map-widget.qrc)
2015-09-17 22:24:26 +00:00
2015-04-09 18:50:06 +00:00
# include translations
add_subdirectory(translations)
2016-04-05 05:02:03 +00:00
add_subdirectory(core)
2015-09-03 18:25:01 +00:00
add_subdirectory(qt-models)
2015-09-03 18:56:37 +00:00
add_subdirectory(profile-widget)
2015-11-05 23:06:10 +00:00
2015-12-16 17:48:20 +00:00
if (${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "DesktopExecutable")
2015-11-05 23:06:10 +00:00
add_subdirectory(desktop-widgets)
endif()
2014-04-14 17:21:01 +00:00
2015-03-26 20:50:28 +00:00
# create the executables
2015-12-16 17:48:20 +00:00
if(${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "MobileExecutable")
2015-09-03 17:49:59 +00:00
set(MOBILE_SRC
2016-04-05 05:02:03 +00:00
mobile-widgets/qmlmanager.cpp
2018-06-12 08:29:40 +00:00
mobile-widgets/qmlprefs.cpp
2016-08-19 04:38:13 +00:00
mobile-widgets/qml/kirigami/src/kirigamiplugin.cpp
2017-03-31 14:15:14 +00:00
mobile-widgets/qml/kirigami/src/settings.cpp
2016-08-19 04:38:13 +00:00
mobile-widgets/qml/kirigami/src/enums.cpp
2018-04-15 14:54:09 +00:00
mobile-widgets/qml/kirigami/src/formlayoutattached.cpp
mobile-widgets/qml/kirigami/src/mnemonicattached.cpp
mobile-widgets/qml/kirigami/src/delegaterecycler.cpp
mobile-widgets/qml/kirigami/src/desktopicon.cpp
2017-10-06 18:59:05 +00:00
mobile-widgets/qml/kirigami/src/libkirigami/basictheme.cpp
mobile-widgets/qml/kirigami/src/libkirigami/kirigamipluginfactory.cpp
mobile-widgets/qml/kirigami/src/libkirigami/platformtheme.cpp
2018-06-16 10:47:58 +00:00
mobile-widgets/qml/kirigami/src/libkirigami/tabletmodewatcher.cpp
2015-11-06 21:44:13 +00:00
subsurface-mobile-main.cpp
2018-07-11 09:34:33 +00:00
subsurface-helper.cpp
2018-06-08 10:56:23 +00:00
profile-widget/qmlprofile.cpp
2018-03-08 20:30:03 +00:00
map-widget/qmlmapwidgethelper.cpp
2015-09-03 17:49:59 +00:00
)
2017-10-04 15:20:14 +00:00
include_directories(${CMAKE_SOURCE_DIR}/mobile-widgets/qml/kirigami/src/libkirigami)
2016-08-19 04:38:13 +00:00
add_definitions(-DKIRIGAMI_BUILD_TYPE_STATIC)
2016-04-05 05:02:03 +00:00
qt5_add_resources(MOBILE_RESOURCES mobile-widgets/qml/mobile-resources.qrc)
2016-08-19 04:38:13 +00:00
qt5_add_resources(MOBILE_RESOURCES mobile-widgets/qml/kirigami/kirigami.qrc)
2015-12-16 16:55:53 +00:00
# When building the mobile application in Android, link it and Qt will do the rest, when doing the mobile application on Desktop, create an executable.
if(ANDROID)
2015-12-16 16:57:32 +00:00
add_library(${SUBSURFACE_TARGET} SHARED ${SUBSURFACE_PKG} ${MOBILE_SRC} ${SUBSURFACE_RESOURCES} ${MOBILE_RESOURCES})
2015-07-09 22:02:35 +00:00
else()
2015-12-16 16:57:32 +00:00
add_executable(${SUBSURFACE_TARGET} MACOSX_BUNDLE WIN32 ${SUBSURFACE_PKG} ${MOBILE_SRC} ${SUBSURFACE_RESOURCES} ${MOBILE_RESOURCES})
2015-07-09 22:02:35 +00:00
endif()
2015-05-27 12:33:23 +00:00
target_link_libraries(
2015-11-05 23:06:10 +00:00
${SUBSURFACE_TARGET}
subsurface_profile
2018-01-09 15:30:03 +00:00
subsurface_models_mobile
2015-11-05 23:06:10 +00:00
subsurface_corelib
2015-11-23 14:34:14 +00:00
${SUBSURFACE_LINK_LIBRARIES}
)
2015-12-16 17:48:20 +00:00
elseif(${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "DesktopExecutable")
2015-11-05 23:06:10 +00:00
set(SUBSURFACE_APP
subsurface-desktop-main.cpp
2018-07-11 09:34:33 +00:00
subsurface-helper.cpp
2015-11-05 23:06:10 +00:00
)
source_group("Subsurface App" FILES ${SUBSURFACE_APP})
2015-12-16 16:57:32 +00:00
if(ANDROID)
2015-12-17 16:33:05 +00:00
add_library(${SUBSURFACE_TARGET} SHARED ${SUBSURFACE_PKG} ${SUBSURFACE_APP} ${SUBSURFACE_RESOURCES})
2015-12-16 16:57:32 +00:00
else()
add_executable(${SUBSURFACE_TARGET} MACOSX_BUNDLE WIN32 ${SUBSURFACE_PKG} ${SUBSURFACE_APP} ${SUBSURFACE_RESOURCES})
endif()
2015-11-05 23:06:10 +00:00
2016-09-23 00:12:00 +00:00
if(FBSUPPORT)
set(FACEBOOK_INTEGRATION facebook_integration)
2017-10-20 21:22:57 +00:00
add_dependencies(facebook_integration subsurface_generated_ui)
2016-09-23 00:12:00 +00:00
endif()
2015-11-05 23:06:10 +00:00
target_link_libraries(
${SUBSURFACE_TARGET}
2015-05-27 12:33:23 +00:00
subsurface_generated_ui
subsurface_interface
2015-12-01 19:46:59 +00:00
${FACEBOOK_INTEGRATION}
2015-05-27 12:33:23 +00:00
subsurface_profile
subsurface_statistics
2018-01-09 15:30:03 +00:00
subsurface_models_desktop
2015-05-27 12:33:23 +00:00
subsurface_corelib
2015-11-05 23:06:10 +00:00
${SUBSURFACE_LINK_LIBRARIES}
)
2017-10-20 21:22:57 +00:00
add_dependencies(subsurface_desktop_preferences subsurface_generated_ui)
2015-11-05 23:06:10 +00:00
add_dependencies(subsurface_statistics subsurface_generated_ui)
add_dependencies(subsurface_interface subsurface_generated_ui)
add_dependencies(subsurface_profile subsurface_generated_ui)
2018-01-09 15:30:03 +00:00
add_dependencies(subsurface_models_desktop subsurface_generated_ui)
2015-11-05 23:06:10 +00:00
add_dependencies(subsurface_generated_ui version)
2015-05-27 12:33:23 +00:00
endif()
2014-04-14 17:21:01 +00:00
2015-04-18 12:22:11 +00:00
add_dependencies(subsurface_corelib version)
2014-04-14 17:21:01 +00:00
2015-03-31 21:03:02 +00:00
# add platform specific actions
2015-04-18 12:22:11 +00:00
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
add_custom_command(
2015-03-31 21:03:02 +00:00
OUTPUT ${CMAKE_BINARY_DIR}/qt.conf
COMMAND echo \"[Paths]\" > ${CMAKE_BINARY_DIR}/qt.conf \; echo \"Prefix=.\" >> ${CMAKE_BINARY_DIR}/qt.conf
2015-04-18 12:22:14 +00:00
)
2015-04-18 12:22:11 +00:00
add_custom_target(
2015-03-31 21:03:02 +00:00
generate_qtconf
DEPENDS ${CMAKE_BINARY_DIR}/qt.conf
2015-04-18 12:22:14 +00:00
)
2015-04-18 12:22:11 +00:00
add_dependencies(${SUBSURFACE_TARGET} generate_qtconf)
endif()
2015-03-31 21:03:02 +00:00
2015-06-16 13:58:22 +00:00
# build an automated html exporter
2015-09-02 23:52:34 +00:00
add_executable(export-html EXCLUDE_FROM_ALL export-html.cpp ${SUBSURFACE_RESOURCES})
2015-06-16 13:58:22 +00:00
target_link_libraries(export-html subsurface_corelib ${SUBSURFACE_LINK_LIBRARIES})
2015-03-30 19:50:52 +00:00
# install Subsurface
# first some variables with files that need installing
set(DOCFILES
2017-11-04 17:05:35 +00:00
README.md
2015-03-30 19:50:52 +00:00
ReleaseNotes/ReleaseNotes.txt
2015-03-30 21:43:15 +00:00
SupportedDivecomputers.txt
${CMAKE_BINARY_DIR}/Documentation/user-manual.html
${CMAKE_BINARY_DIR}/Documentation/user-manual_es.html
${CMAKE_BINARY_DIR}/Documentation/user-manual_fr.html
${CMAKE_BINARY_DIR}/Documentation/user-manual_ru.html
2015-03-30 19:50:52 +00:00
)
2017-02-03 18:57:57 +00:00
# add all the translations that we may need
2015-12-16 22:24:47 +00:00
FILE(STRINGS "subsurface_enabled_translations" QTTRANSLATIONS_BASE)
2015-03-31 20:39:09 +00:00
2015-04-10 19:10:07 +00:00
if(NOT DEFINED QT_TRANSLATION_DIR OR QT_TRANSLATION_DIR STREQUAL "")
2015-04-04 23:21:32 +00:00
set(QT_TRANSLATION_DIR ${Qt5Core_DIR}/../../../translations)
endif()
2015-04-04 20:12:20 +00:00
set(QTTRANSLATIONS "")
2015-03-31 20:39:09 +00:00
foreach(QTTRANSLATION ${QTTRANSLATIONS_BASE})
2015-04-04 20:12:20 +00:00
if(NOT ${QTTRANSLATION} STREQUAL "")
2017-02-03 18:57:57 +00:00
if(EXISTS ${QT_TRANSLATION_DIR}/${QTTRANSLATION})
set(QTTRANSLATIONS ${QTTRANSLATIONS} ${QT_TRANSLATION_DIR}/${QTTRANSLATION})
endif()
2015-04-04 20:12:20 +00:00
endif()
2015-03-31 20:39:09 +00:00
endforeach()
2015-03-30 19:50:52 +00:00
# now for each platform the install instructions
2015-12-16 22:25:38 +00:00
if(ANDROID)
2015-04-18 12:22:09 +00:00
# Android template directory
2015-07-08 22:42:12 +00:00
include(${QT_ANDROID_CMAKE})
2017-05-28 01:54:03 +00:00
if((DEFINED ENV{KEYSTORE}) AND (DEFINED ENV{KEYSTORE_PASSWORD}))
add_qt_android_apk(${SUBSURFACE_TARGET}.apk ${SUBSURFACE_TARGET}
PACKAGE_SOURCES ${CMAKE_BINARY_DIR}/android-mobile DEPENDS ${ANDROID_NATIVE_LIBSSL} ${ANDROID_NATIVE_LIBCRYPT}
BUILDTOOLS_REVISION ${BUILDTOOLS_REVISION}
KEYSTORE $ENV{KEYSTORE} Subsurface-mobile KEYSTORE_PASSWORD $ENV{KEYSTORE_PASSWORD}
)
message(STATUS "KEYSTORE=$ENV{KEYSTORE} KEYSTORE_PASSWORD=$ENV{KEYSTORE_PASSWORD}")
else()
add_qt_android_apk(${SUBSURFACE_TARGET}.apk ${SUBSURFACE_TARGET}
PACKAGE_SOURCES ${CMAKE_BINARY_DIR}/android-mobile DEPENDS ${ANDROID_NATIVE_LIBSSL} ${ANDROID_NATIVE_LIBCRYPT}
BUILDTOOLS_REVISION ${BUILDTOOLS_REVISION}
)
message(STATUS "no KEYSTORE")
endif()
2015-12-16 22:25:38 +00:00
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
2015-12-17 19:09:23 +00:00
set(APP_BUNDLE_DIR "${SUBSURFACE_TARGET}.app")
2017-07-29 00:19:01 +00:00
set(EXTRA_MACDEPLOY_ARGS "-qmldir=${APP_BUNDLE_DIR}/Contents/Resources/qml ")
2018-04-11 15:04:38 +00:00
set(MACDEPLOY_ARGS "${EXTRA_MACDEPLOY_ARGS}-executable=${APP_BUNDLE_DIR}/Contents/MacOS/${SUBSURFACE_TARGET} -always-overwrite -libpath=${CMAKE_SOURCE_DIR}/../install-root/lib")
2015-12-16 22:34:33 +00:00
set(RESOURCEDIR ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources)
set(PLUGINDIR ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/PlugIns)
2015-12-16 22:27:27 +00:00
install(DIRECTORY Documentation/images DESTINATION ${RESOURCEDIR}/share/Documentation)
install(FILES ${DOCFILES} DESTINATION ${RESOURCEDIR}/share/Documentation)
install(DIRECTORY theme DESTINATION ${RESOURCEDIR})
install(DIRECTORY printing_templates DESTINATION ${RESOURCEDIR})
install(FILES ${TRANSLATIONS} DESTINATION ${RESOURCEDIR}/translations)
install(FILES ${QTTRANSLATIONS} DESTINATION ${RESOURCEDIR}/translations)
install(FILES ${CMAKE_SOURCE_DIR}/gpl-2.0.txt DESTINATION ${RESOURCEDIR})
2017-07-29 00:19:01 +00:00
install(CODE "execute_process(COMMAND mkdir -p ${RESOURCEDIR}/qml)")
2015-12-16 22:27:27 +00:00
# this is a HACK
2017-07-16 04:51:42 +00:00
if((${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "DesktopExecutable") AND (NOT NO_PRINTING))
2016-01-07 18:22:31 +00:00
install(DIRECTORY ${Grantlee5_DIR}/../../grantlee DESTINATION ${PLUGINDIR})
endif()
2017-09-02 11:39:37 +00:00
install(CODE "execute_process(COMMAND mkdir -p ${PLUGINDIR}/geoservices)")
2018-07-07 00:20:53 +00:00
install(CODE "execute_process(COMMAND cp ${_qt5Core_install_prefix}/plugins/geoservices/libqtgeoservices_googlemaps.dylib ${PLUGINDIR}/geoservices ERROR_QUIET)")
install(CODE "execute_process(COMMAND cp ${CMAKE_SOURCE_DIR}/../install-root/${_qt5Core_install_prefix}/plugins/geoservices/libqtgeoservices_googlemaps.dylib ${PLUGINDIR}/geoservices ERROR_QUIET)")
2015-12-16 22:27:27 +00:00
# this is a hack - but I don't know how else to find the macdeployqt program if it's not in the PATH
string(REPLACE moc macdeployqt MACDEPLOYQT ${QT_MOC_EXECUTABLE})
2015-12-16 22:34:33 +00:00
install(CODE "execute_process(COMMAND ${MACDEPLOYQT} ${APP_BUNDLE_DIR} ${MACDEPLOY_ARGS})")
# and another hack to get the QML Components in the right place
2017-07-29 00:19:01 +00:00
install(CODE "execute_process(COMMAND cp -a ${_qt5Core_install_prefix}/qml/QtQuick.2 ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources/qml)")
install(CODE "execute_process(COMMAND cp -a ${_qt5Core_install_prefix}/qml/QtLocation ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources/qml)")
install(CODE "execute_process(COMMAND cp -a ${_qt5Core_install_prefix}/qml/QtPositioning ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources/qml)")
2018-07-07 00:23:54 +00:00
if(NOT Qt5Core_VERSION VERSION_LESS 5.11.0)
# and with Qt 5.11 we need another library that isn't copied by macdeployqt
install(CODE "execute_process(COMMAND cp -a ${_qt5Core_install_prefix}/lib/QtPositioningQuick.framework ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Frameworks)")
endif()
2018-05-19 21:13:35 +00:00
if((${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "MobileExecutable"))
install(CODE "execute_process(COMMAND cp -a ${_qt5Core_install_prefix}/qml/QtQuick ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources/qml)")
install(CODE "execute_process(COMMAND cp -a ${_qt5Core_install_prefix}/qml/QtGraphicalEffects ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources/qml)")
install(CODE "execute_process(COMMAND cp -a ${_qt5Core_install_prefix}/qml/QtQml ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources/qml)")
install(CODE "execute_process(COMMAND cp -a ${_qt5Core_install_prefix}/qml/QtPositioning ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources/qml)")
endif()
2015-12-16 22:25:38 +00:00
elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
2017-11-14 14:13:42 +00:00
if (CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
if(NOT DEFINED OBJCOPY)
set(OBJCOPY i686-w64-mingw32.shared-objcopy)
endif()
2017-11-15 20:17:37 +00:00
find_program(OBJCOPY_FOUND ${OBJCOPY})
if (OBJCOPY_FOUND)
message(STATUS "Build type is 'RelWithDebInfo'. Creating debug symbols in a separate file.")
add_custom_command(TARGET ${SUBSURFACE_TARGET} POST_BUILD
COMMAND ${OBJCOPY} --only-keep-debug ${SUBSURFACE_TARGET}.exe ${SUBSURFACE_TARGET}.exe.debug
COMMAND ${OBJCOPY} --strip-debug --strip-unneeded ${SUBSURFACE_TARGET}.exe
COMMAND ${OBJCOPY} --add-gnu-debuglink=${SUBSURFACE_TARGET}.exe.debug ${SUBSURFACE_TARGET}.exe
)
endif()
2017-11-14 14:13:42 +00:00
endif()
2015-12-16 22:27:27 +00:00
# Windows bundling rules
# We don't have a helpful tool like macdeployqt for Windows, so we hardcode
# which libs we need.
# "make install", copies everything into a staging area
# "make installer", uses makensis to create an installer executable
set(WINDOWSSTAGING ${CMAKE_BINARY_DIR}/staging)
install(DIRECTORY Documentation/images DESTINATION ${WINDOWSSTAGING}/Documentation)
install(FILES ${DOCFILES} DESTINATION ${WINDOWSSTAGING}/Documentation)
install(DIRECTORY theme DESTINATION ${WINDOWSSTAGING})
install(DIRECTORY printing_templates DESTINATION ${WINDOWSSTAGING})
install(FILES ${TRANSLATIONS} DESTINATION ${WINDOWSSTAGING}/translations)
install(FILES ${QTTRANSLATIONS} DESTINATION ${WINDOWSSTAGING}/translations)
install(FILES ${CMAKE_SOURCE_DIR}/gpl-2.0.txt ${CMAKE_SOURCE_DIR}/packaging/windows/subsurface.ico DESTINATION ${WINDOWSSTAGING})
install(TARGETS ${SUBSURFACE_TARGET} DESTINATION ${WINDOWSSTAGING})
install(FILES ${CMAKE_BINARY_DIR}/qt.conf DESTINATION ${WINDOWSSTAGING})
install(DIRECTORY ${CMAKE_INSTALL_PREFIX}/lib/grantlee DESTINATION ${WINDOWSSTAGING})
if(NOT DEFINED MAKENSIS)
set(MAKENSIS makensis)
endif()
2015-11-23 14:48:35 +00:00
2015-12-16 22:27:27 +00:00
# the script we created above is now added as a command to run at
# install time - so this ensures that subsurface.exe has been
# built before this is run
2017-02-24 06:52:07 +00:00
install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DSUBSURFACE_TARGET=${SUBSURFACE_TARGET} -DSUBSURFACE_SOURCE=${SUBSURFACE_SOURCE} -DSTAGING=${WINDOWSSTAGING} -P ${CMAKE_SOURCE_DIR}/cmake/Modules/dlllist.cmake)")
2015-03-30 19:50:52 +00:00
2015-12-16 22:27:27 +00:00
# create the subsurface-x.y.z.exe installer - this needs to depend
# on the install target but cmake doesn't allow that, so we depend
# on the fake target instead
add_custom_target(
fake_install
COMMAND "${CMAKE_COMMAND}" --build . --target install
DEPENDS ${SUBSURFACE_TARGET}
)
add_custom_target(
installer
COMMAND ${MAKENSIS} ${WINDOWSSTAGING}/subsurface.nsi
DEPENDS fake_install
)
2015-12-16 22:25:38 +00:00
elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux")
2017-09-02 11:39:37 +00:00
# the syntax is odd, but this searches for libqtgeoservices_googlemaps.so
# in the filesystem below our install-root
# different Linux flavors put the plugin in different directories
file(GLOB_RECURSE GOOGLEMAPS ${CMAKE_SOURCE_DIR}/../install-root/libqtgeoservices_googlemaps.so)
if ("${GOOGLEMAPS}" STREQUAL "")
message(STATUS "Cannot find libqtgeoservices_googlemaps.so")
2017-08-25 16:02:15 +00:00
else()
2017-09-02 11:39:37 +00:00
add_custom_target(link_googlemaps_plugin ALL COMMAND
rm -rf ${CMAKE_BINARY_DIR}/geoservices &&
mkdir -p ${CMAKE_BINARY_DIR}/geoservices &&
ln -sf ${GOOGLEMAPS} ${CMAKE_BINARY_DIR}/geoservices)
2017-07-29 00:18:09 +00:00
endif()
2015-12-16 22:27:27 +00:00
install(FILES subsurface.debug DESTINATION bin)
install(FILES subsurface.desktop DESTINATION share/applications)
2018-09-03 20:04:50 +00:00
install(CODE "execute_process(COMMAND sh ${CMAKE_SOURCE_DIR}/scripts/add-version-to-appdata.sh WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})")
2018-07-09 00:50:58 +00:00
install(FILES appdata/subsurface.appdata.xml DESTINATION share/metainfo)
2015-12-16 22:27:27 +00:00
install(FILES icons/subsurface-icon.svg DESTINATION share/icons/hicolor/scalable/apps)
install(DIRECTORY Documentation/images DESTINATION share/subsurface/Documentation)
install(FILES ${DOCFILES} DESTINATION share/subsurface/Documentation)
install(DIRECTORY theme DESTINATION share/subsurface)
install(DIRECTORY printing_templates DESTINATION share/subsurface)
install(FILES ${TRANSLATIONS} DESTINATION share/subsurface/translations)
2016-01-07 16:38:16 +00:00
install(TARGETS ${SUBSURFACE_TARGET} DESTINATION bin)
2015-04-18 12:22:11 +00:00
endif()
2015-09-03 20:10:50 +00:00
if (MAKE_TESTS)
add_subdirectory(tests)
endif()
2016-09-23 00:12:49 +00:00
# useful for debugging CMake issues
2017-02-25 15:27:43 +00:00
# print_all_variables()