ceph/cmake/modules/Findnl.cmake

51 lines
1.5 KiB
CMake
Raw Normal View History

cmake: rewrite Findgenl to support components argument * rename genl to nl: "genl" is not very specific without more context. and libnl is actually a library suite. so it would be better if we can rename the library to be found to "libnl", and by following the naming convention of CMake, in this change, Findgenl.cmake is renamed to Findnl.cmake * Findnl.cmake: support the component argument, in our specific case, what we want is "libnl-genl" library, which is one of the libraries offered by libnl. so let's just make it a component. * Findnl.cmake: should pass the names of the required variables instead of their values to `find_package_handle_standard_args()`. before this change, we pass `GENL_LIBRARIES` to this function. it was correct at the first glance. but it is not able to handle the case where case where libnl-genl is not installed. so the fix is to pass all the names of required library paths to this function. in this change, their name are concatenated to a single variable -- `nl_LIBRARIES`, and the value of this variable is passed to `find_package_handle_standard_args()`. and the error message would be more specific this way if libnl-genl is not found: Could NOT find nl (missing: nl_genl_LIBRARY) * Findnl.cmake: add nl::<component> as imported library, it helps the consumer of these libraries to import them -- no need to specify the `target_include_directories()` separately anymore. * move the find_package() code to where it is used. it helps to improve the readability. * remove `HAVE_GENL` variable: it's not used anywhere. * drop the messages of "Not using foobar", they do not help. Signed-off-by: Kefu Chai <kchai@redhat.com>
2019-06-09 09:12:27 +00:00
# - Find libnl
# Find the libnl-3 library and includes
#
# nl_INCLUDE_DIR - where to find netlink.h, etc.
# nl_<COMPONENT>_LIBRARY - library when using nl::<COMPONENT>.
# nl_FOUND - True if nl found.
find_path(nl_INCLUDE_DIR
NAMES
netlink/netlink.h
PATH_SUFFIXES
libnl3)
foreach(component "core" ${nl_FIND_COMPONENTS})
set(nl_COMPONENTS core cli genl idiag nf route xfrm)
list(FIND nl_COMPONENTS "${component}" found)
if(found EQUAL -1)
message(FATAL_ERROR "unknown libnl-3 component: ${component}")
endif()
if(component STREQUAL "core")
find_library(nl_${component}_LIBRARY nl-3)
else()
find_library(nl_${component}_LIBRARY nl-${component}-3)
endif()
list(APPEND nl_LIBRARIES "nl_${component}_LIBRARY")
endforeach()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(nl
DEFAULT_MSG ${nl_LIBRARIES} nl_INCLUDE_DIR)
mark_as_advanced(
${nl_LIBRARIES}
nl_INCLUDE_DIR)
if(nl_FOUND)
foreach(component "core" ${nl_FIND_COMPONENTS})
if(NOT TARGET nl::${component})
add_library(nl::${component} UNKNOWN IMPORTED)
set_target_properties(nl::${component} PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${nl_INCLUDE_DIR}"
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
IMPORTED_LOCATION "${nl_${component}_LIBRARY}")
if(NOT component STREQUAL "core")
set_target_properties(nl::${component} PROPERTIES
INTERFACE_LINK_LIBRARIES "${nl_core_LIBRARY}")
endif()
endif()
endforeach()
endif()