From 62cdfc3d16f815e24b9c62eb9a3bacd9aa8f621a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Gst=C3=A4dtner?= Date: Mon, 4 Mar 2013 19:05:09 +0100 Subject: [PATCH] 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. --- CMakeLists.txt | 13 +++++++++++++ systemd/CMakeLists.txt | 7 +++++++ systemd/ubus.service.in | 6 ++++++ systemd/ubus.socket.in | 8 ++++++++ 4 files changed, 34 insertions(+) create mode 100644 systemd/CMakeLists.txt create mode 100644 systemd/ubus.service.in create mode 100644 systemd/ubus.socket.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 01b43c0..22027ec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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() diff --git a/systemd/CMakeLists.txt b/systemd/CMakeLists.txt new file mode 100644 index 0000000..54b754b --- /dev/null +++ b/systemd/CMakeLists.txt @@ -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}) diff --git a/systemd/ubus.service.in b/systemd/ubus.service.in new file mode 100644 index 0000000..185a42f --- /dev/null +++ b/systemd/ubus.service.in @@ -0,0 +1,6 @@ +[Unit] +Description=OpenWrt micro bus +Requires=ubus.socket + +[Service] +ExecStart=@UBUSD_BINARY@ diff --git a/systemd/ubus.socket.in b/systemd/ubus.socket.in new file mode 100644 index 0000000..364beb7 --- /dev/null +++ b/systemd/ubus.socket.in @@ -0,0 +1,8 @@ +[Unit] +Description=OpenWrt micro bus socket + +[Socket] +ListenStream=@UBUS_UNIX_SOCKET@ + +[Install] +WantedBy=sockets.target