move to new build system

This commit is contained in:
2024-06-06 14:17:47 -05:00
parent 88d8bf63f5
commit aee68520b3
563 changed files with 4283 additions and 361439 deletions

View File

@ -1,269 +1,102 @@
cmake_minimum_required(VERSION 3.22)
project(repertory)
cmake_minimum_required(VERSION 3.24)
if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0")
cmake_policy(SET CMP0135 NEW)
endif()
cmake_policy(SET CMP0135 NEW)
cmake_policy(SET CMP0144 NEW)
include(project_name.cmake)
project(${PROJECT_NAME})
include(CheckIncludeFileCXX)
include(CheckIncludeFiles)
include(ExternalProject)
set(REPERTORY_MAJOR 2)
set(REPERTORY_MINOR 0)
set(REPERTORY_REV 2)
set(REPERTORY_RELEASE_NUM 0)
set(REPERTORY_RELEASE_ITER rc)
set(REPERTORY_VERSION ${REPERTORY_MAJOR}.${REPERTORY_MINOR}.${REPERTORY_REV}-${REPERTORY_RELEASE_ITER})
include(cmake/arch_detection.cmake)
include(cmake/os_detection.cmake)
include(cmake/versions.cmake)
include(cmake/arch.cmake)
include(cmake/os.cmake)
include(cmake/options.cmake)
include(cmake/settings.cmake)
include(cmake/flags.cmake)
include(cmake/versions.cmake)
include(cmake/functions.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)
include(cmake/libraries.cmake)
unset(REPERTORY_GIT_REV CACHE)
execute_process(
COMMAND git rev-parse --short HEAD
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
OUTPUT_VARIABLE REPERTORY_GIT_REV
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if (UNIX)
check_include_files(sys/xattr.h HAS_SETXATTR)
if (HAS_SETXATTR)
set(REPERTORY_DEFINITIONS ${REPERTORY_DEFINITIONS} -DHAS_SETXATTR)
endif()
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}/share/pkgconfig:$ENV{PKG_CONFIG_PATH}"
if(PROJECT_BUILD)
file(GLOB_RECURSE ADDITIONAL_SOURCES
${PROJECT_3RD_PARTY_DIR}/src/*.c
${PROJECT_3RD_PARTY_DIR}/src/*.cpp
)
find_package(PkgConfig REQUIRED)
set(Boost_USE_STATIC_LIBS ON)
if (NOT MINGW)
include_directories(/usr/local/include)
link_directories(
/usr/local/lib
/usr/local/lib64
)
endif()
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)
find_library(LIBPTHREAD_LIBRARY NO_CACHE NAMES libpthread.a)
elseif(NOT MINGW)
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})
set(REPERTORY_DEFINITIONS ${REPERTORY_DEFINITIONS} -DFUSE_USE_VERSION=30)
endif()
if(NOT LIBFUSE3_LIBRARIES AND NOT MINGW)
pkg_check_modules(LIBFUSE2 REQUIRED fuse>=2.9.0)
set(REPERTORY_DEFINITIONS ${REPERTORY_DEFINITIONS} -DFUSE_USE_VERSION=29)
endif()
if (NOT MINGW AND 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 currently not supported")
elseif (MACOS)
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} -DFUSE_USE_VERSION=29 -DBOOST_ASIO_HAS_STD_STRING_VIEW)
include_directories(/usr/local/include)
find_library(OSXFUSE NO_CACHE NAMES OSXFUSE)
if (NOT OSXFUSE)
message(FATAL_ERROR "FUSE for macOS not found (https://osxfuse.github.io/)")
endif ()
set(LIBFUSE2_LIBRARIES fuse)
set(REPERTORY_LINK_LIBRARIES
${REPERTORY_LINK_LIBRARIES}
${LIBDL_LIBRARY}
${LIBPTHREAD_LIBRARY}
"-L/usr/local/lib"
"-framework Foundation"
"-framework AppKit"
"-framework Security"
"-framework SystemConfiguration"
list(APPEND PROJECT_ADDITIONAL_SOURCES
${ADDITIONAL_SOURCES}
)
elseif (MSVC)
message(FATAL_ERROR "MSVC is currently not supported [MinGW-64 should be used]")
include(project.cmake)
else()
message(STATUS "-=[CMake Settings]=-")
message(STATUS " C standard: ${CMAKE_C_STANDARD}")
message(STATUS " C++ standard: ${CMAKE_CXX_STANDARD}")
message(STATUS " CPU architecture: ${PROJECT_MARCH}")
if(PROJECT_ENABLE_FUSE)
message(STATUS " FUSE version: ${PROJECT_FUSE}")
endif()
if (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
mswsock
)
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-2024> <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(REPERTORY_LINK_LIBRARIES
${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}
add_custom_target(project ALL
DEPENDS ${PROJECT_DEPENDENCIES}
COMMAND cd build && cmake
${CMAKE_CURRENT_SOURCE_DIR}
-DCMAKE_GENERATOR=${CMAKE_GENERATOR}
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
-DPROJECT_3RD_PARTY_DIR=${PROJECT_3RD_PARTY_DIR}
-DPROJECT_BUILD=ON
-DPROJECT_BUILD_ARCH=${PROJECT_BUILD_ARCH}
-DPROJECT_BUILD_DIR=${PROJECT_BUILD_DIR}
-DPROJECT_BUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
-DPROJECT_CMAKE_BUILD_TYPE=${PROJECT_CMAKE_BUILD_TYPE}
-DPROJECT_ENABLE_BOOST=${PROJECT_ENABLE_BOOST}
-DPROJECT_ENABLE_CLI11=${PROJECT_ENABLE_CLI11}
-DPROJECT_ENABLE_CPP_HTTPLIB=${PROJECT_ENABLE_CPP_HTTPLIB}
-DPROJECT_ENABLE_CURL=${PROJECT_ENABLE_CURL}
-DPROJECT_ENABLE_DTL=${PROJECT_ENABLE_DTL}
-DPROJECT_ENABLE_FLAC=${PROJECT_ENABLE_FLAC}
-DPROJECT_ENABLE_FMT=${PROJECT_ENABLE_FMT}
-DPROJECT_ENABLE_FONTCONFIG=${PROJECT_ENABLE_FONTCONFIG}
-DPROJECT_ENABLE_FREETYPE2=${PROJECT_ENABLE_FREETYPE2}
-DPROJECT_ENABLE_FUSE=${PROJECT_ENABLE_FUSE}
-DPROJECT_ENABLE_FZF=${PROJECT_ENABLE_FZF}
-DPROJECT_ENABLE_GTKMM=${PROJECT_ENABLE_GTKMM}
-DPROJECT_ENABLE_JSON=${PROJECT_ENABLE_JSON}
-DPROJECT_ENABLE_LIBBITCOIN_SYSTEM=${PROJECT_ENABLE_LIBBITCOIN_SYSTEM}
-DPROJECT_ENABLE_LIBEVENT=${PROJECT_ENABLE_LIBEVENT}
-DPROJECT_ENABLE_LIBSODIUM=${PROJECT_ENABLE_LIBSODIUM}
-DPROJECT_ENABLE_NUSPELL=${PROJECT_ENABLE_NUSPELL}
-DPROJECT_ENABLE_OGG=${PROJECT_ENABLE_OGG}
-DPROJECT_ENABLE_OPENAL=${PROJECT_ENABLE_OPENAL}
-DPROJECT_ENABLE_OPENSSL=${PROJECT_ENABLE_OPENSSL}
-DPROJECT_ENABLE_PUGIXML=${PROJECT_ENABLE_PUGIXML}
-DPROJECT_ENABLE_ROCKSDB=${PROJECT_ENABLE_ROCKSDB}
-DPROJECT_ENABLE_SAGO_PLATFORM_FOLDERS=${PROJECT_ENABLE_SAGO_PLATFORM_FOLDERS}
-DPROJECT_ENABLE_SECP256K1=${PROJECT_ENABLE_SECP256K1}
-DPROJECT_ENABLE_SFML=${PROJECT_ENABLE_SFML}
-DPROJECT_ENABLE_SPDLOG=${PROJECT_ENABLE_SPDLOG}
-DPROJECT_ENABLE_SQLITE=${PROJECT_ENABLE_SQLITE}
-DPROJECT_ENABLE_STDUUID=${PROJECT_ENABLE_STDUUID}
-DPROJECT_ENABLE_TESTING=${PROJECT_ENABLE_TESTING}
-DPROJECT_ENABLE_TPL=${PROJECT_ENABLE_TPL}
-DPROJECT_ENABLE_VORBIS=${PROJECT_ENABLE_VORBIS}
-DPROJECT_ENABLE_WINFSP=${PROJECT_ENABLE_WINFSP}
-DPROJECT_ENABLE_WXWIDGETS=${PROJECT_ENABLE_WXWIDGETS}
-DPROJECT_EXTERNAL_BUILD_ROOT=${PROJECT_EXTERNAL_BUILD_ROOT}
-DPROJECT_FUSE=${PROJECT_FUSE}
-DPROJECT_FUSE_INCLUDE_DIRS=${PROJECT_FUSE_INCLUDE_DIRS}
-DPROJECT_IS_ALPINE=${PROJECT_IS_ALPINE}
-DPROJECT_IS_ARM64=${PROJECT_IS_ARM64}
-DPROJECT_IS_MINGW=${PROJECT_IS_MINGW}
-DPROJECT_IS_MINGW_UNIX=${PROJECT_IS_MINGW_UNIX}
-DPROJECT_LINK_TYPE=${PROJECT_LINK_TYPE}
-DPROJECT_REQUIRE_ALPINE=${PROJECT_REQUIRE_ALPINE}
-DPROJECT_STATIC_LINK=${PROJECT_STATIC_LINK}
-DPROJECT_TOOLCHAIN_FILE_CMAKE=${PROJECT_TOOLCHAIN_FILE_CMAKE}
-DPROJECT_TOOLCHAIN_FILE_MESON=${PROJECT_TOOLCHAIN_FILE_MESON}
)
endif()
include_directories(SYSTEM
${EXTERNAL_BUILD_ROOT}/include
)
link_directories(
${EXTERNAL_BUILD_ROOT}/lib
)
include(cmake/zlib.cmake)
include(cmake/openssl.cmake)
include(cmake/curl.cmake)
include(cmake/boost.cmake)
include(cmake/libsodium.cmake)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/common.cpp.in ${CMAKE_CURRENT_SOURCE_DIR}/src/common.cpp @ONLY)
include_directories(include)
include_directories(SYSTEM
${Boost_INCLUDE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/cpp-httplib
${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/stduuid
${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/json
${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/pugixml/src
${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/sqlite/include
${CURL_INCLUDE_DIRS}
${LIBFUSE2_INCLUDE_DIRS}
${LIBFUSE3_INCLUDE_DIRS}
${OPENSSL_INCLUDE_DIR}
)
set(REPERTORY_LINK_LIBRARIES
${LIBFUSE2_LIBRARIES}
${LIBFUSE3_LIBRARIES}
${Boost_LIBRARIES}
${CURL_LIBRARIES}
${OPENSSL_LIBRARIES}
${ZLIB_LIBRARIES}
${LIBSODIUM_LIBRARIES}
${REPERTORY_LINK_LIBRARIES}
)
file(GLOB_RECURSE REPERTORY_HEADERS
${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
${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/sqlite/include/*.h
)
file(GLOB_RECURSE REPERTORY_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/pugixml/src/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/sqlite/src/*.c
)
list(REMOVE_ITEM REPERTORY_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp)
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}")