Files
RedBear-OS/local/recipes/kde/kf6-extra-cmake-modules/source/modules/ECMGenerateDBusServiceFile.cmake
T
vasilito e0590a0b56 kde/kf6-extra-cmake-modules: rebase to 6.28.0 (ECM) + teach version parser set(VERSION)
kf6-kcoreaddons 6.28.0 requires ECM >= 6.28.0 but the vendored ECM source/ was
still 6.10.0: the sync engine skipped it because ECM's version marker is a bare
set(VERSION "X.Y.Z") that the parser didn't recognize (only KF_VERSION /
PROJECT_VERSION / RELEASE_SERVICE_VERSION). Re-lay ECM from its 6.28.0 source.tar
(pure cmake modules, no Redox port) and teach both the sync engine and the
validator to read set(VERSION) so this class is caught, not silently skipped.
2026-08-01 08:07:00 +03:00

108 lines
3.5 KiB
CMake

# SPDX-FileCopyrightText: 2020 Kai Uwe Broulik <kde@broulik.de>
# SPDX-FileCopyrightText: 2020 Henri Chain <henri.chain@enioka.com>
#
# SPDX-License-Identifier: BSD-3-Clause
#[=======================================================================[.rst:
ECMGenerateDBusServiceFile
---------------------------
This module provides the ``ecm_generate_dbus_service_file`` function for
generating and installing a D-Bus service file.
::
ecm_generate_dbus_service_file(
NAME <service name>
EXECUTABLE <executable>
[SYSTEMD_SERVICE <systemd service>]
DESTINATION <install_path>
[RENAME <dbus service filename>] # Since 5.75
)
A D-Bus service file ``<service name>.service`` will be generated and installed
in the relevant D-Bus config location. This filename can be customized with RENAME.
``<executable>`` must be an absolute path to the installed service executable. When using it with
:kde-module:`KDEInstallDirs` it needs to be the ``_FULL_`` variant of the path variable.
.. note::
On Windows, the macro will only use the file name part of ``<executable>`` since D-Bus
service executables are to be installed in the same directory as the D-Bus daemon.
Optionally, a ``<systemd service>`` can be specified to launch the corresponding
systemd service instead of the ``<executable>`` if the D-Bus daemon is started by systemd.
Example usage:
.. code-block:: cmake
ecm_generate_dbus_service_file(
NAME org.kde.kded5
EXECUTABLE ${KDE_INSTALL_FULL_BINDIR}/kded5
DESTINATION ${KDE_INSTALL_DBUSSERVICEDIR}
)
.. code-block:: cmake
ecm_generate_dbus_service_file(
NAME org.kde.kded5
EXECUTABLE ${KDE_INSTALL_FULL_BINDIR}/kded5
SYSTEMD_SERVICE plasma-kded.service
DESTINATION ${KDE_INSTALL_DBUSSERVICEDIR}
RENAME org.kde.daemon.service
)
Since 5.73.0.
#]=======================================================================]
cmake_policy(VERSION 3.16)
function(ecm_generate_dbus_service_file)
set(options)
set(oneValueArgs EXECUTABLE NAME SYSTEMD_SERVICE DESTINATION RENAME)
set(multiValueArgs)
cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
if(ARG_UNPARSED_ARGUMENTS)
message(FATAL_ERROR "Unexpected arguments to ecm_generate_dbus_service_file: ${ARG_UNPARSED_ARGUMENTS}")
endif()
if(NOT ARG_NAME)
message(FATAL_ERROR "Missing NAME argument for ecm_generate_dbus_service_file")
endif()
if(NOT ARG_EXECUTABLE)
message(FATAL_ERROR "Missing EXECUTABLE argument for ecm_generate_dbus_service_file")
endif()
if(NOT ARG_DESTINATION)
message(FATAL_ERROR "Missing DESTINATION argument for ecm_generate_dbus_service_file")
endif()
if(WIN32)
get_filename_component(_exec "${ARG_EXECUTABLE}" NAME)
else()
if (NOT IS_ABSOLUTE ${ARG_EXECUTABLE})
message(FATAL_ERROR "EXECUTABLE must be an absolute path in ecm_generate_dbus_service_file")
else()
set(_exec ${ARG_EXECUTABLE})
endif()
endif()
set(_service_file ${CMAKE_CURRENT_BINARY_DIR}/${ARG_NAME}.service)
file(WRITE ${_service_file}
"[D-BUS Service]
Name=${ARG_NAME}
Exec=${_exec}
")
if (ARG_SYSTEMD_SERVICE)
file(APPEND ${_service_file} "SystemdService=${ARG_SYSTEMD_SERVICE}\n")
endif()
if (ARG_RENAME)
install(FILES ${_service_file} DESTINATION ${ARG_DESTINATION} RENAME ${ARG_RENAME})
else()
install(FILES ${_service_file} DESTINATION ${ARG_DESTINATION})
endif()
endfunction()