summaryrefslogtreecommitdiffhomepage
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2022-03-02 00:09:28 +0100
committerJo-Philipp Wich <jo@mein.io>2022-03-02 09:15:06 +0100
commita2a26caf4d06ea4e1e7c627ca7e0b4f3c3e164fc (patch)
tree456755adffe625b0af9b7dcf029602be94657289 /CMakeLists.txt
parent6b6d01f017bcac70aa0050d12e8e8c83f63fc13b (diff)
lib: introduce uloop binding
The uloop module allows controlling the uloop event loop and supports adding timeouts, processes and file descriptors. Example: #!ucode -RS let fs = require("fs"); let uloop = require("uloop"); let fd1 = fs.popen("echo 1; sleep 1; echo 2; sleep 1; echo 3", "r"); let fd2 = fs.popen("echo 4; sleep 1; echo 5; sleep 1; echo 6", "r"); function fd_read_callback(flags) { if (flags & uloop.ULOOP_READ) { let line = this.handle().read("line"); printf("Line from fd <%s/%d>: <%s>\n", this, this.fileno(), trim(line)); } } uloop.init(); uloop.timer(1500, function() { printf("Timeout after 1500ms\n"); }); uloop.handle(fd1, fd_read_callback, uloop.ULOOP_READ); uloop.handle(fd2, fd_read_callback, uloop.ULOOP_READ); uloop.process("date", [ "+%s" ], { LC_ALL: "C" }, function(exitcode) { printf("Date command exited with code %d\n", exitcode); }); uloop.run(); Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt17
1 files changed, 17 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7c84fc3..8e7322c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -27,6 +27,7 @@ OPTION(RTNL_SUPPORT "Route Netlink plugin support" ON)
OPTION(NL80211_SUPPORT "Wireless Netlink plugin support" ON)
OPTION(RESOLV_SUPPORT "NS resolve plugin support" ON)
OPTION(STRUCT_SUPPORT "Struct plugin support" ON)
+OPTION(ULOOP_SUPPORT "Uloop plugin support" ON)
SET(LIB_SEARCH_PATH "${CMAKE_INSTALL_PREFIX}/lib/ucode/*.so:${CMAKE_INSTALL_PREFIX}/share/ucode/*.uc:./*.so:./*.uc" CACHE STRING "Default library search path")
STRING(REPLACE ":" "\", \"" LIB_SEARCH_DEFINE "${LIB_SEARCH_PATH}")
@@ -167,6 +168,22 @@ IF(STRUCT_SUPPORT)
ENDIF()
ENDIF()
+IF(ULOOP_SUPPORT)
+ FIND_LIBRARY(ubox NAMES ubox)
+ FIND_PATH(uloop_include_dir NAMES libubox/uloop.h)
+ INCLUDE_DIRECTORIES(${uloop_include_dir})
+ SET(LIBRARIES ${LIBRARIES} uloop_lib)
+ ADD_LIBRARY(uloop_lib MODULE lib/uloop.c)
+ SET_TARGET_PROPERTIES(uloop_lib PROPERTIES OUTPUT_NAME uloop PREFIX "")
+ SET(CMAKE_REQUIRED_LIBRARIES ubox)
+ CHECK_FUNCTION_EXISTS(uloop_timeout_remaining64 REMAINING64_FUNCTION_EXISTS)
+ UNSET(CMAKE_REQUIRED_LIBRARIES)
+ IF (REMAINING64_FUNCTION_EXISTS)
+ TARGET_COMPILE_DEFINITIONS(uloop_lib PUBLIC HAVE_ULOOP_TIMEOUT_REMAINING64)
+ ENDIF()
+ TARGET_LINK_LIBRARIES(uloop_lib ${ubox})
+ENDIF()
+
IF(UNIT_TESTING)
ENABLE_TESTING()
ADD_DEFINITIONS(-DUNIT_TESTING)