summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2024-01-15 23:18:10 -0500
committerAndrew Opalach <andrew@akon.city> 2024-01-15 23:18:10 -0500
commite2fb1d3a5f8b810eaefbff469cfcb3eddad7cbf3 (patch)
tree0dafe88c8832da97d8c305fb98d23f397cfa7f54
parent4e9c4b8ec81e612b03477fcc68def4b8878cf3ac (diff)
downloadlibnaunet-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--.gitignore2
-rw-r--r--meson.build73
-rw-r--r--meson_options.txt1
-rw-r--r--src/socket/socket_linux.c13
-rw-r--r--src/socket/socket_windows.c22
-rw-r--r--src/util/thread/thread.h2
-rw-r--r--subprojects/jansson.wrap1
-rw-r--r--subprojects/libcurl.wrap (renamed from subprojects/curl.wrap)3
8 files changed, 68 insertions, 49 deletions
diff --git a/.gitignore b/.gitignore
index 9a297b3..300cdb2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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