FindBoost: Unwrap compatibility INTERFACE targets for legacy variables

Since commit 0dd6772a89 (FindBoost: Add legacy variables and targets for
compatibility, 2019-06-14, v3.15.0-rc2~3^2~1) we extract information
from imported targets provided by upstream `BoostConfig.cmake` files.
However, upstream Boost 1.71 provides some imported targets only for
compatibility.  They are just INTERFACE libraries that wrap around the
real target named by `INTERFACE_LINK_LIBRARIES`.  Unwrap this layer so
we can extract the real imported location.

Fixes: #19656
This commit is contained in:
Brad King
2019-08-30 14:03:59 -04:00
parent d7df3cd73f
commit cf29fa18c8
2 changed files with 20 additions and 0 deletions

View File

@@ -266,6 +266,21 @@ function(_boost_get_existing_target component target_var)
foreach(prefix Boost boost)
foreach(name IN LISTS names)
if(TARGET "${prefix}::${name}")
# The target may be an INTERFACE library that wraps around a single other
# target for compatibility. Unwrap this layer so we can extract real info.
if("${name}" MATCHES "^(python|numpy|mpi_python)([1-9])([0-9])$")
set(name_nv "${CMAKE_MATCH_1}")
if(TARGET "${prefix}::${name_nv}")
get_property(type TARGET "${prefix}::${name}" PROPERTY TYPE)
if(type STREQUAL "INTERFACE_LIBRARY")
get_property(lib TARGET "${prefix}::${name}" PROPERTY INTERFACE_LINK_LIBRARIES)
if("${lib}" STREQUAL "${prefix}::${name_nv}")
set(${target_var} "${prefix}::${name_nv}" PARENT_SCOPE)
return()
endif()
endif()
endif()
endif()
set(${target_var} "${prefix}::${name}" PARENT_SCOPE)
return()
endif()

View File

@@ -8,6 +8,7 @@ set_target_properties(Boost::date_time PROPERTIES
IMPORTED_CONFIGURATIONS RELEASE
IMPORTED_LOCATION_RELEASE "${CMAKE_CURRENT_LIST_DIR}/lib/libboost_date_time.a"
)
set(Boost_python37_FOUND 1)
add_library(Boost::python UNKNOWN IMPORTED)
set_target_properties(Boost::python PROPERTIES
@@ -15,6 +16,10 @@ set_target_properties(Boost::python PROPERTIES
IMPORTED_LOCATION_RELEASE "${CMAKE_CURRENT_LIST_DIR}/lib/libboost_python_release.a"
IMPORTED_LOCATION_DEBUG "${CMAKE_CURRENT_LIST_DIR}/lib/libboost_python.a"
)
# Versioned target alias for compatibility (added by upstream BoostConfig).
add_library(Boost::python37 INTERFACE IMPORTED)
set_property(TARGET Boost::python37 APPEND PROPERTY INTERFACE_LINK_LIBRARIES Boost::python)
set(Boost_mpi_python2_FOUND 1)
add_library(Boost::mpi_python UNKNOWN IMPORTED)
set_target_properties(Boost::mpi_python PROPERTIES