1- cmake_minimum_required (VERSION 3.2 )
2- project (syncspirit)
1+ cmake_minimum_required (VERSION 3.19 )
2+ project (syncspirit VERSION 0.4.0 )
33
44set (CMAKE_CXX_STANDARD 20)
55set (CMAKE_CXX_STANDARD_REQUIRED ON )
66set (CMAKE_CXX_VISIBILITY_PRESET hidden)
77set (CMAKE_VISIBILITY_INLINES_HIDDEN 1)
8+
89cmake_policy (SET CMP0063 NEW)
910cmake_policy (SET CMP0077 NEW)
11+ cmake_policy (SET CMP0091 NEW)
12+ cmake_policy (SET CMP0135 NEW)
1013
1114include (GenerateExportHeader)
15+ include (FetchContent)
16+
1217set (CMAKE_POSITION_INDEPENDENT_CODE True )
1318
19+ #set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
20+ #set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
21+
1422find_package (
1523 Boost
1624 COMPONENTS
17- iostreams
18- filesystem
25+ nowide
1926 program_options
2027 system
28+ url
2129 REQUIRED
2230)
2331find_package (OpenSSL REQUIRED)
@@ -28,11 +36,52 @@ find_package(lz4 REQUIRED)
2836find_package (fmt REQUIRED)
2937find_package (spdlog REQUIRED)
3038find_package (pugixml REQUIRED)
31- find_package (uriparser REQUIRED)
3239find_package (tomlplusplus REQUIRED)
3340find_package (nlohmann_json REQUIRED)
41+ #find_package(c-ares REQUIRED)
42+
43+ set (SYNCSPIRIT_VERSION "v${CMAKE_PROJECT_VERSION} " )
3444
35- set (SYNCSPIRIT_VERSION "v0.3.3" )
45+ option (SYNCSPIRIT_BUILD_TESTS "Enable building tests [default: OFF]" OFF )
46+
47+ set (dist_dir "${syncspirit_BINARY_DIR} /dist" )
48+ add_custom_target ("deploy" )
49+ if (WIN32 )
50+ add_custom_target ("deploy_deps"
51+ COMMAND
52+ python ${syncspirit_SOURCE_DIR} /misc/post-install -win32 .py
53+ --binaries ${dist_dir} /*
54+ --dirs
55+ `conan config home`
56+ ${CMAKE_BINARY_DIR}
57+ `dirname ${CMAKE_CXX_COMPILER} `/../../
58+ DEPENDS deploy
59+ )
60+ endif ()
61+
62+ function (install_executable target )
63+ install (TARGETS ${target} DESTINATION bin)
64+ add_custom_target ("deploy_${target} " )
65+ add_dependencies ("deploy" "deploy_${target} " )
66+ if (WIN32 )
67+ get_target_property (target_type ${target} TYPE )
68+ if (target_type STREQUAL "EXECUTABLE" )
69+ add_custom_command (TARGET deploy_${target} POST_BUILD
70+ COMMAND ${CMAKE_COMMAND} -E
71+ copy
72+ $<TARGET_FILE:${target} >
73+ "${dist_dir} /$<TARGET_FILE_NAME:${target} >"
74+ )
75+ endif ()
76+ else ()
77+ add_custom_command (TARGET deploy_${target} POST_BUILD
78+ COMMAND
79+ cd ${syncspirit_BINARY_DIR} && sh
80+ ${syncspirit_SOURCE_DIR} /misc/make-appimage.sh
81+ $<TARGET_FILE:${target} >
82+ )
83+ endif ()
84+ endfunction ()
3685
3786configure_file (misc/syncspirit-config.h.in include /syncspirit-config.h @ONLY)
3887set (Protobuf_IMPORT_DIRS ${syncspirit_SOURCE_DIR} /src/protobuf)
@@ -42,22 +91,8 @@ protobuf_generate_cpp(
4291 src/protobuf/bep.proto
4392 src/protobuf/structs.proto
4493)
45- add_library (syncspirit_pb ${PROTO_SRCS} )
46- generate_export_header(syncspirit_pb
47- EXPORT_MACRO_NAME SYNCSPIRIT_API
48- EXPORT_FILE_NAME include /syncspirit-export.h
49- )
50- target_compile_options (syncspirit_pb PRIVATE
51- -include ${CMAKE_CURRENT_BINARY_DIR} /include /syncspirit-export.h
52- )
53- target_include_directories (syncspirit_pb PUBLIC
54- ${Protobuf_INCLUDE_DIRS}
55- ${CMAKE_CURRENT_BINARY_DIR}
56- ${CMAKE_CURRENT_BINARY_DIR} /include
57- )
58- target_link_libraries (syncspirit_pb protobuf::libprotobuf)
59-
60- add_library (syncspirit_lib
94+ add_library (syncspirit_core
95+ ${PROTO_SRCS}
6196 src/constants.cpp
6297 src/config/utils.cpp
6398 src/db/cursor.cpp
@@ -71,60 +106,86 @@ add_library(syncspirit_lib
71106 src/fs/fs_supervisor.cpp
72107 src/fs/new_chunk_iterator.cpp
73108 src/fs/scan_actor.cpp
109+ src/fs/scan_scheduler.cpp
74110 src/fs/scan_task.cpp
75111 src/fs/utils.cpp
76112 src/hasher/hasher_actor.cpp
77113 src/hasher/hasher_proxy_actor.cpp
78114 src/hasher/hasher_supervisor.cpp
79- src/model/diff/aggregate.cpp
80- src/model/diff/base_diff.cpp
115+ src/model/diff/apply_controller.cpp
81116 src/model/diff/block_diff.cpp
82- src/model/diff/block_visitor.cpp
83- src/model/diff/contact_diff.cpp
84- src/model/diff/contact_visitor.cpp
85117 src/model/diff/cluster_diff.cpp
86118 src/model/diff/cluster_visitor.cpp
119+ src/model/diff/advance/advance.cpp
120+ src/model/diff/advance/local_update.cpp
121+ src/model/diff/advance/remote_copy.cpp
122+ src/model/diff/advance/remote_win.cpp
123+ src/model/diff/contact/connect_request.cpp
124+ src/model/diff/contact/dial_request.cpp
125+ src/model/diff/contact/ignored_connected.cpp
126+ src/model/diff/contact/relay_connect_request.cpp
127+ src/model/diff/contact/peer_state.cpp
128+ src/model/diff/contact/unknown_connected.cpp
129+ src/model/diff/contact/update_contact.cpp
87130 src/model/diff/load/blocks.cpp
88- src/model/diff/load/close_transaction.cpp
89131 src/model/diff/load/devices.cpp
90132 src/model/diff/load/file_infos.cpp
91133 src/model/diff/load/folder_infos.cpp
92134 src/model/diff/load/folders.cpp
93135 src/model/diff/load/ignored_devices.cpp
94136 src/model/diff/load/ignored_folders.cpp
95137 src/model/diff/load/load_cluster.cpp
96- src/model/diff/load/unknown_folders.cpp
138+ src/model/diff/load/pending_devices.cpp
139+ src/model/diff/load/pending_folders.cpp
140+ src/model/diff/local/blocks_availability.cpp
141+ src/model/diff/local/custom.cpp
142+ src/model/diff/local/file_availability.cpp
143+ src/model/diff/local/io_failure.cpp
144+ src/model/diff/local/scan_finish.cpp
145+ src/model/diff/local/scan_request.cpp
146+ src/model/diff/local/scan_start.cpp
147+ src/model/diff/local/synchronization_finish.cpp
148+ src/model/diff/local/synchronization_start.cpp
149+ src/model/diff/modify/add_blocks.cpp
150+ src/model/diff/modify/add_remote_folder_infos.cpp
151+ src/model/diff/modify/add_ignored_device.cpp
152+ src/model/diff/modify/add_pending_device.cpp
153+ src/model/diff/modify/add_pending_folders.cpp
97154 src/model/diff/modify/append_block.cpp
98155 src/model/diff/modify/block_ack.cpp
99156 src/model/diff/modify/block_rej.cpp
100157 src/model/diff/modify/block_transaction.cpp
101- src/model/diff/modify/blocks_availability.cpp
102158 src/model/diff/modify/clone_block.cpp
103- src/model/diff/modify/clone_file.cpp
104- src/model/diff/modify/connect_request.cpp
105- src/model/diff/modify/create_folder.cpp
106- src/model/diff/modify/file_availability.cpp
107159 src/model/diff/modify/finish_file.cpp
108- src/model/diff/modify/finish_file_ack .cpp
160+ src/model/diff/modify/generic_remove .cpp
109161 src/model/diff/modify/lock_file.cpp
110162 src/model/diff/modify/mark_reachable.cpp
111- src/model/diff/modify/local_update.cpp
112- src/model/diff/modify/relay_connect_request.cpp
163+ src/model/diff/modify/remove_blocks.cpp
164+ src/model/diff/modify/remove_files.cpp
165+ src/model/diff/modify/remove_folder.cpp
166+ src/model/diff/modify/remove_folder_infos.cpp
167+ src/model/diff/modify/remove_peer.cpp
168+ src/model/diff/modify/remove_ignored_device.cpp
169+ src/model/diff/modify/remove_pending_device.cpp
170+ src/model/diff/modify/remove_pending_folders.cpp
171+ src/model/diff/modify/reset_folder_infos.cpp
113172 src/model/diff/modify/share_folder.cpp
173+ src/model/diff/modify/suspend_folder.cpp
114174 src/model/diff/modify/unshare_folder.cpp
115- src/model/diff/modify/update_contact.cpp
116175 src/model/diff/modify/update_peer.cpp
117- src/model/diff/peer/peer_state .cpp
118- src/model/diff/peer/cluster_remove .cpp
176+ src/model/diff/modify/upsert_folder .cpp
177+ src/model/diff/modify/upsert_folder_info .cpp
119178 src/model/diff/peer/cluster_update.cpp
120179 src/model/diff/peer/update_folder.cpp
121180 src/model/misc/block_iterator.cpp
122181 src/model/misc/error_code.cpp
123182 src/model/misc/file_block.cpp
124183 src/model/misc/file_iterator.cpp
184+ src/model/misc/orphaned_blocks.cpp
185+ src/model/misc/resolver.cpp
186+ src/model/misc/sequencer.cpp
125187 src/model/misc/updates_streamer.cpp
126188 src/model/misc/uuid.cpp
127- src/model/misc/version_utils.cpp
128189 src/model/block_info.cpp
129190 src/model/cluster.cpp
130191 src/model/device.cpp
@@ -135,8 +196,11 @@ add_library(syncspirit_lib
135196 src/model/folder_info.cpp
136197 src/model/ignored_device.cpp
137198 src/model/ignored_folder.cpp
199+ src/model/pending_device.cpp
200+ src/model/pending_folder.cpp
138201 src/model/remote_folder_info.cpp
139- src/model/unknown_folder.cpp
202+ src/model/some_device.cpp
203+ src/model/version .cpp
140204 src/net/acceptor_actor.cpp
141205 src/net/cluster_supervisor.cpp
142206 src/net/controller_actor.cpp
@@ -153,6 +217,7 @@ add_library(syncspirit_lib
153217 src/net/relay_actor.cpp
154218 src/net/resolver_actor.cpp
155219 src/net/names .cpp
220+ src/net/sink_actor.cpp
156221 src/net/ssdp_actor.cpp
157222 src/net/upnp_actor.cpp
158223 src/proto/bep_support.cpp
@@ -164,51 +229,99 @@ add_library(syncspirit_lib
164229 src/transport/http.cpp
165230 src/utils/base32.cpp
166231 src/utils/beast_support.cpp
232+ src/utils/dns.cpp
167233 src/utils/error_code.cpp
168234 src/utils/location .cpp
169235 src/utils/log .cpp
236+ src/utils/log -setup.cpp
170237 src/utils/network_interface.cpp
171238 src/utils/platform.cpp
239+ src/utils/time.cpp
172240 src/utils/tls.cpp
173241 src/utils/uri.cpp
174242)
243+ generate_export_header(syncspirit_core
244+ EXPORT_MACRO_NAME SYNCSPIRIT_API
245+ EXPORT_FILE_NAME include /syncspirit-export.h
246+ )
247+ target_compile_options (syncspirit_core PRIVATE
248+ -include ${CMAKE_CURRENT_BINARY_DIR} /include /syncspirit-export.h
249+ )
250+
251+ # windows xp patch required:
252+ # - CancelIoEx(ior->overlapped_fd, &item->ov);
253+ # + CancelIo(ior->overlapped_fd);
254+ FetchContent_Declare(MDBX
255+ URL https://libmdbx.dqdkfa.ru/release/libmdbx-amalgamated-0.13.4.tar.xz
256+ URL_HASH SHA256=86df30ca2231c9b3ad71424bb829dca9041947f5539d4295030c653d4982c1be
257+ )
258+ if (WIN32 )
259+ set (BUILD_SHARED_LIBS true CACHE BOOL "BUILD_SHARED_LIBS" )
260+ set (MDBX_BUILD_SHARED_LIBRARY true CACHE BOOL "MDBX_BUILD_SHARED_LIBRARY" )
261+ else ()
262+ set (BUILD_SHARED_LIBS false CACHE BOOL "BUILD_SHARED_LIBS" )
263+ set (MDBX_BUILD_SHARED_LIBRARY false CACHE BOOL "MDBX_BUILD_SHARED_LIBRARY" )
264+ endif ()
265+ set (MDBX_BUILD_TOOLS false CACHE BOOL "MDBX_BUILD_TOOLS" )
266+ set (MDBX_ENABLE_TESTS false CACHE BOOL "MDBX_ENABLE_TESTS" )
267+ set (MDBX_BUILD_CXX false CACHE BOOL "MDBX_BUILD_CXX" )
268+ set (MDBX_ALLOY_BUILD_DEFAULT true CACHE BOOL "MDBX_ALLOY_BUILD_DEFAULT" )
269+ set (MDBX_ALLOY_BUILD true CACHE BOOL "MDBX_ALLOY_BUILD" )
270+ FetchContent_MakeAvailable(MDBX)
175271
176- set (BUILD_SHARED_LIBS false CACHE BOOL "BUILD_SHARED_LIBS" )
177- set (MDBX_BUILD_TOOLS false CACHE BOOL "MDBX_BUILD_TOOLS" )
178- set (MDBX_ENABLE_TESTS false CACHE BOOL "MDBX_ENABLE_TESTS" )
179- set (MDBX_BUILD_CXX false CACHE BOOL "MDBX_BUILD_CXX" )
180- set (MDBX_BUILD_SHARED_LIBRARY true CACHE BOOL "MDBX_BUILD_SHARED_LIBRARY" )
181272
182- add_subdirectory ("lib/mbdx" )
273+ # To support WinXP there is need of that commit. When cares will be released
274+ # and pushed to conan center, the ready receive capn be used
275+ FetchContent_Declare(C_ARES
276+ GIT_REPOSITORY https://github.com/c-ares/c-ares.git
277+ GIT_TAG 7978cf75a82f9860da241227169a4d7f1d1f549a
278+ # URL https://github.com/c-ares/c-ares/archive/refs/tags/v1.34.4.tar.gz
279+ # URL_HASH SHA256=a35f7c4cdbdfaf0a69a9a50029e95ffe403daf605fade05c649d18333592222d
280+ )
281+ set (CARES_STATIC true CACHE BOOL "CARES_STATIC" )
282+ set (CARES_SHARED false CACHE BOOL "CARES_SHARED" )
283+ set (CARES_STATIC_PIC true CACHE BOOL "CARES_STATIC_PIC" )
284+ set (CARES_BUILD_TOOLS false CACHE BOOL "CARES_BUILD_TOOLS" )
285+ set (CARES_THREADS false CACHE BOOL "CARES_THREADS" )
286+ FetchContent_MakeAvailable(C_ARES)
183287
184- target_include_directories (syncspirit_lib PUBLIC
185- ${syncspirit_SOURCE_DIR} /lib/mbdx
288+ target_include_directories (syncspirit_core PUBLIC
289+ ${Protobuf_INCLUDE_DIRS}
186290 ${OPENSSL_INCLUDE_DIR}
187291 ${CMAKE_CURRENT_BINARY_DIR}
292+ ${CMAKE_CURRENT_BINARY_DIR} /include
188293 ${CMAKE_CURRENT_SOURCE_DIR} /src
189294)
190295
191- target_link_libraries (syncspirit_lib
192- syncspirit_pb
193- rotor::asio
194- rotor::thread
195- pugixml::pugixml
196- Boost::iostreams
197- Boost::filesystem
198- Boost::program_options
199- Boost::system
200- OpenSSL::SSL
201- fmt::fmt
202- spdlog::spdlog
203- uriparser::uriparser
204- tomlplusplus::tomlplusplus
205- nlohmann_json::nlohmann_json
206- lz4::lz4
207- $<IF:$<PLATFORM_ID:Windows>,mdbx,mdbx-static >
208- $<$<PLATFORM_ID:Windows>:iphlpapi>
209- $<$<PLATFORM_ID:Windows>:ws2_32>
296+ target_link_libraries (syncspirit_core
297+ PUBLIC
298+ protobuf::libprotobuf
299+ rotor::asio
300+ rotor::thread
301+ pugixml::pugixml
302+ Boost::nowide
303+ Boost::program_options
304+ Boost::system
305+ Boost::url
306+ OpenSSL::SSL
307+ fmt::fmt
308+ spdlog::spdlog
309+ tomlplusplus::tomlplusplus
310+ nlohmann_json::nlohmann_json
311+ lz4::lz4
312+ $<IF:$<PLATFORM_ID:Windows>,mdbx,mdbx-static >
313+ $<$<PLATFORM_ID:Windows>:iphlpapi>
314+ $<$<PLATFORM_ID:Windows>:ws2_32>
315+ $<$<PLATFORM_ID:Windows>:wsock32>
316+ PRIVATE
317+ c-ares::cares
210318)
319+ install_executable("syncspirit_core" )
320+
321+ if (SYNCSPIRIT_BUILD_TESTS)
322+ enable_testing ()
323+ add_subdirectory ("tests" )
324+ endif ()
211325
212- enable_testing ()
213- add_subdirectory ("tests" )
214326add_subdirectory ("src/ui-daemon" )
327+ add_subdirectory ("src/ui-fltk" )
0 commit comments