2.0.0-rc (#9)
Some checks failed
BlockStorage/repertory_osx/pipeline/head This commit looks good
BlockStorage/repertory_windows/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head There was a failure building this commit
BlockStorage/repertory_linux_builds/pipeline/head This commit looks good
BlockStorage/repertory_osx_builds/pipeline/head There was a failure building this commit

### Issues

* \#1 \[bug\] Unable to mount S3 due to 'item_not_found' exception
* \#2 Require bucket name for S3 mounts
* \#3 \[bug\] File size is not being updated in S3 mount
* \#4 Upgrade to libfuse-3.x.x
* \#5 Switch to renterd for Sia support
* \#6 Switch to cpp-httplib to further reduce dependencies
* \#7 Remove global_data and calculate used disk space per provider
* \#8 Switch to libcurl for S3 mount support

### Changes from v1.x.x

* Added read-only encrypt provider
  * Pass-through mount point that transparently encrypts source data using `XChaCha20-Poly1305`
* Added S3 encryption support via `XChaCha20-Poly1305`
* Added replay protection to remote mounts
* Added support base64 writes in remote FUSE
* Created static linked Linux binaries for `amd64` and `aarch64` using `musl-libc`
* Removed legacy Sia renter support
* Removed Skynet support
* Fixed multiple remote mount WinFSP API issues on \*NIX servers
* Implemented chunked read and write
  * Writes for non-cached files are performed in chunks of 8Mib
* Removed `repertory-ui` support
* Removed `FreeBSD` support
* Switched to `libsodium` over `CryptoPP`
* Switched to `XChaCha20-Poly1305` for remote mounts
* Updated `GoogleTest` to v1.14.0
* Updated `JSON for Modern C++` to v3.11.2
* Updated `OpenSSL` to v1.1.1w
* Updated `RocksDB` to v8.5.3
* Updated `WinFSP` to 2023
* Updated `boost` to v1.78.0
* Updated `cURL` to v8.3.0
* Updated `zlib` to v1.3
* Use `upload_manager` for all providers
  * Adds a delay to uploads to prevent excessive API calls
  * Supports re-upload after mount restart for incomplete uploads
  * NOTE: Uploads for all providers are full file (no resume support)
    * Multipart upload support is planned for S3

Reviewed-on: #9
This commit is contained in:
2023-10-29 06:55:59 +00:00
parent 3ff46723b8
commit f43c41f88a
839 changed files with 98214 additions and 92959 deletions

View File

@ -1,94 +1,34 @@
cmake_minimum_required(VERSION 3.22)
project(repertory)
include(CheckIncludeFiles)
if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0")
cmake_policy(SET CMP0135 NEW)
endif()
include(CheckIncludeFileCXX)
include(CheckIncludeFiles)
include(ExternalProject)
set(AWSCPP_VERSION 1.9.206)
set(BOOST_MAJOR_VERSION 1)
set(BOOST_MINOR_VERSION 78)
set(BOOST_MSVC_TOOLSET msvc-14.2)
set(BOOST_MSVC_TOOLSET_DLL 142)
set(BOOST_REVISION 0)
set(BOOST_VERSION ${BOOST_MAJOR_VERSION}.${BOOST_MINOR_VERSION}.${BOOST_REVISION})
set(BOOST_VERSION_DL ${BOOST_MAJOR_VERSION}_${BOOST_MINOR_VERSION}_${BOOST_REVISION})
set(BOOST_VERSION_DLL ${BOOST_MAJOR_VERSION}_${BOOST_MINOR_VERSION})
set(CRYPTOPP_VERSION 8_2_0)
set(CURL_VERSION 7_81_0)
set(GTEST_VERSION 1.11.0)
set(LIBHTTPSERVER_VERSION 0.18.2)
set(LIBMICROHTTPD_VERSION 0.9.73)
set(LIBUUID_VERSION 1.6.2)
set(OPENSSL_VERSION 1_1_1m)
set(ROCKSDB_VERSION 6.27.3)
set(WINFSP_VERSION 1.10)
set(ZLIB_VERSION v1.2.11)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
option(REPERTORY_ENABLE_TESTING "Enable testing" ON)
option(REPERTORY_ENABLE_S3 "Enable S3 mount support" OFF)
if (REPERTORY_ENABLE_S3)
add_definitions(-DREPERTORY_ENABLE_S3)
option(REPERTORY_ENABLE_S3_TESTING "Enable S3 unit tests" OFF)
if (REPERTORY_ENABLE_S3_TESTING)
add_definitions(-DREPERTORY_ENABLE_S3_TESTING)
endif ()
endif ()
option(REPERTORY_ENABLE_SKYNET "Enable Skynet mount support" ON)
if (REPERTORY_ENABLE_SKYNET)
add_definitions(-DREPERTORY_ENABLE_SKYNET)
option(REPERTORY_ENABLE_SKYNET_PREMIUM_TESTS "Enable Skynet premium portal unit tests" OFF)
if (REPERTORY_ENABLE_SKYNET_PREMIUM_TESTS)
add_definitions(-DREPERTORY_ENABLE_SKYNET_PREMIUM_TESTS)
endif()
endif ()
set(REPERTORY_MAJOR 2)
set(REPERTORY_MINOR 0)
set(REPERTORY_REV 0)
set(REPERTORY_RELEASE_NUM 2000000)
set(REPERTORY_RELEASE_NUM 0)
set(REPERTORY_RELEASE_ITER rc)
set(REPERTORY_VERSION ${REPERTORY_MAJOR}.${REPERTORY_MINOR}.${REPERTORY_REV}-${REPERTORY_RELEASE_ITER})
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
set(IS_CLANG_COMPILER TRUE)
endif()
if(UNIX AND NOT APPLE)
if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
set(FREEBSD TRUE)
else()
set(LINUX TRUE)
endif()
elseif(UNIX AND APPLE)
set(MACOS TRUE)
set(CMAKE_OSX_ARCHITECTURES x86_64)
endif()
if ("${CMAKE_SIZEOF_VOID_P}" EQUAL "4")
message(FATAL_ERROR "32-bit compilation is not supported")
else()
if (CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*|arm64.*|ARM64.*)")
set(REPERTORY_UNIX_ARCH armv8-a)
set(IS_ARM64 TRUE)
add_definitions("-DIS_ARM64")
else()
set(REPERTORY_UNIX_ARCH x86-64)
endif()
set(WINFSP_LIBRARY_BASENAME winfsp-x64)
set(REPERTORY_LIB_DIR lib64)
endif()
include(cmake/arch_detection.cmake)
include(cmake/os_detection.cmake)
include(cmake/options.cmake)
include(cmake/settings.cmake)
include(cmake/flags.cmake)
include(cmake/versions.cmake)
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/cacert.pem")
file(REMOVE ${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/cacert.pem)
endif()
file(DOWNLOAD https://curl.haxx.se/ca/cacert.pem ${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/cacert.pem)
unset(REPERTORY_GIT_REV CACHE)
execute_process(
COMMAND git rev-parse --short HEAD
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
@ -97,269 +37,203 @@ execute_process(
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if (NOT CMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 17)
endif()
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(THREADS_PREFER_PTHREAD_FLAG ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
if (NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif ()
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
set(DEBUG_EXTRA d)
set(DEBUG_EXTRA2 -d)
set(DEBUG_EXTRA3 _d)
set(BOOST_DEBUG_EXTRA gd-)
set(CMAKE_BUILD_TYPE_LOWER debug)
else()
set(CMAKE_BUILD_TYPE_LOWER release)
endif()
string(TOLOWER "${CMAKE_GENERATOR}" CMAKE_GENERATOR_LOWER)
set(EXTERNAL_BUILD_ROOT ${CMAKE_BINARY_DIR}/external)
set(EXTERNAL_BUILD_TYPE ${CMAKE_BUILD_TYPE})
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/common.cpp.in ${CMAKE_CURRENT_SOURCE_DIR}/src/common.cpp @ONLY)
link_directories(
${EXTERNAL_BUILD_ROOT}/lib
)
if (UNIX)
set(STATIC_LIB_EXT a)
set(REPERTORY_C_FLAGS_LIST
${REPERTORY_C_FLAGS_LIST}
-march=${REPERTORY_UNIX_ARCH}
-mtune=generic
-D_FILE_OFFSET_BITS=64
)
set(REPERTORY_CXX_FLAGS_LIST
${REPERTORY_CXX_FLAGS_LIST}
-march=${REPERTORY_UNIX_ARCH}
-mtune=generic
-D_FILE_OFFSET_BITS=64
-std=c++${CMAKE_CXX_STANDARD}
)
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
set(REPERTORY_C_FLAGS_LIST
${REPERTORY_C_FLAGS_LIST}
-g
-gdwarf-4
-DDEBUG
-O0
-fno-omit-frame-pointer
-D_DEBUG
-Wall
-Wextra
-Wpedantic
)
set(REPERTORY_CXX_FLAGS_LIST
${REPERTORY_CXX_FLAGS_LIST}
-g
-gdwarf-4
-DDEBUG
-O0
-fno-omit-frame-pointer
-D_DEBUG
-Wall
-Wextra
-Wpedantic
)
else ()
set(REPERTORY_C_FLAGS_LIST
${REPERTORY_C_FLAGS_LIST}
-O3
-DNDEBUG
)
set(REPERTORY_CXX_FLAGS_LIST
${REPERTORY_CXX_FLAGS_LIST}
-O3
-DNDEBUG
)
if (NOT IS_CLANG_COMPILER)
set(REPERTORY_C_FLAGS_LIST
${REPERTORY_C_FLAGS_LIST}
-s
)
set(REPERTORY_CXX_FLAGS_LIST
${REPERTORY_CXX_FLAGS_LIST}
-s
)
endif ()
check_include_files(sys/xattr.h HAS_SETXATTR)
if (HAS_SETXATTR)
set(REPERTORY_DEFINITIONS ${REPERTORY_DEFINITIONS} -DHAS_SETXATTR)
endif()
endif()
if (LINUX)
execute_process(COMMAND /bin/bash ${CMAKE_CURRENT_SOURCE_DIR}/detect_linux_build.sh OUTPUT_VARIABLE LINUX_DISTRO)
string(REGEX REPLACE "\n$" "" LINUX_DISTRO "${LINUX_DISTRO}")
if (LINUX_DISTRO STREQUAL "debian9")
set(IS_DEBIAN9_DISTRO TRUE)
add_definitions("-DIS_DEBIAN9_DISTRO")
if (MSVC OR MINGW)
set(WINFSP_LIBRARY_BASENAME winfsp-x64)
include_directories(SYSTEM ${CMAKE_SOURCE_DIR}/3rd_party/winfsp-${WINFSP_VERSION}/inc)
link_directories(${CMAKE_SOURCE_DIR}/3rd_party/winfsp-${WINFSP_VERSION}/lib)
set(REPERTORY_LINK_LIBRARIES
${REPERTORY_LINK_LIBRARIES}
${WINFSP_LIBRARY_BASENAME}.lib
)
endif()
if (LINUX OR MINGW)
if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0)
message(FATAL_ERROR "Require at least gcc-8.0")
endif()
set(ENV{PKG_CONFIG_PATH} "${EXTERNAL_BUILD_ROOT}/lib/pkgconfig:${EXTERNAL_BUILD_ROOT}/${REPERTORY_LIB_DIR}/pkgconfig:$ENV{PKG_CONFIG_PATH}")
set(ENV{PKG_CONFIG_PATH}
"${EXTERNAL_BUILD_ROOT}/lib/pkgconfig:${EXTERNAL_BUILD_ROOT}/lib64/pkgconfig:$ENV{PKG_CONFIG_PATH}"
)
find_package(PkgConfig REQUIRED)
pkg_check_modules(LIBFUSE REQUIRED fuse>=2.9.0)
set(Boost_USE_STATIC_LIBS ON)
include_directories(/usr/local/include)
if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.5)
message(FATAL_ERROR "Require at least gcc-5.5")
if (NOT MINGW)
include_directories(/usr/local/include)
link_directories(
/usr/local/lib
/usr/local/lib64
)
endif()
link_directories(
${EXTERNAL_BUILD_ROOT}/${REPERTORY_LIB_DIR}
/usr/local/lib
/usr/local/${REPERTORY_LIB_DIR}
)
set(REPERTORY_LINK_LIBRARIES
dl
pthread
)
if (REPERTORY_MUSL)
find_library(LIBFUSE3 NO_CACHE NAMES libfuse3.a)
else()
if (NOT MINGW)
find_library(LIBDL_LIBRARY NO_CACHE NAMES dl)
find_library(LIBFUSE3 NO_CACHE NAMES fuse3)
endif()
endif()
if (REPERTORY_MUSL OR MINGW)
find_library(LIBPTHREAD_LIBRARY NO_CACHE NAMES libpthread.a)
else()
find_library(LIBPTHREAD_LIBRARY NO_CACHE NAMES pthread)
endif()
if (LIBFUSE3 AND NOT MINGW)
pkg_check_modules(LIBFUSE3 REQUIRED fuse3>=3.0.0)
set(LIBFUSE3_LIBRARIES ${LIBFUSE3})
add_definitions(-DFUSE_USE_VERSION=30)
endif()
if(NOT LIBFUSE3_LIBRARIES AND NOT MINGW)
pkg_check_modules(LIBFUSE2 REQUIRED fuse>=2.9.0)
add_definitions(-DFUSE_USE_VERSION=29)
endif()
if (NOT LIBPTHREAD_LIBRARY)
message(FATAL_ERROR "'libpthread' not found")
endif()
if (REPERTORY_MUSL)
if (LIBFUSE3_LIBRARIES)
set(LIBFUSE3_LIBRARIES libfuse3.a)
else()
set(LIBFUSE2_LIBRARIES libfuse.a)
endif()
set(REPERTORY_LINK_LIBRARIES
${REPERTORY_LINK_LIBRARIES}
${LIBPTHREAD_LIBRARY}
)
else()
if (NOT MINGW AND NOT LIBDL_LIBRARY)
message(FATAL_ERROR "'libdl' not found")
endif()
set(REPERTORY_LINK_LIBRARIES
${REPERTORY_LINK_LIBRARIES}
${LIBPTHREAD_LIBRARY}
${LIBDL_LIBRARY}
)
endif()
elseif (FREEBSD)
message(FATAL_ERROR "FreeBSD is no longer supported")
message(FATAL_ERROR "FreeBSD is currently not supported")
elseif (MACOS)
add_definitions("-DBOOST_ASIO_HAS_STD_STRING_VIEW")
set(CMAKE_OSX_ARCHITECTURES x86_64)
find_library(LIBDL_LIBRARY NO_CACHE NAMES dl)
if (NOT LIBDL_LIBRARY)
message(FATAL_ERROR "'libdl' not found")
endif()
find_library(LIBPTHREAD_LIBRARY NO_CACHE NAMES pthread)
if (NOT LIBPTHREAD_LIBRARY)
message(FATAL_ERROR "'libpthread' not found")
endif()
set(REPERTORY_DEFINITIONS ${REPERTORY_DEFINITIONS} -DBOOST_ASIO_HAS_STD_STRING_VIEW)
add_definitions(-DFUSE_USE_VERSION=29)
include_directories(/usr/local/include)
find_library(OSXFUSE NAMES OSXFUSE)
if (OSXFUSE-NOTFOUND)
find_library(OSXFUSE NO_CACHE NAMES OSXFUSE)
if (NOT OSXFUSE)
message(FATAL_ERROR "FUSE for macOS not found (https://osxfuse.github.io/)")
endif ()
set(LIBFUSE_LIBRARIES fuse)
set(LIBFUSE2_LIBRARIES fuse)
set(REPERTORY_LINK_LIBRARIES
z
pthread
dl
${REPERTORY_LINK_LIBRARIES}
${LIBDL_LIBRARY}
${LIBPTHREAD_LIBRARY}
"-L/usr/local/lib"
"-framework Foundation"
"-framework AppKit"
"-framework Security"
"-framework SystemConfiguration"
)
elseif (MSVC)
set(STATIC_LIB_EXT lib)
set(REPERTORY_C_FLAGS_LIST
${REPERTORY_C_FLAGS_LIST}
/D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING
/DNOMINMAX
/bigobj
/Zi
)
set(REPERTORY_CXX_FLAGS_LIST
${REPERTORY_CXX_FLAGS_LIST}
/D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING
/DNOMINMAX
/bigobj
/Zi
)
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
set(REPERTORY_C_FLAGS_LIST
${REPERTORY_C_FLAGS_LIST}
/DEBUG
)
set(REPERTORY_CXX_FLAGS_LIST
${REPERTORY_CXX_FLAGS_LIST}
/DEBUG
)
set(REPERTORY_SHARED_LINKER_FLAGS_LIST
${REPERTORY_SHARED_LINKER_FLAGS_LIST}
/DEBUG
/OPT:REF
/OPT:ICF
)
set(OPENSSL_USE_STATIC_LIBS TRUE)
if (NOT OPENSSL_ROOT_DIR)
set (OPENSSL_ROOT_DIR "$ENV{USERPROFILE}\\scoop\\apps\\openssl\\current")
endif()
find_package(OpenSSL 1.1.1 REQUIRED)
set(OPENSSL_LIBRARIES OpenSSL::SSL OpenSSL::Crypto)
set(REPERTORY_DEFINITIONS ${REPERTORY_DEFINITIONS} -D_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING)
if (NOT CMAKE_GENERATOR_LOWER STREQUAL "nmake makefiles")
set(REPERTORY_OUTPUT_DIR ${CMAKE_BINARY_DIR}/${CMAKE_BUILD_TYPE})
endif()
endif()
if (MINGW)
set(REPERTORY_LINK_LIBRARIES
${REPERTORY_LINK_LIBRARIES}
mswsock
)
endif()
if (MSVC OR MINGW)
set(REPERTORY_VER_FILEVERSION ${REPERTORY_MAJOR},${REPERTORY_MINOR},${REPERTORY_REV},${REPERTORY_RELEASE_NUM})
set(REPERTORY_VER_FILEVERSION_STR ${REPERTORY_MAJOR}.${REPERTORY_MINOR}.${REPERTORY_REV}.${REPERTORY_RELEASE_NUM})
set(REPERTORY_VER_PRODUCTVERSION ${REPERTORY_MAJOR},${REPERTORY_MINOR},${REPERTORY_REV},${REPERTORY_RELEASE_NUM})
set(REPERTORY_VER_PRODUCTVERSION_STR ${REPERTORY_MAJOR}.${REPERTORY_MINOR}.${REPERTORY_REV}.${REPERTORY_RELEASE_NUM})
set(REPERTORY_VER_PRERELEASE VS_FF_PRERELEASE)
set(REPERTORY_VER_COMPANYNAME_STR "https://git.fifthgrid.com/blockstorage")
set(REPERTORY_VER_LEGALCOPYRIGHT_STR "Copyright 2018 <MIT License> <https://git.fifthgrid.com/blockstorage/repertory>")
set(REPERTORY_VER_FILEDESCRIPTION_STR "Mount utility for Sia, Skynet and S3")
set(REPERTORY_VER_LEGALCOPYRIGHT_STR "Copyright 2018-2023 <MIT License> <https://git.fifthgrid.com/blockstorage/repertory>")
set(REPERTORY_VER_FILEDESCRIPTION_STR "Mount utility for Sia and S3")
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/version.rc.in ${CMAKE_CURRENT_SOURCE_DIR}/src/version.rc @ONLY)
set(WINDOWS_VERSION_RC ${CMAKE_CURRENT_SOURCE_DIR}/src/version.rc)
set(OPENSSL_USE_STATIC_LIBS TRUE)
if (NOT OPENSSL_ROOT_DIR)
set (OPENSSL_ROOT_DIR "C:\\Program Files\\OpenSSL-Win64")
if (MSVC)
set(LIB_EXT .lib)
endif()
find_package(OpenSSL 1.1.1 REQUIRED)
set(OPENSSL_LIBRARIES OpenSSL::SSL OpenSSL::Crypto)
include_directories(SYSTEM ${CMAKE_SOURCE_DIR}/3rd_party/winfsp-${WINFSP_VERSION}/inc)
add_definitions(-DTTMATH_NOASM -D_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING)
link_directories(${CMAKE_SOURCE_DIR}/3rd_party/winfsp-${WINFSP_VERSION}/lib)
set(REPERTORY_LINK_LIBRARIES
Ncrypt.lib
Rpcrt4.lib
Secur32.lib
Shlwapi.lib
Userenv.lib
Version.lib
Winhttp.lib
Wininet.lib
Ws2_32.lib
advapi32.lib
bcrypt.lib
comdlg32.lib
crypt32.lib
gdi32.lib
httpapi.lib
kernel32.lib
ole32.lib
oleaut32.lib
shell32.lib
user32.lib
uuid.lib
winspool.lib
${WINFSP_LIBRARY_BASENAME}.lib
${REPERTORY_LINK_LIBRARIES}
advapi32${LIB_EXT}
bcrypt${LIB_EXT}
comdlg32${LIB_EXT}
crypt32${LIB_EXT}
gdi32${LIB_EXT}
httpapi${LIB_EXT}
kernel32${LIB_EXT}
ncrypt${LIB_EXT}
ole32${LIB_EXT}
oleaut32${LIB_EXT}
rpcrt4${LIB_EXT}
secur32${LIB_EXT}
shell32${LIB_EXT}
shlwapi${LIB_EXT}
user32${LIB_EXT}
userenv${LIB_EXT}
uuid${LIB_EXT}
version${LIB_EXT}
winhttp${LIB_EXT}
wininet${LIB_EXT}
winspool${LIB_EXT}
ws2_32${LIB_EXT}
)
if (CMAKE_GENERATOR MATCHES "NMake Makefiles")
set(REPERTORY_DLL_OUTPUT_DIR ${CMAKE_BINARY_DIR})
else()
set(REPERTORY_DLL_OUTPUT_DIR ${CMAKE_BINARY_DIR}/${CMAKE_BUILD_TYPE})
endif()
function(CopySupportFiles target)
add_custom_command(
TARGET ${target}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_SOURCE_DIR}/3rd_party/winfsp-${WINFSP_VERSION}/bin/${WINFSP_LIBRARY_BASENAME}.dll
${REPERTORY_DLL_OUTPUT_DIR}/${WINFSP_LIBRARY_BASENAME}.dll)
add_custom_command(
TARGET ${target}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_SOURCE_DIR}/3rd_party/cacert.pem
${REPERTORY_DLL_OUTPUT_DIR}/cacert.pem)
endfunction()
endif()
list(JOIN REPERTORY_CXX_FLAGS_LIST " " REPERTORY_CXX_FLAGS_LIST)
list(JOIN REPERTORY_C_FLAGS_LIST " " REPERTORY_C_FLAGS_LIST)
list(JOIN REPERTORY_SHARED_LINKER_FLAGS_LIST " " REPERTORY_SHARED_LINKER_FLAGS_LIST)
include_directories(SYSTEM
${EXTERNAL_BUILD_ROOT}/include
)
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${REPERTORY_C_FLAGS_LIST}")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${REPERTORY_CXX_FLAGS_LIST}")
set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${REPERTORY_SHARED_LINKER_FLAGS_LIST}")
link_directories(
${EXTERNAL_BUILD_ROOT}/lib
${EXTERNAL_BUILD_ROOT}/lib64
)
include(cmake/zlib.cmake)
include(cmake/openssl.cmake)
@ -367,142 +241,59 @@ include(cmake/curl.cmake)
include(cmake/boost.cmake)
include(cmake/libuuid.cmake)
include(cmake/rocksdb.cmake)
include(cmake/cryptopp.cmake)
include(cmake/awscpp.cmake)
include(cmake/libmicrohttpd.cmake)
include(cmake/libhttpserver.cmake)
include(cmake/libsodium.cmake)
include_directories(include)
include_directories(SYSTEM
${Boost_INCLUDE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/cpp-httplib
${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/json
${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/jsonrpcpp-1.1.1/lib
${LIBUUID_INCLUDE_DIR}
${EXTERNAL_BUILD_ROOT}/include
${EXTERNAL_BUILD_ROOT}/include/cryptopp
${OPENSSL_INCLUDE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/pugixml/src
${CURL_INCLUDE_DIRS}
${LIBFUSE_INCLUDE_DIRS}
${CMAKE_SOURCE_DIR}/3rd_party/ttmath-0.9.3/ttmath
${LIBFUSE2_INCLUDE_DIRS}
${LIBFUSE3_INCLUDE_DIRS}
${LIBUUID_INCLUDE_DIR}
${OPENSSL_INCLUDE_DIR}
${ROCKSDB_INCLUDE_DIRS}
)
if (NOT IS_DEBIAN9_DISTRO)
check_include_file_cxx(optional HAS_STD_OPTIONAL)
if (HAS_STD_OPTIONAL)
add_definitions(-DHAS_STD_OPTIONAL)
endif()
endif()
if (UNIX)
macro(install_symlink filepath sympath)
install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${filepath} ${sympath})")
install(CODE "message(\"-- Created symlink: ${sympath} -> ${filepath}\")")
endmacro(install_symlink)
check_include_files(sys/xattr.h HAS_SETXATTR)
if (HAS_SETXATTR)
add_definitions(-DHAS_SETXATTR)
endif()
endif()
set(REPERTORY_LINK_LIBRARIES
${ROCKSDB_LIBRARIES}
${LIBFUSE_LIBRARIES}
${LIBFUSE2_LIBRARIES}
${LIBFUSE3_LIBRARIES}
${LIBUUID_LIBRARIES}
${AWSCPP_LIBRARIES}
${LIBHTTPSERVER_LIBRARIES}
${LIBMICROHTTPD_LIBRARIES}
${Boost_LIBRARIES}
${CURL_LIBRARIES}
${OPENSSL_LIBRARIES}
${ZLIB_LIBRARIES}
${LIBSODIUM_LIBRARIES}
${REPERTORY_LINK_LIBRARIES}
)
file(GLOB_RECURSE REPERTORY_HEADERS
${REPERTORY_HEADERS}
${CMAKE_CURRENT_SOURCE_DIR}/include/*.h
${CMAKE_CURRENT_SOURCE_DIR}/include/*.hh
${CMAKE_CURRENT_SOURCE_DIR}/include/*.hpp
${CMAKE_CURRENT_SOURCE_DIR}/include/**/*.h
${CMAKE_CURRENT_SOURCE_DIR}/include/**/*.hh
${CMAKE_CURRENT_SOURCE_DIR}/include/**/*.hpp
${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/pugixml/src/*.hpp
)
file(GLOB_RECURSE REPERTORY_SOURCES
${REPERTORY_SOURCES}
${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/**/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/jsonrpcpp-1.1.1/lib/jsonrp.cpp
${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/pugixml/src/*.cpp
)
list(REMOVE_ITEM REPERTORY_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp)
add_library(librepertory STATIC ${REPERTORY_SOURCES} ${REPERTORY_HEADERS})
set_target_properties(librepertory PROPERTIES PREFIX "")
target_link_libraries(librepertory LINK_INTERFACE_LIBRARIES ${REPERTORY_LINK_LIBRARIES})
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/common.cpp.in ${CMAKE_CURRENT_SOURCE_DIR}/src/common.cpp @ONLY)
add_dependencies(librepertory
rocksdb_project
cryptopp_project
libhttpserver_project
)
if (REPERTORY_ENABLE_S3)
add_dependencies(librepertory awscpp_project)
endif ()
if (LINUX)
add_dependencies(librepertory
libuuid_project
boost_project
curl_project
openssl_project
)
elseif (MACOS)
add_dependencies(librepertory
openssl_project
boost_project
curl_project
)
elseif (MSVC)
add_dependencies(librepertory
curl_project
zlib_project
boost_project
)
endif()
add_executable(repertory
src/main.cpp
${WINDOWS_VERSION_RC}
${REPERTORY_HEADERS}
)
add_custom_command(
TARGET repertory
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/cacert.pem
${CMAKE_BINARY_DIR}/cacert.pem
)
add_dependencies(repertory librepertory)
target_link_libraries(repertory PRIVATE librepertory)
if (MACOS)
set_target_properties(repertory PROPERTIES COMPILE_FLAGS -fvisibility=hidden)
elseif (MSVC)
CopySupportFiles(repertory)
endif()
include(cmake/testing.cmake)
if (UNIX)
install(TARGETS repertory RUNTIME DESTINATION bin)
if (LINUX)
install_symlink(${CMAKE_INSTALL_PREFIX}/bin/repertory /sbin/mount.repertory)
endif()
endif()
include(cmake/helpers.cmake)
include(cmake/librepertory.cmake)
include(cmake/repertory.cmake)
include(cmake/unittests.cmake)
include(cmake/install.cmake)
message(STATUS "Repertory Version: ${REPERTORY_VERSION}")
message(STATUS "Git Revision: ${REPERTORY_GIT_REV}")