source: subsurface/CMakeLists.txt

Last change on this file was 37b4522, checked in by Dirk Hohndel <dirk@…>, 3 weeks ago

Mac build: install googlemaps plugin

Signed-off-by: Dirk Hohndel <dirk@…>

  • Property mode set to 100644
File size: 22.5 KB
Line 
1# cmake based build of Subsurface
2
3# Uncomment his to see all commands cmake actually executes
4# set(CMAKE_VERBOSE_MAKEFILE ON)
5
6project(Subsurface)
7cmake_minimum_required(VERSION 2.8.11)
8
9# global settings
10
11set(CMAKE_AUTOMOC ON)
12include(cmake/Modules/MacroOutOfSourceBuild.cmake)
13MACRO_ENSURE_OUT_OF_SOURCE_BUILD(
14    "We don't support building in source, please create a build folder elsewhere and remember to run git clean -xdf to remoev temporary files created by CMake."
15)
16
17#Options regarding usage of pkgconfig
18option(LIBGIT2_FROM_PKGCONFIG "use pkg-config to retrieve libgit2" OFF)
19option(LIBDC_FROM_PKGCONFIG "use pkg-config to retrieve libdivecomputer" OFF)
20option(LIBGRANTLEE_FROM_PKGCONFIG "use pkg-config to retrieve grantlee" OFF)
21option(LIBMARBLE_FROM_PKGCONFIG "use pkg-config to retrieve marble" OFF)
22
23#Library Handling
24option(FORCE_LIBSSH "force linking with libssh to workaround libgit2 bug" ON)
25option(LIBGIT2_DYNAMIC "search for libgit2.so before libgit2.a" OFF)
26
27#Options regarding disabling parts of subsurface.
28option(NO_MARBLE "disable the marble widget" OFF)
29option(NO_DOCS "disable the docs" OFF)
30option(NO_PRINTING "disable the printing support" OFF)
31option(NO_USERMANUAL "don't include a viewer for the user manual" OFF)
32
33#Options regarding enabling parts of subsurface
34option(FBSUPPORT "allow posting to Facebook" ON)
35option(BTSUPPORT "enable support for QtBluetooth (requires Qt5.4 or newer)" ON)
36option(FTDISUPPORT "enable support for libftdi based serial" OFF)
37option(USE_WEBENGINE "Use QWebEngine instead of QWebKit" OFF)
38
39# Options regarding What should we build on subsurface
40option(MAKE_TESTS "Make the tests" ON)
41
42SET(SUBSURFACE_TARGET_EXECUTABLE "DesktopExecutable" CACHE STRING "The type of application, DesktopExecutable or MobileExecutable")
43LIST(APPEND SUBSURFACE_ACCEPTED_EXECUTABLES  "DesktopExecutable" "MobileExecutable")
44SET_PROPERTY(CACHE SUBSURFACE_TARGET_EXECUTABLE PROPERTY STRINGS ${SUBSURFACE_ACCEPTED_EXECUTABLES})
45
46#verify if Platform is correct and warn on wxit with example.
47list (FIND SUBSURFACE_ACCEPTED_EXECUTABLES ${SUBSURFACE_TARGET_EXECUTABLE}  _index)
48if (${_index} EQUAL -1)
49  message(FATAL_ERROR "Requested platform not supported, please use one of the following:
50    ${SUBSURFACE_ACCEPTED_EXECUTABLES}
51
52    inputted value was: ${SUBSURFACE_TARGET_EXECUTABLE}
53
54    Example: -DSUBSURFACE_TARGET_EXECUTABLE=DesktopExecutable")
55endif()
56
57# SUBSURFACE_SOURCE may be used in subdirectories (tests)
58set(SUBSURFACE_SOURCE ${CMAKE_SOURCE_DIR})
59add_definitions(-DSUBSURFACE_SOURCE="${SUBSURFACE_SOURCE}")
60
61#evenrything's correct, moving on.
62set(CMAKE_MODULE_PATH
63        ${CMAKE_MODULE_PATH}
64        ${${PROJECT_NAME}_SOURCE_DIR}/cmake/Modules
65)
66
67#
68# TODO: This Compilation part should go on the Target specific CMake.
69#
70if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
71        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 ")
72        if((${CMAKE_SYSTEM_NAME} MATCHES "Darwin") AND
73           ((${CMAKE_SYSTEM_VERSION} MATCHES "11.4.") OR
74            (${CMAKE_OSX_DEPLOYMENT_TARGET} MATCHES "10.7") OR
75            (${CMAKE_OSX_DEPLOYMENT_TARGET} MATCHES "10.8")))
76                set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -stdlib=libc++")
77        else()
78                set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
79        endif()
80elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang")
81        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 ")
82        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
83elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
84        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")
85        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
86
87        # Warn about possible float conversion errors
88        # Use NOT VERSION_LESS since VERSION_GREATER_EQUAL is not available
89        # in currently used cmake version.
90        if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.9.0")
91                set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wfloat-conversion")
92                set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wfloat-conversion")
93        endif()
94
95elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
96  # using Intel C++
97elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
98  # using Visual Studio C++
99endif()
100
101# pkgconfig for required libraries
102find_package(PkgConfig)
103include(cmake/Modules/pkgconfig_helper.cmake)
104
105# The 'HandleFindXXX' are special libraries that subsurface needs
106# to find and configure in a few different ways because of a few
107# developers that prefer pkg-config over CMake, so we try to make
108# everyone happy. It also sets some variables for each library, so
109# if you think a module miss anything, take a look on the specific
110# module file.
111include(cmake/Modules/HandleFindGit2.cmake)
112include(cmake/Modules/HandleFindLibDiveComputer.cmake)
113if(${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "DesktopExecutable")
114        include(cmake/Modules/HandleFindMarble.cmake)
115        include(cmake/Modules/HandleFindGrantlee.cmake)
116        include(cmake/Modules/HandleUserManual.cmake)
117endif()
118include(cmake/Modules/HandleFtdiSupport.cmake)
119include(cmake/Modules/HandleVersionGeneration.cmake)
120include(cmake/Modules/RunOnBuildDir.cmake)
121include(cmake/Modules/cmake_variables_helper.cmake)
122
123pkg_config_library(LIBXML libxml-2.0 REQUIRED)
124pkg_config_library(LIBSQLITE3 sqlite3 REQUIRED)
125pkg_config_library(LIBXSLT libxslt REQUIRED)
126pkg_config_library(LIBZIP libzip REQUIRED)
127pkg_config_library(LIBUSB libusb-1.0 QUIET)
128
129include_directories(.
130        ${CMAKE_CURRENT_BINARY_DIR}
131        ${CMAKE_BINARY_DIR}
132        ${CMAKE_BINARY_DIR}/desktop-widgets
133)
134
135# Project Target specific configuration should go here,
136# if the configuration is too big or would disrupt the normal code flux,
137# move it somewhere else (another file) and include it.
138if(${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "DesktopExecutable")
139        if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
140                set(SUBSURFACE_TARGET Subsurface)
141        else()
142                set(SUBSURFACE_TARGET subsurface)
143        endif()
144        list(APPEND QT_EXTRA_COMPONENTS Quick)
145        list(APPEND QT_EXTRA_COMPONENTS Location)
146        list(APPEND QT_EXTRA_COMPONENTS QuickWidgets)
147        list(APPEND QT_EXTRA_LIBRARIES Qt5::Quick)
148        list(APPEND QT_EXTRA_LIBRARIES Qt5::Location)
149        list(APPEND QT_EXTRA_LIBRARIES Qt5::QuickWidgets)
150        remove_definitions(-DSUBSURFACE_MOBILE)
151elseif(${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "MobileExecutable")
152        if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
153                set(SUBSURFACE_TARGET Subsurface-mobile)
154        else()
155                set(SUBSURFACE_TARGET subsurface-mobile)
156        endif()
157        list(APPEND QT_EXTRA_COMPONENTS Quick)
158        list(APPEND QT_EXTRA_COMPONENTS QuickControls2)
159        list(APPEND QT_EXTRA_LIBRARIES Qt5::Quick)
160        list(APPEND QT_EXTRA_LIBRARIES Qt5::QuickControls2)
161        add_definitions(-DSUBSURFACE_MOBILE)
162endif()
163
164if(ANDROID)
165        set(NO_PRINTING ON)
166        list(APPEND QT_EXTRA_COMPONENTS AndroidExtras)
167        list(APPEND QT_EXTRA_LIBRARIES Qt5::AndroidExtras)
168        set(SUBSURFACE_LINK_LIBRARIES ${SUBSURFACE_LINK_LIBRARIES} -llog)
169elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
170        # add pthread to the end of the library list on Linux
171        # this is only needed on Ubuntu
172        # but shouldn't hurt on other Linux versions
173        # in some builds we appear to be missing libz for some strange reason...
174        # Add ssh2 at the end for openSUSE builds (for recent cmake?)
175        set(SUBSURFACE_LINK_LIBRARIES ${SUBSURFACE_LINK_LIBRARIES} -lssh2 -lz -lpthread)
176elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
177        execute_process(
178                COMMAND sh scripts/get-version linux
179                WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
180                OUTPUT_VARIABLE SSRF_VERSION_STRING
181                OUTPUT_STRIP_TRAILING_WHITESPACE
182        )
183        find_library(APP_SERVICES_LIBRARY ApplicationServices)
184        find_library(HID_LIB HidApi)
185        set(SUBSURFACE_LINK_LIBRARIES ${SUBSURFACE_LINK_LIBRARIES} ${HID_LIB})
186        set(EXTRA_LIBS ${APP_SERVICES_LIBRARY})
187        set(ICON_FILE ${CMAKE_SOURCE_DIR}/packaging/macosx/Subsurface.icns)
188        if(${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "MobileExecutable")
189                set(MACOSX_BUNDLE_INFO_STRING "Subsurface-mobile")
190                set(MACOSX_BUNDLE_BUNDLE_NAME "Subsurface-mobile")
191        else()
192                set(MACOSX_BUNDLE_INFO_STRING "Subsurface")
193                set(MACOSX_BUNDLE_BUNDLE_NAME "Subsurface")
194        endif()
195        set(MACOSX_BUNDLE_ICON_FILE Subsurface.icns)
196        set(MACOSX_BUNDLE_GUI_IDENTIFIER "org.subsurface-divelog")
197        set(MACOSX_BUNDLE_BUNDLE_VERSION "${SSRF_VERSION_STRING}")
198        set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${SSRF_VERSION_STRING}")
199        set(MACOSX_BUNDLE_LONG_VERSION_STRING "${SSRF_VERSION_STRING}")
200        set(MACOSX_BUNDLE_COPYRIGHT "Linus Torvalds, Dirk Hohndel, Tomaz Canabrava, and others")
201        set_source_files_properties(${ICON_FILE} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
202        set(SUBSURFACE_PKG MACOSX_BUNDLE ${ICON_FILE})
203elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
204        set(SUBSURFACE_LINK_LIBRARIES ${SUBSURFACE_LINK_LIBRARIES} -lwsock32 -lws2_32)
205        remove_definitions(-DUNICODE)
206        add_definitions(-mwindows -D_WIN32)
207endif()
208
209if(BTSUPPORT)
210        list(APPEND QT_EXTRA_COMPONENTS Bluetooth)
211        list(APPEND QT_EXTRA_LIBRARIES Qt5::Bluetooth)
212endif()
213
214find_package(Qt5 REQUIRED COMPONENTS Core Concurrent Widgets Network Svg Test LinguistTools Positioning ${QT_EXTRA_COMPONENTS})
215set(QT_LIBRARIES Qt5::Core Qt5::Concurrent Qt5::Widgets Qt5::Network Qt5::Svg  Qt5::Positioning ${QT_EXTRA_LIBRARIES})
216set(QT_TEST_LIBRARIES ${QT_LIBRARIES} Qt5::Test)
217
218#disable bluetooth if Qt version is ancient.
219if (BTSUPPORT AND "${Qt5Core_VERSION}" VERSION_LESS 5.4.0)
220        set(BTSUPPORT OFF)
221        message(STATUS "Turning off Bluetooth support as Qt version ${Qt5Core_VERSION} is insufficient for that")
222        list(REMOVE_ITEM QT_LIBRARIES Qt5::Bluetooth)
223endif()
224
225# Windows Qt doesn't support BLE at all
226# Mac hasn't been tested, yet - so far it's disabled
227# the rest of them need at least 5.6 to be reasonable but really, you want 5.9.1
228if (BTSUPPORT AND (ANDROID OR CMAKE_SYSTEM_NAME STREQUAL "Linux"))
229        if ("${Qt5Core_VERSION}" VERSION_LESS 5.6.0)
230                message(STATUS "Turning off BLE support as Qt version ${Qt5Core_VERSION} is insufficient for that")
231        else()
232                set(BLESUPPORT ON)
233                if ("${Qt5Core_VERSION}" VERSION_LESS 5.9.1)
234                        message(STATUS "BLE support has been enabled, but for best results you really want Qt 5.9.1")
235                endif()
236        endif()
237endif()
238
239if(BTSUPPORT)
240        add_definitions(-DBT_SUPPORT)
241endif()
242
243if(BLESUPPORT)
244        add_definitions(-DBLE_SUPPORT)
245endif()
246
247#set up the subsurface_link_libraries variable
248set(SUBSURFACE_LINK_LIBRARIES ${SUBSURFACE_LINK_LIBRARIES} ${LIBDIVECOMPUTER_LIBRARIES} ${LIBGIT2_LIBRARIES} ${LIBUSB_LIBRARIES})
249qt5_add_resources(SUBSURFACE_RESOURCES subsurface.qrc)
250
251# include translations
252add_subdirectory(translations)
253add_subdirectory(core)
254add_subdirectory(qt-models)
255add_subdirectory(profile-widget)
256
257if (${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "DesktopExecutable")
258        add_subdirectory(desktop-widgets)
259endif()
260
261# create the executables
262if(${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "MobileExecutable")
263        set(MOBILE_SRC
264                mobile-widgets/qmlmanager.cpp
265                mobile-widgets/qmlprofile.cpp
266                mobile-widgets/qml/kirigami/src/kirigamiplugin.cpp
267                mobile-widgets/qml/kirigami/src/settings.cpp
268                mobile-widgets/qml/kirigami/src/enums.cpp
269                subsurface-mobile-main.cpp
270                subsurface-mobile-helper.cpp
271        )
272        if(NOT ANDROID AND NOT iOS)
273                set(MOBILE_SRC ${MOBILE_SRC} mobile-widgets/qml/kirigami/src/desktopicon.cpp)
274        endif()
275        add_definitions(-DKIRIGAMI_BUILD_TYPE_STATIC)
276        qt5_add_resources(MOBILE_RESOURCES mobile-widgets/qml/mobile-resources.qrc)
277        qt5_add_resources(MOBILE_RESOURCES mobile-widgets/qml/kirigami/kirigami.qrc)
278        # 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.
279        if(ANDROID)
280                add_library(${SUBSURFACE_TARGET} SHARED ${SUBSURFACE_PKG} ${MOBILE_SRC} ${SUBSURFACE_RESOURCES} ${MOBILE_RESOURCES})
281        else()
282                add_executable(${SUBSURFACE_TARGET} MACOSX_BUNDLE WIN32 ${SUBSURFACE_PKG} ${MOBILE_SRC} ${SUBSURFACE_RESOURCES} ${MOBILE_RESOURCES})
283        endif()
284        target_link_libraries(
285                ${SUBSURFACE_TARGET}
286                subsurface_profile
287                subsurface_models
288                subsurface_corelib
289                ${SUBSURFACE_LINK_LIBRARIES}
290        )
291elseif(${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "DesktopExecutable")
292        set(SUBSURFACE_APP
293                subsurface-desktop-main.cpp
294                subsurface-desktop-helper.cpp
295        )
296        source_group("Subsurface App" FILES ${SUBSURFACE_APP})
297        if(ANDROID)
298                add_library(${SUBSURFACE_TARGET} SHARED ${SUBSURFACE_PKG} ${SUBSURFACE_APP} ${SUBSURFACE_RESOURCES})
299        else()
300                add_executable(${SUBSURFACE_TARGET} MACOSX_BUNDLE WIN32 ${SUBSURFACE_PKG} ${SUBSURFACE_APP} ${SUBSURFACE_RESOURCES})
301        endif()
302
303        if(FBSUPPORT)
304                set(FACEBOOK_INTEGRATION facebook_integration)
305        endif()
306        target_link_libraries(
307                ${SUBSURFACE_TARGET}
308                subsurface_generated_ui
309                subsurface_interface
310                ${FACEBOOK_INTEGRATION}
311                subsurface_profile
312                subsurface_statistics
313                subsurface_models
314                subsurface_corelib
315                ${SUBSURFACE_LINK_LIBRARIES}
316        )
317        add_dependencies(subsurface_statistics subsurface_generated_ui)
318        add_dependencies(subsurface_interface subsurface_generated_ui)
319        add_dependencies(subsurface_profile subsurface_generated_ui)
320        add_dependencies(subsurface_models subsurface_generated_ui)
321        add_dependencies(subsurface_generated_ui version)
322endif()
323
324add_dependencies(subsurface_corelib version)
325
326# add platform specific actions
327if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
328        add_custom_command(
329                OUTPUT ${CMAKE_BINARY_DIR}/qt.conf
330                COMMAND echo \"[Paths]\" > ${CMAKE_BINARY_DIR}/qt.conf \; echo \"Prefix=.\" >> ${CMAKE_BINARY_DIR}/qt.conf
331        )
332        add_custom_target(
333                generate_qtconf
334                DEPENDS ${CMAKE_BINARY_DIR}/qt.conf
335        )
336        add_dependencies(${SUBSURFACE_TARGET} generate_qtconf)
337endif()
338
339# build an automated html exporter
340add_executable(export-html EXCLUDE_FROM_ALL export-html.cpp ${SUBSURFACE_RESOURCES})
341target_link_libraries(export-html subsurface_corelib ${SUBSURFACE_LINK_LIBRARIES})
342
343# install Subsurface
344# first some variables with files that need installing
345set(DOCFILES
346        README
347        ReleaseNotes/ReleaseNotes.txt
348        SupportedDivecomputers.txt
349        ${CMAKE_BINARY_DIR}/Documentation/user-manual.html
350        ${CMAKE_BINARY_DIR}/Documentation/user-manual_es.html
351        ${CMAKE_BINARY_DIR}/Documentation/user-manual_fr.html
352        ${CMAKE_BINARY_DIR}/Documentation/user-manual_ru.html
353)
354
355# add all the translations that we may need
356FILE(STRINGS "subsurface_enabled_translations" QTTRANSLATIONS_BASE)
357
358if(NOT DEFINED QT_TRANSLATION_DIR OR QT_TRANSLATION_DIR STREQUAL "")
359        set(QT_TRANSLATION_DIR ${Qt5Core_DIR}/../../../translations)
360endif()
361set(QTTRANSLATIONS "")
362foreach(QTTRANSLATION ${QTTRANSLATIONS_BASE})
363        if(NOT ${QTTRANSLATION} STREQUAL "")
364                if(EXISTS ${QT_TRANSLATION_DIR}/${QTTRANSLATION})
365                        set(QTTRANSLATIONS ${QTTRANSLATIONS} ${QT_TRANSLATION_DIR}/${QTTRANSLATION})
366                endif()
367        endif()
368endforeach()
369
370# now for each platform the install instructions
371if(ANDROID)
372        # Android template directory
373        include(${QT_ANDROID_CMAKE})
374        if((DEFINED ENV{KEYSTORE}) AND (DEFINED ENV{KEYSTORE_PASSWORD}))
375                add_qt_android_apk(${SUBSURFACE_TARGET}.apk ${SUBSURFACE_TARGET}
376                        PACKAGE_SOURCES ${CMAKE_BINARY_DIR}/android-mobile DEPENDS ${ANDROID_NATIVE_LIBSSL} ${ANDROID_NATIVE_LIBCRYPT}
377                        BUILDTOOLS_REVISION ${BUILDTOOLS_REVISION}
378                        KEYSTORE $ENV{KEYSTORE} Subsurface-mobile KEYSTORE_PASSWORD $ENV{KEYSTORE_PASSWORD}
379                )
380                message(STATUS "KEYSTORE=$ENV{KEYSTORE} KEYSTORE_PASSWORD=$ENV{KEYSTORE_PASSWORD}")
381        else()
382                add_qt_android_apk(${SUBSURFACE_TARGET}.apk ${SUBSURFACE_TARGET}
383                        PACKAGE_SOURCES ${CMAKE_BINARY_DIR}/android-mobile DEPENDS ${ANDROID_NATIVE_LIBSSL} ${ANDROID_NATIVE_LIBCRYPT}
384                        BUILDTOOLS_REVISION ${BUILDTOOLS_REVISION}
385                )
386                message(STATUS "no KEYSTORE")
387        endif()
388elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
389        set(APP_BUNDLE_DIR "${SUBSURFACE_TARGET}.app")
390        set(EXTRA_MACDEPLOY_ARGS "-qmldir=${APP_BUNDLE_DIR}/Contents/Resources/qml ")
391        set(MACDEPLOY_ARGS "${EXTRA_MACDEPLOY_ARGS}-executable=${APP_BUNDLE_DIR}/Contents/MacOS/${SUBSURFACE_TARGET} -always-overwrite")
392        set(RESOURCEDIR ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources)
393        set(PLUGINDIR ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/PlugIns)
394        if(NOT NO_MARBLE)
395                install(DIRECTORY marbledata/maps DESTINATION ${RESOURCEDIR}/data)
396                install(DIRECTORY marbledata/bitmaps DESTINATION ${RESOURCEDIR}/data)
397        endif()
398        install(DIRECTORY Documentation/images DESTINATION ${RESOURCEDIR}/share/Documentation)
399        install(FILES ${DOCFILES} DESTINATION ${RESOURCEDIR}/share/Documentation)
400        install(DIRECTORY theme DESTINATION ${RESOURCEDIR})
401        install(DIRECTORY printing_templates DESTINATION ${RESOURCEDIR})
402        install(FILES ${TRANSLATIONS} DESTINATION ${RESOURCEDIR}/translations)
403        install(FILES ${QTTRANSLATIONS} DESTINATION ${RESOURCEDIR}/translations)
404        install(FILES ${CMAKE_SOURCE_DIR}/gpl-2.0.txt DESTINATION ${RESOURCEDIR})
405        install(CODE "execute_process(COMMAND mkdir -p ${RESOURCEDIR}/qml)")
406        # this is a HACK
407        if((${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "DesktopExecutable") AND (NOT NO_PRINTING))
408                install(DIRECTORY ${Grantlee5_DIR}/../../grantlee DESTINATION ${PLUGINDIR})
409        endif()
410        if(NO_MARBLE)
411                install(CODE "execute_process(COMMAND mkdir -p ${PLUGINDIR}/geoservices)")
412                install(CODE "execute_process(COMMAND cp ${_qt5Core_install_prefix}/plugins/geoservices/libqtgeoservices_googlemaps.dylib ${PLUGINDIR}/geoservices)")
413        endif()
414        # this is a hack - but I don't know how else to find the macdeployqt program if it's not in the PATH
415        string(REPLACE moc macdeployqt MACDEPLOYQT ${QT_MOC_EXECUTABLE})
416        install(CODE "execute_process(COMMAND ${MACDEPLOYQT} ${APP_BUNDLE_DIR} ${MACDEPLOY_ARGS})")
417        # and another hack to get the QML Components in the right place
418        install(CODE "execute_process(COMMAND mkdir -p ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Frameworks/qml)")
419        install(CODE "execute_process(COMMAND cp -a ${_qt5Core_install_prefix}/qml/QtQuick.2 ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources/qml)")
420        install(CODE "execute_process(COMMAND cp -a ${_qt5Core_install_prefix}/qml/QtLocation ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources/qml)")
421        install(CODE "execute_process(COMMAND cp -a ${_qt5Core_install_prefix}/qml/QtPositioning ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources/qml)")
422        if(NOT NO_MARBLE)
423                # more hackery - this time for QtXml which is needed by libssrfmarblewidget
424                install(CODE "execute_process(COMMAND cp -a ${_qt5Core_install_prefix}/lib/QtXml.framework ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Frameworks)")
425                install(CODE "execute_process(COMMAND rm -rf ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Frameworks/QtXml.framework/Versions/5/Headers)")
426                install(CODE "execute_process(COMMAND rm -rf ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Frameworks/QtXml.framework/Headers)")
427                install(CODE "execute_process(COMMAND rm -rf ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Frameworks/QtXml.framework/QtXml.prl)")
428                install(CODE "execute_process(COMMAND rm -rf ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Frameworks/QtXml.framework/Versions/5/QtXml_debug)")
429                install(CODE "execute_process(COMMAND rm -rf ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Frameworks/QtXml.framework/QtXml_debug)")
430                install(CODE "execute_process(COMMAND rm -rf ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Frameworks/QtXml.framework/QtXml_debug.prl)")
431                install(CODE "execute_process(COMMAND install_name_tool -id @executable_path/../Frameworks/QtXml ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Frameworks/QtXml.framework/QtXml)")
432                install(CODE "execute_process(COMMAND install_name_tool -change @rpath/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/QtCore ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Frameworks/QtXml.framework/QtXml)")
433        endif()
434        install(CODE "message(STATUS \"two ERRORS here about libmysqlclient and libpq not found are harmless\")")
435elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
436        # Windows bundling rules
437        # We don't have a helpful tool like macdeployqt for Windows, so we hardcode
438        # which libs we need.
439        # "make install", copies everything into a staging area
440        # "make installer", uses makensis to create an installer executable
441        set(WINDOWSSTAGING ${CMAKE_BINARY_DIR}/staging)
442        if(NOT NO_MARBLE)
443                install(DIRECTORY marbledata/maps DESTINATION ${WINDOWSSTAGING}/data)
444                install(DIRECTORY marbledata/bitmaps DESTINATION ${WINDOWSSTAGING}/data)
445        endif()
446        install(DIRECTORY Documentation/images DESTINATION ${WINDOWSSTAGING}/Documentation)
447        install(FILES ${DOCFILES} DESTINATION ${WINDOWSSTAGING}/Documentation)
448        install(DIRECTORY theme DESTINATION ${WINDOWSSTAGING})
449        install(DIRECTORY printing_templates DESTINATION ${WINDOWSSTAGING})
450        install(FILES ${TRANSLATIONS} DESTINATION ${WINDOWSSTAGING}/translations)
451        install(FILES ${QTTRANSLATIONS} DESTINATION ${WINDOWSSTAGING}/translations)
452        install(FILES ${CMAKE_SOURCE_DIR}/gpl-2.0.txt ${CMAKE_SOURCE_DIR}/packaging/windows/subsurface.ico DESTINATION ${WINDOWSSTAGING})
453        install(TARGETS ${SUBSURFACE_TARGET} DESTINATION ${WINDOWSSTAGING})
454        install(FILES ${CMAKE_BINARY_DIR}/qt.conf DESTINATION ${WINDOWSSTAGING})
455        install(DIRECTORY ${CMAKE_INSTALL_PREFIX}/lib/grantlee DESTINATION ${WINDOWSSTAGING})
456        if(NOT DEFINED MAKENSIS)
457                set(MAKENSIS makensis)
458        endif()
459
460        # the script we created above is now added as a command to run at
461        # install time - so this ensures that subsurface.exe has been
462        # built before this is run
463        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)")
464
465        # create the subsurface-x.y.z.exe installer - this needs to depend
466        # on the install target but cmake doesn't allow that, so we depend
467        # on the fake target instead
468        add_custom_target(
469                fake_install
470                COMMAND "${CMAKE_COMMAND}" --build . --target install
471                DEPENDS ${SUBSURFACE_TARGET}
472        )
473
474        add_custom_target(
475                installer
476                COMMAND ${MAKENSIS} ${WINDOWSSTAGING}/subsurface.nsi
477                DEPENDS fake_install
478        )
479elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux")
480        if(NOT NO_MARBLE)
481                install(DIRECTORY marbledata/maps DESTINATION share/subsurface/data)
482                install(DIRECTORY marbledata/bitmaps DESTINATION share/subsurface/data)
483        endif()
484        install(FILES subsurface.debug DESTINATION bin)
485        install(FILES subsurface.desktop DESTINATION share/applications)
486        install(FILES icons/subsurface-icon.svg DESTINATION share/icons/hicolor/scalable/apps)
487        install(DIRECTORY Documentation/images DESTINATION share/subsurface/Documentation)
488        install(FILES ${DOCFILES} DESTINATION share/subsurface/Documentation)
489        install(DIRECTORY theme DESTINATION share/subsurface)
490        install(DIRECTORY printing_templates DESTINATION share/subsurface)
491        install(FILES ${TRANSLATIONS} DESTINATION share/subsurface/translations)
492        install(TARGETS ${SUBSURFACE_TARGET} DESTINATION bin)
493        if(DEFINED LIBMARBLEDEVEL)
494                install(
495                        CODE "file(GLOB SSRFMARBLE_SHLIBS \"${LIBMARBLEDEVEL}/lib/libssrfmarblewidget.so*\")"
496                        CODE "file(INSTALL \${SSRFMARBLE_SHLIBS} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)"
497                )
498        endif()
499endif()
500
501if (MAKE_TESTS)
502        add_subdirectory(tests)
503endif()
504
505# useful for debugging CMake issues
506# print_all_variables()
Note: See TracBrowser for help on using the repository browser.