add systemd support

This adds basic systemd support, incl. socket activation.
If systemd build is disabled, there won't be any sign of it neither
during build nor after.
If systemd build is enabled (default), but systemd is not available,
no systemd stuff is installed, so there is no impact whatsoever.
This commit is contained in:
Thomas Gstädtner 2013-03-04 19:05:09 +01:00 committed by Felix Fietkau
parent 29a2ed2f17
commit 62cdfc3d16
4 changed files with 34 additions and 0 deletions

View file

@ -5,6 +5,7 @@ ADD_DEFINITIONS(-Os -Wall -Werror --std=gnu99 -g3 -Wmissing-declarations)
OPTION(BUILD_LUA "build Lua plugin" ON)
OPTION(BUILD_EXAMPLES "build examples" ON)
OPTION(ENABLE_SYSTEMD "systemd support" ON)
SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
SET(UBUS_UNIX_SOCKET "/var/run/ubus.sock")
@ -38,3 +39,15 @@ INSTALL(TARGETS ubusd
)
INSTALL(FILES ubusmsg.h ubus_common.h libubus.h DESTINATION include)
# FIXME: this works but certainly can be done better:
SET(UBUSD_BINARY "${CMAKE_INSTALL_PREFIX}/sbin/ubusd")
# do this after the installs so we have the proper paths
IF(ENABLE_SYSTEMD)
INCLUDE(FindPkgConfig)
PKG_CHECK_MODULES(SYSTEMD systemd)
IF(SYSTEMD_FOUND)
ADD_SUBDIRECTORY(systemd)
ENDIF()
ENDIF()

7
systemd/CMakeLists.txt Normal file
View file

@ -0,0 +1,7 @@
CONFIGURE_FILE(ubus.socket.in ubus.socket)
CONFIGURE_FILE(ubus.service.in ubus.service)
# Cmakes pkgconfig support is very limited, so for now just hardcode
SET(SYSTEMD_SYSUNIT_DIR "${SYSTEMD_PREFIX}/lib/systemd/system")
INSTALL(FILES ${CMAKE_BINARY_DIR}/systemd/ubus.socket ${CMAKE_BINARY_DIR}/systemd/ubus.service
DESTINATION ${SYSTEMD_SYSUNIT_DIR})

6
systemd/ubus.service.in Normal file
View file

@ -0,0 +1,6 @@
[Unit]
Description=OpenWrt micro bus
Requires=ubus.socket
[Service]
ExecStart=@UBUSD_BINARY@

8
systemd/ubus.socket.in Normal file
View file

@ -0,0 +1,8 @@
[Unit]
Description=OpenWrt micro bus socket
[Socket]
ListenStream=@UBUS_UNIX_SOCKET@
[Install]
WantedBy=sockets.target