250 lines
8.1 KiB
CMake
250 lines
8.1 KiB
CMake
CMAKE_MINIMUM_REQUIRED(VERSION 3.1)
|
|
|
|
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
|
|
|
|
set(IDENTIFIER "org.eu.encom.spectral")
|
|
set(COPYRIGHT "Copyright © 2018-2019 bhat@encom.eu.org")
|
|
|
|
project(spectral VERSION 0.0.0 LANGUAGES CXX)
|
|
|
|
if(UNIX AND NOT APPLE)
|
|
set(LINUX 1)
|
|
endif(UNIX AND NOT APPLE)
|
|
|
|
include(CheckCXXCompilerFlag)
|
|
if (NOT WIN32)
|
|
include(GNUInstallDirs)
|
|
include(cmake/ECMInstallIcons.cmake)
|
|
endif(NOT WIN32)
|
|
|
|
# Find includes in corresponding build directories
|
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
|
# Instruct CMake to run moc automatically when needed.
|
|
set(CMAKE_AUTOMOC ON)
|
|
|
|
# Set a default build type if none was specified
|
|
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
|
message(STATUS "Setting build type to 'Debug' as none was specified")
|
|
set(CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build" FORCE)
|
|
# Set the possible values of build type for cmake-gui
|
|
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release"
|
|
"MinSizeRel" "RelWithDebInfo")
|
|
endif()
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
|
|
# Setup command line parameters for the compiler and linker
|
|
foreach (FLAG "" all pedantic extra no-unused-parameter)
|
|
CHECK_CXX_COMPILER_FLAG("-W${FLAG}" WARN_${FLAG}_SUPPORTED)
|
|
if ( WARN_${FLAG}_SUPPORTED AND NOT CMAKE_CXX_FLAGS MATCHES "(^| )-W?${FLAG}($| )")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -W${FLAG}")
|
|
endif ()
|
|
endforeach ()
|
|
|
|
# Find the libraries
|
|
find_package(Qt5 5.12 REQUIRED Widgets Network Quick Qml Gui Svg Multimedia QuickControls2)
|
|
if(LINUX)
|
|
find_package(Qt5DBus REQUIRED)
|
|
endif(LINUX)
|
|
if (APPLE)
|
|
find_package(Qt5MacExtras REQUIRED)
|
|
endif(APPLE)
|
|
# Qt5_Prefix is only used to show Qt path in message()
|
|
# Qt5_BinDir is where all the binary tools for Qt are
|
|
if (QT_QMAKE_EXECUTABLE)
|
|
get_filename_component(Qt5_BinDir "${QT_QMAKE_EXECUTABLE}" DIRECTORY)
|
|
get_filename_component(Qt5_Prefix "${Qt5_BinDir}/.." ABSOLUTE)
|
|
else()
|
|
get_filename_component(Qt5_BinDir "${Qt5_DIR}/../../../bin" ABSOLUTE)
|
|
get_filename_component(Qt5_Prefix "${Qt5_DIR}/../../../.." ABSOLUTE)
|
|
endif()
|
|
|
|
# prevent error "You must build your code with position independent code if Qt was built with..
|
|
if (Qt5_POSITION_INDEPENDENT_CODE)
|
|
SET(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
endif()
|
|
|
|
set(QML_IMPORT_PATH ${CMAKE_SOURCE_DIR}/qml ${CMAKE_SOURCE_DIR}/imports CACHE string "" FORCE)
|
|
|
|
if(WIN32)
|
|
enable_language(RC)
|
|
include(CMakeDetermineRCCompiler)
|
|
endif()
|
|
|
|
if ((NOT DEFINED USE_INTREE_LIBQMC OR USE_INTREE_LIBQMC)
|
|
AND EXISTS ${PROJECT_SOURCE_DIR}/include/libQuotient/lib/util.h)
|
|
add_subdirectory(include/libQuotient EXCLUDE_FROM_ALL)
|
|
include_directories(include/libQuotient)
|
|
if (NOT DEFINED USE_INTREE_LIBQMC)
|
|
set (USE_INTREE_LIBQMC 1)
|
|
endif ()
|
|
endif ()
|
|
if (NOT USE_INTREE_LIBQMC)
|
|
find_package(Quotient 0.6 REQUIRED)
|
|
if (NOT Quotient_FOUND)
|
|
message( WARNING "libQuotient not found; configuration will most likely fail.")
|
|
endif ()
|
|
endif ()
|
|
|
|
find_package(Qt5Keychain REQUIRED)
|
|
|
|
find_package(cmark REQUIRED)
|
|
|
|
add_subdirectory(include/SortFilterProxyModel EXCLUDE_FROM_ALL)
|
|
|
|
message( STATUS )
|
|
message( STATUS "=============================================================================" )
|
|
message( STATUS " Spectral Build Information" )
|
|
message( STATUS "=============================================================================" )
|
|
if (CMAKE_BUILD_TYPE)
|
|
message( STATUS "Build type: ${CMAKE_BUILD_TYPE}")
|
|
endif(CMAKE_BUILD_TYPE)
|
|
message( STATUS "Spectral install prefix: ${CMAKE_INSTALL_PREFIX}" )
|
|
# Get Git info if possible
|
|
find_package(Git)
|
|
if(GIT_FOUND)
|
|
execute_process(COMMAND
|
|
"${GIT_EXECUTABLE}" rev-parse -q HEAD
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
OUTPUT_VARIABLE GIT_SHA1
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
message( STATUS "Git SHA1: ${GIT_SHA1}")
|
|
endif()
|
|
message( STATUS "Using compiler: ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}" )
|
|
message( STATUS "Using Qt ${Qt5_VERSION} at ${Qt5_Prefix}" )
|
|
if (USE_INTREE_LIBQMC)
|
|
message( STATUS "Using in-tree libQuotient")
|
|
if (GIT_FOUND)
|
|
execute_process(COMMAND
|
|
"${GIT_EXECUTABLE}" rev-parse -q HEAD
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/libQuotient
|
|
OUTPUT_VARIABLE LIB_GIT_SHA1
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
message( STATUS " Library git SHA1: ${LIB_GIT_SHA1}")
|
|
endif (GIT_FOUND)
|
|
else ()
|
|
message( STATUS "Using libQuotient ${Quotient_VERSION} at ${Quotient_DIR}")
|
|
endif ()
|
|
|
|
message( STATUS "=============================================================================" )
|
|
message( STATUS )
|
|
|
|
# Set up source files
|
|
set(spectral_SRCS
|
|
src/notifications/manager.h
|
|
src/accountlistmodel.h
|
|
src/controller.h
|
|
src/emojimodel.h
|
|
src/imageclipboard.h
|
|
src/matriximageprovider.h
|
|
src/messageeventmodel.h
|
|
src/roomlistmodel.h
|
|
src/spectralroom.h
|
|
src/spectraluser.h
|
|
src/trayicon.h
|
|
src/userlistmodel.h
|
|
src/publicroomlistmodel.h
|
|
src/userdirectorylistmodel.h
|
|
src/utils.h
|
|
src/accountlistmodel.cpp
|
|
src/controller.cpp
|
|
src/emojimodel.cpp
|
|
src/imageclipboard.cpp
|
|
src/matriximageprovider.cpp
|
|
src/messageeventmodel.cpp
|
|
src/roomlistmodel.cpp
|
|
src/spectralroom.cpp
|
|
src/spectraluser.cpp
|
|
src/trayicon.cpp
|
|
src/userlistmodel.cpp
|
|
src/publicroomlistmodel.cpp
|
|
src/userdirectorylistmodel.cpp
|
|
src/utils.cpp
|
|
src/main.cpp
|
|
)
|
|
|
|
if (APPLE)
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -framework Foundation -framework Cocoa")
|
|
set(spectral_SRCS ${spectral_SRCS} src/notifications/managermac.mm)
|
|
elseif (WIN32)
|
|
set(spectral_SRCS ${spectral_SRCS} src/notifications/managerwin.cpp src/notifications/wintoastlib.cpp)
|
|
else ()
|
|
set(spectral_SRCS ${spectral_SRCS} src/notifications/managerlinux.cpp)
|
|
endif ()
|
|
|
|
set(spectral_QRC
|
|
res.qrc
|
|
)
|
|
|
|
QT5_ADD_RESOURCES(spectral_QRC_SRC ${spectral_QRC})
|
|
set_property(SOURCE qrc_resources.cpp PROPERTY SKIP_AUTOMOC ON)
|
|
|
|
if(WIN32)
|
|
set(spectral_WINRC spectral_win32.rc)
|
|
set_property(SOURCE spectral_win32.rc APPEND PROPERTY
|
|
OBJECT_DEPENDS ${PROJECT_SOURCE_DIR}/icons/icon.ico
|
|
)
|
|
endif()
|
|
|
|
if(APPLE)
|
|
set(MACOSX_BUNDLE_GUI_IDENTIFIER ${IDENTIFIER})
|
|
set(MACOSX_BUNDLE_BUNDLE_NAME ${PROJECT_NAME})
|
|
|
|
set(MACOSX_BUNDLE_COPYRIGHT ${COPYRIGHT})
|
|
|
|
set(MACOSX_BUNDLE_SHORT_VERSION_STRING ${spectral_VERSION})
|
|
set(MACOSX_BUNDLE_BUNDLE_VERSION ${spectral_VERSION})
|
|
|
|
set(ICON_NAME "icon.icns")
|
|
set(${PROJECT_NAME}_MAC_ICON "${PROJECT_SOURCE_DIR}/icons/${ICON_NAME}")
|
|
set(MACOSX_BUNDLE_ICON_FILE ${ICON_NAME})
|
|
set_property(SOURCE "${${PROJECT_NAME}_MAC_ICON}" PROPERTY
|
|
MACOSX_PACKAGE_LOCATION Resources)
|
|
endif(APPLE)
|
|
|
|
# Windows, this is a GUI executable; OSX, make a bundle
|
|
add_executable(${PROJECT_NAME} WIN32 MACOSX_BUNDLE
|
|
${spectral_SRCS} ${spectral_QRC_SRC} $<TARGET_OBJECTS:SortFilterProxyModel>
|
|
${spectral_WINRC} ${${PROJECT_NAME}_MAC_ICON})
|
|
|
|
target_link_libraries(${PROJECT_NAME}
|
|
Qt5::Widgets Qt5::Quick Qt5::Qml Qt5::Gui Qt5::Network Qt5::Svg Qt5::QuickControls2
|
|
Quotient
|
|
cmark::cmark
|
|
${QTKEYCHAIN_LIBRARIES}
|
|
)
|
|
target_compile_definitions(${PROJECT_NAME} PRIVATE
|
|
GIT_SHA1="${GIT_SHA1}" LIB_GIT_SHA1="${LIB_GIT_SHA1}")
|
|
|
|
if (APPLE)
|
|
target_link_libraries(${PROJECT_NAME} Qt5::MacExtras)
|
|
elseif(LINUX)
|
|
target_link_libraries(${PROJECT_NAME} Qt5::DBus)
|
|
endif()
|
|
|
|
# macOS specific config for bundling
|
|
set_property(TARGET ${PROJECT_NAME} PROPERTY
|
|
MACOSX_BUNDLE_INFO_PLIST "${PROJECT_SOURCE_DIR}/macOS/Info.plist.in")
|
|
|
|
# Installation
|
|
|
|
if (NOT CMAKE_INSTALL_BINDIR)
|
|
set(CMAKE_INSTALL_BINDIR ".")
|
|
endif()
|
|
|
|
install(TARGETS ${PROJECT_NAME}
|
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
|
BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
if(LINUX)
|
|
install(FILES linux/${IDENTIFIER}.desktop
|
|
DESTINATION ${CMAKE_INSTALL_DATADIR}/applications
|
|
)
|
|
install(FILES linux/${IDENTIFIER}.appdata.xml
|
|
DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo
|
|
)
|
|
file(GLOB spectral_icons icons/hicolor/*-apps-spectral.png)
|
|
ecm_install_icons(ICONS ${spectral_icons}
|
|
DESTINATION ${CMAKE_INSTALL_DATADIR}/icons
|
|
)
|
|
endif(LINUX)
|