From 1e6e951798c18313101caaad53620546bc32b437 Mon Sep 17 00:00:00 2001 From: Dan Cross Date: Thu, 4 Sep 2025 15:10:53 +0000 Subject: [PATCH] FreeBSD: link against libpcap On FreeBSD, one must actually link against libpcap (or give the path to a shared object at link time). That is, it is not a header-only library on that platform. Account for this by adding a new boolean variable in `platform-quirks.cmake`: `NEED_PCAP_LIBRARY`, which defaults to false. Condition pcap library discovery and link argument modifications on that variable in `FindPCAP.cmake` and `dep-link.cmake`. --- cmake/FindPCAP.cmake | 40 ++++++++++++++++++++++++------------- cmake/dep-link.cmake | 4 ++++ cmake/platform-quirks.cmake | 5 +++++ 3 files changed, 35 insertions(+), 14 deletions(-) diff --git a/cmake/FindPCAP.cmake b/cmake/FindPCAP.cmake index c3250046f..dc6158bbb 100644 --- a/cmake/FindPCAP.cmake +++ b/cmake/FindPCAP.cmake @@ -32,18 +32,20 @@ find_path(PCAP_INCLUDE_DIR # set(LIB_PATH_SUFFIXES x86) # endif () -# find_library(PCAP_LIBRARY -# NAMES -# pcap pcap_static libpcap libpcap_static -# HINTS -# ENV PCAP_DIR -# PATH_SUFFIXES -# ${LIB_PATH_SUFFIXES} -# PATHS -# ${PCAP_PATH} -# ) -# ## message(STATUS "LIB_PATH_SUFFIXES ${LIB_PATH_SUFFIXES}") -# ## message(STATUS "PCAP_LIBRARY is ${PCAP_LIBRARY}") +if (NEED_PCAP_LIBRARY)^M + find_library(PCAP_LIBRARY^M + NAMES^M + pcap pcap_static libpcap libpcap_static^M + HINTS^M + ENV PCAP_DIR^M + PATH_SUFFIXES^M + ${LIB_PATH_SUFFIXES}^M + PATHS^M + ${PCAP_PATH}^M + )^M + message(STATUS "LIB_PATH_SUFFIXES ${LIB_PATH_SUFFIXES}")^M + message(STATUS "PCAP_LIBRARY is ${PCAP_LIBRARY}")^M +endif()^M # if (WIN32 AND PCAP_LIBRARY) # ## Only worry about the packet library on Windows. @@ -62,15 +64,25 @@ find_path(PCAP_INCLUDE_DIR # endif (WIN32 AND PCAP_LIBRARY) # ## message(STATUS "PACKET_LIBRARY is ${PACKET_LIBRARY}") -# set(PCAP_LIBRARIES ${PCAP_LIBRARY} ${PACKET_LIBRARY}) +if (NEED_PCAP_LIBRARY)^M + set(PCAP_LIBRARIES ${PCAP_LIBRARY} ${PACKET_LIBRARY})^M +endif()^M set(PCAP_INCLUDE_DIRS ${PCAP_INCLUDE_DIR}) unset(PCAP_LIBRARY) unset(PCAP_INCLUDE_DIR) include(FindPackageHandleStandardArgs) +if (NEED_PCAP_LIBRARY)^M +find_package_handle_standard_args(^M + PCAP^M + REQUIRED_VARS^M + PCAP_LIBRARIES^M + PCAP_INCLUDE_DIRS^M +)^M +else()^M find_package_handle_standard_args( PCAP REQUIRED_VARS - ## PCAP_LIBRARIES PCAP_INCLUDE_DIRS ) +endif()^M diff --git a/cmake/dep-link.cmake b/cmake/dep-link.cmake index 90c7707e0..d0c184fc0 100644 --- a/cmake/dep-link.cmake +++ b/cmake/dep-link.cmake @@ -308,6 +308,10 @@ if (WITH_NETWORK) endforeach() target_include_directories(simh_network INTERFACE "${PCAP_INCLUDE_DIRS}") + if (NEED_PCAP_LIBRARY)^M + target_link_directories(simh_network INTERFACE "${PCAP_LIBRARY_DIRS}")^M + target_link_libraries(simh_network INTERFACE "${PCAP_LIBRARIES}")^M + endif ()^M target_compile_definitions(simh_network INTERFACE HAVE_PCAP_NETWORK) endif () endif () diff --git a/cmake/platform-quirks.cmake b/cmake/platform-quirks.cmake index 2113fec9b..e6fddb3aa 100644 --- a/cmake/platform-quirks.cmake +++ b/cmake/platform-quirks.cmake @@ -264,3 +264,8 @@ if (CMAKE_HOST_APPLE) set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64") endif () endif() +^M +set(NEED_PCAP_LIBRARY FALSE)^M +if (${CMAKE_HOST_SYSTEM_NAME} MATCHES "FreeBSD")^M + set(NEED_PCAP_LIBRARY TRUE)^M +endif()^M