1
0
mirror of https://github.com/falk-werner/webfuse-provider synced 2024-10-27 20:44:10 +00:00

Merge pull request #71 from falk-werner/fix_meson_build

Fix meson build
This commit is contained in:
Falk Werner 2020-06-06 12:57:10 +02:00 committed by GitHub
commit 90caf96661
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 97 additions and 10 deletions

View File

@ -2,6 +2,11 @@
## 0.4.0 _(unknown)_ ## 0.4.0 _(unknown)_
### Fixes
* Fix meson build failure when gtest or jansson are not installed
* Fix crash if libfuse is not available at runtime
## 0.3.0 _(Fri Jun 05 2020)_ ## 0.3.0 _(Fri Jun 05 2020)_
### Breaking Changes ### Breaking Changes

View File

@ -109,8 +109,11 @@ bool wf_impl_session_add_filesystem(
if (result) if (result)
{ {
struct wf_impl_filesystem * filesystem = wf_impl_filesystem_create(session, name, mountpoint); struct wf_impl_filesystem * filesystem = wf_impl_filesystem_create(session, name, mountpoint);
wf_slist_append(&session->filesystems, &filesystem->item);
result = (NULL != filesystem); result = (NULL != filesystem);
if (result)
{
wf_slist_append(&session->filesystems, &filesystem->item);
}
} }
// cleanup on error // cleanup on error

View File

@ -76,7 +76,8 @@ webfuse_provider_static = static_library('webfuse_provider',
webfuse_provider_static_dep = declare_dependency( webfuse_provider_static_dep = declare_dependency(
include_directories: inc_dir, include_directories: inc_dir,
link_with: webfuse_provider_static) link_with: webfuse_provider_static,
dependencies: [webfuse_core_dep])
webfuse_provider = shared_library('webfuse_provider', webfuse_provider = shared_library('webfuse_provider',
'lib/webfuse/provider/api.c', 'lib/webfuse/provider/api.c',
@ -95,7 +96,8 @@ install_headers('include/webfuse_provider.h', subdir: 'webfuse')
install_subdir('include/webfuse/provider', install_dir: 'include/webfuse') install_subdir('include/webfuse/provider', install_dir: 'include/webfuse')
pkg_config.generate( pkg_config.generate(
libraries: [webfuse_provider, jansson_dep, libwebsockets_dep], libraries: [webfuse_provider],
requires: ['libwebsockets', 'jansson'],
subdirs: '.', subdirs: '.',
version: meson.project_version(), version: meson.project_version(),
name: 'libwebfuse_provider', name: 'libwebfuse_provider',
@ -137,7 +139,7 @@ webfuse_adapter_static = static_library('webfuse_adapter',
webfuse_adapter_static_dep = declare_dependency( webfuse_adapter_static_dep = declare_dependency(
include_directories: inc_dir, include_directories: inc_dir,
link_with: [webfuse_adapter_static], link_with: [webfuse_adapter_static],
dependencies: [libfuse_dep]) dependencies: [webfuse_core_dep, libfuse_dep])
webfuse_adapter = shared_library('webfuse_adapter', webfuse_adapter = shared_library('webfuse_adapter',
'lib/webfuse/adapter/api.c', 'lib/webfuse/adapter/api.c',
@ -156,7 +158,8 @@ install_headers('include/webfuse_adapter.h', subdir: 'webfuse')
install_subdir('include/webfuse/adapter', install_dir: 'include/webfuse') install_subdir('include/webfuse/adapter', install_dir: 'include/webfuse')
pkg_config.generate( pkg_config.generate(
libraries: [webfuse_adapter, jansson_dep, libwebsockets_dep, libfuse_dep], libraries: [webfuse_adapter],
requires: ['fuse3', 'libwebsockets', 'jansson'],
subdirs: '.', subdirs: '.',
version: meson.project_version(), version: meson.project_version(),
name: 'libwebfuse_adapter', name: 'libwebfuse_adapter',
@ -170,7 +173,7 @@ endif
if not without_tests if not without_tests
gtest_dep = dependency('gtest', version: '>=1.10.0', fallback: ['gtest', 'gtest_dep']) gtest_dep = dependency('gtest', version: '>=1.10.0', fallback: ['gtest', 'gtest_dep'])
gmock_main_dep = dependency('gmock_main', version: '>=1.10.0', fallback: ['gtest', 'gmock_main_main_dep']) gmock_main_dep = dependency('gmock_main', version: '>=1.10.0', fallback: ['gtest', 'gmock_main_dep'])
fscheck = executable('fs_check', fscheck = executable('fs_check',
'test/webfuse/tests/integration/fs_check.c') 'test/webfuse/tests/integration/fs_check.c')

View File

@ -9,6 +9,39 @@
using namespace std::chrono_literals; using namespace std::chrono_literals;
namespace
{
enum class ConnectionState
{
disconnected,
connected,
connecting
};
}
extern "C"
{
void
webfuse_test_provider_onconnected(
void * user_data)
{
auto * fs = reinterpret_cast<wfp_static_filesystem*>(user_data);
auto * connection_state = reinterpret_cast<ConnectionState*>(wfp_static_filesystem_get_user_data(fs));
*connection_state = ConnectionState::connected;
}
void
webfuse_test_provider_ondisconnected(
void * user_data)
{
auto * fs = reinterpret_cast<wfp_static_filesystem*>(user_data);
auto * connection_state = reinterpret_cast<ConnectionState*>(wfp_static_filesystem_get_user_data(fs));
*connection_state = ConnectionState::disconnected;
}
}
namespace webfuse_test namespace webfuse_test
{ {
@ -18,23 +51,40 @@ public:
explicit Private(char const * url) explicit Private(char const * url)
: is_shutdown_requested(false) : is_shutdown_requested(false)
{ {
ConnectionState connection_state = ConnectionState::connecting;
config = wfp_client_config_create(); config = wfp_client_config_create();
wfp_client_config_set_certpath(config, "client-cert.pem"); wfp_client_config_set_certpath(config, "client-cert.pem");
wfp_client_config_set_keypath(config, "client-key.pem"); wfp_client_config_set_keypath(config, "client-key.pem");
wfp_client_config_set_ca_filepath(config, "server-cert.pem"); wfp_client_config_set_ca_filepath(config, "server-cert.pem");
wfp_client_config_set_onconnected(config, &webfuse_test_provider_onconnected);
wfp_client_config_set_ondisconnected(config, &webfuse_test_provider_ondisconnected);
fs = wfp_static_filesystem_create(config); fs = wfp_static_filesystem_create(config);
wfp_static_filesystem_set_user_data(fs, reinterpret_cast<void*>(&connection_state));
wfp_static_filesystem_add_text(fs, "hello.txt", 0444, "Hello, World"); wfp_static_filesystem_add_text(fs, "hello.txt", 0444, "Hello, World");
client = wfp_client_create(config); client = wfp_client_create(config);
wfp_client_connect(client, url); wfp_client_connect(client, url);
while (!wfp_impl_client_is_connected(client)) while (ConnectionState::connecting == connection_state)
{ {
wfp_client_service(client); wfp_client_service(client);
} }
thread = std::thread(Run, this); if (ConnectionState::connected == connection_state)
std::this_thread::sleep_for(200ms); {
thread = std::thread(Run, this);
std::this_thread::sleep_for(200ms);
}
else
{
wfp_client_dispose(client);
wfp_static_filesystem_dispose(fs);
wfp_client_config_dispose(config);
throw std::runtime_error("unable to connect");
}
} }
~Private() ~Private()

View File

@ -38,6 +38,7 @@ struct wfp_static_filesystem
struct wfp_static_filesystem_entry * entries; struct wfp_static_filesystem_entry * entries;
size_t size; size_t size;
size_t capacity; size_t capacity;
void * user_data;
}; };
static struct wfp_static_filesystem_entry * static struct wfp_static_filesystem_entry *
@ -335,6 +336,7 @@ wfp_static_filesystem_create(
filesystem->entries = malloc(sizeof(struct wfp_static_filesystem_entry) * WFP_STATIC_FILESYSTEM_DEFAULT_CAPACITY); filesystem->entries = malloc(sizeof(struct wfp_static_filesystem_entry) * WFP_STATIC_FILESYSTEM_DEFAULT_CAPACITY);
filesystem->size = 0; filesystem->size = 0;
filesystem->capacity = WFP_STATIC_FILESYSTEM_DEFAULT_CAPACITY; filesystem->capacity = WFP_STATIC_FILESYSTEM_DEFAULT_CAPACITY;
filesystem->user_data = NULL;
wfp_static_filesystem_add_dir(filesystem, 0, "<root>"); wfp_static_filesystem_add_dir(filesystem, 0, "<root>");
@ -402,3 +404,18 @@ wfp_static_filesystem_add_text(
size_t length = strlen(content); size_t length = strlen(content);
wfp_static_filesystem_add(filesystem, path, mode, content, length); wfp_static_filesystem_add(filesystem, path, mode, content, length);
} }
void
wfp_static_filesystem_set_user_data(
struct wfp_static_filesystem * filesystem,
void * user_data)
{
filesystem->user_data = user_data;
}
void *
wfp_static_filesystem_get_user_data(
struct wfp_static_filesystem * filesystem)
{
return filesystem->user_data;
}

View File

@ -56,6 +56,15 @@ wfp_static_filesystem_add_text(
int mode, int mode,
char const * content); char const * content);
extern void
wfp_static_filesystem_set_user_data(
struct wfp_static_filesystem * filesystem,
void * user_data);
extern void *
wfp_static_filesystem_get_user_data(
struct wfp_static_filesystem * filesystem);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif