1
0
mirror of https://github.com/qTox/qTox.git synced 2024-03-22 14:00:36 +08:00
qTox/CMakeLists.txt
Anthony Bilinski 2b41a06b55
feat(Settings): Add system for versioning and upgrading Settings
Similar to how History handles SCHEMA_VERSION. Run separately on global and
personal settings, since some state in global, and personal settings can’t be
done globally since they require the passkey.

Restrict a user from downgrading past the saved settings version, due to
possible compatibility breaks or old qTox versions re-introducing corrupt state
that was already healed.

Pass in new profile state for personal settings rather than relying on settings
file presence because personal settings can be stored in either the personal
settings file or global settings file. This was introduced in
aea9eea8a4 when personal settings were first
moved to their own file.
2022-03-06 06:00:13 -08:00

685 lines
22 KiB
CMake

# Copyright © 2019 by The qTox Project Contributors
#
# This file is part of qTox, a Qt-based graphical interface for Tox.
# qTox is libre software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# qTox is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with qTox. If not, see <http://www.gnu.org/licenses/>
################################################################################
#
# :: CMake configuration
#
################################################################################
cmake_minimum_required(VERSION 3.7.2)
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
option(PLATFORM_EXTENSIONS "Enable platform specific extensions, requires extra dependencies" ON)
option(UPDATE_CHECK "Enable automatic update check" ON)
option(USE_CCACHE "Use ccache when available" ON)
option(SPELL_CHECK "Enable spell cheching support" ON)
option(SVGZ_ICON "Compress the SVG icon of qTox" ON)
option(ASAN "Compile with AddressSanitizer" OFF)
option(TSAN "Compile with ThreadSanitizer" OFF)
option(DESKTOP_NOTIFICATIONS "Use snorenotify for desktop notifications" OFF)
option(STRICT_OPTIONS "Enable strict compile options, used by CI" OFF)
# process generated files if cmake >= 3.10
if(POLICY CMP0071)
cmake_policy(SET CMP0071 NEW)
endif()
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Debug CACHE STRING "Options are: None, Debug, Release, RelWithDebInfo, MinSizeRel." FORCE)
endif()
if(ASAN)
set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address")
set (CMAKE_LINKER_FLAGS_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address")
endif()
if(TSAN)
set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=thread")
set (CMAKE_LINKER_FLAGS_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=thread")
endif()
set(ENV{PKG_CONFIG_PATH}
${CMAKE_SOURCE_DIR}/libs/lib/pkgconfig:/opt/ffmpeg/lib/pkgconfig:$ENV{PKG_CONFIG_PATH})
# necessary to find openal-soft on mac os
if(APPLE)
set(ENV{PKG_CONFIG_PATH}
/usr/local/opt/openal-soft/lib/pkgconfig:$ENV{PKG_CONFIG_PATH})
endif()
execute_process(
COMMAND brew --prefix qt@5
OUTPUT_VARIABLE QT_PREFIX_PATH
OUTPUT_STRIP_TRAILING_WHITESPACE)
project(qtox)
# Instruct CMake to run moc automatically when needed.
set(CMAKE_AUTOMOC ON)
# Run resource compilation automatically
set(CMAKE_AUTORCC ON)
# Enable maximum compression
set(AUTORCC_OPTIONS -compress 9 -threshold 0)
if(NOT Qt5Widgets_VERSION VERSION_LESS "5.9")
# Drop the file modification time of source files from generated files
# to help with reproducible builds. We do not use QFileInfo.lastModified
# so this has no unwanted side effects. This mtime started appearing in
# Qt 5.8. The option to force the old file format without mtime was
# added in Qt 5.9. See https://bugreports.qt.io/browse/QTBUG-58769
set(AUTORCC_OPTIONS ${AUTORCC_OPTIONS} -format-version 1)
endif()
# Use C++11.
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti")
# Hardening flags (ASLR, warnings, etc)
set(POSITION_INDEPENDENT_CODE True)
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG(-Wweak-vtables COMPILER_SUPPORTS_WARNING_WEAK_VTABLES)
if(COMPILER_SUPPORTS_WARNING_WEAK_VTABLES)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wweak-vtables")
endif()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wstrict-overflow")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wstrict-aliasing")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wold-style-cast")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsign-compare")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wunknown-pragmas")
# Extra-strict compile options that we don't want to subject all users to by default
if (STRICT_OPTIONS)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
endif()
# avoid timestamps in binary for reproducible builds, not added until GCC 4.9
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG(-Wdate-time COMPILER_SUPPORTS_WDATE_TIME)
if (COMPILER_SUPPORTS_WDATE_TIME)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wdate-time")
endif()
if (NOT WIN32 AND NOT HAIKU)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-all")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wstack-protector")
endif()
if (UNIX AND NOT APPLE)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,now")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,relro")
endif()
include(CheckAtomic)
# Use ccache when available to speed up builds.
if (USE_CCACHE)
find_program(CCACHE_FOUND ccache)
if(CCACHE_FOUND)
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
message(STATUS "using ccache")
else()
message(STATUS "ccache not found")
endif()
else()
message(STATUS "ccache disabled; set option USE_CCACHE=ON to use ccache if available")
endif()
# Search for headers in current directory.
include_directories(${CMAKE_BINARY_DIR})
include_directories(${CMAKE_SOURCE_DIR})
include(Dependencies)
################################################################################
#
# :: qTox main library sources
#
################################################################################
qt5_wrap_ui(${PROJECT_NAME}_FORMS
src/chatlog/content/filetransferwidget.ui
src/loginscreen.ui
src/mainwindow.ui
src/widget/about/aboutfriendform.ui
src/widget/form/loadhistorydialog.ui
src/widget/form/profileform.ui
src/widget/form/removefrienddialog.ui
src/widget/form/searchsettingsform.ui
src/widget/form/setpassworddialog.ui
src/widget/form/settings/aboutsettings.ui
src/widget/form/settings/advancedsettings.ui
src/widget/form/settings/avform.ui
src/widget/form/settings/generalsettings.ui
src/widget/form/settings/privacysettings.ui
src/widget/form/settings/userinterfacesettings.ui)
set(${PROJECT_NAME}_RESOURCES
res.qrc
)
if(NOT SMILEYS)
set(SMILEYS "")
endif()
set(SMILEY_RESOURCES "")
if(NOT "${SMILEYS}" STREQUAL "DISABLED")
set(SMILEY_RESOURCES smileys/emojione.qrc)
if(NOT "${SMILEYS}" STREQUAL "MIN")
set(SMILEY_RESOURCES
${SMILEY_RESOURCES}
smileys/smileys.qrc)
endif()
endif()
set(${PROJECT_NAME}_SOURCES
src/chatlog/chatlinecontent.cpp
src/chatlog/chatlinecontent.h
src/chatlog/chatlinecontentproxy.cpp
src/chatlog/chatlinecontentproxy.h
src/chatlog/chatline.cpp
src/chatlog/chatline.h
src/chatlog/chatlinestorage.cpp
src/chatlog/chatlinestorage.h
src/chatlog/chatwidget.cpp
src/chatlog/chatwidget.h
src/chatlog/chatmessage.cpp
src/chatlog/chatmessage.h
src/chatlog/content/filetransferwidget.cpp
src/chatlog/content/filetransferwidget.h
src/chatlog/content/image.cpp
src/chatlog/content/image.h
src/chatlog/content/notificationicon.cpp
src/chatlog/content/notificationicon.h
src/chatlog/content/spinner.cpp
src/chatlog/content/spinner.h
src/chatlog/content/text.cpp
src/chatlog/content/text.h
src/chatlog/content/timestamp.cpp
src/chatlog/content/timestamp.h
src/chatlog/content/broken.cpp
src/chatlog/content/broken.h
src/chatlog/customtextdocument.cpp
src/chatlog/customtextdocument.h
src/chatlog/documentcache.cpp
src/chatlog/documentcache.h
src/chatlog/pixmapcache.cpp
src/chatlog/pixmapcache.h
src/core/toxfileprogress.cpp
src/core/toxfileprogress.h
src/chatlog/textformatter.cpp
src/chatlog/textformatter.h
src/core/coreav.cpp
src/core/coreav.h
src/core/coreext.cpp
src/core/coreext.h
src/core/core.cpp
src/core/corefile.cpp
src/core/corefile.h
src/core/core.h
src/core/dhtserver.cpp
src/core/dhtserver.h
src/core/icoreextpacket.cpp
src/core/icoreextpacket.h
src/core/icoresettings.cpp
src/core/icoresettings.h
src/core/icorefriendmessagesender.cpp
src/core/icorefriendmessagesender.h
src/core/icoregroupmessagesender.cpp
src/core/icoregroupmessagesender.h
src/core/icoregroupquery.cpp
src/core/icoregroupquery.h
src/core/icoreidhandler.cpp
src/core/icoreidhandler.h
src/core/toxcall.cpp
src/core/toxcall.h
src/core/toxencrypt.cpp
src/core/toxencrypt.h
src/core/toxfile.cpp
src/core/toxfile.h
src/core/toxfilepause.h
src/core/toxid.cpp
src/core/toxid.h
src/core/groupid.cpp
src/core/groupid.h
src/core/toxlogger.cpp
src/core/toxlogger.h
src/core/toxoptions.cpp
src/core/toxoptions.h
src/core/toxpk.cpp
src/core/toxpk.h
src/core/contactid.cpp
src/core/contactid.h
src/core/toxstring.cpp
src/core/toxstring.h
src/friendlist.cpp
src/friendlist.h
src/grouplist.cpp
src/grouplist.h
src/ipc.cpp
src/ipc.h
src/model/about/aboutfriend.cpp
src/model/about/aboutfriend.h
src/model/about/iaboutfriend.cpp
src/model/about/iaboutfriend.h
src/model/chathistory.cpp
src/model/chathistory.h
src/model/chatlogitem.cpp
src/model/chatlogitem.h
src/model/chatroom/chatroom.cpp
src/model/chatroom/chatroom.h
src/model/chatroom/friendchatroom.cpp
src/model/chatroom/friendchatroom.h
src/model/chatroom/groupchatroom.cpp
src/model/chatroom/groupchatroom.h
src/model/contact.cpp
src/model/contact.h
src/model/dialogs/idialogs.cpp
src/model/dialogs/idialogs.h
src/model/dialogs/idialogsmanager.h
src/model/dialogs/idialogsmanager.cpp
src/model/exiftransform.cpp
src/model/exiftransform.h
src/model/friendlist/friendlistmanager.cpp
src/model/friendlist/friendlistmanager.h
src/model/friendlist/ifriendlistitem.cpp
src/model/friendlist/ifriendlistitem.h
src/model/friendmessagedispatcher.cpp
src/model/friendmessagedispatcher.h
src/model/friend.cpp
src/model/friend.h
src/model/groupinvite.cpp
src/model/groupinvite.h
src/model/groupmessagedispatcher.cpp
src/model/groupmessagedispatcher.h
src/model/group.cpp
src/model/group.h
src/model/ibootstraplistgenerator.cpp
src/model/ibootstraplistgenerator.h
src/model/ichatlog.h
src/model/imessagedispatcher.h
src/model/message.cpp
src/model/message.h
src/model/notificationgenerator.cpp
src/model/notificationgenerator.h
src/model/profile/iprofileinfo.cpp
src/model/profile/iprofileinfo.h
src/model/profile/profileinfo.cpp
src/model/profile/profileinfo.h
src/model/sessionchatlog.cpp
src/model/sessionchatlog.h
src/model/status.cpp
src/model/status.h
src/model/toxclientstandards.h
src/net/bootstrapnodeupdater.cpp
src/net/bootstrapnodeupdater.h
src/net/avatarbroadcaster.cpp
src/net/avatarbroadcaster.h
src/net/toxuri.cpp
src/net/toxuri.h
src/nexus.cpp
src/nexus.h
src/persistence/db/rawdatabase.cpp
src/persistence/db/rawdatabase.h
src/persistence/history.cpp
src/persistence/history.h
src/persistence/ifriendsettings.cpp
src/persistence/ifriendsettings.h
src/persistence/igroupsettings.cpp
src/persistence/igroupsettings.h
src/persistence/inotificationsettings.cpp
src/persistence/inotificationsettings.h
src/persistence/offlinemsgengine.cpp
src/persistence/offlinemsgengine.h
src/persistence/paths.cpp
src/persistence/paths.h
src/persistence/profile.cpp
src/persistence/profile.h
src/persistence/profilelocker.cpp
src/persistence/profilelocker.h
src/persistence/serialize.cpp
src/persistence/serialize.h
src/persistence/settings.cpp
src/persistence/settings.h
src/persistence/settingsserializer.cpp
src/persistence/settingsserializer.h
src/persistence/globalsettingsupgrader.cpp
src/persistence/globalsettingsupgrader.h
src/persistence/personalsettingsupgrader.cpp
src/persistence/personalsettingsupgrader.h
src/persistence/smileypack.cpp
src/persistence/smileypack.h
src/persistence/toxsave.cpp
src/persistence/toxsave.h
src/video/cameradevice.cpp
src/video/cameradevice.h
src/video/camerasource.cpp
src/video/camerasource.h
src/video/corevideosource.cpp
src/video/corevideosource.h
src/video/ivideosettings.cpp
src/video/ivideosettings.h
src/video/netcamview.cpp
src/video/netcamview.h
src/video/videoframe.cpp
src/video/videoframe.h
src/video/videomode.cpp
src/video/videomode.h
src/video/videosource.cpp
src/video/videosource.h
src/video/videosurface.cpp
src/video/videosurface.h
src/widget/about/aboutfriendform.cpp
src/widget/about/aboutfriendform.h
src/widget/categorywidget.cpp
src/widget/categorywidget.h
src/widget/chatformheader.cpp
src/widget/chatformheader.h
src/widget/circlewidget.cpp
src/widget/circlewidget.h
src/widget/contentdialog.cpp
src/widget/contentdialog.h
src/widget/contentdialogmanager.cpp
src/widget/contentdialogmanager.h
src/widget/contentlayout.cpp
src/widget/contentlayout.h
src/widget/emoticonswidget.cpp
src/widget/emoticonswidget.h
src/widget/extensionstatus.cpp
src/widget/extensionstatus.h
src/widget/flowlayout.cpp
src/widget/flowlayout.h
src/widget/imagepreviewwidget.h
src/widget/imagepreviewwidget.cpp
src/widget/searchform.cpp
src/widget/searchform.h
src/widget/searchtypes.h
src/widget/form/addfriendform.cpp
src/widget/form/addfriendform.h
src/widget/form/chatform.cpp
src/widget/form/chatform.h
src/widget/form/filesform.cpp
src/widget/form/filesform.h
src/widget/form/genericchatform.cpp
src/widget/form/genericchatform.h
src/widget/form/groupchatform.cpp
src/widget/form/groupchatform.h
src/widget/form/groupinviteform.cpp
src/widget/form/groupinviteform.h
src/widget/form/groupinvitewidget.cpp
src/widget/form/groupinvitewidget.h
src/widget/form/loadhistorydialog.cpp
src/widget/form/loadhistorydialog.h
src/widget/form/profileform.cpp
src/widget/form/profileform.h
src/widget/form/searchsettingsform.cpp
src/widget/form/searchsettingsform.h
src/widget/form/setpassworddialog.cpp
src/widget/form/setpassworddialog.h
src/widget/form/settings/aboutform.cpp
src/widget/form/settings/aboutform.h
src/widget/form/settings/advancedform.cpp
src/widget/form/settings/advancedform.h
src/widget/form/settings/avform.cpp
src/widget/form/settings/avform.h
src/widget/form/settings/generalform.cpp
src/widget/form/settings/generalform.h
src/widget/form/settings/genericsettings.cpp
src/widget/form/settings/genericsettings.h
src/widget/form/settings/privacyform.cpp
src/widget/form/settings/privacyform.h
src/widget/form/settings/userinterfaceform.h
src/widget/form/settings/userinterfaceform.cpp
src/widget/form/settings/verticalonlyscroller.cpp
src/widget/form/settings/verticalonlyscroller.h
src/widget/form/settingswidget.cpp
src/widget/form/settingswidget.h
src/widget/form/tabcompleter.cpp
src/widget/form/tabcompleter.h
src/widget/friendlistlayout.cpp
src/widget/friendlistlayout.h
src/widget/friendlistwidget.cpp
src/widget/friendlistwidget.h
src/widget/friendwidget.cpp
src/widget/friendwidget.h
src/widget/genericchatitemlayout.cpp
src/widget/genericchatitemlayout.h
src/widget/genericchatitemwidget.cpp
src/widget/genericchatitemwidget.h
src/widget/genericchatroomwidget.cpp
src/widget/genericchatroomwidget.h
src/widget/groupwidget.cpp
src/widget/groupwidget.h
src/widget/gui.cpp
src/widget/gui.h
src/widget/loginscreen.cpp
src/widget/loginscreen.h
src/widget/maskablepixmapwidget.cpp
src/widget/maskablepixmapwidget.h
src/widget/notificationedgewidget.cpp
src/widget/notificationedgewidget.h
src/widget/notificationscrollarea.cpp
src/widget/notificationscrollarea.h
src/widget/passwordedit.cpp
src/widget/passwordedit.h
src/widget/qrwidget.cpp
src/widget/qrwidget.h
src/widget/splitterrestorer.cpp
src/widget/splitterrestorer.h
src/widget/style.cpp
src/widget/style.h
src/widget/tool/activatedialog.cpp
src/widget/tool/activatedialog.h
src/widget/tool/adjustingscrollarea.cpp
src/widget/tool/adjustingscrollarea.h
src/widget/tool/callconfirmwidget.cpp
src/widget/tool/callconfirmwidget.h
src/widget/tool/chattextedit.cpp
src/widget/tool/chattextedit.h
src/widget/tool/croppinglabel.cpp
src/widget/tool/croppinglabel.h
src/widget/tool/flyoutoverlaywidget.cpp
src/widget/tool/flyoutoverlaywidget.h
src/widget/tool/identicon.cpp
src/widget/tool/identicon.h
src/widget/tool/movablewidget.cpp
src/widget/tool/movablewidget.h
src/widget/tool/profileimporter.cpp
src/widget/tool/profileimporter.h
src/widget/tool/recursivesignalblocker.cpp
src/widget/tool/recursivesignalblocker.h
src/widget/tool/removefrienddialog.cpp
src/widget/tool/removefrienddialog.h
src/widget/tool/screengrabberchooserrectitem.cpp
src/widget/tool/screengrabberchooserrectitem.h
src/widget/tool/screengrabberoverlayitem.cpp
src/widget/tool/screengrabberoverlayitem.h
src/widget/tool/screenshotgrabber.cpp
src/widget/tool/screenshotgrabber.h
src/widget/tool/toolboxgraphicsitem.cpp
src/widget/tool/toolboxgraphicsitem.h
src/widget/translator.cpp
src/widget/translator.h
src/widget/widget.cpp
src/widget/widget.h
)
if (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
set(${PROJECT_NAME}_SOURCES ${${PROJECT_NAME}_SOURCES}
src/platform/camera/directshow.cpp
src/platform/camera/directshow.h
)
set(${PROJECT_NAME}_RESOURCES ${${PROJECT_NAME}_RESOURCES}
windows/qtox.rc
)
elseif (${CMAKE_SYSTEM_NAME} MATCHES "Linux" OR ${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
set(${PROJECT_NAME}_SOURCES ${${PROJECT_NAME}_SOURCES}
src/platform/camera/v4l2.cpp
src/platform/camera/v4l2.h
)
endif()
if (UNIX)
set(${PROJECT_NAME}_SOURCES ${${PROJECT_NAME}_SOURCES}
src/platform/posixsignalnotifier.cpp
src/platform/posixsignalnotifier.h
)
endif()
if (PLATFORM_EXTENSIONS)
set(${PROJECT_NAME}_SOURCES ${${PROJECT_NAME}_SOURCES}
src/platform/autorun.h
src/platform/capslock.h
src/platform/timer.h
)
if (WIN32)
set(${PROJECT_NAME}_SOURCES ${${PROJECT_NAME}_SOURCES}
src/platform/autorun_win.cpp
src/platform/capslock_win.cpp
src/platform/timer_win.cpp
)
elseif (${X11_EXT})
set(${PROJECT_NAME}_SOURCES ${${PROJECT_NAME}_SOURCES}
src/platform/autorun_xdg.cpp
src/platform/capslock_x11.cpp
src/platform/timer_x11.cpp
src/platform/x11_display.cpp
)
elseif (${APPLE_EXT})
set(${PROJECT_NAME}_SOURCES ${${PROJECT_NAME}_SOURCES}
src/platform/autorun_osx.cpp
src/platform/capslock_osx.cpp
src/platform/timer_osx.cpp
)
endif()
endif()
add_definitions(-DQT_MESSAGELOGCONTEXT=1)
if(AVFOUNDATION_FOUND)
# used for AVFoundation compile time deprecation check
execute_process(
COMMAND sw_vers -productVersion
OUTPUT_VARIABLE MACOS_VER
)
string(REPLACE "." ";" VERSION_LIST ${MACOS_VER})
list(GET VERSION_LIST 0 MACOS_VERSION_MAJOR)
list(GET VERSION_LIST 1 MACOS_VERSION_MINOR)
add_definitions(-DMACOS_VERSION_MAJOR=${MACOS_VERSION_MAJOR})
add_definitions(-DMACOS_VERSION_MINOR=${MACOS_VERSION_MINOR})
set(${PROJECT_NAME}_SOURCES ${${PROJECT_NAME}_SOURCES}
src/platform/camera/avfoundation.mm
src/platform/camera/avfoundation.h)
endif()
if(${UPDATE_CHECK})
add_definitions(-DUPDATE_CHECK_ENABLED=1)
set(${PROJECT_NAME}_SOURCES ${${PROJECT_NAME}_SOURCES}
src/net/updatecheck.cpp
src/net/updatecheck.h)
message(STATUS "using update check")
else()
message(STATUS "NOT using update check")
endif()
if (${DESKTOP_NOTIFICATIONS})
add_definitions(-DDESKTOP_NOTIFICATIONS=1)
set(${PROJECT_NAME}_SOURCES ${${PROJECT_NAME}_SOURCES}
src/platform/desktop_notifications/desktopnotify.cpp
src/platform/desktop_notifications/desktopnotify.h)
message(STATUS "using desktop notifications")
else()
add_definitions(-DDESKTOP_NOTIFICATIONS=0)
message(STATUS "not using desktop notifications")
endif()
if (MINGW)
STRING(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
if (CMAKE_BUILD_TYPE_LOWER MATCHES debug)
# Allows wine to display source code file names and line numbers on crash in its backtrace
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -gdwarf-2")
endif()
endif()
# the compiler flags for compiling C sources
MESSAGE( STATUS "CMAKE_C_FLAGS: " ${CMAKE_C_FLAGS} )
# the compiler flags for compiling C++ sources
MESSAGE( STATUS "CMAKE_CXX_FLAGS: " ${CMAKE_CXX_FLAGS} )
# Interface library to propagate code coverage flags if enabled
add_library(coverage_config INTERFACE)
option(CODE_COVERAGE "Enable coverage reporting" OFF)
if (CODE_COVERAGE AND CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
target_compile_options(coverage_config INTERFACE -O0 -g --coverage)
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.13)
target_link_options(coverage_config INTERFACE --coverage)
else()
target_link_libraries(coverage_config INTERFACE --coverage)
endif()
endif()
link_libraries(coverage_config)
add_subdirectory(util)
add_subdirectory(audio)
add_subdirectory(translations)
add_library(${PROJECT_NAME}_static
STATIC
${${PROJECT_NAME}_FORMS}
${${PROJECT_NAME}_SOURCES})
target_link_libraries(${PROJECT_NAME}_static
${CMAKE_REQUIRED_LIBRARIES}
${ALL_LIBRARIES}
coverage_config)
target_link_libraries(${PROJECT_NAME}_static util_library)
target_link_libraries(${PROJECT_NAME}_static audio_library)
target_link_libraries(${PROJECT_NAME}_static translations_library)
add_executable(${PROJECT_NAME}
WIN32
MACOSX_BUNDLE
${${PROJECT_NAME}_RESOURCES}
${SMILEY_RESOURCES}
src/main.cpp)
target_link_libraries(${PROJECT_NAME}
${PROJECT_NAME}_static
${CMAKE_REQUIRED_LIBRARIES}
${ALL_LIBRARIES})
include(Testing)
include(Installation)
if (DEFINED ENV{IN_NIX_SHELL})
# the qtox binary must be "wrapped" to find the Qt platform plugin
# and other dependencies at runtime
add_custom_command(
TARGET ${PROJECT_NAME}
POST_BUILD
COMMAND nix-shell --run "wrapQtApp ${PROJECT_NAME}")
endif()