set(SOURCES core/articlelistnotificationmodel.cpp core/articlelistnotificationmodel.h core/feeddownloader.cpp core/feeddownloader.h core/feedsmodel.cpp core/feedsmodel.h core/feedsproxymodel.cpp core/feedsproxymodel.h core/filterutils.cpp core/filterutils.h core/message.cpp core/message.h core/messagefilter.cpp core/messagefilter.h core/messageobject.cpp core/messageobject.h core/messagesforfiltersmodel.cpp core/messagesforfiltersmodel.h core/messagesmodel.cpp core/messagesmodel.h core/messagesmodelcache.cpp core/messagesmodelcache.h core/messagesmodelsqllayer.cpp core/messagesmodelsqllayer.h core/messagesproxymodel.cpp core/messagesproxymodel.h database/databasecleaner.cpp database/databasecleaner.h database/databasedriver.cpp database/databasedriver.h database/databasefactory.cpp database/databasefactory.h database/databasequeries.cpp database/databasequeries.h database/mariadbdriver.cpp database/mariadbdriver.h database/sqlitedriver.cpp database/sqlitedriver.h definitions/definitions.h definitions/globals.cpp definitions/globals.h definitions/typedefs.h dynamic-shortcuts/dynamicshortcuts.cpp dynamic-shortcuts/dynamicshortcuts.h dynamic-shortcuts/dynamicshortcutswidget.cpp dynamic-shortcuts/dynamicshortcutswidget.h dynamic-shortcuts/shortcutcatcher.cpp dynamic-shortcuts/shortcutcatcher.h exceptions/applicationexception.cpp exceptions/applicationexception.h exceptions/feedfetchexception.cpp exceptions/feedfetchexception.h exceptions/feedrecognizedbutfailedexception.cpp exceptions/feedrecognizedbutfailedexception.h exceptions/filteringexception.cpp exceptions/filteringexception.h exceptions/ioexception.cpp exceptions/ioexception.h exceptions/networkexception.cpp exceptions/networkexception.h exceptions/processexception.cpp exceptions/processexception.h exceptions/scriptexception.cpp exceptions/scriptexception.h gui/dialogs/formabout.cpp gui/dialogs/formabout.h gui/dialogs/formaddaccount.cpp gui/dialogs/formaddaccount.h gui/dialogs/formbackupdatabasesettings.cpp gui/dialogs/formbackupdatabasesettings.h gui/dialogs/formdatabasecleanup.cpp gui/dialogs/formdatabasecleanup.h gui/dialogs/formlog.cpp gui/dialogs/formlog.h gui/dialogs/formmain.cpp gui/dialogs/formmain.h gui/dialogs/formmessagefiltersmanager.cpp gui/dialogs/formmessagefiltersmanager.h gui/dialogs/formrestoredatabasesettings.cpp gui/dialogs/formrestoredatabasesettings.h gui/dialogs/formsettings.cpp gui/dialogs/formsettings.h gui/dialogs/formupdate.cpp gui/dialogs/formupdate.h gui/feedmessageviewer.cpp gui/feedmessageviewer.h gui/feedsview.cpp gui/feedsview.h gui/guiutilities.cpp gui/guiutilities.h gui/itemdetails.cpp gui/itemdetails.h gui/messagebox.cpp gui/messagebox.h gui/messagepreviewer.cpp gui/messagepreviewer.h gui/messagesview.cpp gui/messagesview.h gui/notifications/articlelistnotification.cpp gui/notifications/articlelistnotification.h gui/notifications/basetoastnotification.cpp gui/notifications/basetoastnotification.h gui/notifications/notificationseditor.cpp gui/notifications/notificationseditor.h gui/notifications/singlenotificationeditor.cpp gui/notifications/singlenotificationeditor.h gui/notifications/toastnotification.cpp gui/notifications/toastnotification.h gui/notifications/toastnotificationsmanager.cpp gui/notifications/toastnotificationsmanager.h gui/reusable/articleamountcontrol.cpp gui/reusable/articleamountcontrol.h gui/reusable/baselineedit.cpp gui/reusable/baselineedit.h gui/reusable/basetreeview.cpp gui/reusable/basetreeview.h gui/reusable/colortoolbutton.cpp gui/reusable/colortoolbutton.h gui/reusable/comboboxwithstatus.cpp gui/reusable/comboboxwithstatus.h gui/reusable/edittableview.cpp gui/reusable/edittableview.h gui/reusable/helpspoiler.cpp gui/reusable/helpspoiler.h gui/reusable/jssyntaxhighlighter.cpp gui/reusable/jssyntaxhighlighter.h gui/reusable/labelsmenu.cpp gui/reusable/labelsmenu.h gui/reusable/labelwithstatus.cpp gui/reusable/labelwithstatus.h gui/reusable/lineeditwithstatus.cpp gui/reusable/lineeditwithstatus.h gui/reusable/locationlineedit.cpp gui/reusable/locationlineedit.h gui/reusable/messagecountspinbox.cpp gui/reusable/messagecountspinbox.h gui/reusable/networkproxydetails.cpp gui/reusable/networkproxydetails.h gui/reusable/nonclosablemenu.cpp gui/reusable/nonclosablemenu.h gui/reusable/plaintoolbutton.cpp gui/reusable/plaintoolbutton.h gui/reusable/progressbarwithtext.cpp gui/reusable/progressbarwithtext.h gui/reusable/resizablestackedwidget.cpp gui/reusable/resizablestackedwidget.h gui/reusable/searchlineedit.cpp gui/reusable/searchlineedit.h gui/reusable/searchtextwidget.cpp gui/reusable/searchtextwidget.h gui/reusable/squeezelabel.cpp gui/reusable/squeezelabel.h gui/reusable/styleditemdelegatewithoutfocus.cpp gui/reusable/styleditemdelegatewithoutfocus.h gui/reusable/timespinbox.cpp gui/reusable/timespinbox.h gui/reusable/treeviewcolumnsmenu.cpp gui/reusable/treeviewcolumnsmenu.h gui/reusable/widgetwithstatus.cpp gui/reusable/widgetwithstatus.h gui/settings/settingsbrowsermail.cpp gui/settings/settingsbrowsermail.h gui/settings/settingsdatabase.cpp gui/settings/settingsdatabase.h gui/settings/settingsdownloads.cpp gui/settings/settingsdownloads.h gui/settings/settingsfeedsmessages.cpp gui/settings/settingsfeedsmessages.h gui/settings/settingsgeneral.cpp gui/settings/settingsgeneral.h gui/settings/settingsgui.cpp gui/settings/settingsgui.h gui/settings/settingslocalization.cpp gui/settings/settingslocalization.h gui/settings/settingsmediaplayer.cpp gui/settings/settingsmediaplayer.h gui/settings/settingsnodejs.cpp gui/settings/settingsnodejs.h gui/settings/settingsnotifications.cpp gui/settings/settingsnotifications.h gui/settings/settingspanel.cpp gui/settings/settingspanel.h gui/settings/settingsshortcuts.cpp gui/settings/settingsshortcuts.h gui/systemtrayicon.cpp gui/systemtrayicon.h gui/tabbar.cpp gui/tabbar.h gui/tabcontent.cpp gui/tabcontent.h gui/tabwidget.cpp gui/tabwidget.h gui/toolbars/basetoolbar.cpp gui/toolbars/basetoolbar.h gui/toolbars/feedstoolbar.cpp gui/toolbars/feedstoolbar.h gui/toolbars/messagestoolbar.cpp gui/toolbars/messagestoolbar.h gui/toolbars/statusbar.cpp gui/toolbars/statusbar.h gui/toolbars/toolbareditor.cpp gui/toolbars/toolbareditor.h gui/webbrowser.cpp gui/webbrowser.h gui/webviewers/webviewer.cpp gui/webviewers/webviewer.h miscellaneous/application.cpp miscellaneous/application.h miscellaneous/autosaver.cpp miscellaneous/autosaver.h miscellaneous/externaltool.cpp miscellaneous/externaltool.h miscellaneous/feedreader.cpp miscellaneous/feedreader.h miscellaneous/iconfactory.cpp miscellaneous/iconfactory.h miscellaneous/iofactory.cpp miscellaneous/iofactory.h miscellaneous/localization.cpp miscellaneous/localization.h miscellaneous/mutex.cpp miscellaneous/mutex.h miscellaneous/nodejs.cpp miscellaneous/nodejs.h miscellaneous/notification.cpp miscellaneous/notification.h miscellaneous/notificationfactory.cpp miscellaneous/notificationfactory.h miscellaneous/pluginfactory.cpp miscellaneous/pluginfactory.h miscellaneous/regexfactory.cpp miscellaneous/regexfactory.h miscellaneous/settings.cpp miscellaneous/settings.h miscellaneous/settingsproperties.h miscellaneous/singleapplication.cpp miscellaneous/singleapplication.h miscellaneous/skinfactory.cpp miscellaneous/skinfactory.h miscellaneous/systemfactory.cpp miscellaneous/systemfactory.h miscellaneous/templates.h miscellaneous/textfactory.cpp miscellaneous/textfactory.h network-web/adblock/adblockdialog.cpp network-web/adblock/adblockdialog.h network-web/adblock/adblockicon.cpp network-web/adblock/adblockicon.h network-web/adblock/adblockmanager.cpp network-web/adblock/adblockmanager.h network-web/adblock/adblockrequestinfo.cpp network-web/adblock/adblockrequestinfo.h network-web/apiserver.cpp network-web/apiserver.h network-web/articleparse.cpp network-web/articleparse.h network-web/basenetworkaccessmanager.cpp network-web/basenetworkaccessmanager.h network-web/cookiejar.cpp network-web/cookiejar.h network-web/downloader.cpp network-web/downloader.h network-web/downloadmanager.cpp network-web/downloadmanager.h network-web/googlesuggest.cpp network-web/googlesuggest.h network-web/httpresponse.cpp network-web/httpresponse.h network-web/httpserver.cpp network-web/httpserver.h network-web/networkfactory.cpp network-web/networkfactory.h network-web/oauth2service.cpp network-web/oauth2service.h network-web/oauthhttphandler.cpp network-web/oauthhttphandler.h network-web/readability.cpp network-web/readability.h network-web/silentnetworkaccessmanager.cpp network-web/silentnetworkaccessmanager.h network-web/webfactory.cpp network-web/webfactory.h services/abstract/accountcheckmodel.cpp services/abstract/accountcheckmodel.h services/abstract/cacheforserviceroot.cpp services/abstract/cacheforserviceroot.h services/abstract/category.cpp services/abstract/category.h services/abstract/feed.cpp services/abstract/feed.h services/abstract/gui/accountdetails.cpp services/abstract/gui/accountdetails.h services/abstract/gui/authenticationdetails.cpp services/abstract/gui/authenticationdetails.h services/abstract/gui/custommessagepreviewer.cpp services/abstract/gui/custommessagepreviewer.h services/abstract/gui/formaccountdetails.cpp services/abstract/gui/formaccountdetails.h services/abstract/gui/formaddeditlabel.cpp services/abstract/gui/formaddeditlabel.h services/abstract/gui/formaddeditprobe.cpp services/abstract/gui/formaddeditprobe.h services/abstract/gui/formcategorydetails.cpp services/abstract/gui/formcategorydetails.h services/abstract/gui/formfeeddetails.cpp services/abstract/gui/formfeeddetails.h services/abstract/gui/multifeededitcheckbox.cpp services/abstract/gui/multifeededitcheckbox.h services/abstract/importantnode.cpp services/abstract/importantnode.h services/abstract/label.cpp services/abstract/label.h services/abstract/labelsnode.cpp services/abstract/labelsnode.h services/abstract/recyclebin.cpp services/abstract/recyclebin.h services/abstract/rootitem.cpp services/abstract/rootitem.h services/abstract/search.cpp services/abstract/search.h services/abstract/searchsnode.cpp services/abstract/searchsnode.h services/abstract/serviceentrypoint.h services/abstract/serviceroot.cpp services/abstract/serviceroot.h services/abstract/unreadnode.cpp services/abstract/unreadnode.h ) set(UI_FILES gui/dialogs/formabout.ui gui/dialogs/formaddaccount.ui gui/dialogs/formbackupdatabasesettings.ui gui/dialogs/formdatabasecleanup.ui gui/dialogs/formlog.ui gui/dialogs/formmain.ui gui/dialogs/formmessagefiltersmanager.ui gui/dialogs/formrestoredatabasesettings.ui gui/dialogs/formsettings.ui gui/dialogs/formupdate.ui gui/itemdetails.ui gui/notifications/articlelistnotification.ui gui/notifications/notificationseditor.ui gui/notifications/singlenotificationeditor.ui gui/notifications/toastnotification.ui gui/reusable/articleamountcontrol.ui gui/reusable/networkproxydetails.ui gui/reusable/searchtextwidget.ui gui/settings/settingsbrowsermail.ui gui/settings/settingsdatabase.ui gui/settings/settingsdownloads.ui gui/settings/settingsfeedsmessages.ui gui/settings/settingsgeneral.ui gui/settings/settingsgui.ui gui/settings/settingslocalization.ui gui/settings/settingsmediaplayer.ui gui/settings/settingsnodejs.ui gui/settings/settingsnotifications.ui gui/settings/settingsshortcuts.ui gui/toolbars/toolbareditor.ui network-web/adblock/adblockdialog.ui network-web/downloaditem.ui network-web/downloadmanager.ui services/abstract/gui/accountdetails.ui services/abstract/gui/authenticationdetails.ui services/abstract/gui/formaccountdetails.ui services/abstract/gui/formaddeditlabel.ui services/abstract/gui/formaddeditprobe.ui services/abstract/gui/formcategorydetails.ui services/abstract/gui/formfeeddetails.ui ) if(ENABLE_MEDIAPLAYER) list(APPEND SOURCES gui/mediaplayer/playerbackend.cpp gui/mediaplayer/playerbackend.h gui/mediaplayer/mediaplayer.cpp gui/mediaplayer/mediaplayer.h ) list(APPEND UI_FILES gui/mediaplayer/mediaplayer.ui ) endif() if(ENABLE_MEDIAPLAYER_QTMULTIMEDIA) list(APPEND SOURCES gui/mediaplayer/qtmultimedia/qtmultimediabackend.cpp gui/mediaplayer/qtmultimedia/qtmultimediabackend.h ) elseif(ENABLE_MEDIAPLAYER_LIBMPV) list(APPEND SOURCES gui/mediaplayer/libmpv/libmpvbackend.cpp gui/mediaplayer/libmpv/libmpvbackend.h gui/mediaplayer/libmpv/libmpvwidget.cpp gui/mediaplayer/libmpv/libmpvwidget.h gui/mediaplayer/libmpv/qthelper.h ) if(WIN32) # Tweak finding of libs to make it work with official libmpv libs. list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES ".dll.a") endif() # Search libmpv. find_library(LibMPV_LIBRARIES NAMES "mpv" "libmpv" "libmpv-v2" HINTS "${LibMPV_ROOT}" NO_CACHE REQUIRED ) find_path(LibMPV_INCLUDE_DIRS NAMES "mpv/client.h" PATH_SUFFIXES "include" HINTS "${LibMPV_ROOT}" NO_CACHE REQUIRED ) message(STATUS "Found libmpv: ${LibMPV_LIBRARIES}.") endif() if(NO_LITE) list(APPEND SOURCES # WebEngine-based web (and message) browser. gui/webviewers/webengine/webengineviewer.cpp gui/webviewers/webengine/webengineviewer.h network-web/adblock/adblockurlinterceptor.cpp network-web/adblock/adblockurlinterceptor.h network-web/webengine/networkurlinterceptor.cpp network-web/webengine/networkurlinterceptor.h network-web/webengine/urlinterceptor.h network-web/webengine/webenginepage.cpp network-web/webengine/webenginepage.h ) endif() list(APPEND SOURCES # QTextBrowser. gui/webviewers/qtextbrowser/textbrowserviewer.h gui/webviewers/qtextbrowser/textbrowserviewer.cpp ) # Add boolinq. list(APPEND SOURCES 3rd-party/boolinq/boolinq.h ) # Add sqlite. if(USE_SYSTEM_SQLITE) find_package(SQLite3) if(SQLite3_FOUND) # Include directory and library are linked to below. message(STATUS "Using system SQLite3 ${SQLite3_VERSION}.") else() message(FATAL_ERROR "System SQLite3 not detected. Set USE_SYSTEM_SQLITE=OFF if you want to build with bundled SQLite3.") endif() else() message(STATUS "Using bundled SQLite3.") list(APPEND SOURCES 3rd-party/sqlite/sqlite3.c 3rd-party/sqlite/sqlite3.h ) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DSQLITE_THREADSAFE=1 -DSQLITE_ENABLE_COLUMN_METADATA=1") endif() # Add SimpleCrypt. list(APPEND SOURCES 3rd-party/sc/simplecrypt.cpp 3rd-party/sc/simplecrypt.h ) # Deal with .ui files. qt_wrap_ui(SOURCES ${UI_FILES}) # Bundle resources. qt_add_resources(SOURCES ${CMAKE_SOURCE_DIR}/resources/sql.qrc) qt_add_resources(SOURCES ${CMAKE_SOURCE_DIR}/resources/rssguard.qrc) if(APPLE OR WIN32 OR OS2 OR FORCE_BUNDLE_ICONS) qt_add_resources(SOURCES ${CMAKE_SOURCE_DIR}/resources/icons.qrc) endif() # Bundle version info. if(WIN32) enable_language("RC") list(APPEND SOURCES "${CMAKE_BINARY_DIR}/rssguard.rc") endif() add_library(rssguard SHARED ${SOURCES} ${QM_FILES}) # Bundle icons on some platforms which do not provide system-wide icon themes. if(FORCE_BUNDLE_ICONS) target_compile_definitions(rssguard PRIVATE FORCE_BUNDLE_ICONS ) message(STATUS "Forcibly bundling icon themes.") endif() target_include_directories(rssguard PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/gui ${CMAKE_CURRENT_SOURCE_DIR}/gui/dialogs ${CMAKE_CURRENT_SOURCE_DIR}/gui/reusable ${CMAKE_CURRENT_SOURCE_DIR}/services/abstract/gui ${CMAKE_CURRENT_SOURCE_DIR}/dynamic-shortcuts PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/gui/notifications ${CMAKE_CURRENT_SOURCE_DIR}/gui/toolbars ${CMAKE_CURRENT_SOURCE_DIR}/gui/richtexteditor ) if(SQLite3_FOUND) target_include_directories(rssguard AFTER PRIVATE ${SQLite3_INCLUDE_DIRS} ) target_compile_definitions(rssguard PRIVATE SYSTEM_SQLITE3 ) target_link_libraries(rssguard PRIVATE ${SQLite3_LIBRARIES} ) endif() # Qt. target_link_libraries(rssguard PUBLIC Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Gui Qt${QT_VERSION_MAJOR}::Network Qt${QT_VERSION_MAJOR}::Qml Qt${QT_VERSION_MAJOR}::Sql Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Xml Qt${QT_VERSION_MAJOR}::Concurrent ) if(QT_VERSION_MAJOR EQUAL 6) target_link_libraries(rssguard PUBLIC Qt${QT_VERSION_MAJOR}::Core5Compat ) endif() if(WIN32) target_link_libraries(rssguard PUBLIC Qt${QT_VERSION_MAJOR}::GuiPrivate ) endif() if(NO_LITE) target_link_libraries(rssguard PUBLIC Qt${QT_VERSION_MAJOR}::WebEngineWidgets ) endif() if(WIN32 AND NOT BUILD_WITH_QT6) target_link_libraries(rssguard PUBLIC Qt${QT_VERSION_MAJOR}::WinExtras ) endif() if(NOT OS2) target_link_libraries(rssguard PUBLIC Qt${QT_VERSION_MAJOR}::Multimedia ) endif() if(ENABLE_MEDIAPLAYER_QTMULTIMEDIA) target_link_libraries(rssguard PUBLIC Qt${QT_VERSION_MAJOR}::OpenGL Qt${QT_VERSION_MAJOR}::MultimediaWidgets ) elseif(ENABLE_MEDIAPLAYER_LIBMPV) if(MEDIAPLAYER_FORCE_OPENGL) target_link_libraries(rssguard PUBLIC Qt${QT_VERSION_MAJOR}::OpenGL ) if(BUILD_WITH_QT6) target_link_libraries(rssguard PUBLIC Qt${QT_VERSION_MAJOR}::OpenGLWidgets ) endif() endif() target_include_directories(rssguard AFTER PRIVATE ${LibMPV_INCLUDE_DIRS} ) target_link_libraries(rssguard PUBLIC ${LibMPV_LIBRARIES} ) endif() if(UNIX AND NOT APPLE AND NOT ANDROID) target_link_libraries(rssguard PUBLIC Qt${QT_VERSION_MAJOR}::DBus ) endif() if(APPLE) target_link_libraries(rssguard PUBLIC "-framework AppKit" ) elseif(WIN32) target_link_libraries(rssguard PUBLIC Shell32.lib odbc32 ) endif() if(WIN32 OR OS2) install(TARGETS rssguard DESTINATION .) set(HEADERS_FOLDER "include/librssguard") elseif(UNIX AND NOT APPLE AND NOT ANDROID) include (GNUInstallDirs) install(TARGETS rssguard DESTINATION ${CMAKE_INSTALL_LIBDIR}) set(HEADERS_FOLDER "${CMAKE_INSTALL_INCLUDEDIR}/librssguard") elseif(APPLE) install(TARGETS rssguard DESTINATION Contents/MacOS) set(HEADERS_FOLDER "Contents/Resources/Include") endif() # Add specific definitions. target_compile_definitions(rssguard PRIVATE RSSGUARD_DLLSPEC=Q_DECL_EXPORT RSSGUARD_LIBDIR="${CMAKE_INSTALL_LIBDIR}" ) # Install public headers. set(HEADERS_ROOT "${PROJECT_SOURCE_DIR}/src/librssguard") file(GLOB_RECURSE HEADER_FILES RELATIVE ${HEADERS_ROOT} "*.h") foreach(HEADER_FILE ${HEADER_FILES}) #message(${HEADER_FILE}) get_filename_component(HEADER_PATH ${HEADER_FILE} DIRECTORY) #message(${HEADER_PATH}) file(READ ${HEADER_FILE} HEADER_CONTENT) string(FIND "${HEADER_CONTENT}" "RSSGUARD_DLLSPEC" HEADER_EXPORT_IDX) if(${HEADER_EXPORT_IDX} GREATER -1) install(FILES ${HEADER_FILE} DESTINATION "${HEADERS_FOLDER}/${HEADER_PATH}") endif() endforeach()