]>
Commit | Line | Data |
---|---|---|
1e59de90 TL |
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 | |
4 | ||
5 | cmake_minimum_required(VERSION 3.5...3.16) | |
6 | ||
7 | project(boost_iostreams VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX) | |
8 | ||
9 | add_library(boost_iostreams | |
10 | src/file_descriptor.cpp | |
11 | src/mapped_file.cpp | |
12 | ) | |
13 | ||
14 | function(boost_iostreams_option name description package version found target) # sources... | |
15 | ||
16 | find_package(${package} ${version} QUIET) | |
17 | ||
18 | if(${found} AND TARGET ${target}) | |
19 | ||
20 | option(${name} ${description} ON) | |
21 | ||
22 | else() | |
23 | ||
24 | option(${name} ${description} OFF) | |
25 | ||
26 | endif() | |
27 | ||
28 | if(${name}) | |
29 | ||
30 | find_package(${package} ${version} REQUIRED) | |
31 | target_sources(boost_iostreams PRIVATE ${ARGN}) | |
32 | target_link_libraries(boost_iostreams PRIVATE ${target}) | |
33 | ||
34 | endif() | |
35 | ||
36 | endfunction() | |
37 | ||
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) | |
42 | ||
43 | include(CheckCXXSourceCompiles) | |
44 | ||
45 | function(iostreams_check var source incs libs defs) | |
46 | ||
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) | |
53 | ||
54 | endfunction() | |
55 | ||
56 | set(_lzma_mt "") | |
57 | ||
58 | if(BOOST_IOSTREAMS_ENABLE_LZMA) | |
59 | ||
60 | iostreams_check(BOOST_IOSTREAMS_HAS_LZMA_CPUTHREADS has_lzma_cputhreads.cpp "" "LibLZMA::LibLZMA" "") | |
61 | ||
62 | if(BOOST_IOSTREAMS_HAS_LZMA_CPUTHREADS) | |
63 | set(_lzma_mt " (multithreaded)") | |
64 | else() | |
65 | target_compile_definitions(boost_iostreams PRIVATE BOOST_IOSTREAMS_LZMA_NO_MULTITHREADED=1) | |
66 | endif() | |
67 | ||
68 | endif() | |
69 | ||
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}") | |
71 | ||
72 | unset(_lzma_mt) | |
73 | ||
74 | add_library(Boost::iostreams ALIAS boost_iostreams) | |
75 | ||
76 | target_include_directories(boost_iostreams PUBLIC include) | |
77 | ||
78 | target_link_libraries(boost_iostreams | |
79 | PUBLIC | |
80 | Boost::assert | |
81 | Boost::config | |
82 | Boost::core | |
83 | Boost::detail | |
84 | Boost::function | |
85 | Boost::integer | |
86 | Boost::iterator | |
87 | Boost::mpl | |
88 | Boost::preprocessor | |
89 | Boost::random | |
90 | Boost::range | |
91 | Boost::regex | |
92 | Boost::smart_ptr | |
93 | Boost::static_assert | |
94 | Boost::throw_exception | |
95 | Boost::type_traits | |
96 | Boost::utility | |
97 | PRIVATE | |
98 | Boost::numeric_conversion | |
99 | ) | |
100 | ||
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 | |
105 | ) | |
106 | ||
107 | if(BUILD_SHARED_LIBS) | |
108 | target_compile_definitions(boost_iostreams PUBLIC BOOST_IOSTREAMS_DYN_LINK) | |
109 | else() | |
110 | target_compile_definitions(boost_iostreams PUBLIC BOOST_IOSTREAMS_STATIC_LINK) | |
111 | endif() | |
112 | ||
113 | if(BUILD_TESTING AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test/CMakeLists.txt") | |
114 | ||
115 | add_subdirectory(test) | |
116 | ||
117 | endif() |