118 lines
3.3 KiB
CMake
Raw Normal View History

2025-01-12 20:40:48 +08:00
# 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()