# 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 ################################################################################ # # :: CMake configuration # ################################################################################ cmake_minimum_required(VERSION 2.8.11) set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) option(PLATFORM_EXTENSIONS "Enable platform specific extensions, requires extra dependencies" ON) option(USE_FILTERAUDIO "Enable the echo canceling backend" ON) option(UPDATE_CHECK "Enable automatic update check" ON) option(APPIMAGE_UPDATER_BRIDGE "Use AppImageUpdaterBridge to do the update" OFF) 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(DESKTOP_NOTIFICATIONS "Use snorenotify for desktop notifications" 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() 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() if(${APPIMAGE_UPDATER_BRIDGE}) set(ENV{PKG_CONFIG_PATH} /usr/local/lib/pkgconfig:$ENV{PKG_CONFIG_PATH}) endif() execute_process( COMMAND brew --prefix qt5 OUTPUT_VARIABLE QT_PREFIX_PATH OUTPUT_STRIP_TRAILING_WHITESPACE) execute_process( COMMAND xcode-select -p OUTPUT_VARIABLE CMAKE_OSX_SYSROOT OUTPUT_STRIP_TRAILING_WHITESPACE) set(CMAKE_OSX_DEPLOYMENT_TARGET 10.12) set(CMAKE_OSX_SYSROOT ${CMAKE_OSX_SYSROOT}/Platforms/MacOSX.platform/Developer/SDKs/MacOSX${CMAKE_OSX_DEPLOYMENT_TARGET}.sdk) project(qtox) # Instruct CMake to run moc automatically when needed. set(CMAKE_AUTOMOC ON) set(RCC_OPTIONS -compress 9 -threshold 0) # 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) 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} -Werror") # 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) 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) 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(RCC_OPTIONS ${RCC_OPTIONS} -format-version 1) endif() ################################################################################ # # :: 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) qt5_add_translation(${PROJECT_NAME}_QM_FILES translations/ar.ts translations/be.ts translations/bg.ts translations/cs.ts translations/da.ts translations/de.ts translations/el.ts translations/eo.ts translations/es.ts translations/et.ts translations/fa.ts translations/fi.ts translations/fr.ts translations/he.ts translations/hr.ts translations/hu.ts translations/it.ts translations/ja.ts translations/jbo.ts translations/ko.ts translations/lt.ts translations/mk.ts translations/nl.ts translations/no_nb.ts translations/pl.ts translations/pr.ts translations/pt.ts translations/pt_BR.ts translations/ro.ts translations/ru.ts translations/sk.ts translations/sl.ts translations/sr.ts translations/sr_Latn.ts translations/sv.ts translations/sw.ts translations/ta.ts translations/tr.ts translations/ug.ts translations/uk.ts translations/zh_CN.ts translations/zh_TW.ts ) qt5_add_resources( ${PROJECT_NAME}_RESOURCES res.qrc ${CMAKE_CURRENT_BINARY_DIR}/translations.qrc DEPENDS ${${PROJECT_NAME}_QM_FILES} OPTIONS ${RCC_OPTIONS} ) if(NOT SMILEYS) set(SMILEYS "") endif() if(NOT "${SMILEYS}" STREQUAL "DISABLED") qt5_add_resources( ${PROJECT_NAME}_RESOURCES smileys/emojione.qrc OPTIONS ${RCC_OPTIONS}) if(NOT "${SMILEYS}" STREQUAL "MIN") qt5_add_resources( ${PROJECT_NAME}_RESOURCES smileys/smileys.qrc OPTIONS ${RCC_OPTIONS}) endif() endif() file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/translations.qrc.in" " ") foreach(qm ${${PROJECT_NAME}_QM_FILES}) get_filename_component(qm_name ${qm} NAME) file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/translations.qrc.in" " ${qm}\n") endforeach(qm) file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/translations.qrc.in" " ") execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_BINARY_DIR}/translations.qrc.in ${CMAKE_CURRENT_BINARY_DIR}/translations.qrc) set(${PROJECT_NAME}_SOURCES src/audio/audio.cpp src/audio/audio.h src/audio/backend/alsink.cpp src/audio/backend/alsink.h src/audio/backend/alsource.cpp src/audio/backend/alsource.h src/audio/backend/openal.cpp src/audio/backend/openal.h src/audio/iaudiosettings.h src/audio/iaudiocontrol.h src/audio/iaudiosink.h src/audio/iaudiosource.h 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/chatlog.cpp src/chatlog/chatlog.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/customtextdocument.cpp src/chatlog/customtextdocument.h src/chatlog/documentcache.cpp src/chatlog/documentcache.h src/chatlog/pixmapcache.cpp src/chatlog/pixmapcache.h src/chatlog/toxfileprogress.cpp src/chatlog/toxfileprogress.h src/chatlog/textformatter.cpp src/chatlog/textformatter.h src/core/coreav.cpp src/core/coreav.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/icoresettings.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.h 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/chatlogitem.cpp src/model/chatlogitem.h src/model/friend.cpp src/model/friend.h src/model/message.h src/model/message.cpp src/model/imessagedispatcher.h src/model/friendmessagedispatcher.h src/model/friendmessagedispatcher.cpp src/model/groupmessagedispatcher.h src/model/groupmessagedispatcher.cpp src/model/message.h src/model/message.cpp src/model/groupinvite.cpp src/model/groupinvite.h src/model/group.cpp src/model/group.h src/model/status.cpp src/model/status.h src/model/interface.h src/model/profile/iprofileinfo.h src/model/profile/profileinfo.cpp src/model/profile/profileinfo.h src/model/dialogs/idialogs.h src/model/ichatlog.h src/model/sessionchatlog.h src/model/sessionchatlog.cpp src/model/chathistory.h src/model/chathistory.cpp src/net/bootstrapnodeupdater.cpp src/net/bootstrapnodeupdater.h src/net/avatarbroadcaster.cpp src/net/avatarbroadcaster.h src/net/toxme.cpp src/net/toxme.h src/net/toxmedata.cpp src/net/toxmedata.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.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/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/genericnetcamview.cpp src/video/genericnetcamview.h src/video/groupnetcamview.cpp src/video/groupnetcamview.h 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/flowlayout.cpp src/widget/flowlayout.h 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/systemtrayicon.cpp src/widget/systemtrayicon.h src/widget/systemtrayicon_private.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/friendrequestdialog.cpp src/widget/tool/friendrequestdialog.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 ) elseif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") set(${PROJECT_NAME}_SOURCES ${${PROJECT_NAME}_SOURCES} src/platform/install_osx.cpp src/platform/install_osx.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 (NOT DEFINED ENABLE_STATUSNOTIFIER AND UNIX AND NOT APPLE) set(ENABLE_STATUSNOTIFIER True) endif() if(${ENABLE_STATUSNOTIFIER}) search_dependency(GDK_PIXBUF PACKAGE gdk-pixbuf-2.0 OPTIONAL) search_dependency(GLIB PACKAGE glib-2.0 OPTIONAL) search_dependency(GTK PACKAGE gtk+-2.0 OPTIONAL) if(GDK_PIXBUF_FOUND AND GLIB_FOUND AND GTK_FOUND) set(${PROJECT_NAME}_SOURCES ${${PROJECT_NAME}_SOURCES} src/platform/statusnotifier/closures.c src/platform/statusnotifier/closures.h src/platform/statusnotifier/enums.c src/platform/statusnotifier/enums.h src/platform/statusnotifier/interfaces.h src/platform/statusnotifier/statusnotifier.c src/platform/statusnotifier/statusnotifier.h) add_definitions(-DENABLE_SYSTRAY_STATUSNOTIFIER_BACKEND=1) endif() endif() if(AVFOUNDATION_FOUND) set(${PROJECT_NAME}_SOURCES ${${PROJECT_NAME}_SOURCES} src/platform/camera/avfoundation.mm src/platform/camera/avfoundation.h) endif() if (NOT DEFINED ENABLE_APPINDICATOR AND UNIX AND NOT APPLE) set(ENABLE_APPINDICATOR False) endif() if(${ENABLE_APPINDICATOR}) search_dependency(APPINDICATOR PACKAGE appindicator-0.1) search_dependency(GDK_PIXBUF PACKAGE gdk-pixbuf-2.0) search_dependency(GLIB PACKAGE glib-2.0) search_dependency(GTK PACKAGE gtk+-2.0) if(APPINDICATOR_FOUND) add_definitions(-DENABLE_SYSTRAY_UNITY_BACKEND=1) endif() endif() if (NOT DEFINED ENABLE_GTK_SYSTRAY AND UNIX AND NOT APPLE) set(ENABLE_GTK_SYSTRAY True) endif() if(${ENABLE_GTK_SYSTRAY}) if(NOT GTK_FOUND) search_dependency(GTK PACKAGE gtk+-2.0 OPTIONAL) endif() if(GTK_FOUND) add_definitions(-DENABLE_SYSTRAY_GTK_BACKEND=1) endif() endif() if(${USE_FILTERAUDIO}) search_dependency(FILTERAUDIO LIBRARY filteraudio HEADER filter_audio.h OPTIONAL) if(${FILTERAUDIO_FOUND}) set(${PROJECT_NAME}_SOURCES ${${PROJECT_NAME}_SOURCES} src/audio/backend/openal2.cpp src/audio/backend/openal2.h) add_definitions(-DUSE_FILTERAUDIO=1) message(STATUS "using filteraudio") else() message(STATUS "not using filteraudio, libfilteraudio not found") endif() endif() if(${UPDATE_CHECK}) add_definitions(-DUPDATE_CHECK_ENABLED=1) if(${APPIMAGE_UPDATER_BRIDGE}) search_dependency(AIUB PACKAGE AppImageUpdaterBridge) if(AIUB_FOUND) message(STATUS "using AppImageUpdaterBridge") add_definitions(-DAPPIMAGE_UPDATER_BRIDGE_ENABLED=1) else() message(STATUS "cannot find AppImageUpdaterBridge , ignoring cmake flag") endif() else() message(STATUS "not using AppImageUpdaterBridge") endif() 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} ) add_library(${PROJECT_NAME}_static STATIC ${${PROJECT_NAME}_FORMS} ${${PROJECT_NAME}_SOURCES} ${${PROJECT_NAME}_QM_FILES} ${${PROJECT_NAME}_RESOURCES}) target_link_libraries(${PROJECT_NAME}_static ${CMAKE_REQUIRED_LIBRARIES} ${ALL_LIBRARIES}) add_executable(${PROJECT_NAME} WIN32 MACOSX_BUNDLE ${${PROJECT_NAME}_RESOURCES} src/main.cpp) target_link_libraries(${PROJECT_NAME} ${PROJECT_NAME}_static ${CMAKE_REQUIRED_LIBRARIES} ${ALL_LIBRARIES}) include(Testing) include(Installation)