diff --git a/cmake/systemd.cmake b/cmake/systemd.cmake index ed021227dfc31fb52a3f0a246d88095fcbeba5c6..4cf2acb8e053c5c4b2ba291e34a31559f90e2da0 100644 --- a/cmake/systemd.cmake +++ b/cmake/systemd.cmake @@ -1,32 +1,51 @@ -find_package(PkgConfig QUIET) -if (PKG_CONFIG_FOUND) - pkg_check_modules(SYSTEMD "systemd") +# Disable systemd and sysvinit by default if target is not Linux +if (NOT DEFINED WITH_SYSTEMD AND NOT TARGET_OS_LINUX) + set(WITH_SYSTEMD OFF) +endif() +if (NOT DEFINED WITH_SYSVINIT AND NOT TARGET_OS_LINUX) + set(WITH_SYSVINIT OFF) +endif() + +# try to find systemd if it wasn't implicitly disabled +if (NOT DEFINED WITH_SYSTEMD OR WITH_SYSTEMD) + find_package(PkgConfig QUIET) + if (PKG_CONFIG_FOUND) + pkg_check_modules(SYSTEMD "systemd") + endif() endif() if (NOT SYSTEMD_FOUND) + # systemd was implicitly requsted by the user if (WITH_SYSTEMD) message (FATAL_ERROR "WITH_SYSTEMD is defined, " "but we can't find systemd using pkg-config") endif() set(WITH_SYSTEMD "OFF") - file(APPEND "${_OptionalPackagesFile}" "-- WITH_SYSTEMD=OFF\n") - return() -endif() + # Fallback to sysvinit if it wasn't implicitly enabled + if (NOT DEFINED WITH_SYSVINIT) + set(WITH_SYSVINIT ON) + endif() +else() + if ("${SYSTEMD_UNIT_DIR}" STREQUAL "") + 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() -if ("${SYSTEMD_UNIT_DIR}" STREQUAL "") - 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() + if ("${SYSTEMD_TMPFILES_DIR}" STREQUAL "") + # NOTE: don't use ${CMAKE_INSTALL_LIBDIR} here + set(SYSTEMD_TMPFILES_DIR "${CMAKE_INSTALL_PREFIX}/lib/tmpfiles.d") + endif() -if ("${SYSTEMD_TMPFILES_DIR}" STREQUAL "") - # NOTE: don't use ${CMAKE_INSTALL_LIBDIR} here - set(SYSTEMD_TMPFILES_DIR "${CMAKE_INSTALL_PREFIX}/lib/tmpfiles.d") + set(WITH_SYSTEMD "ON") + message(STATUS "SYSTEMD_UNIT_DIR: ${SYSTEMD_UNIT_DIR}") + message(STATUS "SYSTEMD_TMPFILES_DIR: ${SYSTEMD_TMPFILES_DIR}") + # Disable sysvinit if it wasn't implicitly requested + if (NOT DEFINED WITH_SYSVINIT) + set(WITH_SYSVINIT "OFF") + endif() endif() - -set(WITH_SYSTEMD "ON") -message(STATUS "SYSTEMD_UNIT_DIR: ${SYSTEMD_UNIT_DIR}") -message(STATUS "SYSTEMD_TMPFILES_DIR: ${SYSTEMD_TMPFILES_DIR}") -file(APPEND "${_OptionalPackagesFile}" "-- WITH_SYSTEMD=ON\n") +file(APPEND "${_OptionalPackagesFile}" "-- WITH_SYSTEMD=${WITH_SYSTEMD}\n") +file(APPEND "${_OptionalPackagesFile}" "-- WITH_SYSVINIT=${WITH_SYSVINIT}\n") diff --git a/extra/dist/CMakeLists.txt b/extra/dist/CMakeLists.txt index 9924bd8dfb4c0b04fea213644351f3bb2a4462d1..35a13dc3e19fb19e123502bc65d4264ad6819eb4 100644 --- a/extra/dist/CMakeLists.txt +++ b/extra/dist/CMakeLists.txt @@ -113,10 +113,9 @@ if (WITH_SYSTEMD) OWNER_READ OWNER_WRITE GROUP_READ GROUP_READ WORLD_READ WORLD_READ) +endif() -elseif(TARGET_OS_FREEBSD) - message (STATUS "Skip installation of init.d scripts on FreeBSD") -else() # sysvinit +if(WITH_SYSVINIT) message (STATUS "Using scripts for sysvinit") install (FILES tarantool.init DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/init.d/ RENAME tarantool