# SPDX-FileCopyrightText: (C) 2024 Chris Rizzitello # SPDX-FileCopyrightText: (C) 2012 - 2024 Symless Ltd # SPDX-FileCopyrightText: (C) 2009 - 2012 Nick Bolton # SPDX-License-Identifier: MIT if(UNIX AND NOT APPLE) pkg_check_modules(LIBEI REQUIRED QUIET "libei-1.0 >= ${REQUIRED_LIBEI_VERSION}") message(STATUS "libei version: ${LIBEI_VERSION}") pkg_check_modules(LIBPORTAL REQUIRED QUIET "libportal >= ${REQUIRED_LIBPORTAL_VERSION}") message(STATUS "libportal version: ${LIBPORTAL_VERSION}") # Check if we have the restore ability in the IC portal include(CMakePushCheckState) include(CheckSymbolExists) cmake_push_check_state(RESET) set(CMAKE_REQUIRED_INCLUDES "${CMAKE_REQUIRED_INCLUDES};${LIBPORTAL_INCLUDE_DIRS};${GLIB2_INCLUDE_DIRS}") set(CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES};${LIBPORTAL_LINK_LIBRARIES};${GLIB2_LINK_LIBRARIES}") check_symbol_exists(xdp_input_capture_session_get_restore_token "libportal/inputcapture.h" HAVE_IC_RESTORE) check_symbol_exists(xdp_session_request_clipboard "libportal/portal-helpers.h;libportal/clipboard.h" HAVE_LP_CLIPBOARD) cmake_pop_check_state() endif() if(WIN32) set(PLATFORM_SOURCES IMSWindowsClipboardFacade.h MSWindowsClipboard.cpp MSWindowsClipboard.h MSWindowsClipboardAnyTextConverter.cpp MSWindowsClipboardAnyTextConverter.h MSWindowsClipboardBitmapConverter.cpp MSWindowsClipboardBitmapConverter.h MSWindowsClipboardFacade.cpp MSWindowsClipboardFacade.h MSWindowsClipboardHTMLConverter.cpp MSWindowsClipboardHTMLConverter.h MSWindowsClipboardUTF16Converter.cpp MSWindowsClipboardUTF16Converter.h MSWindowsDebugOutputter.cpp MSWindowsDebugOutputter.h MSWindowsDesks.cpp MSWindowsDesks.h MSWindowsEventQueueBuffer.cpp MSWindowsEventQueueBuffer.h MSWindowsHook.cpp MSWindowsHook.h MSWindowsKeyState.cpp MSWindowsKeyState.h MSWindowsPowerManager.cpp MSWindowsPowerManager.h MSWindowsProcess.cpp MSWindowsProcess.h MSWindowsScreen.cpp MSWindowsScreen.h MSWindowsScreenSaver.cpp MSWindowsScreenSaver.h MSWindowsSession.cpp MSWindowsSession.h MSWindowsWatchdog.cpp MSWindowsWatchdog.h ) elseif(APPLE) set(PLATFORM_SOURCES IOSXKeyResource.cpp IOSXKeyResource.h OSXAutoTypes.h OSXClipboard.cpp OSXClipboard.h OSXClipboardAnyBitmapConverter.cpp OSXClipboardAnyBitmapConverter.h OSXClipboardAnyTextConverter.cpp OSXClipboardAnyTextConverter.h OSXClipboardBMPConverter.cpp OSXClipboardBMPConverter.h OSXClipboardHTMLConverter.cpp OSXClipboardHTMLConverter.h OSXClipboardTextConverter.cpp OSXClipboardTextConverter.h OSXClipboardUTF8Converter.cpp OSXClipboardUTF8Converter.h OSXClipboardUTF16Converter.cpp OSXClipboardUTF16Converter.h OSXCocoaApp.h OSXCocoaApp.m OSXEventQueueBuffer.cpp OSXEventQueueBuffer.h OSXKeyState.cpp OSXKeyState.h OSXMediaKeySupport.h OSXMediaKeySupport.m OSXPasteboardPeeker.h OSXPasteboardPeeker.m OSXPowerManager.cpp OSXPowerManager.h OSXScreen.h OSXScreen.mm OSXScreenSaver.cpp OSXScreenSaver.h OSXScreenSaverControl.h OSXScreenSaverUtil.h OSXScreenSaverUtil.m OSXUchrKeyResource.cpp OSXUchrKeyResource.h ) elseif(UNIX) set(PLATFORM_SOURCES XDGPortalRegistry.h XDGPowerManager.cpp XDGPowerManager.h XDGKeyUtil.h XDGKeyUtil.cpp ) if (BUILD_X11_SUPPORT) configure_file(XWindowsConfig.h.in XWindowsConfig.h @ONLY) list(APPEND PLATFORM_SOURCES XWindowsClipboard.cpp XWindowsClipboard.h XWindowsClipboardAnyBitmapConverter.cpp XWindowsClipboardAnyBitmapConverter.h XWindowsClipboardBMPConverter.cpp XWindowsClipboardBMPConverter.h XWindowsClipboardHTMLConverter.cpp XWindowsClipboardHTMLConverter.h XWindowsClipboardTextConverter.cpp XWindowsClipboardTextConverter.h XWindowsClipboardUCS2Converter.cpp XWindowsClipboardUCS2Converter.h XWindowsClipboardUTF8Converter.cpp XWindowsClipboardUTF8Converter.h XWindowsEventQueueBuffer.cpp XWindowsEventQueueBuffer.h XWindowsKeyState.cpp XWindowsKeyState.h XWindowsScreen.cpp XWindowsScreen.h XWindowsScreenSaver.cpp XWindowsScreenSaver.h XWindowsUtil.cpp XWindowsUtil.h ${CMAKE_CURRENT_BINARY_DIR}/XWindowsConfig.h ) endif() if(LIBEI_FOUND) list(APPEND PLATFORM_SOURCES EiClipboard.cpp EiClipboard.h EiEventQueueBuffer.cpp EiEventQueueBuffer.h EiKeyState.cpp EiKeyState.h EiScreen.cpp EiScreen.h ) # The Portal sources also require EI. if(LIBPORTAL_FOUND) list(APPEND PLATFORM_SOURCES PortalInputCapture.cpp PortalInputCapture.h PortalRemoteDesktop.cpp PortalRemoteDesktop.h ) if(HAVE_LP_CLIPBOARD) list(APPEND PLATFORM_SOURCES PortalClipboard.cpp PortalClipboard.h ) endif() endif() endif() endif() # wayland.h is included to check for wayland support add_library(platform STATIC ${PLATFORM_SOURCES}) target_link_libraries(platform client ${libs}) if(UNIX) target_link_libraries( platform io net app client ${libs}) if(APPLE) find_library(COCOA_LIBRARY Cocoa) target_link_libraries(platform ${COCOA_LIBRARY}) else() if(${LIBXKBCOMMON_VERSION} VERSION_GREATER_EQUAL "1.10") target_compile_definitions(platform PRIVATE HAVE_XKB_KEYMAP_MOD_GET_MASK=1) endif() target_compile_definitions(platform PUBLIC WINAPI_LIBEI WINAPI_LIBPORTAL) if (HAVE_IC_RESTORE) target_compile_definitions(platform PUBLIC HAVE_LIBPORTAL_INPUTCAPTURE_RESTORE) endif() if (HAVE_LP_CLIPBOARD) target_compile_definitions(platform PUBLIC HAVE_LIBPORTAL_CLIPBOARD) endif() target_include_directories(platform PUBLIC ${LIBEI_INCLUDE_DIRS} ${LIBPORTAL_INCLUDE_DIRS}) target_link_libraries( platform Qt6::DBus Qt6::Gui ${LIBXKBCOMMON_LINK_LIBRARIES} ${GLIB2_LINK_LIBRARIES} ${LIBM_LIBRARIES} ${LIBEI_LINK_LIBRARIES} ${LIBPORTAL_LINK_LIBRARIES}) endif() endif()