cmake_minimum_required(VERSION 3.18) project(KDocker VERSION 6.2 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # Find and setup all dependency libraries find_package(Qt6 REQUIRED COMPONENTS Core DBus Widgets) qt_standard_project_setup() find_package(X11 REQUIRED COMPONENTS xcb) # Create some variables used when generating files string(TIMESTAMP TIMESTAMP) string(TIMESTAMP DATE "%d %B, %Y") set(VERSION ${CMAKE_PROJECT_VERSION}) # install appstream xml configure_file(resources/appstream/com.kdocker.KDocker.metainfo.xml.in ${CMAKE_CURRENT_BINARY_DIR}/appstream/com.kdocker.KDocker.metainfo.xml @ONLY) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/appstream/com.kdocker.KDocker.metainfo.xml DESTINATION share/metainfo/) # Install icon foreach(SIZE 32x32 64x64 128x128 256x256 512x512) install(FILES resources/images/icons/kdocker_${SIZE}.png DESTINATION share/icons/hicolor/${SIZE}/apps/ RENAME com.kdocker.KDocker.png) endforeach() install(FILES resources/images/icons/kdocker.svg DESTINATION share/icons/hicolor/scalable/apps/ RENAME com.kdocker.KDocker.svg) # Install desktop file install(FILES resources/desktop/com.kdocker.KDocker.desktop DESTINATION share/applications/) # Install bash completions install(FILES resources/bash-completion/kdocker DESTINATION share/bash-completion/completions/) # Generate man page find_program(POD2MAN pod2man) if (NOT POD2MAN MATCHES "NOTFOUND") set(MAN_BASE_NAME "kdocker") set(POD_NAME "${MAN_BASE_NAME}.pod") set(POD_IN "${CMAKE_CURRENT_SOURCE_DIR}/resources/man/${POD_NAME}") set(MAN_OUT "${CMAKE_CURRENT_BINARY_DIR}/man/${MAN_BASE_NAME}.1") file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/man/") add_custom_command( OUTPUT ${MAN_OUT} COMMAND ${POD2MAN} --center "General Commands Manual" --release "Version ${CMAKE_PROJECT_VERSION}" --date "${DATE}" "${POD_IN}" "${MAN_OUT}" VERBATIM) add_custom_target(generate_man ALL DEPENDS ${MAN_OUT}) install(FILES ${MAN_OUT} DESTINATION share/man/man1/) else () message(STATUS "pod2man not found") message(WARNING "will not generate man file") endif () # Fill out some source files that needs variables added configure_file(src/constants.cpp.in ${CMAKE_CURRENT_BINARY_DIR}/constants.cpp @ONLY) # Collect the source files set(SOURCES src/application.cpp src/command.cpp src/commandlineargs.cpp ${CMAKE_CURRENT_BINARY_DIR}/constants.cpp src/grabinfo.cpp src/main.cpp src/scanner.cpp src/scannersearch.cpp src/trayitem.cpp src/trayitemoptions.cpp src/trayitemmanager.cpp src/trayitemsettings.cpp src/xlibutil.cpp ) # Generate the dbus adaptor qt_add_dbus_adaptor(SOURCES resources/dbus/com.kdocker.KDocker.xml adaptor.h "" kdocker_adaptor) # Install the dbus files install(FILES resources/dbus/com.kdocker.KDocker.xml DESTINATION share/dbus-1/interfaces/) configure_file(resources/dbus/com.kdocker.KDocker.service.in ${CMAKE_CURRENT_BINARY_DIR}/dbus/com.kdocker.KDocker.service @ONLY) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/dbus/com.kdocker.KDocker.service DESTINATION share/dbus-1/services/) # Add resources qt_add_resources(SOURCES resources/resources.qrc) # Build qt_add_executable(kdocker ${SOURCES}) target_include_directories(kdocker PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_BINARY_DIR}) target_link_libraries(kdocker PRIVATE Qt6::Core Qt6::DBus Qt6::Widgets X11::X11 X11::xcb) install(TARGETS kdocker DESTINATION bin)