summaryrefslogtreecommitdiffstats
path: root/cmake/modules/FindNL.cmake
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 20:34:10 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 20:34:10 +0000
commite4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc (patch)
tree68cb5ef9081156392f1dd62a00c6ccc1451b93df /cmake/modules/FindNL.cmake
parentInitial commit. (diff)
downloadwireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.tar.xz
wireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.zip
Adding upstream version 4.2.2.upstream/4.2.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'cmake/modules/FindNL.cmake')
-rw-r--r--cmake/modules/FindNL.cmake144
1 files changed, 144 insertions, 0 deletions
diff --git a/cmake/modules/FindNL.cmake b/cmake/modules/FindNL.cmake
new file mode 100644
index 0000000..d4f003e
--- /dev/null
+++ b/cmake/modules/FindNL.cmake
@@ -0,0 +1,144 @@
+#
+# Find the native netlink includes and library
+#
+# If they exist, differentiate between versions 1, 2 and 3.
+# Version 1 does not have netlink/version.h
+# Version 2 started separating libraries (libnl{,-genl,-route}).
+# Version 3 (>= 3.2) started appending the major version number as suffix to
+# library names (libnl-3)
+#
+# NL_INCLUDE_DIRS - where to find libnl.h, etc.
+# NL_LIBRARIES - List of libraries when using libnl.
+# NL_FOUND - True if libnl found.
+
+if(NL_LIBRARIES AND NL_INCLUDE_DIRS)
+ # in cache already
+ SET(NL_FOUND TRUE)
+else()
+ SET( SEARCHPATHS
+ /opt/local
+ /sw
+ /usr
+ /usr/local
+ )
+
+ find_package(PkgConfig)
+ pkg_check_modules(NL3 libnl-3.0 libnl-genl-3.0 libnl-route-3.0)
+ if(NOT NL3_FOUND)
+ pkg_search_module(NL2 libnl-2.0)
+ endif()
+
+ # Try to find NL 2.0, 3.0 or 3.1 (/usr/include/netlink/version.h) or
+ # NL >= 3.2 (/usr/include/libnl3/netlink/version.h)
+ find_path(NL3_INCLUDE_DIR
+ PATH_SUFFIXES
+ include/libnl3
+ include
+ NAMES
+ netlink/version.h
+ HINTS
+ "${NL3_libnl-3.0_INCLUDEDIR}"
+ "${NL2_INCLUDEDIR}"
+ PATHS
+ $(SEARCHPATHS)
+ )
+ # NL version >= 2
+ if(NL3_INCLUDE_DIR)
+ find_library(NL3_LIBRARY
+ NAMES
+ nl-3 nl
+ PATH_SUFFIXES
+ lib64 lib
+ HINTS
+ "${NL3_libnl-3.0_LIBDIR}"
+ "${NL2_LIBDIR}"
+ PATHS
+ $(SEARCHPATHS)
+ )
+ find_library(NLGENL_LIBRARY
+ NAMES
+ nl-genl-3 nl-genl
+ PATH_SUFFIXES
+ lib64 lib
+ HINTS
+ "${NL3_libnl-genl-3.0_LIBDIR}"
+ "${NL2_LIBDIR}"
+ PATHS
+ $(SEARCHPATHS)
+ )
+ find_library(NLROUTE_LIBRARY
+ NAMES
+ nl-route-3 nl-route
+ PATH_SUFFIXES
+ lib64 lib
+ HINTS
+ "${NL3_libnl-route-3.0_LIBDIR}"
+ "${NL2_LIBDIR}"
+ PATHS
+ $(SEARCHPATHS)
+ )
+ #
+ # If we don't have all of those libraries, we can't use libnl.
+ #
+ if(NL3_LIBRARY AND NLGENL_LIBRARY AND NLROUTE_LIBRARY)
+ set(NL_LIBRARY ${NL3_LIBRARY})
+ if(NL3_INCLUDE_DIR)
+ # NL2 and NL3 are similar and just affect how the version is reported in
+ # the --version output. In cast of doubt, assume NL3 since a library
+ # without version number could be any of 2.0, 3.0 or 3.1.
+ if(NOT NL3_FOUND AND NL2_FOUND)
+ set(HAVE_LIBNL2 1)
+ else()
+ set(HAVE_LIBNL3 1)
+ endif()
+ endif()
+ endif()
+ set(NL_INCLUDE_DIR ${NL3_INCLUDE_DIR})
+ endif()
+
+ # libnl-2 and libnl-3 not found, try NL version 1
+ if(NOT (NL_LIBRARY AND NL_INCLUDE_DIR))
+ pkg_search_module(NL1 libnl-1)
+ find_path(NL1_INCLUDE_DIR
+ NAMES
+ netlink/netlink.h
+ HINTS
+ "${NL1_INCLUDEDIR}"
+ PATHS
+ $(SEARCHPATHS)
+ )
+ find_library(NL1_LIBRARY
+ NAMES
+ nl
+ PATH_SUFFIXES
+ lib64 lib
+ HINTS
+ "${NL1_LIBDIR}"
+ PATHS
+ $(SEARCHPATHS)
+ )
+ set(NL_LIBRARY ${NL1_LIBRARY})
+ set(NL_INCLUDE_DIR ${NL1_INCLUDE_DIR})
+ if(NL1_LIBRARY AND NL1_INCLUDE_DIR)
+ set(HAVE_LIBNL1 1)
+ endif()
+ endif()
+endif()
+# MESSAGE(STATUS "LIB Found: ${NL_LIBRARY}, Suffix: ${NLSUFFIX}\n 1:${HAVE_LIBNL1}, 2:${HAVE_LIBNL2}, 3:${HAVE_LIBNL3}.")
+
+# handle the QUIETLY and REQUIRED arguments and set NL_FOUND to TRUE if
+# all listed variables are TRUE
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(NL DEFAULT_MSG NL_LIBRARY NL_INCLUDE_DIR)
+
+IF(NL_FOUND)
+ set(NL_LIBRARIES ${NLGENL_LIBRARY} ${NLROUTE_LIBRARY} ${NL_LIBRARY})
+ set(NL_INCLUDE_DIRS ${NL_INCLUDE_DIR})
+ set(HAVE_LIBNL 1)
+else()
+ set(NL_LIBRARIES )
+ set(NL_INCLUDE_DIRS)
+endif()
+
+MARK_AS_ADVANCED( NL_LIBRARIES NL_INCLUDE_DIRS )
+