source: subsurface/CMakeLists.txt

Last change on this file was 53c503d, checked in by Dirk Hohndel <dirk@…>, 12 days ago

Typo fix remoev -> remove

Signed-off-by: Cameron Phillips <darexon331@…>

  • Property mode set to 100644
File size: 20.9 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 remove 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)
21
22#Library Handling
23option(FORCE_LIBSSH "force linking with libssh to workaround libgit2 bug" ON)
24option(LIBGIT2_DYNAMIC "search for libgit2.so before libgit2.a" OFF)
25
26#Options regarding disabling parts of subsurface.
27option(NO_DOCS "disable the docs" OFF)
28option(NO_PRINTING "disable the printing support" OFF)
29option(NO_USERMANUAL "don't include a viewer for the user manual" OFF)
30
31#Options regarding enabling parts of subsurface
32option(FBSUPPORT "allow posting to Facebook" ON)
33option(BTSUPPORT "enable support for QtBluetooth (requires Qt5.4 or newer)" ON)
34option(FTDISUPPORT "enable support for libftdi based serial" OFF)
35option(USE_WEBENGINE "Use QWebEngine instead of QWebKit" OFF)
36
37# Options regarding What should we build on subsurface
38option(MAKE_TESTS "Make the tests" ON)
39
40SET(SUBSURFACE_TARGET_EXECUTABLE "DesktopExecutable" CACHE STRING "The type of application, DesktopExecutable or MobileExecutable")
41LIST(APPEND SUBSURFACE_ACCEPTED_EXECUTABLES  "DesktopExecutable" "MobileExecutable")
42SET_PROPERTY(CACHE SUBSURFACE_TARGET_EXECUTABLE PROPERTY STRINGS ${SUBSURFACE_ACCEPTED_EXECUTABLES})
43
44#verify if Platform is correct and warn on wxit with example.
45list (FIND SUBSURFACE_ACCEPTED_EXECUTABLES ${SUBSURFACE_TARGET_EXECUTABLE}  _index)
46if (${_index} EQUAL -1)
47  message(FATAL_ERROR "Requested platform not supported, please use one of the following:
48    ${SUBSURFACE_ACCEPTED_EXECUTABLES}
49
50    inputted value was: ${SUBSURFACE_TARGET_EXECUTABLE}
51
52    Example: -DSUBSURFACE_TARGET_EXECUTABLE=DesktopExecutable")
53endif()
54
55# SUBSURFACE_SOURCE may be used in subdirectories (tests)
56set(SUBSURFACE_SOURCE ${CMAKE_SOURCE_DIR})
57add_definitions(-DSUBSURFACE_SOURCE="${SUBSURFACE_SOURCE}")
58
59#evenrything's correct, moving on.
60set(CMAKE_MODULE_PATH
61        ${CMAKE_MODULE_PATH}
62        ${${PROJECT_NAME}_SOURCE_DIR}/cmake/Modules
63)
64
65#
66# TODO: This Compilation part should go on the Target specific CMake.
67#
68if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
69        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 ")
70        if((${CMAKE_SYSTEM_NAME} MATCHES "Darwin") AND
71           ((${CMAKE_SYSTEM_VERSION} MATCHES "11.4.") OR
72            (${CMAKE_OSX_DEPLOYMENT_TARGET} MATCHES "10.7") OR
73            (${CMAKE_OSX_DEPLOYMENT_TARGET} MATCHES "10.8")))
74                set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -stdlib=libc++")
75        else()
76                set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
77        endif()
78elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang")
79        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 ")
80        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
81elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
82        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")
83        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
84
85        # Warn about possible float conversion errors
86        # Use NOT VERSION_LESS since VERSION_GREATER_EQUAL is not available
87        # in currently used cmake version.
88        if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.9.0")
89                set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wfloat-conversion")
90                set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wfloat-conversion")
91        endif()
92
93elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
94  # using Intel C++
95elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
96  # using Visual Studio C++
97endif()
98
99# pkgconfig for required libraries
100find_package(PkgConfig)
101include(cmake/Modules/pkgconfig_helper.cmake)
102
103# The 'HandleFindXXX' are special libraries that subsurface needs
104# to find and configure in a few different ways because of a few
105# developers that prefer pkg-config over CMake, so we try to make
106# everyone happy. It also sets some variables for each library, so
107# if you think a module miss anything, take a look on the specific
108# module file.
109include(cmake/Modules/HandleFindGit2.cmake)
110include(cmake/Modules/HandleFindLibDiveComputer.cmake)
111if(${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "DesktopExecutable")
112        include(cmake/Modules/HandleFindGrantlee.cmake)
113        include(cmake/Modules/HandleUserManual.cmake)
114endif()
115include(cmake/Modules/HandleFtdiSupport.cmake)
116include(cmake/Modules/HandleVersionGeneration.cmake)
117include(cmake/Modules/RunOnBuildDir.cmake)
118include(cmake/Modules/cmake_variables_helper.cmake)
119
120pkg_config_library(LIBXML libxml-2.0 REQUIRED)
121pkg_config_library(LIBSQLITE3 sqlite3 REQUIRED)
122pkg_config_library(LIBXSLT libxslt REQUIRED)
123pkg_config_library(LIBZIP libzip REQUIRED)
124pkg_config_library(LIBUSB libusb-1.0 QUIET)
125
126include_directories(.
127        ${CMAKE_CURRENT_BINARY_DIR}
128        ${CMAKE_BINARY_DIR}
129        ${CMAKE_BINARY_DIR}/desktop-widgets
130)
131
132# Project Target specific configuration should go here,
133# if the configuration is too big or would disrupt the normal code flux,
134# move it somewhere else (another file) and include it.
135if(${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "DesktopExecutable")
136        if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
137                set(SUBSURFACE_TARGET Subsurface)
138        else()
139                set(SUBSURFACE_TARGET subsurface)
140        endif()
141        list(APPEND QT_EXTRA_COMPONENTS Quick)
142        list(APPEND QT_EXTRA_COMPONENTS Location)
143        list(APPEND QT_EXTRA_COMPONENTS QuickWidgets)
144        list(APPEND QT_EXTRA_LIBRARIES Qt5::Quick)
145        list(APPEND QT_EXTRA_LIBRARIES Qt5::Location)
146        list(APPEND QT_EXTRA_LIBRARIES Qt5::QuickWidgets)
147        remove_definitions(-DSUBSURFACE_MOBILE)
148elseif(${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "MobileExecutable")
149        if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
150                set(SUBSURFACE_TARGET Subsurface-mobile)
151        else()
152                set(SUBSURFACE_TARGET subsurface-mobile)
153        endif()
154        list(APPEND QT_EXTRA_COMPONENTS Quick)
155        list(APPEND QT_EXTRA_COMPONENTS QuickControls2)
156        list(APPEND QT_EXTRA_LIBRARIES Qt5::Quick)
157        list(APPEND QT_EXTRA_LIBRARIES Qt5::QuickControls2)
158        add_definitions(-DSUBSURFACE_MOBILE)
159endif()
160
161if(ANDROID)
162        set(NO_PRINTING ON)
163        list(APPEND QT_EXTRA_COMPONENTS AndroidExtras)
164        list(APPEND QT_EXTRA_LIBRARIES Qt5::AndroidExtras)
165        set(SUBSURFACE_LINK_LIBRARIES ${SUBSURFACE_LINK_LIBRARIES} -llog)
166elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
167        # add pthread to the end of the library list on Linux
168        # this is only needed on Ubuntu
169        # but shouldn't hurt on other Linux versions
170        # in some builds we appear to be missing libz for some strange reason...
171        # Add ssh2 at the end for openSUSE builds (for recent cmake?)
172        set(SUBSURFACE_LINK_LIBRARIES ${SUBSURFACE_LINK_LIBRARIES} -lssh2 -lz -lpthread)
173elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
174        execute_process(
175                COMMAND sh scripts/get-version linux
176                WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
177                OUTPUT_VARIABLE SSRF_VERSION_STRING
178                OUTPUT_STRIP_TRAILING_WHITESPACE
179        )
180        find_library(APP_SERVICES_LIBRARY ApplicationServices)
181        find_library(HID_LIB HidApi)
182        set(SUBSURFACE_LINK_LIBRARIES ${SUBSURFACE_LINK_LIBRARIES} ${HID_LIB})
183        set(EXTRA_LIBS ${APP_SERVICES_LIBRARY})
184        set(ICON_FILE ${CMAKE_SOURCE_DIR}/packaging/macosx/Subsurface.icns)
185        if(${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "MobileExecutable")
186                set(MACOSX_BUNDLE_INFO_STRING "Subsurface-mobile")
187                set(MACOSX_BUNDLE_BUNDLE_NAME "Subsurface-mobile")
188        else()
189                set(MACOSX_BUNDLE_INFO_STRING "Subsurface")
190                set(MACOSX_BUNDLE_BUNDLE_NAME "Subsurface")
191        endif()
192        set(MACOSX_BUNDLE_ICON_FILE Subsurface.icns)
193        set(MACOSX_BUNDLE_GUI_IDENTIFIER "org.subsurface-divelog")
194        set(MACOSX_BUNDLE_BUNDLE_VERSION "${SSRF_VERSION_STRING}")
195        set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${SSRF_VERSION_STRING}")
196        set(MACOSX_BUNDLE_LONG_VERSION_STRING "${SSRF_VERSION_STRING}")
197        set(MACOSX_BUNDLE_COPYRIGHT "Linus Torvalds, Dirk Hohndel, Tomaz Canabrava, and others")
198        set_source_files_properties(${ICON_FILE} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
199        set(SUBSURFACE_PKG MACOSX_BUNDLE ${ICON_FILE})
200elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
201        set(SUBSURFACE_LINK_LIBRARIES ${SUBSURFACE_LINK_LIBRARIES} -lwsock32 -lws2_32)
202        remove_definitions(-DUNICODE)
203        add_definitions(-mwindows -D_WIN32)
204endif()
205
206if(BTSUPPORT)
207        list(APPEND QT_EXTRA_COMPONENTS Bluetooth)
208        list(APPEND QT_EXTRA_LIBRARIES Qt5::Bluetooth)
209endif()
210
211find_package(Qt5 REQUIRED COMPONENTS Core Concurrent Widgets Network Svg Test LinguistTools Positioning ${QT_EXTRA_COMPONENTS})
212set(QT_LIBRARIES Qt5::Core Qt5::Concurrent Qt5::Widgets Qt5::Network Qt5::Svg  Qt5::Positioning ${QT_EXTRA_LIBRARIES})
213set(QT_TEST_LIBRARIES ${QT_LIBRARIES} Qt5::Test)
214
215#disable bluetooth if Qt version is ancient.
216if (BTSUPPORT AND "${Qt5Core_VERSION}" VERSION_LESS 5.4.0)
217        set(BTSUPPORT OFF)
218        message(STATUS "Turning off Bluetooth support as Qt version ${Qt5Core_VERSION} is insufficient for that")
219        list(REMOVE_ITEM QT_LIBRARIES Qt5::Bluetooth)
220endif()
221
222# Windows Qt doesn't support BLE at all
223# the rest of them need at least 5.6 to be reasonable but really, you want 5.9.1
224if (BTSUPPORT AND NOT CMAKE_SYSTEM_NAME STREQUAL "Windows")
225        if ("${Qt5Core_VERSION}" VERSION_LESS 5.6.0)
226                message(STATUS "Turning off BLE support as Qt version ${Qt5Core_VERSION} is insufficient for that")
227        else()
228                set(BLESUPPORT ON)
229                if ("${Qt5Core_VERSION}" VERSION_LESS 5.9.1)
230                        message(STATUS "BLE support has been enabled, but for best results you really want Qt 5.9.1")
231                endif()
232        endif()
233endif()
234
235if(BTSUPPORT)
236        add_definitions(-DBT_SUPPORT)
237endif()
238
239if(BLESUPPORT)
240        add_definitions(-DBLE_SUPPORT)
241endif()
242
243#set up the subsurface_link_libraries variable
244set(SUBSURFACE_LINK_LIBRARIES ${SUBSURFACE_LINK_LIBRARIES} ${LIBDIVECOMPUTER_LIBRARIES} ${LIBGIT2_LIBRARIES} ${LIBUSB_LIBRARIES})
245qt5_add_resources(SUBSURFACE_RESOURCES subsurface.qrc)
246
247# include translations
248add_subdirectory(translations)
249add_subdirectory(core)
250add_subdirectory(qt-models)
251add_subdirectory(profile-widget)
252
253if (${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "DesktopExecutable")
254        add_subdirectory(desktop-widgets)
255endif()
256
257# create the executables
258if(${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "MobileExecutable")
259        set(MOBILE_SRC
260                mobile-widgets/qmlmanager.cpp
261                mobile-widgets/qmlprofile.cpp
262                mobile-widgets/qml/kirigami/src/kirigamiplugin.cpp
263                mobile-widgets/qml/kirigami/src/settings.cpp
264                mobile-widgets/qml/kirigami/src/enums.cpp
265                mobile-widgets/qml/kirigami/src/libkirigami/basictheme.cpp
266                mobile-widgets/qml/kirigami/src/libkirigami/kirigamipluginfactory.cpp
267                mobile-widgets/qml/kirigami/src/libkirigami/platformtheme.cpp
268                subsurface-mobile-main.cpp
269                subsurface-mobile-helper.cpp
270        )
271        include_directories(${CMAKE_SOURCE_DIR}/mobile-widgets/qml/kirigami/src/libkirigami)
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        install(DIRECTORY Documentation/images DESTINATION ${RESOURCEDIR}/share/Documentation)
395        install(FILES ${DOCFILES} DESTINATION ${RESOURCEDIR}/share/Documentation)
396        install(DIRECTORY theme DESTINATION ${RESOURCEDIR})
397        install(DIRECTORY printing_templates DESTINATION ${RESOURCEDIR})
398        install(FILES ${TRANSLATIONS} DESTINATION ${RESOURCEDIR}/translations)
399        install(FILES ${QTTRANSLATIONS} DESTINATION ${RESOURCEDIR}/translations)
400        install(FILES ${CMAKE_SOURCE_DIR}/gpl-2.0.txt DESTINATION ${RESOURCEDIR})
401        install(CODE "execute_process(COMMAND mkdir -p ${RESOURCEDIR}/qml)")
402        # this is a HACK
403        if((${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "DesktopExecutable") AND (NOT NO_PRINTING))
404                install(DIRECTORY ${Grantlee5_DIR}/../../grantlee DESTINATION ${PLUGINDIR})
405        endif()
406        install(CODE "execute_process(COMMAND mkdir -p ${PLUGINDIR}/geoservices)")
407        install(CODE "execute_process(COMMAND cp ${_qt5Core_install_prefix}/plugins/geoservices/libqtgeoservices_googlemaps.dylib ${PLUGINDIR}/geoservices)")
408        # this is a hack - but I don't know how else to find the macdeployqt program if it's not in the PATH
409        string(REPLACE moc macdeployqt MACDEPLOYQT ${QT_MOC_EXECUTABLE})
410        install(CODE "execute_process(COMMAND ${MACDEPLOYQT} ${APP_BUNDLE_DIR} ${MACDEPLOY_ARGS})")
411        # and another hack to get the QML Components in the right place
412        install(CODE "execute_process(COMMAND mkdir -p ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Frameworks/qml)")
413        install(CODE "execute_process(COMMAND cp -a ${_qt5Core_install_prefix}/qml/QtQuick.2 ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources/qml)")
414        install(CODE "execute_process(COMMAND cp -a ${_qt5Core_install_prefix}/qml/QtLocation ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources/qml)")
415        install(CODE "execute_process(COMMAND cp -a ${_qt5Core_install_prefix}/qml/QtPositioning ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources/qml)")
416        install(CODE "message(STATUS \"two ERRORS here about libmysqlclient and libpq not found are harmless\")")
417elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
418        # Windows bundling rules
419        # We don't have a helpful tool like macdeployqt for Windows, so we hardcode
420        # which libs we need.
421        # "make install", copies everything into a staging area
422        # "make installer", uses makensis to create an installer executable
423        set(WINDOWSSTAGING ${CMAKE_BINARY_DIR}/staging)
424        install(DIRECTORY Documentation/images DESTINATION ${WINDOWSSTAGING}/Documentation)
425        install(FILES ${DOCFILES} DESTINATION ${WINDOWSSTAGING}/Documentation)
426        install(DIRECTORY theme DESTINATION ${WINDOWSSTAGING})
427        install(DIRECTORY printing_templates DESTINATION ${WINDOWSSTAGING})
428        install(FILES ${TRANSLATIONS} DESTINATION ${WINDOWSSTAGING}/translations)
429        install(FILES ${QTTRANSLATIONS} DESTINATION ${WINDOWSSTAGING}/translations)
430        install(FILES ${CMAKE_SOURCE_DIR}/gpl-2.0.txt ${CMAKE_SOURCE_DIR}/packaging/windows/subsurface.ico DESTINATION ${WINDOWSSTAGING})
431        install(TARGETS ${SUBSURFACE_TARGET} DESTINATION ${WINDOWSSTAGING})
432        install(FILES ${CMAKE_BINARY_DIR}/qt.conf DESTINATION ${WINDOWSSTAGING})
433        install(DIRECTORY ${CMAKE_INSTALL_PREFIX}/lib/grantlee DESTINATION ${WINDOWSSTAGING})
434        if(NOT DEFINED MAKENSIS)
435                set(MAKENSIS makensis)
436        endif()
437
438        # the script we created above is now added as a command to run at
439        # install time - so this ensures that subsurface.exe has been
440        # built before this is run
441        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)")
442
443        # create the subsurface-x.y.z.exe installer - this needs to depend
444        # on the install target but cmake doesn't allow that, so we depend
445        # on the fake target instead
446        add_custom_target(
447                fake_install
448                COMMAND "${CMAKE_COMMAND}" --build . --target install
449                DEPENDS ${SUBSURFACE_TARGET}
450        )
451
452        add_custom_target(
453                installer
454                COMMAND ${MAKENSIS} ${WINDOWSSTAGING}/subsurface.nsi
455                DEPENDS fake_install
456        )
457elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux")
458        # the syntax is odd, but this searches for libqtgeoservices_googlemaps.so
459        # in the filesystem below our install-root
460        # different Linux flavors put the plugin in different directories
461        file(GLOB_RECURSE GOOGLEMAPS ${CMAKE_SOURCE_DIR}/../install-root/libqtgeoservices_googlemaps.so)
462        if ("${GOOGLEMAPS}" STREQUAL "")
463                message(STATUS "Cannot find libqtgeoservices_googlemaps.so")
464        else()
465                add_custom_target(link_googlemaps_plugin ALL COMMAND
466                        rm -rf ${CMAKE_BINARY_DIR}/geoservices &&
467                        mkdir -p ${CMAKE_BINARY_DIR}/geoservices &&
468                        ln -sf ${GOOGLEMAPS} ${CMAKE_BINARY_DIR}/geoservices)
469        endif()
470        install(FILES subsurface.debug DESTINATION bin)
471        install(FILES subsurface.desktop DESTINATION share/applications)
472        install(FILES icons/subsurface-icon.svg DESTINATION share/icons/hicolor/scalable/apps)
473        install(DIRECTORY Documentation/images DESTINATION share/subsurface/Documentation)
474        install(FILES ${DOCFILES} DESTINATION share/subsurface/Documentation)
475        install(DIRECTORY theme DESTINATION share/subsurface)
476        install(DIRECTORY printing_templates DESTINATION share/subsurface)
477        install(FILES ${TRANSLATIONS} DESTINATION share/subsurface/translations)
478        install(TARGETS ${SUBSURFACE_TARGET} DESTINATION bin)
479endif()
480
481if (MAKE_TESTS)
482        add_subdirectory(tests)
483endif()
484
485# useful for debugging CMake issues
486# print_all_variables()
Note: See TracBrowser for help on using the repository browser.