| # Copyright 2019 Peter Dimov |
| # Distributed under the Boost Software License, Version 1.0. |
| # (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt) |
| |
| # This CMake configuration file, installed as part of the Boost build |
| # and installation procedure done by `b2 install`, provides support |
| # for find_package(Boost). |
| # |
| # It's roughly, but not perfectly, compatible with the behavior |
| # of find_package(Boost) as provided by FindBoost.cmake. |
| # |
| # A typical use might be |
| # |
| # find_package(Boost 1.70 REQUIRED COMPONENTS filesystem regex PATHS C:/Boost) |
| # |
| # On success, the above invocation would define the targets Boost::headers, |
| # Boost::filesystem and Boost::regex. Boost::headers represents all |
| # header-only libraries. An alias, Boost::boost, for Boost::headers is |
| # provided for compatibility. |
| # |
| # Since Boost libraries can coexist in many variants - 32/64 bit, |
| # static/dynamic runtime, debug/release, the following variables can be used |
| # to control which variant is chosen: |
| # |
| # Boost_USE_DEBUG_LIBS: When OFF, disables debug libraries. |
| # Boost_USE_RELEASE_LIBS: When OFF, disables release libraries. |
| # Boost_USE_STATIC_LIBS: When ON, uses static Boost libraries; when OFF, |
| # uses shared Boost libraries; when not set, the |
| # default is to use shared when BUILD_SHARED_LIBS is |
| # ON, static otherwise. |
| # Boost_USE_STATIC_RUNTIME: When ON, uses Boost libraries linked against the |
| # static runtime. The default is shared runtime. |
| # Boost_USE_DEBUG_RUNTIME: When ON, uses Boost libraries linked against the |
| # debug runtime. When OFF, against the release |
| # runtime. The default is to use either. |
| # Boost_COMPILER: The compiler that has been used to build Boost, |
| # such as vc141, gcc7, clang37. The default is |
| # determined from CMAKE_CXX_COMPILER_ID. |
| |
| message(STATUS "Found Boost ${Boost_VERSION} at ${Boost_DIR}") |
| |
| # Output requested configuration (f.ex. "REQUIRED COMPONENTS filesystem") |
| |
| if(Boost_FIND_QUIETLY) |
| set(_BOOST_CONFIG "${_BOOST_CONFIG} QUIET") |
| endif() |
| |
| if(Boost_FIND_REQUIRED) |
| set(_BOOST_CONFIG "${_BOOST_CONFIG} REQUIRED") |
| endif() |
| |
| foreach(__boost_comp IN LISTS Boost_FIND_COMPONENTS) |
| if(${Boost_FIND_REQUIRED_${__boost_comp}}) |
| list(APPEND _BOOST_COMPONENTS ${__boost_comp}) |
| else() |
| list(APPEND _BOOST_OPTIONAL_COMPONENTS ${__boost_comp}) |
| endif() |
| endforeach() |
| |
| if(_BOOST_COMPONENTS) |
| set(_BOOST_CONFIG "${_BOOST_CONFIG} COMPONENTS ${_BOOST_COMPONENTS}") |
| endif() |
| |
| if(_BOOST_OPTIONAL_COMPONENTS) |
| set(_BOOST_CONFIG "${_BOOST_CONFIG} OPTIONAL_COMPONENTS ${_BOOST_OPTIONAL_COMPONENTS}") |
| endif() |
| |
| if(_BOOST_CONFIG) |
| message(STATUS " Requested configuration:${_BOOST_CONFIG}") |
| endif() |
| |
| unset(_BOOST_CONFIG) |
| unset(_BOOST_COMPONENTS) |
| unset(_BOOST_OPTIONAL_COMPONENTS) |
| |
| # find_dependency doesn't forward arguments until 3.9, so we have to roll our own |
| |
| macro(boost_find_dependency dep req) |
| |
| set(_BOOST_QUIET) |
| if(Boost_FIND_QUIETLY) |
| set(_BOOST_QUIET QUIET) |
| endif() |
| |
| set(_BOOST_REQUIRED) |
| if(${req} AND Boost_FIND_REQUIRED) |
| set(_BOOST_REQUIRED REQUIRED) |
| endif() |
| |
| get_filename_component(_BOOST_CMAKEDIR "${CMAKE_CURRENT_LIST_DIR}/../" ABSOLUTE) |
| |
| if(Boost_DEBUG) |
| message(STATUS "BoostConfig: find_package(boost_${dep} ${Boost_VERSION} EXACT CONFIG ${_BOOST_REQUIRED} ${_BOOST_QUIET} HINTS ${_BOOST_CMAKEDIR})") |
| endif() |
| find_package(boost_${dep} ${Boost_VERSION} EXACT CONFIG ${_BOOST_REQUIRED} ${_BOOST_QUIET} HINTS ${_BOOST_CMAKEDIR}) |
| |
| string(TOUPPER ${dep} _BOOST_DEP) |
| set(Boost_${_BOOST_DEP}_FOUND ${boost_${dep}_FOUND}) |
| |
| unset(_BOOST_REQUIRED) |
| unset(_BOOST_QUIET) |
| unset(_BOOST_CMAKEDIR) |
| unset(_BOOST_DEP) |
| |
| endmacro() |
| |
| # Find boost_headers |
| |
| boost_find_dependency(headers 1) |
| |
| if(NOT boost_headers_FOUND) |
| |
| set(Boost_FOUND 0) |
| set(Boost_NOT_FOUND_MESSAGE "A required dependency, boost_headers, has not been found.") |
| |
| return() |
| |
| endif() |
| |
| # Find components |
| |
| foreach(__boost_comp IN LISTS Boost_FIND_COMPONENTS) |
| |
| boost_find_dependency(${__boost_comp} ${Boost_FIND_REQUIRED_${__boost_comp}}) |
| |
| endforeach() |
| |
| # Compatibility targets |
| |
| if(NOT TARGET Boost::boost) |
| |
| add_library(Boost::boost INTERFACE IMPORTED) |
| set_property(TARGET Boost::boost APPEND PROPERTY INTERFACE_LINK_LIBRARIES Boost::headers) |
| |
| # All Boost:: targets already disable autolink |
| add_library(Boost::diagnostic_definitions INTERFACE IMPORTED) |
| add_library(Boost::disable_autolinking INTERFACE IMPORTED) |
| add_library(Boost::dynamic_linking INTERFACE IMPORTED) |
| |
| endif() |