diff options
author | Jo-Philipp Wich <jo@mein.io> | 2022-03-02 00:09:28 +0100 |
---|---|---|
committer | Jo-Philipp Wich <jo@mein.io> | 2022-03-02 09:15:06 +0100 |
commit | a2a26caf4d06ea4e1e7c627ca7e0b4f3c3e164fc (patch) | |
tree | 456755adffe625b0af9b7dcf029602be94657289 /CMakeLists.txt | |
parent | 6b6d01f017bcac70aa0050d12e8e8c83f63fc13b (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.txt | 17 |
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) |