summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorThijs Paelman <thijs@ouroboros.rocks>2025-06-11 23:51:53 +0200
committerSander Vrijders <sander@ouroboros.rocks>2025-06-15 09:46:01 +0200
commitd2295c1c228f05beaf3ec8abe44a4ae114742076 (patch)
tree6650714e780b9ab3c8d770041ab1c3148ea7a19b /CMakeLists.txt
parent3b090f49a5df1b3cef6a635924b782e8ee93b419 (diff)
downloadouroboros-d2295c1c228f05beaf3ec8abe44a4ae114742076.tar.gz
ouroboros-d2295c1c228f05beaf3ec8abe44a4ae114742076.zip
build: Control systemd service install preciselybe
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>
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt68
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})