summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2018-01-30 02:41:43 -0800
committerGuy Harris <guy@alum.mit.edu>2018-01-30 02:41:43 -0800
commitace2828188ff1a0a0dd76771ba3228c85dcb8cb5 (patch)
treee41999300aba43899567503a659a521d2f6c2c6d /CMakeLists.txt
parent0f0600c901b35a26de8214f94d9d7c911f34fac6 (diff)
downloadtcpdump-ace2828188ff1a0a0dd76771ba3228c85dcb8cb5.tar.gz
Add ws2_32, not socket and nsl, if ws2_32 has gethostbyaddr().
Also, fail if we don't have gethostbyaddr(), either on Windows or on UN*X. Suppress some UN*X-only tests on Windows while we're at it.
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt64
1 files changed, 38 insertions, 26 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 12226067..8adfef2b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -139,13 +139,15 @@ check_include_file(rpc/rpc.h HAVE_RPC_RPC_H)
if(HAVE_RPC_RPC_H)
check_include_files("rpc/rpc.h;rpc/rpcent.h" HAVE_RPC_RPCENT_H)
endif(HAVE_RPC_RPC_H)
-check_include_files("sys/types.h;sys/socket.h;net/if.h;net/pfvar.h" HAVE_NET_PFVAR_H)
-if(HAVE_NET_PFVAR_H)
- check_include_files("sys/types.h;sys/socket.h;net/if.h;net/pfvar.h;net/if_pflog.h" HAVE_NET_IF_PFLOG_H)
- if(HAVE_NET_IF_PFLOG_H)
- set(LOCALSRC print-pflog.c ${LOCALSRC})
- endif(HAVE_NET_IF_PFLOG_H)
-endif(HAVE_NET_PFVAR_H)
+if(NOT WIN32)
+ check_include_files("sys/types.h;sys/socket.h;net/if.h;net/pfvar.h" HAVE_NET_PFVAR_H)
+ if(HAVE_NET_PFVAR_H)
+ check_include_files("sys/types.h;sys/socket.h;net/if.h;net/pfvar.h;net/if_pflog.h" HAVE_NET_IF_PFLOG_H)
+ if(HAVE_NET_IF_PFLOG_H)
+ set(LOCALSRC print-pflog.c ${LOCALSRC})
+ endif(HAVE_NET_IF_PFLOG_H)
+ endif(HAVE_NET_PFVAR_H)
+endif(NOT WIN32)
#
# Functions.
@@ -161,18 +163,35 @@ check_function_exists(strsep HAVE_STRSEP)
# that's been set, it skips the test, so we need different variables.
#
set(TCPDUMP_LINK_LIBRARIES "")
-check_function_exists(gethostbyaddr STDLIBS_HAVE_GETHOSTBYADDR)
-if(NOT STDLIBS_HAVE_GETHOSTBYADDR)
- check_library_exists(socket gethostbyaddr "" LIBSOCKET_HAS_GETHOSTBYADDR)
- if(LIBSOCKET_HAS_GETHOSTBYADDR)
- set(TCPDUMP_LINK_LIBRARIES ${TCPDUMP_LINK_LIBRARIES} socket)
- else()
- check_library_exists(nsl gethostbyaddr "" LIBNSL_HAS_GETHOSTBYADDR)
- if(LIBNSL_HAS_GETHOSTBYADDR)
- set(TCPDUMP_LINK_LIBRARIES ${TCPDUMP_LINK_LIBRARIES} nsl)
- endif()
- endif()
-endif()
+if(WIN32)
+ #
+ # We need winsock2.h and ws2tcpip.h.
+ #
+ cmake_push_check_state()
+ set(CMAKE_REQUIRED_LIBRARIES ws2_32)
+ check_symbol_exists(gethostbyaddr "winsock2.h;ws2tcpip.h" LIBWS2_32_HAS_GETHOSTBYADDR)
+ cmake_pop_check_state()
+ if(LIBWS2_32_HAS_GETHOSTBYADDR)
+ set(TCPDUMP_LINK_LIBRARIES ws2_32 ${TCPDUMP_LINK_LIBRARIES})
+ else(LIBWS2_32_HAS_GETHOSTBYADDR)
+ message(FATAL_ERROR "gethostbyaddr is required, but wasn't found")
+ endif(LIBWS2_32_HAS_GETHOSTBYADDR)
+else(WIN32)
+ check_function_exists(gethostbyaddr STDLIBS_HAVE_GETHOSTBYADDR)
+ if(NOT STDLIBS_HAVE_GETHOSTBYADDR)
+ check_library_exists(socket gethostbyaddr "" LIBSOCKET_HAS_GETHOSTBYADDR)
+ if(LIBSOCKET_HAS_GETHOSTBYADDR)
+ set(TCPDUMP_LINK_LIBRARIES ${TCPDUMP_LINK_LIBRARIES} socket)
+ else(LIBSOCKET_HAS_GETHOSTBYADDR)
+ check_library_exists(nsl gethostbyaddr "" LIBNSL_HAS_GETHOSTBYADDR)
+ if(LIBNSL_HAS_GETHOSTBYADDR)
+ set(TCPDUMP_LINK_LIBRARIES ${TCPDUMP_LINK_LIBRARIES} nsl)
+ else(LIBNSL_HAS_GETHOSTBYADDR)
+ message(FATAL_ERROR "gethostbyaddr is required, but wasn't found")
+ endif(LIBNSL_HAS_GETHOSTBYADDR)
+ endif(LIBSOCKET_HAS_GETHOSTBYADDR)
+ endif(NOT STDLIBS_HAVE_GETHOSTBYADDR)
+endif(WIN32)
#
# This may require additional libraries.
@@ -228,13 +247,6 @@ check_function_exists(strftime HAVE_STRFTIME)
check_function_exists(setlinebuf HAVE_SETLINEBUF)
#
-# On Windows, we'll need the Winsock 2 library.
-#
-if(WIN32)
- set(TCPDUMP_LINK_LIBRARIES ${TCPDUMP_LINK_LIBRARIES} Ws2_32)
-endif(WIN32)
-
-#
# Some platforms may need -lnsl for getrpcbynumber.
#
cmake_push_check_state()