From 0c216561500e3279c806ee72c25ca47c3abee36c Mon Sep 17 00:00:00 2001 From: Guy Harris Date: Mon, 22 Jan 2018 02:34:31 -0800 Subject: Configure for ether_ntohost() as libpcap does it for ether_hostton(). Check for the same header files that declare it, and handle the results of those checks in a similar fashion. --- configure.ac | 180 ++++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 122 insertions(+), 58 deletions(-) (limited to 'configure.ac') diff --git a/configure.ac b/configure.ac index d47b2fdc..bc74568a 100644 --- a/configure.ac +++ b/configure.ac @@ -434,11 +434,12 @@ AC_LBL_LIBPCAP(V_PCAPDEP, V_INCLS) # # You are in a twisty little maze of UN*Xes, all different. # Some might not have ether_ntohost(). -# Some might have it, but not declare it in any header file. -# Some might have it, but declare it in . -# Some might have it, but declare it in -# (And some might have it but document it as something declared in -# , although appears to work.) +# Some might have it and declare it in . +# Some might have it and declare it in +# Some might have it and declare it in . +# Some might have it and declare it in . +# Some might have it and declare it in . +# Some might have it and not declare it in any header file. # # Before you is a C compiler. # @@ -470,33 +471,41 @@ AC_CHECK_FUNCS(ether_ntohost, [ if test "$ac_cv_func_ether_ntohost" = yes -a \ "$ac_cv_buggy_ether_ntohost" = "no"; then # - # OK, we have ether_ntohost(). Do we have ? + # OK, we have ether_ntohost(). Is it declared in ? # - AC_CHECK_HEADERS(netinet/if_ether.h, , , [ -#include -#include -#include -struct mbuf; -struct rtentry; -#include ]) - if test "$ac_cv_header_netinet_if_ether_h" = yes; then + # This test fails if we don't have or if we do + # but it doesn't declare ether_ntohost(). + # + AC_CHECK_DECL(ether_ntohost, + [ + AC_DEFINE(NET_ETHERNET_H_DECLARES_ETHER_NTOHOST,, + [Define to 1 if net/ethernet.h declares `ether_ntohost']) + ],, + [ +#include + ]) + # + # Did that succeed? + # + if test "$ac_cv_have_decl_ether_ntohost" != yes; then # - # Yes. Does it declare ether_ntohost()? + # No, how about , as on Linux? # + # This test fails if we don't have + # or if we do but it doesn't declare ether_ntohost(). + # + # Unset ac_cv_have_decl_ether_ntohost so we don't + # treat the previous failure as a cached value and + # suppress the next test. + # + unset ac_cv_have_decl_ether_ntohost AC_CHECK_DECL(ether_ntohost, [ - AC_DEFINE(NETINET_IF_ETHER_H_DECLARES_ETHER_NTOHOST,, - [Define to 1 if netinet/if_ether.h declares `ether_ntohost']) + AC_DEFINE(NETINET_ETHER_H_DECLARES_ETHER_NTOHOST,, + [Define to 1 if netinet/ether.h declares `ether_ntohost']) ],, [ -#include -#include -#include -#include -struct mbuf; -struct rtentry; -#include -#include +#include ]) fi # @@ -504,53 +513,108 @@ struct rtentry; # if test "$ac_cv_have_decl_ether_ntohost" != yes; then # - # No, how about , as on Linux? + # No, how about , as on Solaris 10 + # and later? # - AC_CHECK_HEADERS(netinet/ether.h) - if test "$ac_cv_header_netinet_ether_h" = yes; then - # - # We have it - does it declare ether_ntohost()? - # Unset ac_cv_have_decl_ether_ntohost so we don't - # treat the previous failure as a cached value and - # suppress the next test. - # - unset ac_cv_have_decl_ether_ntohost - AC_CHECK_DECL(ether_ntohost, - [ - AC_DEFINE(NETINET_ETHER_H_DECLARES_ETHER_NTOHOST,, - [Define to 1 if netinet/ether.h declares `ether_ntohost']) - ],, - [ -#include - ]) - fi + # This test fails if we don't have + # or if we do but it doesn't declare ether_ntohost(). + # + # Unset ac_cv_have_decl_ether_ntohost so we don't + # treat the previous failure as a cached value and + # suppress the next test. + # + unset ac_cv_have_decl_ether_ntohost + AC_CHECK_DECL(ether_ntohost, + [ + AC_DEFINE(SYS_ETHERNET_H_DECLARES_ETHER_NTOHOST,, + [Define to 1 if sys/ethernet.h declares `ether_ntohost']) + ],, + [ +#include + ]) fi # - # Is ether_ntohost() declared? + # Did that succeed? # if test "$ac_cv_have_decl_ether_ntohost" != yes; then # - # No, we'll have to declare it ourselves. - # Do we have "struct ether_addr"? + # No, how about , as in AIX? # - AC_CHECK_TYPES(struct ether_addr,,, + # This test fails if we don't have + # (if we have ether_ntohost(), we should have + # networking, and if we have networking, we should + # have ) or if we do but it doesn't + # declare ether_ntohost(). + # + # Unset ac_cv_have_decl_ether_ntohost so we don't + # treat the previous failure as a cached value and + # suppress the next test. + # + unset ac_cv_have_decl_ether_ntohost + AC_CHECK_DECL(ether_ntohost, + [ + AC_DEFINE(ARPA_INET_H_DECLARES_ETHER_NTOHOST,, + [Define to 1 if arpa/inet.h declares `ether_ntohost']) + ],, + [ +#include + ]) + fi + # + # Did that succeed? + # + if test "$ac_cv_have_decl_ether_ntohost" != yes; then + # + # No, how about ? + # On some platforms, it requires and + # , and we always include it with + # both of them, so test it with both of them. + # + # This test fails if we don't have + # and the headers we include before it, or if we do but + # doesn't declare ether_hostton(). + # + # Unset ac_cv_have_decl_ether_ntohost so we don't + # treat the previous failure as a cached value and + # suppress the next test. + # + unset ac_cv_have_decl_ether_ntohost + AC_CHECK_DECL(ether_ntohost, + [ + AC_DEFINE(NETINET_IF_ETHER_H_DECLARES_ETHER_NTOHOST,, + [Define to 1 if netinet/if_ether.h declares `ether_ntohost']) + ],, [ #include #include -#include -#include -struct mbuf; -struct rtentry; #include +#include #include ]) - AC_DEFINE(HAVE_DECL_ETHER_NTOHOST, 0, - [Define to 1 if you have the declaration of `ether_ntohost', and to 0 if you -don't.]) - else + fi + # + # After all that, is ether_ntohost() declared? + # + if test "$ac_cv_have_decl_ether_ntohost" = yes; then + # + # Yes. + # AC_DEFINE(HAVE_DECL_ETHER_NTOHOST, 1, - [Define to 1 if you have the declaration of `ether_ntohost', and to 0 if you -don't.]) + [Define to 1 if you have the declaration of `ether_ntohost']) + else + # + # No, we'll have to declare it ourselves. + # Do we have "struct ether_addr" if we include + # ? + # + AC_CHECK_TYPES(struct ether_addr,,, + [ + #include + #include + #include + #include + #include + ]) fi fi -- cgit v1.2.1