mirror of
https://github.com/falk-werner/webfuse
synced 2024-10-27 20:34:10 +00:00
1c9d1c8420
* moves implementation to impl subdirectory * adds prefix _impl to implementation symbols * removes double compilation for shared and static libraries * fixes include guards * fixes usage of extern "C"
292 lines
8.3 KiB
CMake
292 lines
8.3 KiB
CMake
cmake_minimum_required (VERSION 3.10)
|
|
project(fuse-wsfs VERSION 0.1.0 DESCRIPTION "Websocket filesystem based on libfuse")
|
|
|
|
option(WITHOUT_TESTS "disable unit tests" OFF)
|
|
option(WITHOUT_EXAMPLE "disable example" OFF)
|
|
|
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
|
find_package(Threads REQUIRED)
|
|
|
|
find_package(PkgConfig REQUIRED)
|
|
pkg_check_modules(FUSE3 REQUIRED fuse3)
|
|
pkg_check_modules(LWS REQUIRED libwebsockets)
|
|
pkg_check_modules(JANSSON REQUIRED jansson)
|
|
|
|
add_definitions(-D_FILE_OFFSET_BITS=64)
|
|
|
|
set(CMAKE_C_STANDARD 99)
|
|
set(CMAKE_CXX_STANDARD 11)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
set(C_WARNINGS -Wall -Wextra)
|
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
|
|
set(EXTRA_INCLUDE_DIRS
|
|
"include"
|
|
${FUSE3_INCLUDE_DIRS}
|
|
${LWS_INCLUDE_DIRS}
|
|
${JANSSON_INCLUDE_DIRS}
|
|
)
|
|
|
|
set(EXTRA_LIBS
|
|
${EXTRA_LIBS}
|
|
${FUSE3_LIBRARIES}
|
|
${LWS_LIBRARIES}
|
|
${JANSSON_LIBRARIES}
|
|
${CMAKE_THREAD_LIBS_INIT}
|
|
)
|
|
|
|
set(EXTRA_CFLAGS
|
|
${C_WARNINGS}
|
|
${FUSE3_CFLAGS_OTHER}
|
|
${LWS_CFLAGS_OTHER}
|
|
${JANSSON_CFLAGS_OTHER}
|
|
"-pthread"
|
|
)
|
|
|
|
|
|
# libwsfs-core
|
|
|
|
add_library(wsfs-core STATIC
|
|
lib/wsfs/core/message.c
|
|
lib/wsfs/core/message_queue.c
|
|
lib/wsfs/core/status.c
|
|
)
|
|
|
|
set_target_properties(wsfs-core PROPERTIES OUTPUT_NAME wsfs-core)
|
|
target_include_directories(wsfs-core PUBLIC lib ${EXTRA_INCLUDE_DIRS})
|
|
target_compile_options(wsfs-core PUBLIC ${EXTRA_CFLAGS})
|
|
set_target_properties(wsfs-core PROPERTIES C_VISIBILITY_PRESET hidden)
|
|
|
|
install(DIRECTORY include/wsfs/core DESTINATION include/wsfs)
|
|
|
|
|
|
# libwsfs-adapter
|
|
|
|
add_library(wsfs-adapter-static STATIC
|
|
lib/wsfs/adapter/api.c
|
|
lib/wsfs/adapter/impl/filesystem.c
|
|
lib/wsfs/adapter/impl/server.c
|
|
lib/wsfs/adapter/impl/server_config.c
|
|
lib/wsfs/adapter/impl/server_protocol.c
|
|
lib/wsfs/adapter/impl/session.c
|
|
lib/wsfs/adapter/impl/session_manager.c
|
|
lib/wsfs/adapter/impl/authenticator.c
|
|
lib/wsfs/adapter/impl/authenticators.c
|
|
lib/wsfs/adapter/impl/credentials.c
|
|
lib/wsfs/adapter/impl/time/timepoint.c
|
|
lib/wsfs/adapter/impl/time/timer.c
|
|
lib/wsfs/adapter/impl/time/timeout_manager.c
|
|
lib/wsfs/adapter/impl/operation/lookup.c
|
|
lib/wsfs/adapter/impl/operation/getattr.c
|
|
lib/wsfs/adapter/impl/operation/readdir.c
|
|
lib/wsfs/adapter/impl/operation/open.c
|
|
lib/wsfs/adapter/impl/operation/close.c
|
|
lib/wsfs/adapter/impl/operation/read.c
|
|
lib/wsfs/adapter/impl/jsonrpc/server.c
|
|
lib/wsfs/adapter/impl/jsonrpc/method.c
|
|
lib/wsfs/adapter/impl/jsonrpc/request.c
|
|
lib/wsfs/adapter/impl/jsonrpc/response.c
|
|
lib/wsfs/adapter/impl/jsonrpc/util.c
|
|
)
|
|
|
|
set_target_properties(wsfs-adapter-static PROPERTIES OUTPUT_NAME wsfs-adapter)
|
|
target_include_directories(wsfs-adapter-static PUBLIC lib ${EXTRA_INCLUDE_DIRS})
|
|
target_compile_options(wsfs-adapter-static PUBLIC ${EXTRA_CFLAGS})
|
|
set_target_properties(wsfs-adapter-static PROPERTIES C_VISIBILITY_PRESET hidden)
|
|
|
|
add_library(wsfs-adapter SHARED
|
|
lib/wsfs/adapter/api.c
|
|
)
|
|
|
|
set_target_properties(wsfs-adapter PROPERTIES VERSION ${PROJECT_VERSION})
|
|
set_target_properties(wsfs-adapter PROPERTIES SOVERSION 0)
|
|
set_target_properties(wsfs-adapter PROPERTIES C_VISIBILITY_PRESET hidden)
|
|
set_target_properties(wsfs-adapter PROPERTIES COMPILE_DEFINITIONS "WSFSA_API=WSFSA_EXPORT")
|
|
|
|
target_include_directories(wsfs-adapter PUBLIC lib ${EXTRA_INCLUDE_DIRS})
|
|
target_compile_options(wsfs-adapter PUBLIC ${EXTRA_CFLAGS})
|
|
target_link_libraries(wsfs-adapter PRIVATE wsfs-adapter-static wsfs-core)
|
|
|
|
file(WRITE "${PROJECT_BINARY_DIR}/libwsfs-adapter.pc"
|
|
"prefix=\"${CMAKE_INSTALL_PREFIX}\"
|
|
|
|
exec_prefix=\${prefix}
|
|
libdir=\${exec_prefix}/lib${LIB_SUFFIX}
|
|
includedir=\${prefix}/include
|
|
Name: libwsfs
|
|
Description: Websockets filesystem server library
|
|
Version: ${PROJECT_VERSION}
|
|
|
|
Libs: -L\${libdir} -lwsfs-adapter -l${FUSE3_LIBRARIES} -l${LWS_LIBRARIES} -l${JANSSON_LIBRARIES}
|
|
Cflags: -I\${includedir}"
|
|
)
|
|
|
|
install(TARGETS wsfs-adapter DESTINATION lib${LIB_SUFFIX})
|
|
install(FILES include/wsfs_adapter.h DESTINATION include)
|
|
install(DIRECTORY include/wsfs/adapter DESTINATION include/wsfs)
|
|
install(FILES "${PROJECT_BINARY_DIR}/libwsfs-adapter.pc" DESTINATION lib${LIB_SUFFIX}/pkgconfig)
|
|
|
|
#libwsfs-provider
|
|
|
|
add_library(wsfs-provider-static STATIC
|
|
lib/wsfs/provider/api.c
|
|
lib/wsfs/provider/impl/url.c
|
|
lib/wsfs/provider/impl/client.c
|
|
lib/wsfs/provider/impl/client_config.c
|
|
lib/wsfs/provider/impl/client_protocol.c
|
|
lib/wsfs/provider/impl/provider.c
|
|
lib/wsfs/provider/impl/request.c
|
|
lib/wsfs/provider/impl/dirbuffer.c
|
|
lib/wsfs/provider/impl/operation/lookup.c
|
|
lib/wsfs/provider/impl/operation/getattr.c
|
|
lib/wsfs/provider/impl/operation/readdir.c
|
|
lib/wsfs/provider/impl/operation/open.c
|
|
lib/wsfs/provider/impl/operation/close.c
|
|
lib/wsfs/provider/impl/operation/read.c
|
|
)
|
|
|
|
set_target_properties(wsfs-provider-static PROPERTIES OUTPUT_NAME wsfs-provider)
|
|
target_include_directories(wsfs-provider-static PUBLIC lib ${EXTRA_INCLUDE_DIRS})
|
|
target_compile_options(wsfs-provider-static PUBLIC ${EXTRA_CFLAGS})
|
|
set_target_properties(wsfs-provider-static PROPERTIES C_VISIBILITY_PRESET hidden)
|
|
|
|
add_library(wsfs-provider SHARED
|
|
lib/wsfs/provider/api.c
|
|
)
|
|
|
|
set_target_properties(wsfs-provider PROPERTIES VERSION ${PROJECT_VERSION})
|
|
set_target_properties(wsfs-provider PROPERTIES SOVERSION 0)
|
|
set_target_properties(wsfs-provider PROPERTIES C_VISIBILITY_PRESET hidden)
|
|
set_target_properties(wsfs-provider PROPERTIES COMPILE_DEFINITIONS "WSFSP_API=WSFSP_EXPORT")
|
|
|
|
target_include_directories(wsfs-provider PUBLIC lib ${EXTRA_INCLUDE_DIRS})
|
|
target_compile_options(wsfs-provider PUBLIC ${EXTRA_CFLAGS})
|
|
target_link_libraries(wsfs-provider PRIVATE wsfs-provider-static wsfs-core)
|
|
|
|
file(WRITE "${PROJECT_BINARY_DIR}/libwsfs-provider.pc"
|
|
"prefix=\"${CMAKE_INSTALL_PREFIX}\"
|
|
exec_prefix=\${prefix}
|
|
libdir=\${exec_prefix}/lib${LIB_SUFFIX}
|
|
includedir=\${prefix}/include
|
|
Name: libwsfs-provider
|
|
Description: Provider library for websockets filesystem
|
|
Version: ${PROJECT_VERSION}
|
|
|
|
Libs: -L\${libdir} -lwsfs-provider -l${LWS_LIBRARIES} -l${JANSSON_LIBRARIES}
|
|
Cflags: -I\${includedir}"
|
|
)
|
|
|
|
install(TARGETS wsfs-provider DESTINATION lib${LIB_SUFFIX})
|
|
install(FILES include/wsfs_provider.h DESTINATION include)
|
|
install(DIRECTORY include/wsfs/provider DESTINATION include/wsfs)
|
|
install(FILES "${PROJECT_BINARY_DIR}/libwsfs-provider.pc" DESTINATION lib${LIB_SUFFIX}/pkgconfig)
|
|
|
|
|
|
# examples
|
|
|
|
if(NOT WITHOUT_EXAMPLE)
|
|
|
|
# libuserdb
|
|
|
|
add_library(userdb STATIC
|
|
example/lib/userdb/src/userdb.c
|
|
)
|
|
|
|
target_include_directories(userdb PUBLIC
|
|
example/lib/userdb/include
|
|
${OPENSSL_INCLUDE_DIRS}
|
|
${JANSSON_INCLUDE_DIRS}
|
|
)
|
|
|
|
target_compile_options(userdb PUBLIC
|
|
${C_WARNINGS}
|
|
${OPENSSL_CFLAGS_OTHER}
|
|
${JANSSON_CFLAGS_OTHER}
|
|
)
|
|
|
|
# daemon
|
|
|
|
add_executable(wsfsd
|
|
example/daemon/main.c
|
|
)
|
|
|
|
target_link_libraries(wsfsd PUBLIC wsfs-adapter ${EXTRA_LIBS})
|
|
target_include_directories(wsfsd PUBLIC ${EXTRA_INCLUDE_DIRS})
|
|
target_compile_options(wsfsd PUBLIC ${EXTRA_CFLAGS})
|
|
|
|
# provider
|
|
|
|
add_executable(wsfs-provider-app
|
|
example/provider/main.c
|
|
)
|
|
|
|
set_target_properties(wsfs-provider-app PROPERTIES OUTPUT_NAME wsfs-provider)
|
|
|
|
target_link_libraries(wsfs-provider-app PUBLIC wsfs-provider ${EXTRA_LIBS})
|
|
target_include_directories(wsfs-provider-app PUBLIC ${EXTRA_INCLUDE_DIRS})
|
|
target_compile_options(wsfs-provider-app PUBLIC ${EXTRA_CFLAGS})
|
|
|
|
# wsfs-passwd
|
|
|
|
pkg_check_modules(OPENSSL REQUIRED openssl)
|
|
|
|
|
|
add_executable(wsfs-passwd
|
|
example/passwd/main.c
|
|
)
|
|
|
|
target_link_libraries(wsfs-passwd PUBLIC
|
|
userdb
|
|
${OPENSSL_LIBRARIES}
|
|
${JANSSON_LIBRARIES}
|
|
)
|
|
|
|
target_include_directories(wsfs-passwd PUBLIC
|
|
example/passwd
|
|
example/lib/userdb/include
|
|
${OPENSSL_INCLUDE_DIRS}
|
|
${JANSSON_INCLUDE_DIRS}
|
|
)
|
|
|
|
target_compile_options(wsfs-passwd PUBLIC
|
|
${C_WARNINGS}
|
|
${OPENSSL_CFLAGS_OTHER}
|
|
${JANSSON_CFLAGS_OTHER}
|
|
)
|
|
|
|
|
|
endif(NOT WITHOUT_EXAMPLE)
|
|
|
|
# tests
|
|
|
|
if(NOT WITHOUT_TESTS)
|
|
|
|
include (CTest)
|
|
|
|
pkg_check_modules(GTEST gtest_main)
|
|
include(GoogleTest)
|
|
pkg_check_modules(GMOCK gmock)
|
|
|
|
add_executable(alltests
|
|
test/msleep.cc
|
|
test/mock_authenticator.cc
|
|
test/test_response_parser.cc
|
|
test/test_server.cc
|
|
test/test_timepoint.cc
|
|
test/test_timer.cc
|
|
test/test_url.cc
|
|
test/test_credentials.cc
|
|
test/test_authenticator.cc
|
|
test/test_authenticators.cc
|
|
)
|
|
|
|
target_link_libraries(alltests PUBLIC wsfs-adapter-static wsfs-provider-static wsfs-core ${EXTRA_LIBS} ${GMOCK_LIBRARIES} ${GTEST_LIBRARIES})
|
|
target_include_directories(alltests PUBLIC lib ${EXTRA_INCLUDE_DIRS} ${GMOCK_INCLUDE_DIRS} ${GTEST_INCLUDE_DIRS})
|
|
target_compile_options(alltests PUBLIC ${EXTRA_CFLAGS} ${GMOCK_CFLAGS} ${GTEST_CFLAGS})
|
|
|
|
enable_testing()
|
|
gtest_discover_tests(alltests TEST_PREFIX alltests:)
|
|
|
|
endif(NOT WITHOUT_TESTS)
|