118 lines
3.3 KiB
CMake
118 lines
3.3 KiB
CMake
# 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()
|