From 5ec91e2d20a0be1cf0b21a77c85ae92efb41aa49 Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Fri, 1 Dec 2023 11:12:58 -0600 Subject: [PATCH] fix --- CMakeLists.txt | 546 +++++++++++++++++------------------ cmake/arch_detection.cmake | 20 +- cmake/boost.cmake | 194 ++++++------- cmake/curl.cmake | 134 ++++----- cmake/flags.cmake | 206 ++++++------- cmake/helpers.cmake | 124 ++++---- cmake/install.cmake | 34 +-- cmake/librepertory.cmake | 44 +-- cmake/libsodium.cmake | 54 ++-- cmake/mingw-w64-x86_64.cmake | 32 +- cmake/openssl.cmake | 72 ++--- cmake/options.cmake | 22 +- cmake/os_detection.cmake | 26 +- cmake/repertory.cmake | 2 +- cmake/rocksdb.cmake | 142 ++++----- cmake/settings.cmake | 78 ++--- cmake/unittests.cmake | 132 ++++----- cmake/versions.cmake | 22 +- cmake/zlib.cmake | 62 ++-- 19 files changed, 973 insertions(+), 973 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0c92f621..280789e3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,273 +1,273 @@ -cmake_minimum_required(VERSION 3.22) -project(repertory) - -if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0") - cmake_policy(SET CMP0135 NEW) -endif() - -include(CheckIncludeFileCXX) -include(CheckIncludeFiles) -include(ExternalProject) - -set(REPERTORY_MAJOR 2) -set(REPERTORY_MINOR 0) -set(REPERTORY_REV 1) -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/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}" - 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}" - ) - - 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 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}) - 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 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" - ) -elseif (MSVC) - message(FATAL_ERROR "MSVC is currently not supported [MinGW-64 should be used]") -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-2023 ") - 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} - ) -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/rocksdb.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 - ${CURL_INCLUDE_DIRS} - ${LIBFUSE2_INCLUDE_DIRS} - ${LIBFUSE3_INCLUDE_DIRS} - ${OPENSSL_INCLUDE_DIR} - ${ROCKSDB_INCLUDE_DIRS} -) - -set(REPERTORY_LINK_LIBRARIES - ${ROCKSDB_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}/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 - ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/**/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/pugixml/src/*.cpp -) -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}") +cmake_minimum_required(VERSION 3.22) +project(repertory) + +if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0") + cmake_policy(SET CMP0135 NEW) +endif() + +include(CheckIncludeFileCXX) +include(CheckIncludeFiles) +include(ExternalProject) + +set(REPERTORY_MAJOR 2) +set(REPERTORY_MINOR 0) +set(REPERTORY_REV 1) +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/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}" + 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}" + ) + + 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 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}) + 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 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" + ) +elseif (MSVC) + message(FATAL_ERROR "MSVC is currently not supported [MinGW-64 should be used]") +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-2023 ") + 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} + ) +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/rocksdb.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 + ${CURL_INCLUDE_DIRS} + ${LIBFUSE2_INCLUDE_DIRS} + ${LIBFUSE3_INCLUDE_DIRS} + ${OPENSSL_INCLUDE_DIR} + ${ROCKSDB_INCLUDE_DIRS} +) + +set(REPERTORY_LINK_LIBRARIES + ${ROCKSDB_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}/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 + ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/**/*.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/pugixml/src/*.cpp +) +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}") diff --git a/cmake/arch_detection.cmake b/cmake/arch_detection.cmake index ba8a76b0..5b95e957 100644 --- a/cmake/arch_detection.cmake +++ b/cmake/arch_detection.cmake @@ -1,10 +1,10 @@ -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) - else() - set(REPERTORY_UNIX_ARCH x86-64) - endif() -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) + else() + set(REPERTORY_UNIX_ARCH x86-64) + endif() +endif() diff --git a/cmake/boost.cmake b/cmake/boost.cmake index d21ec6a2..a8954756 100644 --- a/cmake/boost.cmake +++ b/cmake/boost.cmake @@ -1,97 +1,97 @@ -set(BOOST_VERSION ${BOOST_MAJOR_VERSION}.${BOOST_MINOR_VERSION}.${BOOST_REVISION}) -set(BOOST_VERSION2 ${BOOST_MAJOR_VERSION}_${BOOST_MINOR_VERSION}_${BOOST_REVISION}) - -set(BOOST_PROJECT_NAME boost_${BOOST_VERSION}) -set(BOOST_BUILD_ROOT ${EXTERNAL_BUILD_ROOT}/builds/${BOOST_PROJECT_NAME}) - -set(BOOST_ADDRESS_MODEL 64) - -set(BOOST_DOWNLOAD_URL https://boostorg.jfrog.io/artifactory/main/release/${BOOST_VERSION}/source/boost_${BOOST_VERSION2}.tar.gz) - -if (IS_CLANG_COMPILER) - set(BOOST_TOOLSET --with-toolset=clang) -else () - set(BOOST_OPENSSL_DIR "--openssldir=${EXTERNAL_BUILD_ROOT}") -endif() - -if (IS_ARM64) - set (BOOST_ARCH arm) -else() - set (BOOST_ARCH x86) -endif() - -set (BOOST_COMMON_ARGS - ${BOOST_OPENSSL_DIR} - --prefix=${EXTERNAL_BUILD_ROOT} - address-model=${BOOST_ADDRESS_MODEL} - architecture=${BOOST_ARCH} - cxxflags=-std=c++${CMAKE_CXX_STANDARD} - cxxstd=${CMAKE_CXX_STANDARD} - define=BOOST_ASIO_HAS_STD_STRING_VIEW - define=BOOST_SYSTEM_NO_DEPRECATED - link=static - linkflags=-std=c++${CMAKE_CXX_STANDARD} - threading=multi - variant=${CMAKE_BUILD_TYPE_LOWER} - -sZLIB_BINARY=zlibstatic${DEBUG_EXTRA} - -sZLIB_LIBPATH="${EXTERNAL_BUILD_ROOT}/lib" - -sZLIB_INCLUDE="${EXTERNAL_BUILD_ROOT}/include" -) - -if (MINGW) - if (NOT CMAKE_HOST_WIN32) - set(BOOST_COMMON_ARGS - ${BOOST_COMMON_ARGS} - --user-config=./user-config.jam - ) - endif() - set(BOOST_TARGET_OS target-os=windows) -endif() - -ExternalProject_Add(boost_project - DOWNLOAD_NO_PROGRESS 1 - URL ${BOOST_DOWNLOAD_URL} - PREFIX ${BOOST_BUILD_ROOT} - BUILD_IN_SOURCE 1 - CONFIGURE_COMMAND - cp -f ${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/user-config.jam . && - ./bootstrap.sh - ${BOOST_TOOLSET} - ${BOOST_TARGET_OS} - --with-libraries=atomic,chrono,date_time,filesystem,random,regex,serialization,system,thread - BUILD_COMMAND - ./b2 - ${BOOST_COMMON_ARGS} - ${BOOST_TARGET_OS} - INSTALL_COMMAND - ./b2 - ${BOOST_COMMON_ARGS} - ${BOOST_TARGET_OS} - install -) - -add_dependencies(boost_project openssl_project) - -if (MINGW AND CMAKE_HOST_WIN32) - set(BOOST_GCC_VERSION ${CMAKE_CXX_COMPILER_VERSION}) - string(REPLACE "." ";" BOOST_GCC_VERSION_LIST ${BOOST_GCC_VERSION}) - list(GET BOOST_GCC_VERSION_LIST 0 BOOST_GCC_MAJOR_VERSION) - set(BOOST_LIB_EXTRA "-mgw${BOOST_GCC_MAJOR_VERSION}-mt${DEBUG_EXTRA2}-x64-${BOOST_MAJOR_VERSION}_${BOOST_MINOR_VERSION}") -endif() - -set(Boost_LIBRARIES - libboost_system${BOOST_LIB_EXTRA}.a - libboost_atomic${BOOST_LIB_EXTRA}.a - libboost_chrono${BOOST_LIB_EXTRA}.a - libboost_date_time${BOOST_LIB_EXTRA}.a - libboost_filesystem${BOOST_LIB_EXTRA}.a - libboost_random${BOOST_LIB_EXTRA}.a - libboost_regex${BOOST_LIB_EXTRA}.a - libboost_serialization${BOOST_LIB_EXTRA}.a - libboost_thread${BOOST_LIB_EXTRA}.a -) - -add_dependencies(boost_project zlib_project) -if (CMAKE_HOST_WIN32) - include_directories(SYSTEM ${EXTERNAL_BUILD_ROOT}/include/boost-${BOOST_MAJOR_VERSION}_${BOOST_MINOR_VERSION}) -endif() +set(BOOST_VERSION ${BOOST_MAJOR_VERSION}.${BOOST_MINOR_VERSION}.${BOOST_REVISION}) +set(BOOST_VERSION2 ${BOOST_MAJOR_VERSION}_${BOOST_MINOR_VERSION}_${BOOST_REVISION}) + +set(BOOST_PROJECT_NAME boost_${BOOST_VERSION}) +set(BOOST_BUILD_ROOT ${EXTERNAL_BUILD_ROOT}/builds/${BOOST_PROJECT_NAME}) + +set(BOOST_ADDRESS_MODEL 64) + +set(BOOST_DOWNLOAD_URL https://boostorg.jfrog.io/artifactory/main/release/${BOOST_VERSION}/source/boost_${BOOST_VERSION2}.tar.gz) + +if (IS_CLANG_COMPILER) + set(BOOST_TOOLSET --with-toolset=clang) +else () + set(BOOST_OPENSSL_DIR "--openssldir=${EXTERNAL_BUILD_ROOT}") +endif() + +if (IS_ARM64) + set (BOOST_ARCH arm) +else() + set (BOOST_ARCH x86) +endif() + +set (BOOST_COMMON_ARGS + ${BOOST_OPENSSL_DIR} + --prefix=${EXTERNAL_BUILD_ROOT} + address-model=${BOOST_ADDRESS_MODEL} + architecture=${BOOST_ARCH} + cxxflags=-std=c++${CMAKE_CXX_STANDARD} + cxxstd=${CMAKE_CXX_STANDARD} + define=BOOST_ASIO_HAS_STD_STRING_VIEW + define=BOOST_SYSTEM_NO_DEPRECATED + link=static + linkflags=-std=c++${CMAKE_CXX_STANDARD} + threading=multi + variant=${CMAKE_BUILD_TYPE_LOWER} + -sZLIB_BINARY=zlibstatic${DEBUG_EXTRA} + -sZLIB_LIBPATH="${EXTERNAL_BUILD_ROOT}/lib" + -sZLIB_INCLUDE="${EXTERNAL_BUILD_ROOT}/include" +) + +if (MINGW) + if (NOT CMAKE_HOST_WIN32) + set(BOOST_COMMON_ARGS + ${BOOST_COMMON_ARGS} + --user-config=./user-config.jam + ) + endif() + set(BOOST_TARGET_OS target-os=windows) +endif() + +ExternalProject_Add(boost_project + DOWNLOAD_NO_PROGRESS 1 + URL ${BOOST_DOWNLOAD_URL} + PREFIX ${BOOST_BUILD_ROOT} + BUILD_IN_SOURCE 1 + CONFIGURE_COMMAND + cp -f ${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/user-config.jam . && + ./bootstrap.sh + ${BOOST_TOOLSET} + ${BOOST_TARGET_OS} + --with-libraries=atomic,chrono,date_time,filesystem,random,regex,serialization,system,thread + BUILD_COMMAND + ./b2 + ${BOOST_COMMON_ARGS} + ${BOOST_TARGET_OS} + INSTALL_COMMAND + ./b2 + ${BOOST_COMMON_ARGS} + ${BOOST_TARGET_OS} + install +) + +add_dependencies(boost_project openssl_project) + +if (MINGW AND CMAKE_HOST_WIN32) + set(BOOST_GCC_VERSION ${CMAKE_CXX_COMPILER_VERSION}) + string(REPLACE "." ";" BOOST_GCC_VERSION_LIST ${BOOST_GCC_VERSION}) + list(GET BOOST_GCC_VERSION_LIST 0 BOOST_GCC_MAJOR_VERSION) + set(BOOST_LIB_EXTRA "-mgw${BOOST_GCC_MAJOR_VERSION}-mt${DEBUG_EXTRA2}-x64-${BOOST_MAJOR_VERSION}_${BOOST_MINOR_VERSION}") +endif() + +set(Boost_LIBRARIES + libboost_system${BOOST_LIB_EXTRA}.a + libboost_atomic${BOOST_LIB_EXTRA}.a + libboost_chrono${BOOST_LIB_EXTRA}.a + libboost_date_time${BOOST_LIB_EXTRA}.a + libboost_filesystem${BOOST_LIB_EXTRA}.a + libboost_random${BOOST_LIB_EXTRA}.a + libboost_regex${BOOST_LIB_EXTRA}.a + libboost_serialization${BOOST_LIB_EXTRA}.a + libboost_thread${BOOST_LIB_EXTRA}.a +) + +add_dependencies(boost_project zlib_project) +if (CMAKE_HOST_WIN32) + include_directories(SYSTEM ${EXTERNAL_BUILD_ROOT}/include/boost-${BOOST_MAJOR_VERSION}_${BOOST_MINOR_VERSION}) +endif() diff --git a/cmake/curl.cmake b/cmake/curl.cmake index 0d47189d..d057da5a 100644 --- a/cmake/curl.cmake +++ b/cmake/curl.cmake @@ -1,67 +1,67 @@ -set(CURL_PROJECT_NAME curl_${CURL_VERSION}) -set(CURL_BUILD_ROOT ${EXTERNAL_BUILD_ROOT}/builds/${CURL_PROJECT_NAME}) - -if (OPENSSL_ROOT_DIR) - set(CURL_OPENSSL_EXTRA -DOPENSSL_ROOT_DIR=${OPENSSL_ROOT_DIR}) -elseif(LINUX OR MINGW) - set(CURL_OPENSSL_EXTRA -DOPENSSL_ROOT_DIR=${EXTERNAL_BUILD_ROOT}) -endif() - -set(CURL_CMAKE_ARGS - ${CURL_OPENSSL_EXTRA} - -DBUILD_CURL_EXE=OFF - -DBUILD_SHARED_LIBS=OFF - -DBUILD_TESTING=OFF - -DCMAKE_BUILD_TYPE=${EXTERNAL_BUILD_TYPE} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} - -DCMAKE_GENERATOR=${CMAKE_GENERATOR} - -DCMAKE_INSTALL_PREFIX=${EXTERNAL_BUILD_ROOT} - -DCMAKE_POSITION_INDEPENDENT_CODE=${CMAKE_POSITION_INDEPENDENT_CODE} - -DCMAKE_SHARED_LINKER_FLAGS=${CMAKE_SHARED_LINKER_FLAGS} - -DCURL_CA_BUNDLE=./cacert.pem - -DCURL_CA_FALLBACK=ON - -DCURL_DISABLE_LDAP=ON - -DCURL_STATICLIB=ON - -DCURL_USE_LIBPSL=OFF - -DCURL_USE_LIBSSH2=OFF - -DCURL_ZLIB=OFF - -DENABLE_THREADED_RESOLVER=ON - -DOPENSSL_USE_STATIC_LIBS=ON - -DUSE_LIBIDN2=OFF -) - -if (CMAKE_TOOLCHAIN_FILE) - set(CURL_CMAKE_ARGS - ${CURL_CMAKE_ARGS} - -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} - ) -endif() - -if (MINGW) - set(CURL_CMAKE_ARGS - ${CURL_CMAKE_ARGS} - -DCURL_USE_OPENSSL=OFF - -DUSE_WIN32_CRYPTO=ON - ) -else() - set(CURL_CMAKE_ARGS - ${CURL_CMAKE_ARGS} - -DCURL_USE_OPENSSL=ON - ) -endif() - -ExternalProject_Add(curl_project - DOWNLOAD_NO_PROGRESS 1 - URL https://github.com/curl/curl/archive/curl-${CURL_VERSION}.tar.gz - PREFIX ${CURL_BUILD_ROOT} - CMAKE_ARGS ${CURL_CMAKE_ARGS} -) - -set(REPERTORY_DEFINITIONS ${REPERTORY_DEFINITIONS} -DCURL_STATICLIB=ON -DCURL_DISABLE_LDAP=ON) - -set(CURL_LIBRARIES libcurl${DEBUG_EXTRA2}${CMAKE_STATIC_LIBRARY_SUFFIX}) -add_dependencies(curl_project - openssl_project - zlib_project -) +set(CURL_PROJECT_NAME curl_${CURL_VERSION}) +set(CURL_BUILD_ROOT ${EXTERNAL_BUILD_ROOT}/builds/${CURL_PROJECT_NAME}) + +if (OPENSSL_ROOT_DIR) + set(CURL_OPENSSL_EXTRA -DOPENSSL_ROOT_DIR=${OPENSSL_ROOT_DIR}) +elseif(LINUX OR MINGW) + set(CURL_OPENSSL_EXTRA -DOPENSSL_ROOT_DIR=${EXTERNAL_BUILD_ROOT}) +endif() + +set(CURL_CMAKE_ARGS + ${CURL_OPENSSL_EXTRA} + -DBUILD_CURL_EXE=OFF + -DBUILD_SHARED_LIBS=OFF + -DBUILD_TESTING=OFF + -DCMAKE_BUILD_TYPE=${EXTERNAL_BUILD_TYPE} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} + -DCMAKE_GENERATOR=${CMAKE_GENERATOR} + -DCMAKE_INSTALL_PREFIX=${EXTERNAL_BUILD_ROOT} + -DCMAKE_POSITION_INDEPENDENT_CODE=${CMAKE_POSITION_INDEPENDENT_CODE} + -DCMAKE_SHARED_LINKER_FLAGS=${CMAKE_SHARED_LINKER_FLAGS} + -DCURL_CA_BUNDLE=./cacert.pem + -DCURL_CA_FALLBACK=ON + -DCURL_DISABLE_LDAP=ON + -DCURL_STATICLIB=ON + -DCURL_USE_LIBPSL=OFF + -DCURL_USE_LIBSSH2=OFF + -DCURL_ZLIB=OFF + -DENABLE_THREADED_RESOLVER=ON + -DOPENSSL_USE_STATIC_LIBS=ON + -DUSE_LIBIDN2=OFF +) + +if (CMAKE_TOOLCHAIN_FILE) + set(CURL_CMAKE_ARGS + ${CURL_CMAKE_ARGS} + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + ) +endif() + +if (MINGW) + set(CURL_CMAKE_ARGS + ${CURL_CMAKE_ARGS} + -DCURL_USE_OPENSSL=OFF + -DUSE_WIN32_CRYPTO=ON + ) +else() + set(CURL_CMAKE_ARGS + ${CURL_CMAKE_ARGS} + -DCURL_USE_OPENSSL=ON + ) +endif() + +ExternalProject_Add(curl_project + DOWNLOAD_NO_PROGRESS 1 + URL https://github.com/curl/curl/archive/curl-${CURL_VERSION}.tar.gz + PREFIX ${CURL_BUILD_ROOT} + CMAKE_ARGS ${CURL_CMAKE_ARGS} +) + +set(REPERTORY_DEFINITIONS ${REPERTORY_DEFINITIONS} -DCURL_STATICLIB=ON -DCURL_DISABLE_LDAP=ON) + +set(CURL_LIBRARIES libcurl${DEBUG_EXTRA2}${CMAKE_STATIC_LIBRARY_SUFFIX}) +add_dependencies(curl_project + openssl_project + zlib_project +) diff --git a/cmake/flags.cmake b/cmake/flags.cmake index 8c71001e..145bdd5f 100644 --- a/cmake/flags.cmake +++ b/cmake/flags.cmake @@ -1,103 +1,103 @@ -if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") - set(IS_CLANG_COMPILER TRUE) -endif() - -if (UNIX OR MINGW) - set(REPERTORY_COMMON_FLAG_LIST - ${REPERTORY_COMMON_FLAG_LIST} - -D_FILE_OFFSET_BITS=64 - -march=${REPERTORY_UNIX_ARCH} - -mtune=generic - ) - - if (MINGW) - set(REPERTORY_COMMON_FLAG_LIST - ${REPERTORY_COMMON_FLAG_LIST} - -Wa,-mbig-obj - -flarge-source-files - ) - endif() - - set(REPERTORY_COMMON_FLAG_LIST_DEBUG - ${REPERTORY_COMMON_FLAG_LIST_DEBUG} - -DDEBUG - -D_DEBUG - -Og - -fno-omit-frame-pointer - -g - -gdwarf-4 - ) - - set(REPERTORY_COMMON_FLAG_LIST_RELEASE - ${REPERTORY_COMMON_FLAG_LIST_RELEASE} - -O3 - -DNDEBUG - ) - - if (NOT IS_CLANG_COMPILER) - set(REPERTORY_GCC_FLAGS - -Wall - -Wcast-align - -Wconversion - -Wdouble-promotion - -Wduplicated-branches - -Wduplicated-cond - -Wextra - -Wformat=2 - -Wlogical-op - -Wmisleading-indentation - -Wnull-dereference - -Wpedantic - -Wshadow - -Wsign-conversion - -Wunused - ) - - set(REPERTORY_GCC_CXX_FLAGS - -Wnon-virtual-dtor - -Wold-style-cast - -Woverloaded-virtual - -Wuseless-cast - ) - endif() - - set(REPERTORY_C_FLAGS_LIST - ${REPERTORY_C_FLAGS_LIST} - ${REPERTORY_COMMON_FLAG_LIST} - ) - - set(REPERTORY_CXX_FLAGS_LIST - ${REPERTORY_CXX_FLAGS_LIST} - ${REPERTORY_COMMON_FLAG_LIST} - -std=c++${CMAKE_CXX_STANDARD} - ) -endif() - -list(JOIN REPERTORY_COMMON_FLAG_LIST_DEBUG " " REPERTORY_COMMON_FLAG_LIST_DEBUG) -list(JOIN REPERTORY_COMMON_FLAG_LIST_RELEASE " " REPERTORY_COMMON_FLAG_LIST_RELEASE) - -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) - -set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${REPERTORY_CXX_FLAGS_LIST}") -set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${REPERTORY_C_FLAGS_LIST}") - -if (CMAKE_BUILD_TYPE STREQUAL "Debug") - set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${REPERTORY_COMMON_FLAG_LIST_DEBUG}") - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${REPERTORY_COMMON_FLAG_LIST_DEBUG}") -else() - set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${REPERTORY_COMMON_FLAG_LIST_RELEASE}") - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${REPERTORY_COMMON_FLAG_LIST_RELEASE}") -endif() - -set (REPERTORY_CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS} ${REPERTORY_COMMON_FLAG_LIST_DEBUG}") -set (REPERTORY_CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS} ${REPERTORY_COMMON_FLAG_LIST_DEBUG}") -set (REPERTORY_CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS} ${REPERTORY_COMMON_FLAG_LIST_RELEASE}") -set (REPERTORY_CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} ${REPERTORY_COMMON_FLAG_LIST_RELEASE}") - -set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${REPERTORY_SHARED_LINKER_FLAGS_LIST}") -if (ALPINE_FOUND OR MINGW) - set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static") -endif() +if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") + set(IS_CLANG_COMPILER TRUE) +endif() + +if (UNIX OR MINGW) + set(REPERTORY_COMMON_FLAG_LIST + ${REPERTORY_COMMON_FLAG_LIST} + -D_FILE_OFFSET_BITS=64 + -march=${REPERTORY_UNIX_ARCH} + -mtune=generic + ) + + if (MINGW) + set(REPERTORY_COMMON_FLAG_LIST + ${REPERTORY_COMMON_FLAG_LIST} + -Wa,-mbig-obj + -flarge-source-files + ) + endif() + + set(REPERTORY_COMMON_FLAG_LIST_DEBUG + ${REPERTORY_COMMON_FLAG_LIST_DEBUG} + -DDEBUG + -D_DEBUG + -Og + -fno-omit-frame-pointer + -g + -gdwarf-4 + ) + + set(REPERTORY_COMMON_FLAG_LIST_RELEASE + ${REPERTORY_COMMON_FLAG_LIST_RELEASE} + -O3 + -DNDEBUG + ) + + if (NOT IS_CLANG_COMPILER) + set(REPERTORY_GCC_FLAGS + -Wall + -Wcast-align + -Wconversion + -Wdouble-promotion + -Wduplicated-branches + -Wduplicated-cond + -Wextra + -Wformat=2 + -Wlogical-op + -Wmisleading-indentation + -Wnull-dereference + -Wpedantic + -Wshadow + -Wsign-conversion + -Wunused + ) + + set(REPERTORY_GCC_CXX_FLAGS + -Wnon-virtual-dtor + -Wold-style-cast + -Woverloaded-virtual + -Wuseless-cast + ) + endif() + + set(REPERTORY_C_FLAGS_LIST + ${REPERTORY_C_FLAGS_LIST} + ${REPERTORY_COMMON_FLAG_LIST} + ) + + set(REPERTORY_CXX_FLAGS_LIST + ${REPERTORY_CXX_FLAGS_LIST} + ${REPERTORY_COMMON_FLAG_LIST} + -std=c++${CMAKE_CXX_STANDARD} + ) +endif() + +list(JOIN REPERTORY_COMMON_FLAG_LIST_DEBUG " " REPERTORY_COMMON_FLAG_LIST_DEBUG) +list(JOIN REPERTORY_COMMON_FLAG_LIST_RELEASE " " REPERTORY_COMMON_FLAG_LIST_RELEASE) + +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) + +set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${REPERTORY_CXX_FLAGS_LIST}") +set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${REPERTORY_C_FLAGS_LIST}") + +if (CMAKE_BUILD_TYPE STREQUAL "Debug") + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${REPERTORY_COMMON_FLAG_LIST_DEBUG}") + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${REPERTORY_COMMON_FLAG_LIST_DEBUG}") +else() + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${REPERTORY_COMMON_FLAG_LIST_RELEASE}") + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${REPERTORY_COMMON_FLAG_LIST_RELEASE}") +endif() + +set (REPERTORY_CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS} ${REPERTORY_COMMON_FLAG_LIST_DEBUG}") +set (REPERTORY_CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS} ${REPERTORY_COMMON_FLAG_LIST_DEBUG}") +set (REPERTORY_CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS} ${REPERTORY_COMMON_FLAG_LIST_RELEASE}") +set (REPERTORY_CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} ${REPERTORY_COMMON_FLAG_LIST_RELEASE}") + +set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${REPERTORY_SHARED_LINKER_FLAGS_LIST}") +if (ALPINE_FOUND OR MINGW) + set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static") +endif() diff --git a/cmake/helpers.cmake b/cmake/helpers.cmake index 0eb76c34..2cdbce53 100644 --- a/cmake/helpers.cmake +++ b/cmake/helpers.cmake @@ -1,62 +1,62 @@ -function(copy_support_files target) - if (MINGW) - 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_OUTPUT_DIR}/${WINFSP_LIBRARY_BASENAME}.dll) - endif() - - add_custom_command( - TARGET ${target} - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_SOURCE_DIR}/3rd_party/cacert.pem - ${REPERTORY_OUTPUT_DIR}/cacert.pem) -endfunction(copy_support_files) - -function(set_common_target_options name) - target_compile_definitions(${name} PUBLIC ${REPERTORY_DEFINITIONS}) - - if (UNIX OR MINGW) - target_compile_options(${name} PRIVATE - ${REPERTORY_GCC_CXX_FLAGS} - ${REPERTORY_GCC_FLAGS} - ) - endif() - - target_precompile_headers(${name} PRIVATE include/common.hpp) - - if (MACOS) - target_link_libraries(${name} PRIVATE -W1,-rpath,@executable_path) - set_target_properties(${name} PROPERTIES COMPILE_FLAGS -fvisibility=hidden) - endif() - - if (UNIX OR MINGW) - target_compile_options(${name} PRIVATE - ${REPERTORY_GCC_CXX_FLAGS} - ${REPERTORY_GCC_FLAGS} - ) - endif() -endfunction(set_common_target_options) - -function(add_project_executable name sources) - add_executable(${name} - src/main.cpp - ${REPERTORY_HEADERS} - ${sources} - ) - - set_common_target_options(${name}) - - add_dependencies(${name} librepertory) - - if (REPERTORY_MUSL OR MINGW) - set_property(TARGET ${name} PROPERTY LINK_SEARCH_START_STATIC 1) - endif() - - target_link_libraries(${name} PRIVATE librepertory) - - copy_support_files(${name}) -endfunction(add_project_executable) +function(copy_support_files target) + if (MINGW) + 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_OUTPUT_DIR}/${WINFSP_LIBRARY_BASENAME}.dll) + endif() + + add_custom_command( + TARGET ${target} + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_SOURCE_DIR}/3rd_party/cacert.pem + ${REPERTORY_OUTPUT_DIR}/cacert.pem) +endfunction(copy_support_files) + +function(set_common_target_options name) + target_compile_definitions(${name} PUBLIC ${REPERTORY_DEFINITIONS}) + + if (UNIX OR MINGW) + target_compile_options(${name} PRIVATE + ${REPERTORY_GCC_CXX_FLAGS} + ${REPERTORY_GCC_FLAGS} + ) + endif() + + target_precompile_headers(${name} PRIVATE include/common.hpp) + + if (MACOS) + target_link_libraries(${name} PRIVATE -W1,-rpath,@executable_path) + set_target_properties(${name} PROPERTIES COMPILE_FLAGS -fvisibility=hidden) + endif() + + if (UNIX OR MINGW) + target_compile_options(${name} PRIVATE + ${REPERTORY_GCC_CXX_FLAGS} + ${REPERTORY_GCC_FLAGS} + ) + endif() +endfunction(set_common_target_options) + +function(add_project_executable name sources) + add_executable(${name} + src/main.cpp + ${REPERTORY_HEADERS} + ${sources} + ) + + set_common_target_options(${name}) + + add_dependencies(${name} librepertory) + + if (REPERTORY_MUSL OR MINGW) + set_property(TARGET ${name} PROPERTY LINK_SEARCH_START_STATIC 1) + endif() + + target_link_libraries(${name} PRIVATE librepertory) + + copy_support_files(${name}) +endfunction(add_project_executable) diff --git a/cmake/install.cmake b/cmake/install.cmake index 381ab6be..0cef1712 100644 --- a/cmake/install.cmake +++ b/cmake/install.cmake @@ -1,17 +1,17 @@ -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) - - install(TARGETS repertory RUNTIME DESTINATION share/repertory) - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/cacert.pem RUNTIME DESTINATION share/repertory) - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/CHANGELOG.md RUNTIME DESTINATION share/repertory) - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/CONTRIBUTORS.md RUNTIME DESTINATION share/repertory) - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md RUNTIME DESTINATION share/repertory) - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/README.md RUNTIME DESTINATION share/repertory) - if (LINUX) - install_symlink(${CMAKE_INSTALL_PREFIX}/share/repertory/repertory ${CMAKE_INSTALL_PREFIX}/sbin/mount.repertory) - install_symlink(${CMAKE_INSTALL_PREFIX}/share/repertory/repertory ${CMAKE_INSTALL_PREFIX}/sbin/repertory) - 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) + + install(TARGETS repertory RUNTIME DESTINATION share/repertory) + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/cacert.pem RUNTIME DESTINATION share/repertory) + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/CHANGELOG.md RUNTIME DESTINATION share/repertory) + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/CONTRIBUTORS.md RUNTIME DESTINATION share/repertory) + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md RUNTIME DESTINATION share/repertory) + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/README.md RUNTIME DESTINATION share/repertory) + if (LINUX) + install_symlink(${CMAKE_INSTALL_PREFIX}/share/repertory/repertory ${CMAKE_INSTALL_PREFIX}/sbin/mount.repertory) + install_symlink(${CMAKE_INSTALL_PREFIX}/share/repertory/repertory ${CMAKE_INSTALL_PREFIX}/sbin/repertory) + endif() +endif() diff --git a/cmake/librepertory.cmake b/cmake/librepertory.cmake index bbefa110..59370e67 100644 --- a/cmake/librepertory.cmake +++ b/cmake/librepertory.cmake @@ -1,22 +1,22 @@ -if (EXISTS "${CMAKE_CURRENT_BINARY_DIR}/librepertory${CMAKE_STATIC_LIBRARY_SUFFIX}") - file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/librepertory${CMAKE_STATIC_LIBRARY_SUFFIX}) -endif() - -add_library(librepertory STATIC - ${REPERTORY_SOURCES} - ${REPERTORY_HEADERS} -) - -set_common_target_options(librepertory) - -set_target_properties(librepertory PROPERTIES PREFIX "") -target_link_libraries(librepertory PRIVATE ${REPERTORY_LINK_LIBRARIES}) - -add_dependencies(librepertory - boost_project - curl_project - libsodium_project - openssl_project - rocksdb_project - zlib_project -) +if (EXISTS "${CMAKE_CURRENT_BINARY_DIR}/librepertory${CMAKE_STATIC_LIBRARY_SUFFIX}") + file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/librepertory${CMAKE_STATIC_LIBRARY_SUFFIX}) +endif() + +add_library(librepertory STATIC + ${REPERTORY_SOURCES} + ${REPERTORY_HEADERS} +) + +set_common_target_options(librepertory) + +set_target_properties(librepertory PROPERTIES PREFIX "") +target_link_libraries(librepertory PRIVATE ${REPERTORY_LINK_LIBRARIES}) + +add_dependencies(librepertory + boost_project + curl_project + libsodium_project + openssl_project + rocksdb_project + zlib_project +) diff --git a/cmake/libsodium.cmake b/cmake/libsodium.cmake index 7c7961aa..badc9926 100644 --- a/cmake/libsodium.cmake +++ b/cmake/libsodium.cmake @@ -1,27 +1,27 @@ -set(LIBSODIUM_PROJECT_NAME libsodium_${LIBSODIUM_VERSION}) -set(LIBSODIUM_BUILD_ROOT ${EXTERNAL_BUILD_ROOT}/builds/${LIBSODIUM_PROJECT_NAME}) -set(LIBSODIUM_BUILD_TYPE ${EXTERNAL_BUILD_TYPE}) - -if (MINGW) - set(LIBSODIUM_HOST --host=x86_64-w64-mingw32) -endif() - -ExternalProject_Add(libsodium_project - DOWNLOAD_NO_PROGRESS 1 - PREFIX ${LIBSODIUM_BUILD_ROOT} - BUILD_IN_SOURCE 1 - URL https://github.com/jedisct1/libsodium/releases/download/${LIBSODIUM_VERSION}-RELEASE/libsodium-${LIBSODIUM_VERSION}.tar.gz - CONFIGURE_COMMAND - ./configure - ${LIBSODIUM_HOST} - --prefix=${EXTERNAL_BUILD_ROOT} - --enable-shared=no - --enable-static=yes - --disable-asm - BUILD_COMMAND make - INSTALL_COMMAND make install -) - -set(LIBSODIUM_LIBRARIES libsodium.a) - -add_dependencies(libsodium_project zlib_project) +set(LIBSODIUM_PROJECT_NAME libsodium_${LIBSODIUM_VERSION}) +set(LIBSODIUM_BUILD_ROOT ${EXTERNAL_BUILD_ROOT}/builds/${LIBSODIUM_PROJECT_NAME}) +set(LIBSODIUM_BUILD_TYPE ${EXTERNAL_BUILD_TYPE}) + +if (MINGW) + set(LIBSODIUM_HOST --host=x86_64-w64-mingw32) +endif() + +ExternalProject_Add(libsodium_project + DOWNLOAD_NO_PROGRESS 1 + PREFIX ${LIBSODIUM_BUILD_ROOT} + BUILD_IN_SOURCE 1 + URL https://github.com/jedisct1/libsodium/releases/download/${LIBSODIUM_VERSION}-RELEASE/libsodium-${LIBSODIUM_VERSION}.tar.gz + CONFIGURE_COMMAND + ./configure + ${LIBSODIUM_HOST} + --prefix=${EXTERNAL_BUILD_ROOT} + --enable-shared=no + --enable-static=yes + --disable-asm + BUILD_COMMAND make + INSTALL_COMMAND make install +) + +set(LIBSODIUM_LIBRARIES libsodium.a) + +add_dependencies(libsodium_project zlib_project) diff --git a/cmake/mingw-w64-x86_64.cmake b/cmake/mingw-w64-x86_64.cmake index ed17e895..55320227 100644 --- a/cmake/mingw-w64-x86_64.cmake +++ b/cmake/mingw-w64-x86_64.cmake @@ -1,16 +1,16 @@ -set(CMAKE_SYSTEM_NAME Windows) -set(TOOLCHAIN_PREFIX x86_64-w64-mingw32) - -set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc) -set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++) -set(CMAKE_Fortran_COMPILER ${TOOLCHAIN_PREFIX}-gfortran) -set(CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres) - -set(CMAKE_FIND_ROOT_PATH - /usr/${TOOLCHAIN_PREFIX} - /usr/local/${TOOLCHAIN_PREFIX} -) - -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(CMAKE_SYSTEM_NAME Windows) +set(TOOLCHAIN_PREFIX x86_64-w64-mingw32) + +set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc) +set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++) +set(CMAKE_Fortran_COMPILER ${TOOLCHAIN_PREFIX}-gfortran) +set(CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres) + +set(CMAKE_FIND_ROOT_PATH + /usr/${TOOLCHAIN_PREFIX} + /usr/local/${TOOLCHAIN_PREFIX} +) + +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) diff --git a/cmake/openssl.cmake b/cmake/openssl.cmake index 84ed6ebe..6e78dea5 100644 --- a/cmake/openssl.cmake +++ b/cmake/openssl.cmake @@ -1,36 +1,36 @@ -if (IS_CLANG_COMPILER) - set(OPENSSL_COMPILE_TYPE_EXTRA -clang) -endif() - -if (MACOS) - set(OPENSSL_COMPILE_TYPE darwin64-x86_64-cc) -elseif(IS_ARM64) - set(OPENSSL_COMPILE_TYPE linux-aarch64${OPENSSL_COMPILE_TYPE_EXTRA}) -elseif(MINGW) - if (CMAKE_TOOLCHAIN_FILE) - set(OPENSSL_COMPILE_TYPE --cross-compile-prefix=x86_64-w64-mingw32- mingw64${OPENSSL_COMPILE_TYPE_EXTRA}) - else() - set(OPENSSL_COMPILE_TYPE mingw64${OPENSSL_COMPILE_TYPE_EXTRA}) - endif() -else() - set(OPENSSL_COMPILE_TYPE linux-x86_64${OPENSSL_COMPILE_TYPE_EXTRA}) -endif() - -set(OPENSSL_PROJECT_NAME openssl_${OPENSSL_VERSION}) -set(OPENSSL_BUILD_ROOT ${EXTERNAL_BUILD_ROOT}/builds/${OPENSSL_PROJECT_NAME}) -ExternalProject_Add(openssl_project - DOWNLOAD_NO_PROGRESS 1 - URL https://github.com/openssl/openssl/releases/download/openssl-${OPENSSL_VERSION}/openssl-${OPENSSL_VERSION}.tar.gz - PREFIX ${OPENSSL_BUILD_ROOT} - BUILD_IN_SOURCE 1 - CONFIGURE_COMMAND ./Configure no-shared ${OPENSSL_COMPILE_TYPE} --openssldir=${EXTERNAL_BUILD_ROOT}/ssl --prefix=${EXTERNAL_BUILD_ROOT} - BUILD_COMMAND make -j1 - INSTALL_COMMAND make install -) - -set(OPENSSL_LIBRARIES - ${EXTERNAL_BUILD_ROOT}/lib/libssl.a - ${EXTERNAL_BUILD_ROOT}/lib/libcrypto.a -) - -add_dependencies(openssl_project zlib_project) +if (IS_CLANG_COMPILER) + set(OPENSSL_COMPILE_TYPE_EXTRA -clang) +endif() + +if (MACOS) + set(OPENSSL_COMPILE_TYPE darwin64-x86_64-cc) +elseif(IS_ARM64) + set(OPENSSL_COMPILE_TYPE linux-aarch64${OPENSSL_COMPILE_TYPE_EXTRA}) +elseif(MINGW) + if (CMAKE_TOOLCHAIN_FILE) + set(OPENSSL_COMPILE_TYPE --cross-compile-prefix=x86_64-w64-mingw32- mingw64${OPENSSL_COMPILE_TYPE_EXTRA}) + else() + set(OPENSSL_COMPILE_TYPE mingw64${OPENSSL_COMPILE_TYPE_EXTRA}) + endif() +else() + set(OPENSSL_COMPILE_TYPE linux-x86_64${OPENSSL_COMPILE_TYPE_EXTRA}) +endif() + +set(OPENSSL_PROJECT_NAME openssl_${OPENSSL_VERSION}) +set(OPENSSL_BUILD_ROOT ${EXTERNAL_BUILD_ROOT}/builds/${OPENSSL_PROJECT_NAME}) +ExternalProject_Add(openssl_project + DOWNLOAD_NO_PROGRESS 1 + URL https://github.com/openssl/openssl/releases/download/openssl-${OPENSSL_VERSION}/openssl-${OPENSSL_VERSION}.tar.gz + PREFIX ${OPENSSL_BUILD_ROOT} + BUILD_IN_SOURCE 1 + CONFIGURE_COMMAND ./Configure no-shared ${OPENSSL_COMPILE_TYPE} --openssldir=${EXTERNAL_BUILD_ROOT}/ssl --prefix=${EXTERNAL_BUILD_ROOT} + BUILD_COMMAND make -j1 + INSTALL_COMMAND make install +) + +set(OPENSSL_LIBRARIES + ${EXTERNAL_BUILD_ROOT}/lib/libssl.a + ${EXTERNAL_BUILD_ROOT}/lib/libcrypto.a +) + +add_dependencies(openssl_project zlib_project) diff --git a/cmake/options.cmake b/cmake/options.cmake index fa834a59..e86bcb76 100644 --- a/cmake/options.cmake +++ b/cmake/options.cmake @@ -1,11 +1,11 @@ -option(REPERTORY_ENABLE_TESTING "Enable testing" ON) - -option(REPERTORY_ENABLE_S3 "Enable S3 mount support" OFF) -if (REPERTORY_ENABLE_S3) - set(REPERTORY_DEFINITIONS ${REPERTORY_DEFINITIONS} -DREPERTORY_ENABLE_S3) - - option(REPERTORY_ENABLE_S3_TESTING "Enable S3 unit tests" OFF) - if (REPERTORY_ENABLE_S3_TESTING) - set(REPERTORY_DEFINITIONS ${REPERTORY_DEFINITIONS} -DREPERTORY_ENABLE_S3_TESTING) - endif () -endif() +option(REPERTORY_ENABLE_TESTING "Enable testing" ON) + +option(REPERTORY_ENABLE_S3 "Enable S3 mount support" OFF) +if (REPERTORY_ENABLE_S3) + set(REPERTORY_DEFINITIONS ${REPERTORY_DEFINITIONS} -DREPERTORY_ENABLE_S3) + + option(REPERTORY_ENABLE_S3_TESTING "Enable S3 unit tests" OFF) + if (REPERTORY_ENABLE_S3_TESTING) + set(REPERTORY_DEFINITIONS ${REPERTORY_DEFINITIONS} -DREPERTORY_ENABLE_S3_TESTING) + endif () +endif() diff --git a/cmake/os_detection.cmake b/cmake/os_detection.cmake index 8e24606c..21877371 100644 --- a/cmake/os_detection.cmake +++ b/cmake/os_detection.cmake @@ -1,13 +1,13 @@ -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) -endif() - -if (LINUX) - find_file(ALPINE_FOUND alpine-release PATHS /etc) -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) +endif() + +if (LINUX) + find_file(ALPINE_FOUND alpine-release PATHS /etc) +endif() diff --git a/cmake/repertory.cmake b/cmake/repertory.cmake index 002754f4..f85ccc28 100644 --- a/cmake/repertory.cmake +++ b/cmake/repertory.cmake @@ -1 +1 @@ -add_project_executable(repertory "${WINDOWS_VERSION_RC}") +add_project_executable(repertory "${WINDOWS_VERSION_RC}") diff --git a/cmake/rocksdb.cmake b/cmake/rocksdb.cmake index bfa861a5..b3f9b5c4 100644 --- a/cmake/rocksdb.cmake +++ b/cmake/rocksdb.cmake @@ -1,71 +1,71 @@ -set(ROCKSDB_PROJECT_NAME rocksdb_${ROCKSDB_VERSION}) -set(ROCKSDB_BUILD_ROOT ${EXTERNAL_BUILD_ROOT}/builds/${ROCKSDB_PROJECT_NAME}) - -set(ROCKSDB_CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") -if (MACOS) - set(ROCKSDB_CMAKE_CXX_FLAGS "${ROCKSDB_CMAKE_CXX_FLAGS} -fvisibility=hidden") -endif() - -if (CMAKE_BUILD_TYPE STREQUAL "Debug") - set(ROCKSDB_CMAKE_CXX_FLAGS "${ROCKSDB_CMAKE_CXX_FLAGS} -DXXH_NO_INLINE_HINTS") - set(REPERTORY_DEFINITIONS "${REPERTORY_DEFINITIONS} -DXXH_NO_INLINE_HINTS") -endif() - -set(ROCKSDB_CMAKE_ARGS - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} - -DCMAKE_CXX_FLAGS=${ROCKSDB_CMAKE_CXX_FLAGS} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} - -DCMAKE_GENERATOR=${CMAKE_GENERATOR} - -DCMAKE_INSTALL_PREFIX=${EXTERNAL_BUILD_ROOT} - -DCMAKE_POSITION_INDEPENDENT_CODE=${CMAKE_POSITION_INDEPENDENT_CODE} - -DCMAKE_SHARED_LINKER_FLAGS=${CMAKE_SHARED_LINKER_FLAGS} - -DFAIL_ON_WARNINGS=OFF - -DPORTABLE=1 - -DROCKSDB_BUILD_SHARED=OFF - -DWITH_BENCHMARK_TOOLS=OFF - -DWITH_GFLAGS=OFF - -DWITH_LIBURING=OFF - -DWITH_TESTS=OFF - -DWITH_TOOLS=OFF -) - -if (MINGW) - if (CMAKE_TOOLCHAIN_FILE) - set(ROCKSDB_CMAKE_ARGS - ${ROCKSDB_CMAKE_ARGS} - -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} - ) - endif() - - ExternalProject_Add(rocksdb_project - DOWNLOAD_NO_PROGRESS 1 - URL https://github.com/facebook/rocksdb/archive/v${ROCKSDB_VERSION}.tar.gz - PREFIX ${ROCKSDB_BUILD_ROOT} - CMAKE_ARGS ${ROCKSDB_CMAKE_ARGS} - INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "Skipping install step." - ) - - set(ROCKSDB_LIBRARIES ${ROCKSDB_BUILD_ROOT}/src/rocksdb_project-build/librocksdb.a) - include_directories(SYSTEM ${ROCKSDB_BUILD_ROOT}/src/rocksdb_project/include) -else() - ExternalProject_Add(rocksdb_project - DOWNLOAD_NO_PROGRESS 1 - URL https://github.com/facebook/rocksdb/archive/v${ROCKSDB_VERSION}.tar.gz - PREFIX ${ROCKSDB_BUILD_ROOT} - CMAKE_ARGS ${ROCKSDB_CMAKE_ARGS} - ) - - if (MACOS) - set(ROCKSDB_LIBRARIES ${EXTERNAL_BUILD_ROOT}/lib/librocksdb.a) - else() - set(ROCKSDB_LIBRARIES librocksdb.a) - endif() -endif() - -if (LINUX OR MINGW) - add_dependencies(rocksdb_project curl_project) -endif() - -add_dependencies(rocksdb_project zlib_project) +set(ROCKSDB_PROJECT_NAME rocksdb_${ROCKSDB_VERSION}) +set(ROCKSDB_BUILD_ROOT ${EXTERNAL_BUILD_ROOT}/builds/${ROCKSDB_PROJECT_NAME}) + +set(ROCKSDB_CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") +if (MACOS) + set(ROCKSDB_CMAKE_CXX_FLAGS "${ROCKSDB_CMAKE_CXX_FLAGS} -fvisibility=hidden") +endif() + +if (CMAKE_BUILD_TYPE STREQUAL "Debug") + set(ROCKSDB_CMAKE_CXX_FLAGS "${ROCKSDB_CMAKE_CXX_FLAGS} -DXXH_NO_INLINE_HINTS") + set(REPERTORY_DEFINITIONS "${REPERTORY_DEFINITIONS} -DXXH_NO_INLINE_HINTS") +endif() + +set(ROCKSDB_CMAKE_ARGS + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_CXX_FLAGS=${ROCKSDB_CMAKE_CXX_FLAGS} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} + -DCMAKE_GENERATOR=${CMAKE_GENERATOR} + -DCMAKE_INSTALL_PREFIX=${EXTERNAL_BUILD_ROOT} + -DCMAKE_POSITION_INDEPENDENT_CODE=${CMAKE_POSITION_INDEPENDENT_CODE} + -DCMAKE_SHARED_LINKER_FLAGS=${CMAKE_SHARED_LINKER_FLAGS} + -DFAIL_ON_WARNINGS=OFF + -DPORTABLE=1 + -DROCKSDB_BUILD_SHARED=OFF + -DWITH_BENCHMARK_TOOLS=OFF + -DWITH_GFLAGS=OFF + -DWITH_LIBURING=OFF + -DWITH_TESTS=OFF + -DWITH_TOOLS=OFF +) + +if (MINGW) + if (CMAKE_TOOLCHAIN_FILE) + set(ROCKSDB_CMAKE_ARGS + ${ROCKSDB_CMAKE_ARGS} + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + ) + endif() + + ExternalProject_Add(rocksdb_project + DOWNLOAD_NO_PROGRESS 1 + URL https://github.com/facebook/rocksdb/archive/v${ROCKSDB_VERSION}.tar.gz + PREFIX ${ROCKSDB_BUILD_ROOT} + CMAKE_ARGS ${ROCKSDB_CMAKE_ARGS} + INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "Skipping install step." + ) + + set(ROCKSDB_LIBRARIES ${ROCKSDB_BUILD_ROOT}/src/rocksdb_project-build/librocksdb.a) + include_directories(SYSTEM ${ROCKSDB_BUILD_ROOT}/src/rocksdb_project/include) +else() + ExternalProject_Add(rocksdb_project + DOWNLOAD_NO_PROGRESS 1 + URL https://github.com/facebook/rocksdb/archive/v${ROCKSDB_VERSION}.tar.gz + PREFIX ${ROCKSDB_BUILD_ROOT} + CMAKE_ARGS ${ROCKSDB_CMAKE_ARGS} + ) + + if (MACOS) + set(ROCKSDB_LIBRARIES ${EXTERNAL_BUILD_ROOT}/lib/librocksdb.a) + else() + set(ROCKSDB_LIBRARIES librocksdb.a) + endif() +endif() + +if (LINUX OR MINGW) + add_dependencies(rocksdb_project curl_project) +endif() + +add_dependencies(rocksdb_project zlib_project) diff --git a/cmake/settings.cmake b/cmake/settings.cmake index 9963d5e6..38ca6be8 100644 --- a/cmake/settings.cmake +++ b/cmake/settings.cmake @@ -1,39 +1,39 @@ -if (ALPINE_FOUND) - set(CMAKE_POSITION_INDEPENDENT_CODE OFF) - - set(REPERTORY_MUSL ON) - set(REPERTORY_DEFINITIONS ${REPERTORY_DEFINITIONS} -DREPERTORY_MUSL) -else() - set(CMAKE_POSITION_INDEPENDENT_CODE ON) -endif() - -set(CMAKE_COLOR_MAKEFILE OFF) -set(CMAKE_CXX_STANDARD 20) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -set(THREADS_PREFER_PTHREAD_FLAG 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 -${DEBUG_EXTRA}) - set(DEBUG_EXTRA3 _${DEBUG_EXTRA}) - 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(REPERTORY_OUTPUT_DIR ${CMAKE_BINARY_DIR}) - -set(EXTERNAL_BUILD_ROOT ${CMAKE_BINARY_DIR}/external) -set(EXTERNAL_BUILD_TYPE ${CMAKE_BUILD_TYPE}) - -if (UNIX OR MINGW) - file(MAKE_DIRECTORY ${EXTERNAL_BUILD_ROOT}/lib) - file(CREATE_LINK ${EXTERNAL_BUILD_ROOT}/lib ${EXTERNAL_BUILD_ROOT}/lib64 SYMBOLIC) -endif() +if (ALPINE_FOUND) + set(CMAKE_POSITION_INDEPENDENT_CODE OFF) + + set(REPERTORY_MUSL ON) + set(REPERTORY_DEFINITIONS ${REPERTORY_DEFINITIONS} -DREPERTORY_MUSL) +else() + set(CMAKE_POSITION_INDEPENDENT_CODE ON) +endif() + +set(CMAKE_COLOR_MAKEFILE OFF) +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +set(THREADS_PREFER_PTHREAD_FLAG 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 -${DEBUG_EXTRA}) + set(DEBUG_EXTRA3 _${DEBUG_EXTRA}) + 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(REPERTORY_OUTPUT_DIR ${CMAKE_BINARY_DIR}) + +set(EXTERNAL_BUILD_ROOT ${CMAKE_BINARY_DIR}/external) +set(EXTERNAL_BUILD_TYPE ${CMAKE_BUILD_TYPE}) + +if (UNIX OR MINGW) + file(MAKE_DIRECTORY ${EXTERNAL_BUILD_ROOT}/lib) + file(CREATE_LINK ${EXTERNAL_BUILD_ROOT}/lib ${EXTERNAL_BUILD_ROOT}/lib64 SYMBOLIC) +endif() diff --git a/cmake/unittests.cmake b/cmake/unittests.cmake index 1c779bf6..00a24ce9 100644 --- a/cmake/unittests.cmake +++ b/cmake/unittests.cmake @@ -1,66 +1,66 @@ -# Testing -if (REPERTORY_ENABLE_TESTING) - enable_testing() - - set(GTEST_PROJECT_NAME gtest_${GTEST_VERSION}) - set(GTEST_BUILD_ROOT ${EXTERNAL_BUILD_ROOT}/builds/${GTEST_PROJECT_NAME}) - if (MACOS) - set(GTEST_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden") - set(GTEST_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden") - else() - set(GTEST_C_FLAGS ${CMAKE_C_FLAGS}) - set(GTEST_CXX_FLAGS ${CMAKE_CXX_FLAGS}) - endif() - ExternalProject_Add(gtest_project - DOWNLOAD_NO_PROGRESS 1 - URL https://github.com/google/googletest/archive/refs/tags/${GTEST_VERSION}.tar.gz - PREFIX ${GTEST_BUILD_ROOT} - CMAKE_ARGS - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_C_FLAGS=${GTEST_C_FLAGS} - -DCMAKE_CXX_FLAGS=${GTEST_CXX_FLAGS} - -DCMAKE_POSITION_INDEPENDENT_CODE=${CMAKE_POSITION_INDEPENDENT_CODE} - -DCMAKE_BUILD_TYPE=${EXTERNAL_BUILD_TYPE} - INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "Skipping install step." - ) - - set(GTEST_INCLUDE_DIRS - ${GTEST_BUILD_ROOT}/src/gtest_project/googletest/include - ${GTEST_BUILD_ROOT}/src/gtest_project/googlemock/include - ) - - if(UNIX OR MINGW) - set(GTEST_LIBRARIES - ${GTEST_BUILD_ROOT}/src/gtest_project-build/lib/libgmock.a - ${GTEST_BUILD_ROOT}/src/gtest_project-build/lib/libgtest.a - ${GTEST_BUILD_ROOT}/src/gtest_project-build/lib/libgtest_main.a - ) - endif() - - file(GLOB_RECURSE UNITTEST_SOURCES - ${CMAKE_CURRENT_SOURCE_DIR}/tests/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/tests/*.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/tests/fixtures/*.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/tests/mocks/*.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/tests/utils/*.hpp - ) - - add_project_executable(unittests "${UNITTEST_SOURCES}") - add_dependencies(unittests - gtest_project - zlib_project - ) - - target_compile_definitions(unittests PUBLIC - GTEST_LINKED_AS_SHARED_LIBRARY=1 - REPERTORY_TESTING - ) - target_include_directories(unittests PUBLIC - ${GTEST_INCLUDE_DIRS} - ${CMAKE_CURRENT_SOURCE_DIR}/tests - ) - target_link_libraries(unittests PRIVATE ${GTEST_LIBRARIES}) - - add_test(NAME AllTests COMMAND unittests WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}) -endif() +# Testing +if (REPERTORY_ENABLE_TESTING) + enable_testing() + + set(GTEST_PROJECT_NAME gtest_${GTEST_VERSION}) + set(GTEST_BUILD_ROOT ${EXTERNAL_BUILD_ROOT}/builds/${GTEST_PROJECT_NAME}) + if (MACOS) + set(GTEST_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden") + set(GTEST_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden") + else() + set(GTEST_C_FLAGS ${CMAKE_C_FLAGS}) + set(GTEST_CXX_FLAGS ${CMAKE_CXX_FLAGS}) + endif() + ExternalProject_Add(gtest_project + DOWNLOAD_NO_PROGRESS 1 + URL https://github.com/google/googletest/archive/refs/tags/${GTEST_VERSION}.tar.gz + PREFIX ${GTEST_BUILD_ROOT} + CMAKE_ARGS + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_C_FLAGS=${GTEST_C_FLAGS} + -DCMAKE_CXX_FLAGS=${GTEST_CXX_FLAGS} + -DCMAKE_POSITION_INDEPENDENT_CODE=${CMAKE_POSITION_INDEPENDENT_CODE} + -DCMAKE_BUILD_TYPE=${EXTERNAL_BUILD_TYPE} + INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "Skipping install step." + ) + + set(GTEST_INCLUDE_DIRS + ${GTEST_BUILD_ROOT}/src/gtest_project/googletest/include + ${GTEST_BUILD_ROOT}/src/gtest_project/googlemock/include + ) + + if(UNIX OR MINGW) + set(GTEST_LIBRARIES + ${GTEST_BUILD_ROOT}/src/gtest_project-build/lib/libgmock.a + ${GTEST_BUILD_ROOT}/src/gtest_project-build/lib/libgtest.a + ${GTEST_BUILD_ROOT}/src/gtest_project-build/lib/libgtest_main.a + ) + endif() + + file(GLOB_RECURSE UNITTEST_SOURCES + ${CMAKE_CURRENT_SOURCE_DIR}/tests/*.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/tests/*.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/tests/fixtures/*.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/tests/mocks/*.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/tests/utils/*.hpp + ) + + add_project_executable(unittests "${UNITTEST_SOURCES}") + add_dependencies(unittests + gtest_project + zlib_project + ) + + target_compile_definitions(unittests PUBLIC + GTEST_LINKED_AS_SHARED_LIBRARY=1 + REPERTORY_TESTING + ) + target_include_directories(unittests PUBLIC + ${GTEST_INCLUDE_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/tests + ) + target_link_libraries(unittests PRIVATE ${GTEST_LIBRARIES}) + + add_test(NAME AllTests COMMAND unittests WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}) +endif() diff --git a/cmake/versions.cmake b/cmake/versions.cmake index c13672b1..b959c4e9 100644 --- a/cmake/versions.cmake +++ b/cmake/versions.cmake @@ -1,11 +1,11 @@ -set(BOOST_MAJOR_VERSION 1) -set(BOOST_MINOR_VERSION 83) -set(BOOST_REVISION 0) -set(CURL_VERSION 8_4_0) -set(GTEST_VERSION v1.14.0) -set(LIBSODIUM_VERSION 1.0.19) -set(LIBUUID_VERSION 1.6.2) -set(OPENSSL_VERSION 3.1.4) -set(ROCKSDB_VERSION 8.6.7) -set(WINFSP_VERSION 2.0) -set(ZLIB_VERSION v1.3) +set(BOOST_MAJOR_VERSION 1) +set(BOOST_MINOR_VERSION 83) +set(BOOST_REVISION 0) +set(CURL_VERSION 8_4_0) +set(GTEST_VERSION v1.14.0) +set(LIBSODIUM_VERSION 1.0.19) +set(LIBUUID_VERSION 1.6.2) +set(OPENSSL_VERSION 3.1.4) +set(ROCKSDB_VERSION 8.6.7) +set(WINFSP_VERSION 2.0) +set(ZLIB_VERSION v1.3) diff --git a/cmake/zlib.cmake b/cmake/zlib.cmake index 23474019..d56f1159 100644 --- a/cmake/zlib.cmake +++ b/cmake/zlib.cmake @@ -1,31 +1,31 @@ -set(ZLIB_PROJECT_NAME zlib_${ZLIB_VERSION}) -set(ZLIB_BUILD_ROOT ${EXTERNAL_BUILD_ROOT}/builds/${ZLIB_PROJECT_NAME}) -set(ZLIB_CMAKE_ARGS - -DCMAKE_BUILD_TYPE=${EXTERNAL_BUILD_TYPE} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} - -DCMAKE_GENERATOR=${CMAKE_GENERATOR} - -DCMAKE_INSTALL_PREFIX=${EXTERNAL_BUILD_ROOT} - -DCMAKE_POSITION_INDEPENDENT_CODE=${CMAKE_POSITION_INDEPENDENT_CODE} - -DCMAKE_SHARED_LINKER_FLAGS=${CMAKE_SHARED_LINKER_FLAGS} -) - -if (CMAKE_TOOLCHAIN_FILE) - set(ZLIB_CMAKE_ARGS - ${ZLIB_CMAKE_ARGS} - -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} - ) -endif() - -ExternalProject_Add(zlib_project - DOWNLOAD_NO_PROGRESS 1 - URL https://github.com/madler/zlib/archive/${ZLIB_VERSION}.tar.gz - PREFIX ${ZLIB_BUILD_ROOT} - CMAKE_ARGS ${ZLIB_CMAKE_ARGS} -) - -if(MINGW) - set(ZLIB_LIBRARIES ${EXTERNAL_BUILD_ROOT}/lib/libzlibstatic${CMAKE_STATIC_LIBRARY_SUFFIX}) -else() - set(ZLIB_LIBRARIES ${EXTERNAL_BUILD_ROOT}/lib/libz${CMAKE_STATIC_LIBRARY_SUFFIX}) -endif() +set(ZLIB_PROJECT_NAME zlib_${ZLIB_VERSION}) +set(ZLIB_BUILD_ROOT ${EXTERNAL_BUILD_ROOT}/builds/${ZLIB_PROJECT_NAME}) +set(ZLIB_CMAKE_ARGS + -DCMAKE_BUILD_TYPE=${EXTERNAL_BUILD_TYPE} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} + -DCMAKE_GENERATOR=${CMAKE_GENERATOR} + -DCMAKE_INSTALL_PREFIX=${EXTERNAL_BUILD_ROOT} + -DCMAKE_POSITION_INDEPENDENT_CODE=${CMAKE_POSITION_INDEPENDENT_CODE} + -DCMAKE_SHARED_LINKER_FLAGS=${CMAKE_SHARED_LINKER_FLAGS} +) + +if (CMAKE_TOOLCHAIN_FILE) + set(ZLIB_CMAKE_ARGS + ${ZLIB_CMAKE_ARGS} + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + ) +endif() + +ExternalProject_Add(zlib_project + DOWNLOAD_NO_PROGRESS 1 + URL https://github.com/madler/zlib/archive/${ZLIB_VERSION}.tar.gz + PREFIX ${ZLIB_BUILD_ROOT} + CMAKE_ARGS ${ZLIB_CMAKE_ARGS} +) + +if(MINGW) + set(ZLIB_LIBRARIES ${EXTERNAL_BUILD_ROOT}/lib/libzlibstatic${CMAKE_STATIC_LIBRARY_SUFFIX}) +else() + set(ZLIB_LIBRARIES ${EXTERNAL_BUILD_ROOT}/lib/libz${CMAKE_STATIC_LIBRARY_SUFFIX}) +endif()