1 # Copyright 2020, 2021 Peter Dimov
2 # Distributed under the Boost Software License, Version 1.0.
3 # https://www.boost.org/LICENSE_1_0.txt
5 cmake_minimum_required(VERSION 3.5...3.16)
7 project(boost_iostreams VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX)
9 add_library(boost_iostreams
10 src/file_descriptor.cpp
14 function(boost_iostreams_option name description package version found target) # sources...
16 find_package(${package} ${version} QUIET)
18 if(${found} AND TARGET ${target})
20 option(${name} ${description} ON)
24 option(${name} ${description} OFF)
30 find_package(${package} ${version} REQUIRED)
31 target_sources(boost_iostreams PRIVATE ${ARGN})
32 target_link_libraries(boost_iostreams PRIVATE ${target})
38 boost_iostreams_option(BOOST_IOSTREAMS_ENABLE_ZLIB "Boost.Iostreams: Enable ZLIB support" ZLIB "" ZLIB_FOUND ZLIB::ZLIB src/zlib.cpp src/gzip.cpp)
39 boost_iostreams_option(BOOST_IOSTREAMS_ENABLE_BZIP2 "Boost.Iostreams: Enable BZip2 support" BZip2 "" BZIP2_FOUND BZip2::BZip2 src/bzip2.cpp)
40 boost_iostreams_option(BOOST_IOSTREAMS_ENABLE_LZMA "Boost.Iostreams: Enable LZMA support" LibLZMA "" LIBLZMA_FOUND LibLZMA::LibLZMA src/lzma.cpp)
41 boost_iostreams_option(BOOST_IOSTREAMS_ENABLE_ZSTD "Boost.Iostreams: Enable Zstd support" zstd "1.0" zstd_FOUND zstd::libzstd_shared src/zstd.cpp)
43 include(CheckCXXSourceCompiles)
45 function(iostreams_check var source incs libs defs)
47 set(CMAKE_REQUIRED_INCLUDES "${incs}")
48 list(APPEND CMAKE_REQUIRED_INCLUDES "${CMAKE_CURRENT_SOURCE_DIR}/build")
49 set(CMAKE_REQUIRED_LIBRARIES "${libs}")
50 set(CMAKE_REQUIRED_DEFINITIONS "${defs}")
51 check_cxx_source_compiles("#include \"${source}\"" ${var})
52 set(${var} ${${var}} PARENT_SCOPE)
58 if(BOOST_IOSTREAMS_ENABLE_LZMA)
60 iostreams_check(BOOST_IOSTREAMS_HAS_LZMA_CPUTHREADS has_lzma_cputhreads.cpp "" "LibLZMA::LibLZMA" "")
62 if(BOOST_IOSTREAMS_HAS_LZMA_CPUTHREADS)
63 set(_lzma_mt " (multithreaded)")
65 target_compile_definitions(boost_iostreams PRIVATE BOOST_IOSTREAMS_LZMA_NO_MULTITHREADED=1)
70 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}")
74 add_library(Boost::iostreams ALIAS boost_iostreams)
76 target_include_directories(boost_iostreams PUBLIC include)
78 target_link_libraries(boost_iostreams
94 Boost::throw_exception
98 Boost::numeric_conversion
101 target_compile_definitions(boost_iostreams
102 PUBLIC BOOST_IOSTREAMS_NO_LIB
103 # Source files already define BOOST_IOSTREAMS_SOURCE
104 # PRIVATE BOOST_IOSTREAMS_SOURCE
107 if(BUILD_SHARED_LIBS)
108 target_compile_definitions(boost_iostreams PUBLIC BOOST_IOSTREAMS_DYN_LINK)
110 target_compile_definitions(boost_iostreams PUBLIC BOOST_IOSTREAMS_STATIC_LINK)
113 if(BUILD_TESTING AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test/CMakeLists.txt")
115 add_subdirectory(test)