# Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. #[=======================================================================[.rst: FindSYSTEMD ------- Finds the SYSTEMD library. Imported Targets ^^^^^^^^^^^^^^^^ This module provides the following imported targets, if found: ``SYSTEMD::systemd`` The SYSTEMD library Result Variables ^^^^^^^^^^^^^^^^ This will define the following variables: ``SYSTEMD_FOUND`` True if the system has the SYSTEMD library. ``SYSTEMD_VERSION`` The version of the SYSTEMD library which was found. ``SYSTEMD_INCLUDE_DIRS`` Include directories needed to use SYSTEMD. ``SYSTEMD_LIBRARIES`` Libraries needed to link to SYSTEMD. ``SYSTEMD_PROGRAM_FOUND`` True if library and headers were found ``SYSTEMD_UNIT_DIR`` Include directories Cache Variables ^^^^^^^^^^^^^^^ The following cache variables may also be set: ``SYSTEMD_INCLUDE_DIR`` The directory containing ``foo.h``. ``SYSTEMD_LIBRARY`` The path to the SYSTEMD library. #]=======================================================================] # # First, We'll check for libsystemd and define a target. # find_package(PkgConfig QUIET) pkg_check_modules(PC_SYSTEMD QUIET libsystemd) if (NOT PC_SYSTEMD_FOUND) # libsystemd not found. What about libsystemd-DAEMON? pkg_check_modules(PC_SYSTEMD QUIET libsystemd-daemon) if (PC_SYSTEMD_FOUND) message(STATUS "libsystemd-daemon found") else() message(STATUS "libsystemd-daemon not found") endif() endif() find_path(SYSTEMD_INCLUDE_DIR NAMES systemd/sd-bus.h PATHS ${PC_SYSTEMD_INCLUDE_DIRS} PATH_SUFFIXES systemd ) find_library(SYSTEMD_LIBRARY NAMES systemd PATHS ${PC_SYSTEMD_LIBRARY_DIRS} ) set(SYSTEMD_VERSION ${PC_SYSTEMD_VERSION}) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(SYSTEMD FOUND_VAR SYSTEMD_FOUND REQUIRED_VARS SYSTEMD_LIBRARY SYSTEMD_INCLUDE_DIR VERSION_VAR SYSTEMD_VERSION ) if(SYSTEMD_FOUND) set(SYSTEMD_LIBRARIES ${SYSTEMD_LIBRARY}) set(SYSTEMD_INCLUDE_DIRS ${SYSTEMD_INCLUDE_DIR}) set(SYSTEMD_DEFINITIONS ${PC_SYSTEMD_CFLAGS_OTHER}) if(NOT TARGET SYSTEMD::systemd) add_library(SYSTEMD::systemd UNKNOWN IMPORTED) set_target_properties(SYSTEMD::systemd PROPERTIES IMPORTED_LOCATION "${SYSTEMD_LIBRARY}" INTERFACE_COMPILE_OPTIONS "${PC_SYSTEMD_CFLAGS_OTHER}" INTERFACE_INCLUDE_DIRECTORIES "${SYSTEMD_INCLUDE_DIR}" ) endif() endif() mark_as_advanced( SYSTEMD_INCLUDE_DIR SYSTEMD_LIBRARY ) # # Next, We'll check for plain ol' systemd application, needed if we want to install the service unit files # pkg_check_modules(SYSTEMD_PROGRAM QUIET systemd) if (SYSTEMD_PROGRAM_FOUND) if ("${SYSTEMD_UNIT_DIR}" STREQUAL "") # Use pkg-config to look up the systemd unit install directory execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=systemdsystemunitdir systemd OUTPUT_VARIABLE SYSTEMD_UNIT_DIR) string(REGEX REPLACE "[ \t\n]+" "" SYSTEMD_UNIT_DIR "${SYSTEMD_UNIT_DIR}") endif() message(STATUS "systemd services install dir: ${SYSTEMD_UNIT_DIR}") else() if (SYSTEMD_UNIT_DIR) message (FATAL_ERROR "SYSTEMD_UNIT_DIR was defined but pkg-config was not able to find systemd!") endif() endif()