add_library(workrave-app OBJECT) target_sources(workrave-app PRIVATE AppHold.cc Application.cc ApplicationFactory.cc GUIConfig.cc Menus.cc PreferencesRegistry.cc SoundTheme.cc TimerBoxControl.cc ) if (PLATFORM_OS_UNIX) target_sources(workrave-app PRIVATE ApplicationUnix.cc ) ## TODO add_compile_definitions(GNOMELOCALEDIR="${CMAKE_INSTALL_PREFIX}/${DATADIR}/locale") # Desktop file intltool_merge_desktop( ${CMAKE_CURRENT_SOURCE_DIR}/org.workrave.Workrave.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/org.workrave.Workrave.desktop) add_custom_target(generate_desktop_file ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/org.workrave.Workrave.desktop) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/org.workrave.Workrave.desktop DESTINATION ${DATADIR}/applications) target_include_directories(workrave-app PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/platforms/unix) # Desktop Application Autostart # This enables application autostart and indicates autostart parameters across # all Linux desktop managers. # https://specifications.freedesktop.org/autostart-spec/autostart-spec-latest.html intltool_merge_desktop( ${CMAKE_CURRENT_SOURCE_DIR}/org.workrave.Workrave-autostart.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/org.workrave.Workrave-autostart.desktop) add_custom_target(generate_desktop_autostart_file ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/org.workrave.Workrave-autostart.desktop) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/org.workrave.Workrave-autostart.desktop DESTINATION ${XDGAUTOSTARTDIR} RENAME org.workrave.Workrave.desktop) endif() if (PLATFORM_OS_WINDOWS) target_sources(workrave-app PRIVATE ApplicationWindows.cc platforms/windows/DesktopWindow.cc platforms/windows/WindowsAppletWindow.cc platforms/windows/WindowsCompat.cc platforms/windows/WindowsForceFocus.cc platforms/windows/WindowsLocker.cc platforms/windows/WindowsStatusIcon.cc platforms/windows/WindowsFocusAssist.cc platforms/windows/Remote.cc ) if (HAVE_HARPOON) target_sources(workrave-app PRIVATE platforms/windows/WindowsHarpoonLocker.cc) endif() # target_include_directories(workrave PRIVATE ${CMAKE_SOURCE_DIR}/ui/app/toolkits/gtkmm/src/windows) #if (HAVE_HARPOON) # target_link_libraries(workrave PRIVATE harpoon64) # target_include_directories(workrave PRIVATE ${CMAKE_SOURCE_DIR}/libs/hooks/harpoon/include) #endif() target_include_directories(workrave-app PUBLIC ${CMAKE_SOURCE_DIR}/ui/applets/windows/include PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/platforms/windows ) if (MSVC) target_link_libraries(workrave-app PRIVATE ${WIN32_LIBRARIES}) endif() endif() if (PLATFORM_OS_MACOS) target_sources(workrave-app PRIVATE ApplicationMacOS.cc platforms/macos/MacOSLocker.cc platforms/macos/MacOSDock.mm #platforms/macos/MacOSAppletWindow.cc #platforms/macos/MacOSStatusBarView.mm #platforms/macos/MacOSTimeBar.mm ) set_source_files_properties(Locale.cc platforms/macos/MacOSLocker.cc platforms/macos/MacOSDock.mm PROPERTIES COMPILE_FLAGS "-x objective-c++ -fobjc-arc") target_include_directories(workrave-app PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/platforms/macos) endif() if (HAVE_DBUS) dbus_generate_source(${CMAKE_CURRENT_SOURCE_DIR}/workrave-gui.xml ${CMAKE_CURRENT_BINARY_DIR} DBusGUI) target_sources(workrave-app PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/DBusGUI.cc GenericDBusApplet.cc) dbus_add_activation_service(${CMAKE_CURRENT_SOURCE_DIR}/org.workrave.Workrave.service.in ${BINDIR}) endif() if (HAVE_GSETTINGS) gsettings_add_schemas(${CMAKE_CURRENT_SOURCE_DIR}) endif() target_include_directories(workrave-app PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/../libs/commonui/include) target_link_libraries(workrave-app PRIVATE Boost::serialization workrave-libs-audio workrave-libs-config workrave-libs-dbus workrave-libs-input-monitor workrave-libs-session workrave-libs-utils workrave-libs-ui-prefwidgets workrave-libs-commonui) if (HAVE_CORE_NEXT) target_link_libraries(workrave-app PRIVATE workrave-libs-core-next) else() target_link_libraries(workrave-app PRIVATE workrave-libs-core) endif() if (HAVE_CRASH_REPORT) target_link_libraries(workrave-app PRIVATE workrave-libs-crash) endif() if (HAVE_GLIB) target_include_directories(workrave-app PRIVATE ${GLIB_INCLUDE_DIRS}) endif() install(FILES workrave.metainfo.xml DESTINATION ${DATADIR}/metainfo RENAME org.workrave.Workrave.metainfo.xml) ################################################################################ ################################################################################ ################################################################################ if (HAVE_APP_QT) qt_add_executable(workrave main.cc $) else() add_executable(workrave main.cc $) endif() set_target_properties(workrave PROPERTIES WIN32_EXECUTABLE ON MACOSX_BUNDLE ON XCODE_ATTRIBUTE_ENABLE_HARDENED_RUNTIME YES ) target_link_libraries(workrave PRIVATE workrave-app workrave-libs-audio workrave-libs-utils workrave-libs-ui-prefwidgets) if (HAVE_CRASH_REPORT) target_link_libraries(workrave PRIVATE workrave-libs-crash) endif() if (HAVE_CORE_NEXT) target_link_libraries(workrave PRIVATE workrave-libs-core-next) else() target_link_libraries(workrave PRIVATE workrave-libs-core) endif() if (HAVE_APP_GTK) target_include_directories(workrave PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/toolkits/gtkmm) target_link_libraries(workrave PRIVATE workrave-toolkit-gtkmm) target_sources(workrave PRIVATE $) elseif (HAVE_APP_QT) target_include_directories(workrave PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/toolkits/qt) target_link_libraries(workrave PRIVATE workrave-toolkit-qt) target_sources(workrave PRIVATE $) endif() If (PLATFORM_OS_WINDOWS) if (CMAKE_CROSSCOMPILING) target_link_directories(workrave PRIVATE "${SYS_ROOT}") endif() set(WR_VERSION ${WORKRAVE_VERSION}) set(WR_RESOURCE_VERSION ${WORKRAVE_RESOURCE_VERSION}) set(WR_TOP_SOURCE_DIR ${CMAKE_SOURCE_DIR}) set(WR_CURRENT_BIN_DIR ${CMAKE_CURRENT_BINARY_DIR}) string(REPLACE "," "." WR_VERSION_VERSION_NUMERIC ${WR_RESOURCE_VERSION}) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/resource.rc.in ${CMAKE_CURRENT_BINARY_DIR}/resource.rc) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/workrave.manifest.in ${CMAKE_CURRENT_BINARY_DIR}/workrave.manifest) target_sources(workrave PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/resource.rc) endif() if (MINGW) add_custom_command(TARGET workrave POST_BUILD # COMMAND ${CMAKE_NM} -nosC --line-numbers $ > ${CMAKE_CURRENT_BINARY_DIR}/workrave.debug COMMAND ${CMAKE_COMMAND} -E copy "$" workrave-debug.exe COMMAND ${CMAKE_OBJCOPY} --only-keep-debug $ ${CMAKE_CURRENT_BINARY_DIR}/workrave.debug COMMAND ${CMAKE_OBJCOPY} --strip-debug --strip-unneeded $ COMMAND ${CMAKE_OBJCOPY} --add-gnu-debuglink=workrave.debug $ ) if (DUMP_SYMS) add_custom_command(TARGET workrave POST_BUILD COMMAND ${MSYS64_CMD} "${DUMP_SYMS} $ -o ${CMAKE_BINARY_DIR}/workrave.sym") add_dependencies(workrave dump_syms) endif() if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") install(FILES ${CMAKE_CURRENT_BINARY_DIR}/workrave.debug DESTINATION ${BINDIR}) endif() endif() if (APPLE) set_target_properties(workrave PROPERTIES MACOSX_BUNDLE TRUE MACOSX_BUNDLE_BUNDLE_NAME "${PROJECT_NAME}" MACOSX_BUNDLE_INFO_STRING "${PROJECT_NAME}" MACOSX_BUNDLE_ICON_FILE Workrave.icns MACOSX_BUNDLE_GUI_IDENTIFIER "org.workrave.${PROJECT_NAME}" MACOSX_BUNDLE_LONG_VERSION_STRING "${WORKRAVE_VERSION}" MACOSX_BUNDLE_SHORT_VERSION_STRING "${WORKRAVE_VERSION}" MACOSX_BUNDLE_BUNDLE_VERSION "${WORKRAVE_VERSION}" MACOSX_BUNDLE_COPYRIGHT "Copyright (c) 2001-2025 Rob Caelers, Raymond Penners, Ray Satiro" ) set_source_files_properties(BreakWindow.cc PreludeWindow.cc MouseMonitor.cc ToolkitPlatformMac.cc PROPERTIES COMPILE_FLAGS "-x objective-c++ -fobjc-arc") endif() configure_file(project.vcxproj.user.in ${CMAKE_CURRENT_BINARY_DIR}/Workrave.vcxproj.user @ONLY) if (PLATFORM_OS_UNIX) ## TODO add_compile_definitions(GNOMELOCALEDIR="${CMAKE_INSTALL_PREFIX}/${DATADIR}/locale") endif() if (PLATFORM_OS_WINDOWS) if (MSVC) target_link_libraries(workrave PRIVATE ${WIN32_LIBRARIES}) endif() if (MINGW) target_link_libraries(workrave PRIVATE winmm shlwapi kernel32 user32 gdi32 winspool comdlg32 advapi32 shell32 ole32 oleaut32 uuid odbc32 odbccp32 wtsapi32) target_link_libraries(workrave PRIVATE dxerr8 dsound dxguid comctl32) endif() if (MSVC) target_link_libraries(workrave PRIVATE wtsapi32 dsound dxguid) endif() if (PLATFORM_OS_WINDOWS_NATIVE) set_target_properties(workrave PROPERTIES LINK_FLAGS "/SUBSYSTEM:WINDOWS") endif() if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") target_compile_options(workrave PRIVATE -gcodeview) target_link_options(workrave PRIVATE -Wl,-pdb=) endif() else() if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") target_compile_options(workrave PRIVATE -gcodeview) target_link_options(workrave PRIVATE -Wl,-pdb=) ##TODO: set_target_properties(workrave PROPERTIES COMPILE_FLAGS "-Wl,--subsystem,windows") set_target_properties(workrave PROPERTIES LINK_FLAGS "-Wl,--subsystem,windows") elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") set_target_properties(workrave PROPERTIES COMPILE_FLAGS "-mwindows") set_target_properties(workrave PROPERTIES LINK_FLAGS "-mwindows") endif() endif() endif() install(TARGETS workrave RUNTIME DESTINATION ${BINDIR} BUNDLE DESTINATION .) add_subdirectory(toolkits)