ceph/cmake/modules/Findnl.cmake
Kefu Chai c028de2f93 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-19 21:21:00 +08:00

51 lines
1.5 KiB
CMake

# - 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()