Author: Andy Green Date: Sun Feb 14 16:24:08 2021 +0000 openbsd: type cleaning diff --git a/.sai.json b/.sai.json index e04a67e..d748c10 100644 --- a/.sai.json +++ b/.sai.json @@ -19,7 +19,9 @@ "build": "mkdir build destdir;cd build;export CCACHE_DISABLE=1;cmake .. ${cmake};make -j4", "default": false }, - + "openbsd/x86_64-amd/llvm": { + "build": "mkdir build destdir;cd build;export CCACHE_DISABLE=1;cmake .. ${cmake};make -j4" + }, "w10/x86_64-amd/msvc": { "build": "mkdir build && cd build && set SAI_CPACK=\"-G ZIP\" && cmake .. -DSAI_LWS_INC_PATH=\"C:\\Program Files (x86)\\libwebsockets\\include\" -DSAI_LWS_LIB_PATH=\"C:\\Program Files (x86)\\libwebsockets\\lib\\websockets_static.lib\" -DSAI_EXT_PTHREAD_INCLUDE_DIR=\"C:\\Program Files (x86)\\pthreads\\include\" -DSAI_EXT_PTHREAD_LIBRARIES=\"C:\\Program Files (x86)\\pthreads\\lib\\x64\\libpthreadGC2.a\" -DLWS_OPENSSL_INCLUDE_DIRS=\"C:\\Program Files\\OpenSSL\\include\" -DSAI_GIT2_INC_PATH=\"C:\\Program Files (x86)\\libgit2\\include\" -DSAI_GIT2_LIB_PATH=\"C:\\Program Files (x86)\\libgit2\\lib\\git2.lib\" -DLWS_OPENSSL_LIBRARIES=\"C:\\Program Files\\OpenSSL\\lib\\libcrypto.lib;C:\\Program Files\\OpenSSL\\lib\\libssl.lib\" ${cmake} && cmake --build . --config DEBUG && set CTEST_OUTPUT_ON_FAILURE=1 && ctest . -C DEBUG -j4 --output-on-failure ${cpack}", "default": false diff --git a/READMEs/README-systemd-nspawn.md b/READMEs/README-systemd-nspawn.md index 720564b..1581cf2 100644 --- a/READMEs/README-systemd-nspawn.md +++ b/READMEs/README-systemd-nspawn.md @@ -181,6 +181,13 @@ Container # dnf install sudo make git gcc gcc-c++ cmake net-tools dhclient open Container # emerge dev-db/sqlite libgit2 gcc net-libs/mbedtls dev-libs/openssl cmake libuv libevent dev-libs/glib dev-libs/libev dbus pkgconf libcap ``` +### Specific to BSD type unix + +There are some assumptions in sai like the scripts will run by +`/bin/bash` and cmake should be on Sai's PATH, it means you may need +to symlink some things that don't match to /bin paths, eg, +`ln -sf /usr/local/bin/cmake /bin/cmake` + ## Step 3: Configure the container private networking Set up a hostname for the container by editing its `/etc/hostname`, ideally to @@ -328,11 +335,14 @@ Container # git clone https://libwebsockets.org/repo/libwebsockets Container # cd libwebsockets && mkdir build && cd build && \ cmake .. -DLWS_WITH_JOSE=1 -DLWS_UNIX_SOCK=1 -DLWS_WITH_STRUCT_JSON=1 \ -DLWS_WITH_STRUCT_SQLITE3=1 -DLWS_WITH_GENCRYPTO=1 -DLWS_WITH_SPAWN=1 \ - -DLWS_WITH_SECURE_STREAMS=1 -DLWS_WITH_THREADPOOL=1 -DLWS_WITH_JOSE=1 \ - -DLWS_WITH_PLUGINS_BUILTIN=1 + -DLWS_WITH_SECURE_STREAMS=1 -DLWS_WITH_THREADPOOL=1 \ + -DLWS_WITH_PLUGINS_BUILTIN=1 -DLWS_WITHOUT_DAEMONIZE=0 Container # make -j && make -j install && ldconfig ``` +(You only require `LWS_WITHOUT_DAEMONIZE=0` for FreeBSD and OpenBSD rc.d +script integration.) + For OSX, you'll need to add something like `-DLWS_OPENSSL_INCLUDE_DIRS=/usr/local/opt/openssl@1.1/include -DLWS_OPENSSL_LIBRARIES="/usr/local/opt/openssl/lib/libssl.dylib;/usr/local/opt/openssl/lib/libcrypto.dylib"` to the cmake line For newer M1 based OSX diff --git a/assets/openbsd.svg b/assets/openbsd.svg new file mode 100644 index 0000000..36ff866 --- /dev/null +++ b/assets/openbsd.svg @@ -0,0 +1,27 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + diff --git a/scripts/etc-rc.d-sai_builder-OpenBSD b/scripts/etc-rc.d-sai_builder-OpenBSD new file mode 100644 index 0000000..7f4eda3 --- /dev/null +++ b/scripts/etc-rc.d-sai_builder-OpenBSD @@ -0,0 +1,15 @@ +#!/bin/sh +# +daemon="/usr/local/bin/sai-builder" +daemon_flags="-D" + +. /etc/rc.d/rc.subr + +pexp="sai-builder: ${Daemon}${daemon_flags:+ ${daemon_flags}}" + +rc_reload() { + ${daemon} ${daemon_flags} -t && pkill -HUP -xf "${pexp}" +} + +rc_cmd $1 + diff --git a/src/builder/CMakeLists.txt b/src/builder/CMakeLists.txt index f8cfae0..1e234ae 100644 --- a/src/builder/CMakeLists.txt +++ b/src/builder/CMakeLists.txt @@ -1,3 +1,4 @@ +set(SUB "sai-builder") set(CPACK_DEBIAN_BUILDER_PACKAGE_NAME "sai-builder") set(SRCS @@ -19,9 +20,9 @@ require_lws_config(LWS_WITH_SECURE_STREAMS 1 requirements) require_lws_config(LWS_WITH_DIR 1 requirements) if (requirements) - add_executable("sai-builder" ${SRCS}) + add_executable(${SUB} ${SRCS}) if (APPLE) - set_property(TARGET sai-builder PROPERTY MACOSX_RPATH YES) + set_property(TARGET ${SUB} PROPERTY MACOSX_RPATH YES) endif() # @@ -41,7 +42,7 @@ if (requirements) message(FATAL_ERROR " Unable to find libgit2") endif() - target_link_libraries("sai-builder" ${SAI_GIT2_LIB_PATH}) + target_link_libraries(${SUB} ${SAI_GIT2_LIB_PATH}) endif() set(CMAKE_REQUIRED_LIBRARIES ${SAI_GIT2_LIB_PATH}) @@ -71,33 +72,34 @@ if (requirements) #configure_file("${PROJECT_SOURCE_DIR}/cmake/sai_config_private.h.in" # "${PROJECT_BINARY_DIR}/sai_config_private.h") # - #target_include_directories("sai-builder" PRIVATE "${PROJECT_BINARY_DIR}") + #target_include_directories(${SUB} PRIVATE "${PROJECT_BINARY_DIR}") if (SAI_LWS_INC_PATH) - target_include_directories("sai-builder" PRIVATE ${SAI_LWS_INC_PATH}) + target_include_directories(${SUB} PRIVATE ${SAI_LWS_INC_PATH}) endif() if (HAS_LIBCAP) find_library(CAP_LIB_PATH NAMES "cap") endif() - target_link_libraries("sai-builder" ${SAI_LWS_LIB_PATH}) + target_link_libraries(${SUB} websockets ${SAI_LWS_LIB_PATH}) + message("LWS_OPENSSL_LIBRARIES ${SUB} '${LWS_OPENSSL_LIBRARIES}'") if (LWS_OPENSSL_LIBRARIES) - target_link_libraries("sai-builder" ${LWS_OPENSSL_LIBRARIES}) + target_link_libraries(${SUB} ${LWS_OPENSSL_LIBRARIES}) endif() if (SAI_EXT_PTHREAD_LIBRARIES) - target_link_libraries("sai-builder" ${SAI_EXT_PTHREAD_LIBRARIES}) + target_link_libraries(${SUB} ${SAI_EXT_PTHREAD_LIBRARIES}) endif() if (HAS_LIBCAP) - target_link_libraries("sai-builder" ${CAP_LIB_PATH}) + target_link_libraries(${SUB} ${CAP_LIB_PATH}) endif() if (MSVC OR WIN32) - target_link_libraries("sai-builder" ws2_32.lib userenv.lib psapi.lib iphlpapi.lib) + target_link_libraries(${SUB} ws2_32.lib userenv.lib psapi.lib iphlpapi.lib) endif() install(TARGETS "sai-builder" diff --git a/src/builder/b-sai.c b/src/builder/b-sai.c index 206173b..92566b5 100644 --- a/src/builder/b-sai.c +++ b/src/builder/b-sai.c @@ -349,7 +349,7 @@ int main(int argc, const char **argv) if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); -#if defined(__NetBSD__) +#if defined(__NetBSD__) || defined(__OpenBSD__) if (lws_cmdline_option(argc, argv, "-D")) { if (lws_daemonize("/var/run/sai_builder.pid")) return 1; diff --git a/src/device/CMakeLists.txt b/src/device/CMakeLists.txt index c800fa4..a69acb2 100644 --- a/src/device/CMakeLists.txt +++ b/src/device/CMakeLists.txt @@ -1,3 +1,4 @@ +set(SUB "sai-device") set(CPACK_DEBIAN_BUILDER_PACKAGE_NAME "sai-device") set(SRCS @@ -24,10 +25,11 @@ if (requirements) target_include_directories("sai-device" PRIVATE ${SAI_LWS_INC_PATH}) endif() - target_link_libraries("sai-device" ${SAI_LWS_LIB_PATH}) + target_link_libraries(${SUB} websockets ${SAI_LWS_LIB_PATH}) + message("LWS_OPENSSL_LIBRARIES ${SUB} '${LWS_OPENSSL_LIBRARIES}'") if (LWS_OPENSSL_LIBRARIES) - target_link_libraries("sai-device" ${LWS_OPENSSL_LIBRARIES}) + target_link_libraries(${SUB} ${LWS_OPENSSL_LIBRARIES}) endif() if (SAI_EXT_PTHREAD_LIBRARIES) diff --git a/src/expect/CMakeLists.txt b/src/expect/CMakeLists.txt index 31af912..84dc913 100644 --- a/src/expect/CMakeLists.txt +++ b/src/expect/CMakeLists.txt @@ -1,3 +1,4 @@ +set(SUB "sai-expect") set(CPACK_DEBIAN_BUILDER_PACKAGE_NAME "sai-expect") set(SRCS @@ -30,10 +31,11 @@ if (requirements AND NOT MSVC) target_include_directories("sai-expect" PRIVATE ${SAI_LWS_INC_PATH}) endif() - target_link_libraries("sai-expect" ${SAI_LWS_LIB_PATH}) + target_link_libraries(${SUB} websockets ${SAI_LWS_LIB_PATH}) + message("LWS_OPENSSL_LIBRARIES ${SUB} '${LWS_OPENSSL_LIBRARIES}'") if (LWS_OPENSSL_LIBRARIES) - target_link_libraries("sai-expect" ${LWS_OPENSSL_LIBRARIES}) + target_link_libraries(${SUB} ${LWS_OPENSSL_LIBRARIES}) endif() if (SAI_EXT_PTHREAD_LIBRARIES AND NOT MSVC) diff --git a/src/jig/CMakeLists.txt b/src/jig/CMakeLists.txt index 0c792cc..c007c9b 100644 --- a/src/jig/CMakeLists.txt +++ b/src/jig/CMakeLists.txt @@ -1,3 +1,4 @@ +set(SUB "sai-jig") set(CPACK_DEBIAN_BUILDER_PACKAGE_NAME "sai-jig") set(SRCS @@ -29,10 +30,11 @@ if (requirements) set_property(TARGET sai-device PROPERTY MACOSX_RPATH YES) endif() - target_link_libraries("sai-jig" ${SAI_LWS_LIB_PATH}) + target_link_libraries(${SUB} websockets ${SAI_LWS_LIB_PATH}) + message("LWS_OPENSSL_LIBRARIES ${SUB} '${LWS_OPENSSL_LIBRARIES}'") if (LWS_OPENSSL_LIBRARIES) - target_link_libraries("sai-jig" ${LWS_OPENSSL_LIBRARIES}) + target_link_libraries(${SUB} ${LWS_OPENSSL_LIBRARIES}) endif() if (SAI_EXT_PTHREAD_LIBRARIES) diff --git a/src/server/s-comms.c b/src/server/s-comms.c index e83df12..f132d6d 100644 --- a/src/server/s-comms.c +++ b/src/server/s-comms.c @@ -321,7 +321,7 @@ sai_get_head_status(struct vhd *vhd, const char *projname) return -1; e = lws_container_of(o.head, sai_event_t, list); - state = e->state; + state = (int)e->state; lwsac_free(&ac); @@ -485,7 +485,8 @@ callback_ws(struct lws *wsi, enum lws_callback_reasons reason, void *user, if (!strncmp(pss->notification_sig, hmac_names[n], strlen(hmac_names[n]))) { - pss->hmac_type = n + 1; + pss->hmac_type = + (enum lws_genhmac_types)(n + 1); break; } diff --git a/src/server/s-notification.c b/src/server/s-notification.c index ed24838..a3af6fa 100644 --- a/src/server/s-notification.c +++ b/src/server/s-notification.c @@ -330,7 +330,7 @@ sai_saifile_lejp_cb(struct lejp_ctx *ctx, char reason) LWS_TOKENIZE_F_SLASH_NONTERM | LWS_TOKENIZE_F_MINUS_NONTERM; do { - ts.e = lws_tokenize(&ts); + ts.e = (int8_t)lws_tokenize(&ts); if (ts.e != LWS_TOKZE_TOKEN) continue; @@ -447,7 +447,7 @@ sai_saifile_lejp_cb(struct lejp_ctx *ctx, char reason) LWS_TOKENIZE_F_MINUS_NONTERM; do { - ts.e = lws_tokenize(&ts); + ts.e = (int8_t)lws_tokenize(&ts); if (ts.e != LWS_TOKZE_TOKEN) continue; @@ -733,7 +733,7 @@ sai_notification_lejp_cb(struct lejp_ctx *ctx, char reason) case LEJPN_ACTION: for (n = 0; n < (int)LWS_ARRAY_SIZE(notifaction_action_names);n++) if (!strcmp(ctx->buf, notifaction_action_names[n])) { - sn->action = n + 1; + sn->action = (sai_notification_action_t)(n + 1); return 0; } diff --git a/src/server/s-task.c b/src/server/s-task.c index 6149701..0261811 100644 --- a/src/server/s-task.c +++ b/src/server/s-task.c @@ -235,7 +235,7 @@ sais_set_task_state(struct vhd *vhd, const char *builder_name, goto bail; } - sais_eventchange(vhd->h_ss_websrv, event_uuid, sta); + sais_eventchange(vhd->h_ss_websrv, event_uuid, (int)sta); } } diff --git a/src/server/s-websrv.c b/src/server/s-websrv.c index 72eff5a..caf1d25 100644 --- a/src/server/s-websrv.c +++ b/src/server/s-websrv.c @@ -167,8 +167,8 @@ sais_list_builders(struct vhd *vhd) *p++ = ','; subsequent = 1; - n = lws_struct_json_serialize(js, (unsigned char *)p, - lws_ptr_diff_size_t(end, p), &w); + n = (int)lws_struct_json_serialize(js, (unsigned char *)p, + lws_ptr_diff_size_t(end, p), &w); p += w; lws_struct_json_serialize_destroy(&js); @@ -478,7 +478,7 @@ websrvss_srv_state(void *userobj, void *sh, lws_ss_constate_t state, websrvss_srv_t *m = (websrvss_srv_t *)userobj; lwsl_user("%s: %p %s, ord 0x%x\n", __func__, m->ss, - lws_ss_state_name(state), (unsigned int)ack); + lws_ss_state_name((int)state), (unsigned int)ack); switch (state) { case LWSSSCS_DISCONNECTED: diff --git a/src/server/s-ws-builder.c b/src/server/s-ws-builder.c index b931311..b92b6f0 100644 --- a/src/server/s-ws-builder.c +++ b/src/server/s-ws-builder.c @@ -710,7 +710,7 @@ sais_ws_json_tx_builder(struct vhd *vhd, struct pss *pss, uint8_t *buf, if (!js) return 1; - n = lws_struct_json_serialize(js, p, lws_ptr_diff_size_t(end, p), &w); + n = (int)lws_struct_json_serialize(js, p, lws_ptr_diff_size_t(end, p), &w); lws_struct_json_serialize_destroy(&js); lws_dll2_remove(&c->list); @@ -743,7 +743,7 @@ sais_ws_json_tx_builder(struct vhd *vhd, struct pss *pss, uint8_t *buf, if (!js) return 1; - n = lws_struct_json_serialize(js, p, lws_ptr_diff_size_t(end, p), &w); + n = (int)lws_struct_json_serialize(js, p, lws_ptr_diff_size_t(end, p), &w); lws_struct_json_serialize_destroy(&js); pss->one_event = NULL; lwsac_free(&task->ac_task_container); @@ -769,7 +769,8 @@ send_json: // lwsl_hexdump_notice(start, p - start); - if (lws_write(pss->wsi, start, lws_ptr_diff_size_t(p, start), flags) < 0) + if (lws_write(pss->wsi, start, lws_ptr_diff_size_t(p, start), + (enum lws_write_protocol)flags) < 0) return -1; lws_callback_on_writable(pss->wsi); diff --git a/src/web/CMakeLists.txt b/src/web/CMakeLists.txt index 25b2b6a..5e0c4a1 100644 --- a/src/web/CMakeLists.txt +++ b/src/web/CMakeLists.txt @@ -49,6 +49,7 @@ if (requirements) target_link_libraries(${SUB} websockets ${SAI_LWS_LIB_PATH}) + message("LWS_OPENSSL_LIBRARIES ${SUB} '${LWS_OPENSSL_LIBRARIES}'") if (LWS_OPENSSL_LIBRARIES) target_link_libraries(${SUB} ${LWS_OPENSSL_LIBRARIES}) endif() diff --git a/src/web/w-comms.c b/src/web/w-comms.c index 1efc565..2dc4511 100644 --- a/src/web/w-comms.c +++ b/src/web/w-comms.c @@ -315,7 +315,7 @@ sai_get_head_status(struct vhd *vhd, const char *projname) return -1; e = lws_container_of(o.head, sai_event_t, list); - state = e->state; + state = (int)e->state; lwsac_free(&ac); diff --git a/src/web/w-websrv.c b/src/web/w-websrv.c index a7e849a..a3d3257 100644 --- a/src/web/w-websrv.c +++ b/src/web/w-websrv.c @@ -194,7 +194,7 @@ saiw_lp_state(void *userobj, void *sh, lws_ss_constate_t state, saiw_websrv_t *m = (saiw_websrv_t *)userobj; struct vhd *vhd = (struct vhd *)m->opaque_data; - lwsl_user("%s: %s, ord 0x%x\n", __func__, lws_ss_state_name(state), + lwsl_user("%s: %s, ord 0x%x\n", __func__, lws_ss_state_name((int)state), (unsigned int)ack); switch (state) { diff --git a/src/web/w-ws-browser.c b/src/web/w-ws-browser.c index 76324ee..dfa6418 100644 --- a/src/web/w-ws-browser.c +++ b/src/web/w-ws-browser.c @@ -672,7 +672,8 @@ again: return 0; } - n = lws_struct_json_serialize(js, p, lws_ptr_diff_size_t(end, p), &w); + n = (int)lws_struct_json_serialize(js, p, + lws_ptr_diff_size_t(end, p), &w); lws_struct_json_serialize_destroy(&js); if (n == LSJS_RESULT_ERROR) { lwsl_notice("%s: json ser error\n", __func__); @@ -818,7 +819,7 @@ again: p += lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), "{\"e\":"); - n = lws_struct_json_serialize(js, p, lws_ptr_diff_size_t(end, p), &w); + n = (int)lws_struct_json_serialize(js, p, lws_ptr_diff_size_t(end, p), &w); lws_struct_json_serialize_destroy(&js); switch (n) { case LSJS_RESULT_ERROR: @@ -903,7 +904,7 @@ enum_tasks: lsm_schema_json_map_task, LWS_ARRAY_SIZE(lsm_schema_json_map_task), 0, t); - n = lws_struct_json_serialize(js, p, lws_ptr_diff_size_t(end, p), &w); + n = (int)lws_struct_json_serialize(js, p, lws_ptr_diff_size_t(end, p), &w); lws_struct_json_serialize_destroy(&js); lwsac_free(&task_ac); p += w; @@ -1058,7 +1059,7 @@ b_finish: return 1; } - n = lws_struct_json_serialize(js, p, lws_ptr_diff_size_t(end, p), &w); + n = (int)lws_struct_json_serialize(js, p, lws_ptr_diff_size_t(end, p), &w); lws_struct_json_serialize_destroy(&js); /* @@ -1140,7 +1141,7 @@ b_finish: return 1; } - n = lws_struct_json_serialize(js, p, lws_ptr_diff_size_t(end, p), &w); + n = (int)lws_struct_json_serialize(js, p, lws_ptr_diff_size_t(end, p), &w); lws_struct_json_serialize_destroy(&js); if (n == LSJS_RESULT_ERROR) { saiw_dealloc_sched(sch); @@ -1186,7 +1187,8 @@ send_it: saiw_dealloc_sched(sch); } - if (lws_write(pss->wsi, start, lws_ptr_diff_size_t(p, start), flags) < 0) + if (lws_write(pss->wsi, start, lws_ptr_diff_size_t(p, start), + (enum lws_write_protocol)flags) < 0) return -1; lws_callback_on_writable(pss->wsi);