Files
neochat/CMakeLists.txt
2019-08-03 21:44:05 +08:00

246 lines
8.0 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 14)
# 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)
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(QMatrixClient 0.5.1 REQUIRED)
if (NOT QMatrixClient_FOUND)
message( WARNING "libQMatrixClient 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 libQMatrixClient")
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 libQMatrixClient ${QMatrixClient_VERSION} at ${QMatrixClient_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/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/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
QMatrixClient
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)