Skip to content

Commit 0e98534

Browse files
Dan Crosspkoning2
authored andcommitted
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`.
1 parent a095973 commit 0e98534

3 files changed

Lines changed: 35 additions & 14 deletions

File tree

cmake/FindPCAP.cmake

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,20 @@ find_path(PCAP_INCLUDE_DIR
3232
# set(LIB_PATH_SUFFIXES x86)
3333
# endif ()
3434

35-
# find_library(PCAP_LIBRARY
36-
# NAMES
37-
# pcap pcap_static libpcap libpcap_static
38-
# HINTS
39-
# ENV PCAP_DIR
40-
# PATH_SUFFIXES
41-
# ${LIB_PATH_SUFFIXES}
42-
# PATHS
43-
# ${PCAP_PATH}
44-
# )
45-
# ## message(STATUS "LIB_PATH_SUFFIXES ${LIB_PATH_SUFFIXES}")
46-
# ## message(STATUS "PCAP_LIBRARY is ${PCAP_LIBRARY}")
35+
if (NEED_PCAP_LIBRARY)
36+
find_library(PCAP_LIBRARY
37+
NAMES
38+
pcap pcap_static libpcap libpcap_static
39+
HINTS
40+
ENV PCAP_DIR
41+
PATH_SUFFIXES
42+
${LIB_PATH_SUFFIXES}
43+
PATHS
44+
${PCAP_PATH}
45+
)
46+
message(STATUS "LIB_PATH_SUFFIXES ${LIB_PATH_SUFFIXES}")
47+
message(STATUS "PCAP_LIBRARY is ${PCAP_LIBRARY}")
48+
endif()
4749

4850
# if (WIN32 AND PCAP_LIBRARY)
4951
# ## Only worry about the packet library on Windows.
@@ -62,15 +64,25 @@ find_path(PCAP_INCLUDE_DIR
6264
# endif (WIN32 AND PCAP_LIBRARY)
6365
# ## message(STATUS "PACKET_LIBRARY is ${PACKET_LIBRARY}")
6466

65-
# set(PCAP_LIBRARIES ${PCAP_LIBRARY} ${PACKET_LIBRARY})
67+
if (NEED_PCAP_LIBRARY)
68+
set(PCAP_LIBRARIES ${PCAP_LIBRARY} ${PACKET_LIBRARY})
69+
endif()
6670
set(PCAP_INCLUDE_DIRS ${PCAP_INCLUDE_DIR})
6771
unset(PCAP_LIBRARY)
6872
unset(PCAP_INCLUDE_DIR)
6973

7074
include(FindPackageHandleStandardArgs)
75+
if (NEED_PCAP_LIBRARY)
76+
find_package_handle_standard_args(
77+
PCAP
78+
REQUIRED_VARS
79+
PCAP_LIBRARIES
80+
PCAP_INCLUDE_DIRS
81+
)
82+
else()
7183
find_package_handle_standard_args(
7284
PCAP
7385
REQUIRED_VARS
74-
## PCAP_LIBRARIES
7586
PCAP_INCLUDE_DIRS
7687
)
88+
endif()

cmake/dep-link.cmake

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,10 @@ if (WITH_NETWORK)
311311
endforeach()
312312

313313
target_include_directories(simh_network INTERFACE "${PCAP_INCLUDE_DIRS}")
314+
if (NEED_PCAP_LIBRARY)
315+
target_link_directories(simh_network INTERFACE "${PCAP_LIBRARY_DIRS}")
316+
target_link_libraries(simh_network INTERFACE "${PCAP_LIBRARIES}")
317+
endif ()
314318
target_compile_definitions(simh_network INTERFACE HAVE_PCAP_NETWORK)
315319
endif ()
316320
endif ()

cmake/platform-quirks.cmake

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,3 +264,8 @@ if (CMAKE_HOST_APPLE)
264264
set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64")
265265
endif ()
266266
endif()
267+
268+
set(NEED_PCAP_LIBRARY FALSE)
269+
if (${CMAKE_HOST_SYSTEM_NAME} MATCHES "FreeBSD")
270+
set(NEED_PCAP_LIBRARY TRUE)
271+
endif()

0 commit comments

Comments
 (0)