From 8ebcc1fa354fac87771caa88ee67600412bbcb57 Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Tue, 25 Aug 2026 19:39:56 -0400 Subject: Global temp path, android build fixes Signed-off-by: Andrew Opalach --- meson.build | 60 ++++++++++++++++++++++++++++--------------- src/common.c | 40 ++++++++++++++++++++++++++--- src/common.h | 5 +++- src/curl/curl.c | 2 +- src/util/buffer.c | 1 + subprojects/jansson.wrap | 4 +-- subprojects/libalabaster.wrap | 4 +-- subprojects/libcurl.wrap | 4 +-- subprojects/zlib.wrap | 4 +-- 9 files changed, 89 insertions(+), 35 deletions(-) diff --git a/meson.build b/meson.build index 751f6f6..9ebce68 100644 --- a/meson.build +++ b/meson.build @@ -4,11 +4,15 @@ project('libnaunet', 'c', version: '0.01', license: 'GPL-3.0-only') compiler = meson.get_compiler('c') -cmake = import('cmake') is_debug = get_option('debug') is_minsize = get_option('optimization') == 's' is_windows = host_machine.system() == 'windows' +is_android = host_machine.system() == 'android' +is_static_shared_lib = is_android + +cmake = import('cmake') +cmake_reltype = is_minsize ? 'MinSizeRel' : 'Release' naunet_src = [ 'src/common.c', @@ -57,33 +61,44 @@ if get_option('event-loop').enabled() libcurl_found = libcurl.found() endif if not libcurl_found + bare_minimum_curl = is_android curl_opts = cmake.subproject_options() - reltype = is_minsize ? 'MinSizeRel' : 'Release' - curl_opts.add_cmake_defines({ 'CMAKE_BUILD_TYPE': is_debug ? 'Debug' : reltype }) + curl_opts.add_cmake_defines({ 'CMAKE_BUILD_TYPE': is_debug ? 'Debug' : cmake_reltype }) + curl_opts.add_cmake_defines({ 'CMAKE_POSITION_INDEPENDENT_CODE': is_static_shared_lib }) + curl_opts.add_cmake_defines({ 'BUILD_LIBCURL_DOCS': false }) + curl_opts.add_cmake_defines({ 'BUILD_MISC_DOCS': false }) + curl_opts.add_cmake_defines({ 'ENABLE_CURL_MANUAL': false }) + curl_opts.add_cmake_defines({ 'BUILD_TESTING': false }) curl_opts.add_cmake_defines({ 'BUILD_CURL_EXE': false }) curl_opts.add_cmake_defines({ 'BUILD_SHARED_LIBS': false }) curl_opts.add_cmake_defines({ 'BUILD_STATIC_LIBS': true }) + curl_opts.add_cmake_defines({ 'ENABLE_WEBSOCKETS': true }) + if not bare_minimum_curl + curl_opts.add_cmake_defines({ 'CURL_USE_OPENSSL': true }) + openssl = dependency('openssl') + naunet_deps += [openssl] + else + curl_opts.add_cmake_defines({ 'CURL_USE_OPENSSL': false }) + endif + if not bare_minimum_curl + if is_windows + curl_opts.add_cmake_defines({ 'USE_WIN32_IDN': true }) + naunet_deps += [ + compiler.find_library('bcrypt'), + compiler.find_library('crypt32') + ] + else + curl_opts.add_cmake_defines({ 'USE_LIBIDN2': true }) + libidn2 = dependency('libidn2') + naunet_deps += [libidn2] + endif + endif curl_opts.add_cmake_defines({ 'CURL_USE_LIBSSH2': false }) curl_opts.add_cmake_defines({ 'CURL_USE_LIBPSL': false }) curl_opts.add_cmake_defines({ 'CURL_DISABLE_LDAP': true }) - curl_opts.add_cmake_defines({ 'CURL_USE_OPENSSL': true }) - curl_opts.add_cmake_defines({ 'ENABLE_WEBSOCKETS': true }) libcurl = cmake.subproject('libcurl', options: curl_opts).dependency('libcurl_static') zlib = dependency('zlib') - openssl = dependency('openssl') - naunet_deps += [zlib, openssl] - if is_windows - curl_opts.add_cmake_defines({ 'USE_LIBIDN2': false }) - curl_opts.add_cmake_defines({ 'USE_WIN32_IDN': true }) - naunet_deps += [ - compiler.find_library('bcrypt'), - compiler.find_library('crypt32') - ] - else - curl_opts.add_cmake_defines({ 'USE_LIBIDN2': true }) - libidn2 = dependency('libidn2') - naunet_deps += [libidn2] - endif + naunet_deps += [zlib] endif naunet_has_curl = libcurl.found() if naunet_has_curl @@ -109,8 +124,8 @@ if get_option('json').enabled() endif if not jansson_found jansson_opts = cmake.subproject_options() - reltype = is_minsize ? 'MinSizeRel' : 'Release' - jansson_opts.add_cmake_defines({ 'CMAKE_BUILD_TYPE': is_debug ? 'Debug' : reltype }) + jansson_opts.add_cmake_defines({ 'CMAKE_BUILD_TYPE': is_debug ? 'Debug' : cmake_reltype }) + jansson_opts.add_cmake_defines({ 'CMAKE_POSITION_INDEPENDENT_CODE': is_static_shared_lib }) jansson_opts.add_cmake_defines({ 'JANSSON_EXAMPLES': false }) jansson_opts.add_cmake_defines({ 'JANSSON_WITHOUT_TESTS': true }) jansson_opts.add_cmake_defines({ 'JANSSON_BUILD_DOCS': false }) @@ -141,6 +156,9 @@ if is_windows compiler.find_library('ws2_32') ] else + if is_android + naunet_args += ['-DNAUNET_ON_ANDROID'] + endif naunet_src += [ 'src/util/timer/timer_linux.c', 'src/util/thread/thread_linux.c', diff --git a/src/common.c b/src/common.c index d0bd863..4358945 100644 --- a/src/common.c +++ b/src/common.c @@ -7,13 +7,23 @@ #else #include #endif +#ifdef NAUNET_ON_ANDROID +#include +#endif #include "util/timer/timer.h" #include "util/thread/thread.h" #include "common.h" -#ifndef NAUNET_ON_WINDOWS +#ifdef NAUNET_ON_WINDOWS +static char temp_directory[MAX_PATH + 1]; +#else +static char temp_directory[PATH_MAX]; +#endif +str nn_temp_directory; + +#if !defined NAUNET_ON_WINDOWS && !defined NAUNET_ON_ANDROID #define RESET "\033[0m" static inline const char *get_color_for_level(u8 level) { @@ -37,11 +47,15 @@ s32 al_print_default(void *userdata, u8 level, char *message) { (void)userdata; s32 ret = 0; -#ifdef NAUNET_ON_WINDOWS +#if defined NAUNET_ON_ANDROID + (void)level; + __android_log_print(ANDROID_LOG_DEBUG, APPLICATION_NAME, "%*.*s", 0, AL_LOG_MESSAGE_SIZE, message); + ret = al_strnlen(message, AL_LOG_MESSAGE_SIZE); +#elif defined NAUNET_ON_WINDOWS (void)level; - ret = al_printf("%*.*s\n", 0, AL_LOG_MESSAGE_SIZE, message); + ret = al_printf("%*.*s\n", 0, AL_LOG_MESSAGE_LENGTH, message); #else - ret = al_printf("%s%*.*s%s\n", get_color_for_level(level), 0, AL_LOG_MESSAGE_SIZE, message, RESET); + ret = al_printf("%s%*.*s%s\n", get_color_for_level(level), 0, AL_LOG_MESSAGE_LENGTH, message, RESET); #endif return ret; } @@ -90,6 +104,17 @@ bool nn_common_init(const char *thread_name) al_random_init((u32)(nn_get_timestamp() / 1000000)); +#if defined NAUNET_ON_WINDOWS + DWORD length = GetTempPathA(sizeof(temp_directory), temp_directory); + nn_temp_directory = al_str_w(temp_directory, 0, length); +#elif defined NAUNET_ON_ANDROID + // Default to empty. +#else + const char unix_tmpdir[] = { "/tmp" }; + al_memcpy(temp_directory, unix_tmpdir, sizeof(unix_tmpdir)); + nn_temp_directory = al_str_w(temp_directory, 0, sizeof(unix_tmpdir) - 1); +#endif + #ifdef NAUNET_ON_WINDOWS if (!nn_windows_init()) return false; #endif @@ -97,6 +122,13 @@ bool nn_common_init(const char *thread_name) return true; } +void nn_common_set_temp_directory(str *dir) +{ + al_assert(dir->length < sizeof(temp_directory)); + al_memcpy(temp_directory, dir->data, dir->length); + nn_temp_directory = al_str_w(temp_directory, 0, dir->length); +} + void nn_common_close(void) { #ifdef NAUNET_ON_WINDOWS diff --git a/src/common.h b/src/common.h index 30a8464..d22264b 100644 --- a/src/common.h +++ b/src/common.h @@ -1,6 +1,9 @@ #pragma once -#include +#include + +extern str nn_temp_directory; bool nn_common_init(const char *thread_name); +void nn_common_set_temp_directory(str *dir); void nn_common_close(void); diff --git a/src/curl/curl.c b/src/curl/curl.c index d18035c..10d3ed8 100644 --- a/src/curl/curl.c +++ b/src/curl/curl.c @@ -65,7 +65,7 @@ static void timeout_callback(struct ev_loop *loop, ev_timer *w, s32 revents) curl->handle_events(curl->userdata, curl); } -static s32 timer_callback(CURLM *multi, s64 timeout_ms, void *userp) +static s32 timer_callback(CURLM *multi, long timeout_ms, void *userp) { (void)multi; struct nn_curl *curl = (struct nn_curl *)userp; diff --git a/src/util/buffer.c b/src/util/buffer.c index ab7adac..9d8c9cf 100644 --- a/src/util/buffer.c +++ b/src/util/buffer.c @@ -36,6 +36,7 @@ void nn_buffer_write(struct nn_buffer *buffer, void *data, size_t index, size_t nn_buffer_ensure_space(buffer, reach); buffer->size = reach; } + al_assert(data && size > 0); al_memcpy(&buffer->data[index], data, size); } diff --git a/subprojects/jansson.wrap b/subprojects/jansson.wrap index 7fb9637..52537f7 100644 --- a/subprojects/jansson.wrap +++ b/subprojects/jansson.wrap @@ -1,6 +1,6 @@ [wrap-git] -directory = jansson-154f891 +directory = jansson-2.15.1 url = https://github.com/akheron/jansson.git -revision = 154f8919fb0d3778282b797789ad985e3d99fdc8 +revision = v2.15.1 depth = 1 method = cmake diff --git a/subprojects/libalabaster.wrap b/subprojects/libalabaster.wrap index c48903d..5323646 100644 --- a/subprojects/libalabaster.wrap +++ b/subprojects/libalabaster.wrap @@ -1,5 +1,5 @@ [wrap-git] -directory = libalabaster-c633226 +directory = libalabaster-b617e3c url = https://git.akon.city/libalabaster.git -revision = c633226d2b615f46ef38cc99603775dccdf96ecd +revision = b617e3ccb25a0ac3c22f8c02722c8108b2f78d6e depth = 1 diff --git a/subprojects/libcurl.wrap b/subprojects/libcurl.wrap index 19e3c96..13f0450 100644 --- a/subprojects/libcurl.wrap +++ b/subprojects/libcurl.wrap @@ -1,6 +1,6 @@ [wrap-git] -directory = libcurl-8.19.0 +directory = libcurl-8.21.0 url = https://github.com/curl/curl.git -revision = curl-8_19_0 +revision = curl-8_21_0 depth = 1 method = cmake diff --git a/subprojects/zlib.wrap b/subprojects/zlib.wrap index 4e3b24b..99803f6 100644 --- a/subprojects/zlib.wrap +++ b/subprojects/zlib.wrap @@ -1,6 +1,6 @@ [wrap-git] -directory = zlib-1.3.1 +directory = zlib-1.3.2 url = https://github.com/madler/zlib.git -revision = v1.3.1 +revision = v1.3.2 depth = 1 method = cmake -- cgit v1.2.3-101-g0448