]> The Tcpdump Group git mirrors - tcpdump/commitdiff
Make sure we can link with libpcap.
authorGuy Harris <[email protected]>
Sun, 14 Nov 2010 20:23:40 +0000 (12:23 -0800)
committerGuy Harris <[email protected]>
Sun, 14 Nov 2010 20:24:27 +0000 (12:24 -0800)
After finding libpcap and getting a list of other flags needed when
linking, we check for "pcap_loop()", to make sure we found a working
libpcap and have all the right other libraries with which dnl to link.
(Otherwise, for example, the check for pcap_list_datalinks() will fail,
not because the routines are missing from the library, but because we
aren't linking properly with libpcap, and that will cause confusing
errors at build time.)

aclocal.m4
configure

index 40b586648d5fdf93da251a56b1ec67775293b54d..1c3affab8ee74e0fbd25f5190e34bb810487be99 100644 (file)
@@ -417,6 +417,21 @@ AC_DEFUN(AC_LBL_LIBPCAP,
        esac
     fi
 
+    dnl
+    dnl Check for "pcap_loop()", to make sure we found a working
+    dnl libpcap and have all the right other libraries with which
+    dnl to link.  (Otherwise, the checks below will fail, not
+    dnl because the routines are missing from the library, but
+    dnl because we aren't linking properly with libpcap, and
+    dnl that will cause confusing errors at build time.)
+    dnl
+    AC_CHECK_FUNC(pcap_loop,,
+       [
+           AC_MSG_ERROR(
+[Report this to [email protected], and include the
+config.log file in your report])
+       ])
+
     dnl
     dnl Check for "pcap_list_datalinks()", "pcap_set_datalink()",
     dnl and "pcap_datalink_name_to_val()", and use substitute versions
index ff3fa692b4035aef1b1f8f09e9da3eb6ed8183e4..92d67a0847d0001ab1a61b228d9cb665a189c092 100755 (executable)
--- a/configure
+++ b/configure
@@ -9700,6 +9700,100 @@ echo "${ECHO_T}yes" >&6; }
        esac
     fi
 
+                                    { echo "$as_me:$LINENO: checking for pcap_loop" >&5
+echo $ECHO_N "checking for pcap_loop... $ECHO_C" >&6; }
+if test "${ac_cv_func_pcap_loop+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define pcap_loop to an innocuous variant, in case <limits.h> declares pcap_loop.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define pcap_loop innocuous_pcap_loop
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char pcap_loop (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef pcap_loop
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pcap_loop ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_pcap_loop || defined __stub___pcap_loop
+choke me
+#endif
+
+int
+main ()
+{
+return pcap_loop ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_func_pcap_loop=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_func_pcap_loop=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_pcap_loop" >&5
+echo "${ECHO_T}$ac_cv_func_pcap_loop" >&6; }
+if test $ac_cv_func_pcap_loop = yes; then
+  :
+else
+
+           { { echo "$as_me:$LINENO: error: Report this to [email protected], and include the
+config.log file in your report" >&5
+echo "$as_me: error: Report this to [email protected], and include the
+config.log file in your report" >&2;}
+   { (exit 1); exit 1; }; }
+
+fi
+
+
                         { echo "$as_me:$LINENO: checking for pcap_list_datalinks" >&5
 echo $ECHO_N "checking for pcap_list_datalinks... $ECHO_C" >&6; }
 if test "${ac_cv_func_pcap_list_datalinks+set}" = set; then