source: subsurface/CMakeLists.txt

Last change on this file was 3775f45, checked in by Dirk Hohndel <dirk@…>, 11 days ago

CMakeLists.txt: Remove SmartTrak? import options

Remove SmartTrak? import options from Subsurface's CMakeLists,txt, as a
first step to keep the importer apart from the main application.

  • Property mode set to 100644
File size: 21.0 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        remove_definitions(-DSUBSURFACE_MOBILE)
145elseif(${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "MobileExecutable")
146        if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
147                set(SUBSURFACE_TARGET Subsurface-mobile)
148        else()
149                set(SUBSURFACE_TARGET subsurface-mobile)
150        endif()
151        list(APPEND QT_EXTRA_COMPONENTS Quick)
152        list(APPEND QT_EXTRA_COMPONENTS QuickControls2)
153        list(APPEND QT_EXTRA_LIBRARIES Qt5::Quick)
154        list(APPEND QT_EXTRA_LIBRARIES Qt5::QuickControls2)
155        add_definitions(-DSUBSURFACE_MOBILE)
156endif()
157
158if(ANDROID)
159        set(NO_PRINTING ON)
160        list(APPEND QT_EXTRA_COMPONENTS AndroidExtras)
161        list(APPEND QT_EXTRA_LIBRARIES Qt5::AndroidExtras)
162        set(SUBSURFACE_LINK_LIBRARIES ${SUBSURFACE_LINK_LIBRARIES} -llog)
163elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
164        # add pthread to the end of the library list on Linux
165        # this is only needed on Ubuntu
166        # but shouldn't hurt on other Linux versions
167        # in some builds we appear to be missing libz for some strange reason...
168        # Add ssh2 at the end for openSUSE builds (for recent cmake?)
169        set(SUBSURFACE_LINK_LIBRARIES ${SUBSURFACE_LINK_LIBRARIES} -lssh2 -lz -lpthread)
170elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
171        execute_process(
172                COMMAND sh scripts/get-version linux
173                WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
174                OUTPUT_VARIABLE SSRF_VERSION_STRING
175                OUTPUT_STRIP_TRAILING_WHITESPACE
176        )
177        find_library(APP_SERVICES_LIBRARY ApplicationServices)
178        find_library(HID_LIB HidApi)
179        set(SUBSURFACE_LINK_LIBRARIES ${SUBSURFACE_LINK_LIBRARIES} ${HID_LIB})
180        set(EXTRA_LIBS ${APP_SERVICES_LIBRARY})
181        set(ICON_FILE ${CMAKE_SOURCE_DIR}/packaging/macosx/Subsurface.icns)
182        if(${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "MobileExecutable")
183                set(MACOSX_BUNDLE_INFO_STRING "Subsurface-mobile")
184                set(MACOSX_BUNDLE_BUNDLE_NAME "Subsurface-mobile")
185        else()
186                set(MACOSX_BUNDLE_INFO_STRING "Subsurface")
187                set(MACOSX_BUNDLE_BUNDLE_NAME "Subsurface")
188        endif()
189        set(MACOSX_BUNDLE_ICON_FILE Subsurface.icns)
190        set(MACOSX_BUNDLE_GUI_IDENTIFIER "org.subsurface-divelog")
191        set(MACOSX_BUNDLE_BUNDLE_VERSION "${SSRF_VERSION_STRING}")
192        set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${SSRF_VERSION_STRING}")
193        set(MACOSX_BUNDLE_LONG_VERSION_STRING "${SSRF_VERSION_STRING}")
194        set(MACOSX_BUNDLE_COPYRIGHT "Linus Torvalds, Dirk Hohndel, Tomaz Canabrava, and others")
195        set_source_files_properties(${ICON_FILE} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
196        set(SUBSURFACE_PKG MACOSX_BUNDLE ${ICON_FILE})
197elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
198        set(SUBSURFACE_LINK_LIBRARIES ${SUBSURFACE_LINK_LIBRARIES} -lwsock32 -lws2_32)
199        remove_definitions(-DUNICODE)
200        add_definitions(-mwindows -D_WIN32)
201endif()
202
203if(BTSUPPORT)
204        list(APPEND QT_EXTRA_COMPONENTS Bluetooth)
205        list(APPEND QT_EXTRA_LIBRARIES Qt5::Bluetooth)
206endif()
207
208find_package(Qt5 REQUIRED COMPONENTS Core Concurrent Widgets Network Svg Test LinguistTools Positioning ${QT_EXTRA_COMPONENTS})
209set(QT_LIBRARIES Qt5::Core Qt5::Concurrent Qt5::Widgets Qt5::Network Qt5::Svg  Qt5::Positioning ${QT_EXTRA_LIBRARIES})
210set(QT_TEST_LIBRARIES ${QT_LIBRARIES} Qt5::Test)
211
212#disable bluetooth if Qt version is ancient.
213if (BTSUPPORT AND "${Qt5Core_VERSION}" VERSION_LESS 5.4.0)
214        set(BTSUPPORT OFF)
215        message(STATUS "Turning off Bluetooth support as Qt version ${Qt5Core_VERSION} is insufficient for that")
216        list(REMOVE_ITEM QT_LIBRARIES Qt5::Bluetooth)
217endif()
218
219if(BTSUPPORT)
220        add_definitions(-DBT_SUPPORT)
221endif()
222
223#set up the subsurface_link_libraries variable
224set(SUBSURFACE_LINK_LIBRARIES ${SUBSURFACE_LINK_LIBRARIES} ${LIBDIVECOMPUTER_LIBRARIES} ${LIBGIT2_LIBRARIES} ${LIBUSB_LIBRARIES})
225qt5_add_resources(SUBSURFACE_RESOURCES subsurface.qrc)
226
227# include translations
228add_subdirectory(translations)
229add_subdirectory(core)
230add_subdirectory(qt-models)
231add_subdirectory(profile-widget)
232
233if (${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "DesktopExecutable")
234        add_subdirectory(desktop-widgets)
235endif()
236
237# create the executables
238if(${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "MobileExecutable")
239        set(MOBILE_SRC
240                mobile-widgets/qmlmanager.cpp
241                mobile-widgets/qmlprofile.cpp
242                mobile-widgets/qml/kirigami/src/kirigamiplugin.cpp
243                mobile-widgets/qml/kirigami/src/settings.cpp
244                mobile-widgets/qml/kirigami/src/enums.cpp
245                subsurface-mobile-main.cpp
246                subsurface-mobile-helper.cpp
247        )
248        if(NOT ANDROID AND NOT iOS)
249                set(MOBILE_SRC ${MOBILE_SRC} mobile-widgets/qml/kirigami/src/desktopicon.cpp)
250        endif()
251        add_definitions(-DKIRIGAMI_BUILD_TYPE_STATIC)
252        qt5_add_resources(MOBILE_RESOURCES mobile-widgets/qml/mobile-resources.qrc)
253        qt5_add_resources(MOBILE_RESOURCES mobile-widgets/qml/kirigami/kirigami.qrc)
254        # 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.
255        if(ANDROID)
256                add_library(${SUBSURFACE_TARGET} SHARED ${SUBSURFACE_PKG} ${MOBILE_SRC} ${SUBSURFACE_RESOURCES} ${MOBILE_RESOURCES})
257        else()
258                add_executable(${SUBSURFACE_TARGET} MACOSX_BUNDLE WIN32 ${SUBSURFACE_PKG} ${MOBILE_SRC} ${SUBSURFACE_RESOURCES} ${MOBILE_RESOURCES})
259        endif()
260        target_link_libraries(
261                ${SUBSURFACE_TARGET}
262                subsurface_profile
263                subsurface_models
264                subsurface_corelib
265                ${SUBSURFACE_LINK_LIBRARIES}
266        )
267elseif(${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "DesktopExecutable")
268        set(SUBSURFACE_APP
269                subsurface-desktop-main.cpp
270                subsurface-desktop-helper.cpp
271        )
272        source_group("Subsurface App" FILES ${SUBSURFACE_APP})
273        if(ANDROID)
274                add_library(${SUBSURFACE_TARGET} SHARED ${SUBSURFACE_PKG} ${SUBSURFACE_APP} ${SUBSURFACE_RESOURCES})
275        else()
276                add_executable(${SUBSURFACE_TARGET} MACOSX_BUNDLE WIN32 ${SUBSURFACE_PKG} ${SUBSURFACE_APP} ${SUBSURFACE_RESOURCES})
277        endif()
278
279        if(FBSUPPORT)
280                set(FACEBOOK_INTEGRATION facebook_integration)
281        endif()
282        target_link_libraries(
283                ${SUBSURFACE_TARGET}
284                subsurface_generated_ui
285                subsurface_interface
286                ${FACEBOOK_INTEGRATION}
287                subsurface_profile
288                subsurface_statistics
289                subsurface_models
290                subsurface_corelib
291                ${SUBSURFACE_LINK_LIBRARIES}
292        )
293        add_dependencies(subsurface_statistics subsurface_generated_ui)
294        add_dependencies(subsurface_interface subsurface_generated_ui)
295        add_dependencies(subsurface_profile subsurface_generated_ui)
296        add_dependencies(subsurface_models subsurface_generated_ui)
297        add_dependencies(subsurface_generated_ui version)
298endif()
299
300add_dependencies(subsurface_corelib version)
301
302# add platform specific actions
303if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
304        add_custom_command(
305                OUTPUT ${CMAKE_BINARY_DIR}/qt.conf
306                COMMAND echo \"[Paths]\" > ${CMAKE_BINARY_DIR}/qt.conf \; echo \"Prefix=.\" >> ${CMAKE_BINARY_DIR}/qt.conf
307        )
308        add_custom_target(
309                generate_qtconf
310                DEPENDS ${CMAKE_BINARY_DIR}/qt.conf
311        )
312        add_dependencies(${SUBSURFACE_TARGET} generate_qtconf)
313endif()
314
315# build an automated html exporter
316add_executable(export-html EXCLUDE_FROM_ALL export-html.cpp ${SUBSURFACE_RESOURCES})
317target_link_libraries(export-html subsurface_corelib ${SUBSURFACE_LINK_LIBRARIES})
318
319# install Subsurface
320# first some variables with files that need installing
321set(DOCFILES
322        README
323        ReleaseNotes/ReleaseNotes.txt
324        SupportedDivecomputers.txt
325        ${CMAKE_BINARY_DIR}/Documentation/user-manual.html
326        ${CMAKE_BINARY_DIR}/Documentation/user-manual_es.html
327        ${CMAKE_BINARY_DIR}/Documentation/user-manual_fr.html
328        ${CMAKE_BINARY_DIR}/Documentation/user-manual_ru.html
329)
330
331# add all the translations that we may need
332FILE(STRINGS "subsurface_enabled_translations" QTTRANSLATIONS_BASE)
333
334if(NOT DEFINED QT_TRANSLATION_DIR OR QT_TRANSLATION_DIR STREQUAL "")
335        set(QT_TRANSLATION_DIR ${Qt5Core_DIR}/../../../translations)
336endif()
337set(QTTRANSLATIONS "")
338foreach(QTTRANSLATION ${QTTRANSLATIONS_BASE})
339        if(NOT ${QTTRANSLATION} STREQUAL "")
340                if(EXISTS ${QT_TRANSLATION_DIR}/${QTTRANSLATION})
341                        set(QTTRANSLATIONS ${QTTRANSLATIONS} ${QT_TRANSLATION_DIR}/${QTTRANSLATION})
342                endif()
343        endif()
344endforeach()
345
346# now for each platform the install instructions
347if(ANDROID)
348        # Android template directory
349        include(${QT_ANDROID_CMAKE})
350        if((DEFINED ENV{KEYSTORE}) AND (DEFINED ENV{KEYSTORE_PASSWORD}))
351                add_qt_android_apk(${SUBSURFACE_TARGET}.apk ${SUBSURFACE_TARGET}
352                        PACKAGE_SOURCES ${CMAKE_BINARY_DIR}/android-mobile DEPENDS ${ANDROID_NATIVE_LIBSSL} ${ANDROID_NATIVE_LIBCRYPT}
353                        BUILDTOOLS_REVISION ${BUILDTOOLS_REVISION}
354                        KEYSTORE $ENV{KEYSTORE} Subsurface-mobile KEYSTORE_PASSWORD $ENV{KEYSTORE_PASSWORD}
355                )
356                message(STATUS "KEYSTORE=$ENV{KEYSTORE} KEYSTORE_PASSWORD=$ENV{KEYSTORE_PASSWORD}")
357        else()
358                add_qt_android_apk(${SUBSURFACE_TARGET}.apk ${SUBSURFACE_TARGET}
359                        PACKAGE_SOURCES ${CMAKE_BINARY_DIR}/android-mobile DEPENDS ${ANDROID_NATIVE_LIBSSL} ${ANDROID_NATIVE_LIBCRYPT}
360                        BUILDTOOLS_REVISION ${BUILDTOOLS_REVISION}
361                )
362                message(STATUS "no KEYSTORE")
363        endif()
364elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
365        set(APP_BUNDLE_DIR "${SUBSURFACE_TARGET}.app")
366        if(${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "MobileExecutable")
367                set(EXTRA_MACDEPLOY_ARGS "-qmldir=${APP_BUNDLE_DIR}/Contents/Frameworks/qml ")
368        endif()
369        set(MACDEPLOY_ARGS "${EXTRA_MACDEPLOY_ARGS}-executable=${APP_BUNDLE_DIR}/Contents/MacOS/${SUBSURFACE_TARGET} -always-overwrite")
370        set(RESOURCEDIR ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources)
371        set(PLUGINDIR ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/PlugIns)
372        install(DIRECTORY marbledata/maps DESTINATION ${RESOURCEDIR}/data)
373        install(DIRECTORY marbledata/bitmaps DESTINATION ${RESOURCEDIR}/data)
374        install(DIRECTORY Documentation/images DESTINATION ${RESOURCEDIR}/share/Documentation)
375        install(FILES ${DOCFILES} DESTINATION ${RESOURCEDIR}/share/Documentation)
376        install(DIRECTORY theme DESTINATION ${RESOURCEDIR})
377        install(DIRECTORY printing_templates DESTINATION ${RESOURCEDIR})
378        install(FILES ${TRANSLATIONS} DESTINATION ${RESOURCEDIR}/translations)
379        install(FILES ${QTTRANSLATIONS} DESTINATION ${RESOURCEDIR}/translations)
380        install(FILES ${CMAKE_SOURCE_DIR}/gpl-2.0.txt DESTINATION ${RESOURCEDIR})
381        # this is a HACK
382        if(${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "DesktopExecutable")
383                install(DIRECTORY ${Grantlee5_DIR}/../../grantlee DESTINATION ${PLUGINDIR})
384        endif()
385        # this is a hack - but I don't know how else to find the macdeployqt program if it's not in the PATH
386        string(REPLACE moc macdeployqt MACDEPLOYQT ${QT_MOC_EXECUTABLE})
387        install(CODE "execute_process(COMMAND ${MACDEPLOYQT} ${APP_BUNDLE_DIR} ${MACDEPLOY_ARGS})")
388        # and another hack to get the QML Components in the right place
389        if(${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "MobileExecutable")
390                install(CODE "execute_process(COMMAND mkdir -p ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Frameworks/qml)")
391                install(CODE "execute_process(COMMAND cp -a ${_qt5Core_install_prefix}/qml/QtQuick ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Frameworks/qml)")
392        endif()
393        if(NOT NO_MARBLE)
394                # more hackery - this time for QtXml which is needed by libssrfmarblewidget
395                install(CODE "execute_process(COMMAND cp -a ${_qt5Core_install_prefix}/lib/QtXml.framework ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Frameworks)")
396                install(CODE "execute_process(COMMAND rm -rf ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Frameworks/QtXml.framework/Versions/5/Headers)")
397                install(CODE "execute_process(COMMAND rm -rf ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Frameworks/QtXml.framework/Headers)")
398                install(CODE "execute_process(COMMAND rm -rf ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Frameworks/QtXml.framework/QtXml.prl)")
399                install(CODE "execute_process(COMMAND rm -rf ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Frameworks/QtXml.framework/Versions/5/QtXml_debug)")
400                install(CODE "execute_process(COMMAND rm -rf ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Frameworks/QtXml.framework/QtXml_debug)")
401                install(CODE "execute_process(COMMAND rm -rf ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Frameworks/QtXml.framework/QtXml_debug.prl)")
402                install(CODE "execute_process(COMMAND install_name_tool -id @executable_path/../Frameworks/QtXml ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Frameworks/QtXml.framework/QtXml)")
403                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)")
404        endif()
405        install(CODE "message(STATUS \"two ERRORS here about libmysqlclient and libpq not found are harmless\")")
406elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
407        # Windows bundling rules
408        # We don't have a helpful tool like macdeployqt for Windows, so we hardcode
409        # which libs we need.
410        # "make install", copies everything into a staging area
411        # "make installer", uses makensis to create an installer executable
412        set(WINDOWSSTAGING ${CMAKE_BINARY_DIR}/staging)
413        install(DIRECTORY marbledata/maps DESTINATION ${WINDOWSSTAGING}/data)
414        install(DIRECTORY marbledata/bitmaps DESTINATION ${WINDOWSSTAGING}/data)
415        install(DIRECTORY Documentation/images DESTINATION ${WINDOWSSTAGING}/Documentation)
416        install(FILES ${DOCFILES} DESTINATION ${WINDOWSSTAGING}/Documentation)
417        install(DIRECTORY theme DESTINATION ${WINDOWSSTAGING})
418        install(DIRECTORY printing_templates DESTINATION ${WINDOWSSTAGING})
419        install(FILES ${TRANSLATIONS} DESTINATION ${WINDOWSSTAGING}/translations)
420        install(FILES ${QTTRANSLATIONS} DESTINATION ${WINDOWSSTAGING}/translations)
421        install(FILES ${CMAKE_SOURCE_DIR}/gpl-2.0.txt ${CMAKE_SOURCE_DIR}/packaging/windows/subsurface.ico DESTINATION ${WINDOWSSTAGING})
422        install(TARGETS ${SUBSURFACE_TARGET} DESTINATION ${WINDOWSSTAGING})
423        install(FILES ${CMAKE_BINARY_DIR}/qt.conf DESTINATION ${WINDOWSSTAGING})
424        install(DIRECTORY ${CMAKE_INSTALL_PREFIX}/lib/grantlee DESTINATION ${WINDOWSSTAGING})
425        if(NOT DEFINED MAKENSIS)
426                set(MAKENSIS makensis)
427        endif()
428
429        # the script we created above is now added as a command to run at
430        # install time - so this ensures that subsurface.exe has been
431        # built before this is run
432        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)")
433
434        # create the subsurface-x.y.z.exe installer - this needs to depend
435        # on the install target but cmake doesn't allow that, so we depend
436        # on the fake target instead
437        add_custom_target(
438                fake_install
439                COMMAND "${CMAKE_COMMAND}" --build . --target install
440                DEPENDS ${SUBSURFACE_TARGET}
441        )
442
443        add_custom_target(
444                installer
445                COMMAND ${MAKENSIS} ${WINDOWSSTAGING}/subsurface.nsi
446                DEPENDS fake_install
447        )
448elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux")
449        install(DIRECTORY marbledata/maps DESTINATION share/subsurface/data)
450        install(DIRECTORY marbledata/bitmaps DESTINATION share/subsurface/data)
451        install(FILES subsurface.debug DESTINATION bin)
452        install(FILES subsurface.desktop DESTINATION share/applications)
453        install(FILES icons/subsurface-icon.svg DESTINATION share/icons/hicolor/scalable/apps)
454        install(DIRECTORY Documentation/images DESTINATION share/subsurface/Documentation)
455        install(FILES ${DOCFILES} DESTINATION share/subsurface/Documentation)
456        install(DIRECTORY theme DESTINATION share/subsurface)
457        install(DIRECTORY printing_templates DESTINATION share/subsurface)
458        install(FILES ${TRANSLATIONS} DESTINATION share/subsurface/translations)
459        install(TARGETS ${SUBSURFACE_TARGET} DESTINATION bin)
460        if(DEFINED LIBMARBLEDEVEL)
461                install(
462                        CODE "file(GLOB SSRFMARBLE_SHLIBS \"${LIBMARBLEDEVEL}/lib/libssrfmarblewidget.so*\")"
463                        CODE "file(INSTALL \${SSRFMARBLE_SHLIBS} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)"
464                )
465        endif()
466endif()
467
468if (MAKE_TESTS)
469        add_subdirectory(tests)
470endif()
471
472# useful for debugging CMake issues
473# print_all_variables()
Note: See TracBrowser for help on using the repository browser.