# Copyright 2020, 2021 Peter Dimov # Distributed under the Boost Software License, Version 1.0. # https://www.boost.org/LICENSE_1_0.txt cmake_minimum_required(VERSION 3.5...3.16) project(boost_iostreams VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX) add_library(boost_iostreams src/file_descriptor.cpp src/mapped_file.cpp ) function(boost_iostreams_option name description package version found target) # sources... find_package(${package} ${version} QUIET) if(${found} AND TARGET ${target}) option(${name} ${description} ON) else() option(${name} ${description} OFF) endif() if(${name}) find_package(${package} ${version} REQUIRED) target_sources(boost_iostreams PRIVATE ${ARGN}) target_link_libraries(boost_iostreams PRIVATE ${target}) endif() endfunction() boost_iostreams_option(BOOST_IOSTREAMS_ENABLE_ZLIB "Boost.Iostreams: Enable ZLIB support" ZLIB "" ZLIB_FOUND ZLIB::ZLIB src/zlib.cpp src/gzip.cpp) boost_iostreams_option(BOOST_IOSTREAMS_ENABLE_BZIP2 "Boost.Iostreams: Enable BZip2 support" BZip2 "" BZIP2_FOUND BZip2::BZip2 src/bzip2.cpp) boost_iostreams_option(BOOST_IOSTREAMS_ENABLE_LZMA "Boost.Iostreams: Enable LZMA support" LibLZMA "" LIBLZMA_FOUND LibLZMA::LibLZMA src/lzma.cpp) boost_iostreams_option(BOOST_IOSTREAMS_ENABLE_ZSTD "Boost.Iostreams: Enable Zstd support" zstd "1.0" zstd_FOUND zstd::libzstd_shared src/zstd.cpp) include(CheckCXXSourceCompiles) function(iostreams_check var source incs libs defs) set(CMAKE_REQUIRED_INCLUDES "${incs}") list(APPEND CMAKE_REQUIRED_INCLUDES "${CMAKE_CURRENT_SOURCE_DIR}/build") set(CMAKE_REQUIRED_LIBRARIES "${libs}") set(CMAKE_REQUIRED_DEFINITIONS "${defs}") check_cxx_source_compiles("#include \"${source}\"" ${var}) set(${var} ${${var}} PARENT_SCOPE) endfunction() set(_lzma_mt "") if(BOOST_IOSTREAMS_ENABLE_LZMA) iostreams_check(BOOST_IOSTREAMS_HAS_LZMA_CPUTHREADS has_lzma_cputhreads.cpp "" "LibLZMA::LibLZMA" "") if(BOOST_IOSTREAMS_HAS_LZMA_CPUTHREADS) set(_lzma_mt " (multithreaded)") else() target_compile_definitions(boost_iostreams PRIVATE BOOST_IOSTREAMS_LZMA_NO_MULTITHREADED=1) endif() endif() message(STATUS "Boost.Iostreams: ZLIB ${BOOST_IOSTREAMS_ENABLE_ZLIB}, BZip2 ${BOOST_IOSTREAMS_ENABLE_BZIP2}, LZMA ${BOOST_IOSTREAMS_ENABLE_LZMA}${_lzma_mt}, Zstd ${BOOST_IOSTREAMS_ENABLE_ZSTD}") unset(_lzma_mt) add_library(Boost::iostreams ALIAS boost_iostreams) target_include_directories(boost_iostreams PUBLIC include) target_link_libraries(boost_iostreams PUBLIC Boost::assert Boost::config Boost::core Boost::detail Boost::function Boost::integer Boost::iterator Boost::mpl Boost::preprocessor Boost::random Boost::range Boost::regex Boost::smart_ptr Boost::static_assert Boost::throw_exception Boost::type_traits Boost::utility PRIVATE Boost::numeric_conversion ) target_compile_definitions(boost_iostreams PUBLIC BOOST_IOSTREAMS_NO_LIB # Source files already define BOOST_IOSTREAMS_SOURCE # PRIVATE BOOST_IOSTREAMS_SOURCE ) if(BUILD_SHARED_LIBS) target_compile_definitions(boost_iostreams PUBLIC BOOST_IOSTREAMS_DYN_LINK) else() target_compile_definitions(boost_iostreams PUBLIC BOOST_IOSTREAMS_STATIC_LINK) endif() if(BUILD_TESTING AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test/CMakeLists.txt") add_subdirectory(test) endif()