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