diff options
| author | 2024-01-15 23:18:10 -0500 | |
|---|---|---|
| committer | 2024-01-15 23:18:10 -0500 | |
| commit | e2fb1d3a5f8b810eaefbff469cfcb3eddad7cbf3 (patch) | |
| tree | 0dafe88c8832da97d8c305fb98d23f397cfa7f54 | |
| parent | 4e9c4b8ec81e612b03477fcc68def4b8878cf3ac (diff) | |
| download | libnaunet-e2fb1d3a5f8b810eaefbff469cfcb3eddad7cbf3.tar.gz libnaunet-e2fb1d3a5f8b810eaefbff469cfcb3eddad7cbf3.tar.bz2 libnaunet-e2fb1d3a5f8b810eaefbff469cfcb3eddad7cbf3.zip | |
Continue windows build fix
Signed-off-by: Andrew Opalach <andrew@akon.city>
| -rw-r--r-- | .gitignore | 2 | ||||
| -rw-r--r-- | meson.build | 73 | ||||
| -rw-r--r-- | meson_options.txt | 1 | ||||
| -rw-r--r-- | src/socket/socket_linux.c | 13 | ||||
| -rw-r--r-- | src/socket/socket_windows.c | 22 | ||||
| -rw-r--r-- | src/util/thread/thread.h | 2 | ||||
| -rw-r--r-- | subprojects/jansson.wrap | 1 | ||||
| -rw-r--r-- | subprojects/libcurl.wrap (renamed from subprojects/curl.wrap) | 3 |
8 files changed, 68 insertions, 49 deletions
@@ -3,7 +3,7 @@ compile_commands.json .cache/ .clangd/ subprojects/c89atomic.wrap -subprojects/curl/ +subprojects/libcurl/ subprojects/jansson/ subprojects/libalabaster subprojects/libev-4.33/ diff --git a/meson.build b/meson.build index 103f4d3..6e60976 100644 --- a/meson.build +++ b/meson.build @@ -5,6 +5,7 @@ compiler = meson.get_compiler('c') cmake = import('cmake') is_debug = get_option('buildtype').startswith('debug') +is_windows = host_machine.system() == 'windows' akiyo_src = [ 'src/common.c', @@ -26,11 +27,6 @@ if math.found() akiyo_deps += [math] endif -threads = dependency('threads', required: false) -if threads.found() - akiyo_deps += [threads] -endif - if get_option('event-loop').enabled() akiyo_src += [ 'src/loop.c', @@ -49,32 +45,34 @@ if get_option('event-loop').enabled() akiyo_src += ['src/ev_embed_compat.c'] akiyo_deps += [libev] - libcurl = dependency('libcurl', required: false) - #libcurl = compiler.find_library('curl', - # dirs: [join_paths(meson.project_source_root(), 'subprojects/curl/build/lib')]) - if not libcurl.found() - curl_opts = cmake.subproject_options() - curl_opts.add_cmake_defines({ 'CMAKE_BUILD_TYPE': is_debug ? 'Debug' : 'Release' }) - 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({ 'CURL_USE_LIBSSH2': false }) - curl_opts.add_cmake_defines({ 'ENABLE_WEBSOCKETS': true }) - libcurl = cmake.subproject('curl', options: curl_opts).dependency('libcurl_static') - endif - akiyo_has_curl = libcurl.found() - if akiyo_has_curl - akiyo_src += [ - 'src/curl/curl.c', - 'src/curl/http.c', - 'src/curl/websocket.c' - ] - akiyo_deps += [libcurl] - #openssl = dependency('openssl') - #libidn2 = dependency('libidn2') - #zlib = dependency('zlib') - #akiyo_deps += [libcurl, openssl, libidn2, zlib] - akiyo_args += ['-DAKIYO_HAS_CURL'] + akiyo_has_curl = false + if get_option('curl').enabled() + libcurl = dependency('libcurl', required: false) + if not libcurl.found() + curl_opts = cmake.subproject_options() + curl_opts.add_cmake_defines({ 'CMAKE_BUILD_TYPE': is_debug ? 'Debug' : 'Release' }) + 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({ 'CURL_USE_LIBSSH2': false }) + curl_opts.add_cmake_defines({ 'CURL_DISABLE_LDAP': 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') + libidn2 = dependency('libidn2') + akiyo_deps += [zlib, openssl, libidn2] + endif + akiyo_has_curl = libcurl.found() + if akiyo_has_curl + akiyo_src += [ + 'src/curl/curl.c', + 'src/curl/http.c', + 'src/curl/websocket.c' + ] + akiyo_deps += [libcurl] + akiyo_args += ['-DAKIYO_HAS_CURL'] + endif endif endif @@ -83,12 +81,14 @@ if not jansson.found() jansson_opts = cmake.subproject_options() jansson_opts.add_cmake_defines({ 'CMAKE_BUILD_TYPE': is_debug ? 'Debug' : 'Release' }) 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 }) + jansson_opts.add_cmake_defines({ 'JANSSON_INSTALL': false }) jansson = cmake.subproject('jansson', options: jansson_opts).dependency('jansson') endif akiyo_deps += [jansson] -if host_machine.system() != 'windows' +if not is_windows akiyo_src += [ 'src/util/timer/timer_linux.c', 'src/util/thread/thread_linux.c', @@ -100,6 +100,10 @@ if host_machine.system() != 'windows' 'src/fs_event/fs_event_inotify.c' ] endif + pthreads = dependency('pthreads', required: false) + if pthreads.found() + akiyo_deps += [pthreads] + endif akiyo_args += ['-D_GNU_SOURCE'] akiyo_has_mmap = true else @@ -110,8 +114,9 @@ else 'src/socket/socket_windows.c' ] akiyo_deps += [ - compiler.find_library('psapi', required: true), - compiler.find_library('ws2_32', required: true) + compiler.find_library('psapi'), + compiler.find_library('ws2_32'), + compiler.find_library('kernel32') ] akiyo_args += ['-DAKIYO_FILE_STDIO_COMPAT'] akiyo_has_mmap = false diff --git a/meson_options.txt b/meson_options.txt index 8d53466..e7aef06 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -1,2 +1,3 @@ option('event-loop', type: 'feature', value: 'enabled') +option('curl', type: 'feature', value: 'enabled') option('tests', type: 'boolean', value: true) diff --git a/src/socket/socket_linux.c b/src/socket/socket_linux.c index 3d141b7..4b2f56a 100644 --- a/src/socket/socket_linux.c +++ b/src/socket/socket_linux.c @@ -93,6 +93,10 @@ void aki_socket_set_recv_buf(struct aki_socket *s, u32 rcvbuf) al_assert(aki_socket_get_recv_buf(s) == receive_queue_size); } +#define al_log_socket_err(func) \ + al_log_error("socket", #func"(%.*s:%d) failed: %s (%d).", \ + AL_STR_PRINTF(addr), port, aki_strerror(errno), errno); + bool aki_socket_listen(struct aki_socket *s, str *addr, s32 port) { struct sockaddr *saddr = NULL; @@ -123,12 +127,12 @@ bool aki_socket_listen(struct aki_socket *s, str *addr, s32 port) } if (bind(s->sock, saddr, addrlen) < 0) { - al_log_error("socket", "Failed to bind (%.*s:%d).", AL_STR_PRINTF(addr), port); + al_log_socket_err(bind) return false; } if (listen(s->sock, SOMAXCONN) < 0) { - al_log_error("socket", "Failed to listen (%.*s:%d).", AL_STR_PRINTF(addr), port); + al_log_socket_err(listen) return false; } @@ -209,7 +213,7 @@ bool aki_socket_connect(struct aki_socket *s, str *addr, s32 port) case AKI_SOCKET_UDP: { s32 ret = connect(s->sock, (struct sockaddr *)&s->addr_in, sizeof(s->addr_in)); if (ret != 0 && errno != 115) { - al_log_error("socket", "Failed to connect: %s (%d).", aki_strerror(errno), errno); + al_log_socket_err(connect) return false; } break; @@ -219,13 +223,14 @@ bool aki_socket_connect(struct aki_socket *s, str *addr, s32 port) al_memcpy(s->addr_un.sun_path, addr->data, addr->len); s->addr_un.sun_path[addr->len] = '\0'; if (connect(s->sock, (struct sockaddr *)&s->addr_un, sizeof(s->addr_un)) < 0) { - al_log_error("socket", "Failed to connect: %s (%d).", aki_strerror(errno), errno); + al_log_socket_err(connect) return false; } break; } default: al_assert(false); + break; } signal(SIGPIPE, SIG_IGN); diff --git a/src/socket/socket_windows.c b/src/socket/socket_windows.c index b83ae52..e19c16f 100644 --- a/src/socket/socket_windows.c +++ b/src/socket/socket_windows.c @@ -26,7 +26,7 @@ bool aki_socket_init(struct aki_socket *s) void aki_socket_set_blocking(struct aki_socket *s, bool blocking) { - u_long mode = (blocking) ? 0 : 1; + u_long mode = blocking ? 0 : 1; ioctlsocket(s->sock, FIONBIO, &mode); } @@ -36,18 +36,22 @@ void aki_socket_set_no_delay(struct aki_socket *s, s32 no_delay) (void)no_delay; } +#define al_log_socket_err(func) \ + al_log_error("socket", #func"(%.*s:%d) failed: %d.", \ + AL_STR_PRINTF(addr), port, WSAGetLastError()); + bool aki_socket_listen(struct aki_socket *s, str *addr, s32 port) { s->addr_in.sin_family = AF_INET; s->addr_in.sin_addr.s_addr = INADDR_ANY; - s->addr_in.sin_port = htons(port); - al_memset(&(s->addr_in.sin_zero), '\0', 8); + s->addr_in.sin_port = aki_htons(port); + al_memset(s->addr_in.sin_zero, '\0', 8); if (bind(s->sock, (SOCKADDR *)&s->addr_in, sizeof(s->addr_in)) == SOCKET_ERROR) { - al_log_error("socket", "Failed to bind (%.*s:%d).", AL_STR_PRINTF(addr), port); + al_log_socket_err(bind); return false; } if (listen(s->sock, SOMAXCONN) == SOCKET_ERROR) { - al_log_error("socket", "Failed to listen (%.*s:%d).", AL_STR_PRINTF(addr), port); + al_log_socket_err(listen); return false; } return true; @@ -70,9 +74,11 @@ bool aki_socket_connect(struct aki_socket *s, str *addr, s32 port) char *c_str = al_str_to_c_str(addr); InetPton(AF_INET, c_str, &s->addr_in.sin_addr.s_addr); al_free(c_str); - s->addr_in.sin_port = htons(port); - al_memset(&(s->addr_in.sin_zero), '\0', 8); - if (connect(s->sock, (SOCKADDR *)&s->addr_in, sizeof(s->addr_in)) == SOCKET_ERROR) { + s->addr_in.sin_port = aki_htons(port); + al_memset(s->addr_in.sin_zero, '\0', 8); + s32 ret = connect(s->sock, (SOCKADDR *)&s->addr_in, sizeof(s->addr_in)); + if (ret == SOCKET_ERROR && WSAGetLastError() != WSAEWOULDBLOCK) { + al_log_socket_err(connect); return false; } return true; diff --git a/src/util/thread/thread.h b/src/util/thread/thread.h index eb63b8d..8860d2d 100644 --- a/src/util/thread/thread.h +++ b/src/util/thread/thread.h @@ -35,7 +35,7 @@ struct aki_cond { typedef f64 aki_os_tstamp; -#define AKI_TS_FROM_USEC(usec) (usec * 1e-6) +#define AKI_TS_FROM_USEC(usec) ((usec) * 1e-6) #ifndef _WIN32 #define AKI_THREADCALL diff --git a/subprojects/jansson.wrap b/subprojects/jansson.wrap index 23114ba..caff387 100644 --- a/subprojects/jansson.wrap +++ b/subprojects/jansson.wrap @@ -2,3 +2,4 @@ url = https://github.com/akheron/jansson.git revision = v2.14 depth = 1 +method = cmake diff --git a/subprojects/curl.wrap b/subprojects/libcurl.wrap index 245b709..c432a53 100644 --- a/subprojects/curl.wrap +++ b/subprojects/libcurl.wrap @@ -1,4 +1,5 @@ [wrap-git] url = https://github.com/curl/curl.git -revision = curl-8_4_0 +revision = curl-8_5_0 depth = 1 +method = cmake |