diff options
| author | Thijs Paelman <thijs@ouroboros.rocks> | 2025-06-11 23:51:53 +0200 | 
|---|---|---|
| committer | Sander Vrijders <sander@ouroboros.rocks> | 2025-06-15 09:46:01 +0200 | 
| commit | d2295c1c228f05beaf3ec8abe44a4ae114742076 (patch) | |
| tree | 6650714e780b9ab3c8d770041ab1c3148ea7a19b | |
| parent | 3b090f49a5df1b3cef6a635924b782e8ee93b419 (diff) | |
| download | ouroboros-d2295c1c228f05beaf3ec8abe44a4ae114742076.tar.gz ouroboros-d2295c1c228f05beaf3ec8abe44a4ae114742076.zip | |
build: Control systemd service install precisely
If & where the systemd service files are installed should be
controllable by the user, while keeping a good default*. This commit
adds the flexibility to choose, while keeping the options clear.
*A good default is already provided before this commit and remains the
same.
Signed-off-by: Thijs Paelman <thijs@ouroboros.rocks>
Signed-off-by: Sander Vrijders <sander@ouroboros.rocks>
| -rw-r--r-- | CMakeLists.txt | 68 | 
1 files changed, 46 insertions, 22 deletions
| diff --git a/CMakeLists.txt b/CMakeLists.txt index c69b89b3..22196e64 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -131,29 +131,53 @@ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ouroboros-irm.pc"    DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")  # modified from https://github.com/ximion/limba -pkg_check_modules(SYSTEMD "systemd") -if (SYSTEMD_FOUND) -  if ("${SYSTEMD_UNITDIR}" STREQUAL "") -    execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} -      --variable=systemdsystemunitdir systemd -      OUTPUT_VARIABLE SYSTEMD_UNITDIR) -      string(REGEX REPLACE "[ \t\n]+" "" SYSTEMD_UNITDIR -      "${SYSTEMD_UNITDIR}" -    ) -  endif () -endif () -if (NOT ${SYSTEMD_UNITDIR} STREQUAL "") -  message(STATUS "Installing systemd service in: ${SYSTEMD_UNITDIR}") -  if (LIBTOML_LIBRARIES AND NOT DISABLE_CONFIGFILE) -    set (CONFIGURE_STRING "--config ${OUROBOROS_CONFIG_DIR}${OUROBOROS_CONFIG_FILE}") -  else () -    set (CONFIGURE_STRING "") +set(SYSTEMD_INSTALL_FILES "DETECT" CACHE STRING +  "Install systemd .service files (NO (never), DETECT (use pkg-config - default),\ +  FORCE (always - see SYSTEMD_UNITDIR_OVERRIDE))") +set(SYSTEMD_UNITDIR_OVERRIDE "" CACHE PATH +  "Path to install systemd files. When SYSTEMD_INSTALL_FILES == DETECT, this\ +  can be empty to automatically determine the path. Cannot be empty when FORCE.") + +if (SYSTEMD_INSTALL_FILES STREQUAL "DETECT" OR SYSTEMD_INSTALL_FILES STREQUAL "FORCE") +  if (SYSTEMD_INSTALL_FILES STREQUAL "DETECT") +    pkg_check_modules(SYSTEMD "systemd") +    if (SYSTEMD_FOUND) +      if ("${SYSTEMD_UNITDIR_OVERRIDE}" STREQUAL "") +        execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} +          --variable=systemdsystemunitdir systemd +          OUTPUT_VARIABLE SYSTEMD_UNITDIR_INTERNAL) +          string(REGEX REPLACE "[ \t\n]+" "" SYSTEMD_UNITDIR_INTERNAL +          "${SYSTEMD_UNITDIR_INTERNAL}" +        ) +      else () +        set(SYSTEMD_UNITDIR_INTERNAL "${SYSTEMD_UNITDIR_OVERRIDE}") +      endif () +    else () +      set(SYSTEMD_UNITDIR_INTERNAL "") +    endif () +  elseif (SYSTEMD_INSTALL_FILES STREQUAL "FORCE") +    if ("${SYSTEMD_UNITDIR_OVERRIDE}" STREQUAL "") +      message(FATAL_ERROR "Systemd installation required by user, but no path\ +             provided with SYSTEMD_UNITDIR_OVERRIDE.") +    else () +      set(SYSTEMD_UNITDIR_INTERNAL "${SYSTEMD_UNITDIR_OVERRIDE}") +    endif () +  endif() +  if (NOT ${SYSTEMD_UNITDIR_INTERNAL} STREQUAL "") +    message(STATUS "Systemd service installation enabled to: ${SYSTEMD_UNITDIR_INTERNAL}") +    if (LIBTOML_LIBRARIES AND NOT DISABLE_CONFIGFILE) +      set (CONFIGURE_STRING "--config ${OUROBOROS_CONFIG_DIR}${OUROBOROS_CONFIG_FILE}") +    else () +      set (CONFIGURE_STRING "") +    endif () +    configure_file("${CMAKE_CURRENT_SOURCE_DIR}/ouroboros.service.in" +      "${CMAKE_CURRENT_BINARY_DIR}/ouroboros.service" @ONLY) +    install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ouroboros.service" +      DESTINATION "${SYSTEMD_UNITDIR_INTERNAL}")    endif () -  configure_file("${CMAKE_CURRENT_SOURCE_DIR}/ouroboros.service.in" -    "${CMAKE_CURRENT_BINARY_DIR}/ouroboros.service" @ONLY) -  install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ouroboros.service" -    DESTINATION "${SYSTEMD_UNITDIR}") -endif () +else () +  message(STATUS "Systemd service installation disabled by user") +endif()  enable_testing()  add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}) | 
