mirror of
https://github.com/subsurface/subsurface.git
synced 2024-12-11 03:21:29 +00:00
dc254716cf
Some policies can affect how project() works. Signed-off-by: Rolf Eike Beer <eike@sf-mail.de>
160 lines
5.4 KiB
CMake
160 lines
5.4 KiB
CMake
# Modified from Subsurface's CMakeLists.txt
|
|
|
|
cmake_minimum_required(VERSION 3.1)
|
|
project(smtk2ssrf)
|
|
|
|
option(COMMANDLINE "Build command line version" OFF)
|
|
|
|
set(CMAKE_AUTOMOC ON)
|
|
set(CMAKE_AUTOUIC ON)
|
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
|
|
|
set(PKG_CONFIG_USE_CMAKE_PREFIX_PATH FALSE)
|
|
set(SSRF_PATH ../)
|
|
set(CMAKE_MODULE_PATH ${SSRF_PATH}cmake/Modules)
|
|
include(${CMAKE_MODULE_PATH}/MacroOutOfSourceBuild.cmake)
|
|
include(${CMAKE_MODULE_PATH}/cmake_variables_helper.cmake)
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
|
include(${CMAKE_MODULE_PATH}/HandleVersionGeneration.cmake)
|
|
endif()
|
|
|
|
MACRO_ENSURE_OUT_OF_SOURCE_BUILD(
|
|
"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."
|
|
)
|
|
|
|
# Find needed packages and Qt5 components. Most of them needed by Subsurface
|
|
find_package(PkgConfig)
|
|
include(${SSRF_PATH}cmake/Modules/pkgconfig_helper.cmake)
|
|
pkg_config_library(LIBXML libxml-2.0 REQUIRED)
|
|
pkg_config_library(LIBSQLITE3 sqlite3 REQUIRED)
|
|
pkg_config_library(LIBXSLT libxslt REQUIRED)
|
|
pkg_config_library(LIBZIP libzip REQUIRED)
|
|
pkg_config_library(LIBUSB libusb-1.0 QUIET)
|
|
pkg_config_library(GLIB2 glib-2.0 REQUIRED)
|
|
pkg_config_library(LIBGIT2 libgit2 REQUIRED)
|
|
pkg_config_library(LIBMDB libmdb REQUIRED)
|
|
pkg_config_library(LIBDC libdivecomputer REQUIRED)
|
|
pkg_config_library(LIBFTDI libftdi1 QUIET)
|
|
|
|
find_package(Qt5 REQUIRED COMPONENTS Core
|
|
Concurrent
|
|
Widgets
|
|
Network
|
|
Svg
|
|
Test
|
|
LinguistTools
|
|
Positioning
|
|
Quick
|
|
Bluetooth)
|
|
|
|
set(QT_LIBRARIES Qt5::Core
|
|
Qt5::Concurrent
|
|
Qt5::Widgets
|
|
Qt5::Network
|
|
Qt5::Svg
|
|
Qt5::Positioning
|
|
Qt5::Quick
|
|
Qt5::Bluetooth)
|
|
|
|
set(QT5_INCLUDE_PATH ${Qt5_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS} ${Qt5Core_INCLUDE_DIRS})
|
|
qt5_add_resources(SUBSURFACE_RESOURCES ${SSRF_PATH}subsurface.qrc)
|
|
|
|
include_directories(${SSRF_PATH} ${QT5_INCLUDE_PATH} ${LIBMDB_INCLUDEDIR} ${LIBDIVECOMPUTER_INCLUDEDIR})
|
|
|
|
# Check for libsubsurface_corelib.a
|
|
# A previous build of subsurface is needed (windows and linux)
|
|
message(STATUS "Checking for Subsurface core library")
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
|
find_library(SSRF_CORELIB
|
|
NAMES subsurface_corelib
|
|
PATHS ${CMAKE_BINARY_DIR}/../subsurface/core
|
|
)
|
|
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
|
find_library(SSRF_CORELIB
|
|
NAMES subsurface_corelib
|
|
PATHS ${SSRF_PATH}build/core
|
|
)
|
|
endif()
|
|
|
|
if(NOT SSRF_CORELIB)
|
|
message(FATAL_ERROR " libsubsurface_corelib.a not found. Did you build Subsurface previously?")
|
|
else()
|
|
message(STATUS " Found ${SSRF_CORELIB}")
|
|
endif()
|
|
|
|
# Set compiler flags and definitions
|
|
set(CMAKE_C_STANDARD 99)
|
|
set(CMAKE_C_STANDARD_REQUIRED TRUE)
|
|
set(CMAKE_CXX_STANDARD 11)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
|
set(SMTK_LINK_LIBRARIES ${SMTK_LINK_LIBRARIES} -lssh2 -lz -lpthread)
|
|
elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
|
set(SMTK_LINK_LIBRARIES ${SMTK_LINK_LIBRARIES} -lwsock32 -lws2_32 -lole32 -limm32 -lwinmm)
|
|
remove_definitions(-DUNICODE)
|
|
add_definitions(-mwindows -D_WIN32)
|
|
endif()
|
|
|
|
set(SMTK_LINK_LIBRARIES ${SMTK_LINK_LIBRARIES} ${LIBMDB_LIBRARIES} ${LIBDIVECOMPUTER_LIBRARIES})
|
|
|
|
set(SMTK_IMPORT_SRCS
|
|
smartrak.c
|
|
smrtk2ssrfc_window.ui
|
|
smrtk2ssrfc_window.h
|
|
smrtk2ssrfc_window.cpp
|
|
)
|
|
set(SMTK_LINK_LIBRARIES ${SMTK_LINK_LIBRARIES} ${SUBSURFACE_LINK_LIBRARIES} ${SSRF_CORELIB} ${QT_LIBRARIES})
|
|
source_group("SmartTrak Import libs" FILES ${SMTK_IMPORT_SRCS})
|
|
set(SMTK_IMPORT_TARGET smtk2ssrf)
|
|
add_library(smtk_import STATIC ${SMTK_IMPORT_SRCS})
|
|
add_executable(${SMTK_IMPORT_TARGET} smtk_standalone.cpp ${SUBSURFACE_RESOURCES})
|
|
|
|
# We just want CLI mode on Linux. Silently drop it if cross building to Windows.
|
|
if (COMMANDLINE AND CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
|
message(WARNING "Building Command Line mode.")
|
|
target_compile_definitions(${SMTK_IMPORT_TARGET} PRIVATE COMMANDLINE=1)
|
|
endif()
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
|
file(WRITE ${CMAKE_BINARY_DIR}/qt.conf "[Paths]
|
|
Prefix=.
|
|
")
|
|
endif()
|
|
|
|
target_link_libraries(${SMTK_IMPORT_TARGET} smtk_import ${SMTK_LINK_LIBRARIES})
|
|
|
|
# Install instructions
|
|
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
|
install(TARGETS ${SMTK_IMPORT_TARGET} DESTINATION bin)
|
|
elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
|
set(WINDOWSSTAGING ${CMAKE_BINARY_DIR}/staging)
|
|
install(FILES ${SSRF_PATH}gpl-2.0.txt ${SSRF_PATH}packaging/windows/subsurface.ico DESTINATION ${WINDOWSSTAGING})
|
|
install(TARGETS ${SMTK_IMPORT_TARGET} DESTINATION ${WINDOWSSTAGING})
|
|
install(FILES ${CMAKE_BINARY_DIR}/qt.conf DESTINATION ${WINDOWSSTAGING})
|
|
if(NOT DEFINED MAKENSIS)
|
|
set(MAKENSIS makensis)
|
|
endif()
|
|
|
|
# this ensures that smtk2ssrf.exe has been built before this is run
|
|
install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DSMTK_IMPORT_TARGET=${SMTK_IMPORT_TARGET} -DSMTK_IMPORT_SRCS=${SMTK_IMPORT_SRCS} -DSTAGING=${WINDOWSSTAGING} -P ${CMAKE_SOURCE_DIR}/cmake/Modules/dlllist.cmake)")
|
|
|
|
# create the smtk2ssrf-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 ${SMTK_IMPORT_TARGET}
|
|
)
|
|
|
|
add_custom_target(
|
|
installer
|
|
COMMAND ${MAKENSIS} ${WINDOWSSTAGING}/smtk-import.nsi
|
|
DEPENDS fake_install
|
|
)
|
|
endif()
|
|
|
|
# useful for debugging CMake issues
|
|
# printll_variables()
|