@ -1,7 +1,9 @@
cmake_minimum_required ( VERSION 3.10 )
project ( webfuse VERSION 0.2.0 DESCRIPTION "Websocket filesystem based on libfuse" )
option ( WITHOUT_TESTS "disable unit tests" OFF )
option ( WITHOUT_TESTS "disable unit tests" OFF )
option ( WITHOUT_ADAPTER "disable adapter library" OFF )
option ( WITHOUT_PROVIDER "disable provider library" OFF )
set ( CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_CURRENT_SOURCE_DIR}/cmake" )
include ( coverage )
@ -10,10 +12,8 @@ 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 )
pkg_check_modules ( UUID REQUIRED uuid )
add_definitions ( -D_FILE_OFFSET_BITS=64 )
@ -26,233 +26,18 @@ set(CMAKE_POSITION_INDEPENDENT_CODE ON)
include_directories (
" i n c l u d e "
$ { F U S E 3 _ I N C L U D E _ D I R S }
$ { L W S _ I N C L U D E _ D I R S }
$ { J A N S S O N _ I N C L U D E _ D I R S }
$ { U U I D _ I N C L U D E _ D I R S }
)
set ( EXTRA_LIBS
$ { E X T R A _ L I B S }
$ { F U S E 3 _ L I B R A R I E S }
$ { L W S _ L I B R A R I E S }
$ { J A N S S O N _ L I B R A R I E S }
$ { U U I D _ L I B R A R I E S }
$ { C M A K E _ T H R E A D _ L I B S _ I N I T }
)
add_compile_options (
$ { C _ W A R N I N G S }
$ { F U S E 3 _ C F L A G S _ O T H E R }
$ { L W S _ C F L A G S _ O T H E R }
$ { J A N S S O N _ C F L A G S _ O T H E R }
$ { U U I D _ C F L A G S _ O T H E R }
" - p t h r e a d "
)
# l i b w e b f u s e - c o r e
add_library ( webfuse-core STATIC
l i b / w e b f u s e / c o r e / s l i s t . c
l i b / w e b f u s e / c o r e / m e s s a g e . c
l i b / w e b f u s e / c o r e / m e s s a g e _ q u e u e . c
l i b / w e b f u s e / c o r e / s t a t u s . c
l i b / w e b f u s e / c o r e / s t r i n g . c
l i b / w e b f u s e / c o r e / p a t h . c
l i b / w e b f u s e / c o r e / b a s e 6 4 . c
l i b / w e b f u s e / c o r e / l w s _ l o g . c
)
set_target_properties ( webfuse-core PROPERTIES OUTPUT_NAME webfuse-core )
target_include_directories ( webfuse-core PUBLIC lib )
set_target_properties ( webfuse-core PROPERTIES C_VISIBILITY_PRESET hidden )
install ( DIRECTORY include/webfuse/core DESTINATION include/webfuse )
# l i b w e b f u s e - a d a p t e r
add_library ( webfuse-adapter-static STATIC
l i b / w e b f u s e / a d a p t e r / a p i . c
l i b / w e b f u s e / a d a p t e r / i m p l / f i l e s y s t e m . c
l i b / w e b f u s e / a d a p t e r / i m p l / s e r v e r . c
l i b / w e b f u s e / a d a p t e r / i m p l / s e r v e r _ c o n f i g . c
l i b / w e b f u s e / a d a p t e r / i m p l / s e r v e r _ p r o t o c o l . c
l i b / w e b f u s e / a d a p t e r / i m p l / s e s s i o n . c
l i b / w e b f u s e / a d a p t e r / i m p l / s e s s i o n _ m a n a g e r . c
l i b / w e b f u s e / a d a p t e r / i m p l / a u t h e n t i c a t o r . c
l i b / w e b f u s e / a d a p t e r / i m p l / a u t h e n t i c a t o r s . c
l i b / w e b f u s e / a d a p t e r / i m p l / c r e d e n t i a l s . c
l i b / w e b f u s e / a d a p t e r / i m p l / o p e r a t i o n s . c
l i b / w e b f u s e / a d a p t e r / i m p l / t i m e / t i m e p o i n t . c
l i b / w e b f u s e / a d a p t e r / i m p l / t i m e / t i m e r . c
l i b / w e b f u s e / a d a p t e r / i m p l / t i m e / t i m e o u t _ m a n a g e r . c
l i b / w e b f u s e / a d a p t e r / i m p l / o p e r a t i o n / l o o k u p . c
l i b / w e b f u s e / a d a p t e r / i m p l / o p e r a t i o n / g e t a t t r . c
l i b / w e b f u s e / a d a p t e r / i m p l / o p e r a t i o n / r e a d d i r . c
l i b / w e b f u s e / a d a p t e r / i m p l / o p e r a t i o n / o p e n . c
l i b / w e b f u s e / a d a p t e r / i m p l / o p e r a t i o n / c l o s e . c
l i b / w e b f u s e / a d a p t e r / i m p l / o p e r a t i o n / r e a d . c
l i b / w e b f u s e / a d a p t e r / i m p l / j s o n r p c / p r o x y . c
l i b / w e b f u s e / a d a p t e r / i m p l / j s o n r p c / s e r v e r . c
l i b / w e b f u s e / a d a p t e r / i m p l / j s o n r p c / m e t h o d . c
l i b / w e b f u s e / a d a p t e r / i m p l / j s o n r p c / r e q u e s t . c
l i b / w e b f u s e / a d a p t e r / i m p l / j s o n r p c / r e s p o n s e . c
l i b / w e b f u s e / a d a p t e r / i m p l / j s o n r p c / u t i l . c
)
set_target_properties ( webfuse-adapter-static PROPERTIES OUTPUT_NAME webfuse-adapter )
set_target_properties ( webfuse-adapter-static PROPERTIES C_VISIBILITY_PRESET hidden )
target_include_directories ( webfuse-adapter-static PUBLIC lib )
add_library ( webfuse-adapter SHARED
l i b / w e b f u s e / a d a p t e r / a p i . c
)
set_target_properties ( webfuse-adapter PROPERTIES VERSION ${ PROJECT_VERSION } )
set_target_properties ( webfuse-adapter PROPERTIES SOVERSION 0 )
set_target_properties ( webfuse-adapter PROPERTIES C_VISIBILITY_PRESET hidden )
set_target_properties ( webfuse-adapter PROPERTIES COMPILE_DEFINITIONS "WF_API=WF_EXPORT" )
target_link_libraries ( webfuse-adapter PRIVATE webfuse-adapter-static webfuse-core )
file ( WRITE "${PROJECT_BINARY_DIR}/libwebfuse-adapter.pc"
" p r e f i x = \ " $ { C M A K E _ I N S T A L L _ P R E F I X } \ "
e x e c _ p r e f i x = \ $ { p r e f i x }
l i b d i r = \ $ { e x e c _ p r e f i x } / l i b $ { L I B _ S U F F I X }
i n c l u d e d i r = \ $ { p r e f i x } / i n c l u d e
N a m e : l i b w e b f u s e
D e s c r i p t i o n : W e b s o c k e t s f i l e s y s t e m s e r v e r l i b r a r y
V e r s i o n : $ { P R O J E C T _ V E R S I O N }
L i b s : - L \ $ { l i b d i r } - l w e b f u s e - a d a p t e r - l $ { F U S E 3 _ L I B R A R I E S } - l $ { L W S _ L I B R A R I E S } - l $ { J A N S S O N _ L I B R A R I E S }
C f l a g s : - I \ $ { i n c l u d e d i r } "
)
install ( TARGETS webfuse-adapter DESTINATION lib ${ LIB_SUFFIX } )
install ( FILES include/webfuse_adapter.h DESTINATION include )
install ( DIRECTORY include/webfuse/adapter DESTINATION include/webfuse )
install ( FILES "${PROJECT_BINARY_DIR}/libwebfuse-adapter.pc" DESTINATION lib ${ LIB_SUFFIX } /pkgconfig )
# l i b w e b f u s e - p r o v i d e r
add_library ( webfuse-provider-static STATIC
l i b / w e b f u s e / p r o v i d e r / a p i . c
l i b / w e b f u s e / p r o v i d e r / i m p l / u r l . c
l i b / w e b f u s e / p r o v i d e r / i m p l / c l i e n t . c
l i b / w e b f u s e / p r o v i d e r / i m p l / c l i e n t _ c o n f i g . c
l i b / w e b f u s e / p r o v i d e r / i m p l / c l i e n t _ p r o t o c o l . c
l i b / w e b f u s e / p r o v i d e r / i m p l / p r o v i d e r . c
l i b / w e b f u s e / p r o v i d e r / i m p l / r e q u e s t . c
l i b / w e b f u s e / p r o v i d e r / i m p l / d i r b u f f e r . c
l i b / w e b f u s e / p r o v i d e r / i m p l / o p e r a t i o n / l o o k u p . c
l i b / w e b f u s e / p r o v i d e r / i m p l / o p e r a t i o n / g e t a t t r . c
l i b / w e b f u s e / p r o v i d e r / i m p l / o p e r a t i o n / r e a d d i r . c
l i b / w e b f u s e / p r o v i d e r / i m p l / o p e r a t i o n / o p e n . c
l i b / w e b f u s e / p r o v i d e r / i m p l / o p e r a t i o n / c l o s e . c
l i b / w e b f u s e / p r o v i d e r / i m p l / o p e r a t i o n / r e a d . c
l i b / w e b f u s e / p r o v i d e r / i m p l / s t a t i c _ f i l e s y s t e m . c
)
set_target_properties ( webfuse-provider-static PROPERTIES OUTPUT_NAME webfuse-provider )
set_target_properties ( webfuse-provider-static PROPERTIES C_VISIBILITY_PRESET hidden )
target_include_directories ( webfuse-provider-static PUBLIC lib )
add_library ( webfuse-provider SHARED
l i b / w e b f u s e / p r o v i d e r / a p i . c
)
set_target_properties ( webfuse-provider PROPERTIES VERSION ${ PROJECT_VERSION } )
set_target_properties ( webfuse-provider PROPERTIES SOVERSION 0 )
set_target_properties ( webfuse-provider PROPERTIES C_VISIBILITY_PRESET hidden )
set_target_properties ( webfuse-provider PROPERTIES COMPILE_DEFINITIONS "WFP_API=WFP_EXPORT" )
target_include_directories ( webfuse-provider PUBLIC lib )
target_link_libraries ( webfuse-provider PRIVATE webfuse-provider-static webfuse-core )
file ( WRITE "${PROJECT_BINARY_DIR}/libwebfuse-provider.pc"
" p r e f i x = \ " $ { C M A K E _ I N S T A L L _ P R E F I X } \ "
e x e c _ p r e f i x = \ $ { p r e f i x }
l i b d i r = \ $ { e x e c _ p r e f i x } / l i b $ { L I B _ S U F F I X }
i n c l u d e d i r = \ $ { p r e f i x } / i n c l u d e
N a m e : l i b w e b f u s e - p r o v i d e r
D e s c r i p t i o n : P r o v i d e r l i b r a r y f o r w e b s o c k e t s f i l e s y s t e m
V e r s i o n : $ { P R O J E C T _ V E R S I O N }
L i b s : - L \ $ { l i b d i r } - l w e b f u s e - p r o v i d e r - l $ { L W S _ L I B R A R I E S } - l $ { J A N S S O N _ L I B R A R I E S }
C f l a g s : - I \ $ { i n c l u d e d i r } "
)
install ( TARGETS webfuse-provider DESTINATION lib ${ LIB_SUFFIX } )
install ( FILES include/webfuse_provider.h DESTINATION include )
install ( DIRECTORY include/webfuse/provider DESTINATION include/webfuse )
install ( FILES "${PROJECT_BINARY_DIR}/libwebfuse-provider.pc" DESTINATION lib ${ LIB_SUFFIX } /pkgconfig )
# t e s t s
if ( NOT WITHOUT_TESTS )
include ( CTest )
pkg_check_modules ( GTEST gtest_main )
include ( GoogleTest )
pkg_check_modules ( GMOCK gmock )
add_executable ( alltests
t e s t / m s l e e p . c c
t e s t / d i e _ i f . c c
t e s t / m o c k _ a u t h e n t i c a t o r . c c
t e s t / m o c k _ r e q u e s t . c c
t e s t / c o r e / t e s t _ c o n t a i n e r _ o f . c c
t e s t / c o r e / t e s t _ s t r i n g . c c
t e s t / c o r e / t e s t _ s l i s t . c c
t e s t / c o r e / t e s t _ p a t h . c c
t e s t / c o r e / t e s t _ b a s e 6 4 . c c
t e s t / c o r e / t e s t _ s t a t u s . c c
t e s t / c o r e / t e s t _ m e s s a g e . c c
t e s t / c o r e / t e s t _ m e s s a g e _ q u e u e . c c
t e s t / a d a p t e r / t e s t _ r e s p o n s e _ p a r s e r . c c
t e s t / a d a p t e r / t e s t _ s e r v e r . c c
t e s t / a d a p t e r / t e s t _ t i m e p o i n t . c c
t e s t / a d a p t e r / t e s t _ t i m e r . c c
t e s t / a d a p t e r / t e s t _ c r e d e n t i a l s . c c
t e s t / a d a p t e r / t e s t _ a u t h e n t i c a t o r . c c
t e s t / a d a p t e r / t e s t _ a u t h e n t i c a t o r s . c c
t e s t / a d a p t e r / t e s t _ f u s e _ r e q . c c
t e s t / a d a p t e r / j s o n r p c / t e s t _ u t i l . c c
t e s t / a d a p t e r / j s o n r p c / t e s t _ i s _ r e q u e s t . c c
t e s t / a d a p t e r / j s o n r p c / t e s t _ r e q u e s t . c c
t e s t / a d a p t e r / j s o n r p c / t e s t _ i s _ r e s p o n s e . c c
t e s t / a d a p t e r / j s o n r p c / t e s t _ r e s p o n s e . c c
t e s t / a d a p t e r / j s o n r p c / t e s t _ s e r v e r . c c
t e s t / a d a p t e r / j s o n r p c / t e s t _ p r o x y . c c
t e s t / p r o v i d e r / t e s t _ u r l . c c
t e s t / p r o v i d e r / t e s t _ s t a t i c _ f i l e s y s t e m . c c
t e s t / i n t e g r a t i o n / t e s t _ i n t e g r a t i o n . c c
t e s t / i n t e g r a t i o n / s e r v e r . c c
t e s t / i n t e g r a t i o n / p r o v i d e r . c c
)
target_link_libraries ( alltests PUBLIC webfuse-adapter-static webfuse-provider-static webfuse-core ${ EXTRA_LIBS } ${ GMOCK_LIBRARIES } ${ GTEST_LIBRARIES } )
target_include_directories ( alltests PUBLIC test lib ${ GMOCK_INCLUDE_DIRS } ${ GTEST_INCLUDE_DIRS } )
target_compile_options ( alltests PUBLIC ${ GMOCK_CFLAGS } ${ GTEST_CFLAGS } )
enable_testing ( )
gtest_discover_tests ( alltests TEST_PREFIX alltests: )
add_custom_target ( coverage
. / a l l t e s t s
C O M M A N D m k d i r - p c o v e r a g e
C O M M A N D l c o v - - c a p t u r e - - d i r e c t o r y . - - o u t p u t - f i l e c o v e r a g e / l c o v . i n f o
C O M M A N D l c o v - - r e m o v e c o v e r a g e / l c o v . i n f o ' / u s r / * ' - - o u t p u t - f i l e c o v e r a g e / l c o v . i n f o
C O M M A N D l c o v - - r e m o v e c o v e r a g e / l c o v . i n f o ' * / t e s t / * ' - - o u t p u t - f i l e c o v e r a g e / l c o v . i n f o
)
add_dependencies ( coverage alltests )
add_custom_target ( coverage-report
C O M M A N D g e n h t m l c o v e r a g e / l c o v . i n f o - - o u t p u t - d i r e c t o r y c o v e r a g e / r e p o r t
)
add_dependencies ( coverage-report coverage )
endif ( NOT WITHOUT_TESTS )
include ( webfuse_core )
include ( webfuse_adapter )
include ( webfuse_provider )
include ( unit_tests )