File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / libnet / acinclude.m4
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Mon Jul 22 11:54:41 2013 UTC (10 years, 10 months ago) by misho
Branches: libnet, MAIN
CVS tags: v1_1_6p5, v1_1_6p4, v1_1_6p0, v1_1_6, HEAD
1.1.6

    1: dnl $Id: acinclude.m4,v 1.1.1.2 2013/07/22 11:54:41 misho Exp $
    2: dnl
    3: dnl Libnet specific autoconf macros
    4: dnl Copyright (c) 1998 - 2004 Mike D. Schiffman <mike@infonexus.com>
    5: dnl All rights reserved.
    6: dnl
    7: 
    8: dnl
    9: dnl Check for the Linux /proc filesystem
   10: dnl
   11: dnl usage:      AC_LIBNET_LINUX_PROCFS
   12: dnl results:    HAVE_LINUX_PROCFS
   13: dnl
   14: AC_DEFUN([AC_LIBNET_LINUX_PROCFS],
   15:     [AC_MSG_CHECKING(for Linux proc filesystem)
   16:     AC_CACHE_VAL(ac_cv_libnet_linux_procfs,
   17:         if test "x`cat /proc/sys/kernel/ostype 2>&-`" = "xLinux" ; then
   18:             ac_cv_libnet_linux_procfs=yes
   19:         else
   20:             ac_cv_libnet_linux_procfs=no
   21:         fi)
   22:     AC_MSG_RESULT($ac_cv_libnet_linux_procfs)
   23:     if test $ac_cv_libnet_linux_procfs = yes ; then
   24:         AC_DEFINE(HAVE_LINUX_PROCFS, 1,
   25:                   [Define if you have the Linux /proc filesystem.])
   26:     fi])
   27: 
   28: dnl
   29: dnl Checks to see if this linux kernel has a working PF_PACKET
   30: dnl
   31: dnl usage:
   32: dnl
   33: dnl     AC_LIBNET_CHECK_PF_PACKET
   34: dnl
   35: dnl results:
   36: dnl
   37: dnl     HAVE_PACKET_SOCKET (DEFINED)
   38: dnl
   39: 
   40: AC_DEFUN([AC_LIBNET_CHECK_PF_PACKET],
   41: [
   42:     AC_MSG_CHECKING(for packet socket (PF_PACKET))
   43:     AC_CACHE_VAL(libnet_cv_have_packet_socket,
   44: 
   45:         [
   46:     cat > pf_packet-test.c << EOF
   47: #include <stdio.h>
   48: #include <errno.h>
   49: #include <stdlib.h>
   50: #include <netinet/in.h>
   51: #include <sys/socket.h>
   52: #include <features.h>    /* for the glibc version number */
   53: #if __GLIBC__ >= 2 && __GLIBC_MINOR >= 1
   54: #include <netpacket/packet.h>
   55: #include <net/ethernet.h>     /* the L2 protocols */
   56: #else
   57: #include <asm/types.h>
   58: #include <linux/if_packet.h>
   59: #include <linux/if_ether.h>   /* The L2 protocols */
   60: #endif
   61:  
   62: #ifndef SOL_PACKET
   63: #define SOL_PACKET 263
   64: #endif  /* SOL_PACKET */
   65:  
   66: int
   67: main(int argc, char **argv)
   68: {
   69:     int fd;
   70:  
   71:     fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
   72:     if (fd == -1)
   73:     {
   74:         if (errno == EPERM)
   75:         {
   76:             /* user's UID != 0 */
   77:             printf("probably");
   78:             exit (EXIT_FAILURE);
   79:         }
   80:         printf("no");
   81:         exit (EXIT_FAILURE);
   82:     }
   83:     printf("yes");
   84:     exit (EXIT_SUCCESS);
   85: }
   86: EOF
   87:     ${CC-cc} -o pf_packet-test $CFLAGS pf_packet-test.c >/dev/null 2>&1
   88: 
   89:     # Oopz 4.3 BSD doesn't have this.  Sorry.
   90:     if test ! -x ./pf_packet-test ; then
   91:         libnet_cv_have_packet_socket=choked
   92:     else
   93:         libnet_cv_have_packet_socket=`./pf_packet-test`;
   94:     fi
   95:     if test $libnet_cv_have_packet_socket = choked; then
   96:         AC_MSG_RESULT(test program compile choked... assuming no)
   97:     elif test $libnet_cv_have_packet_socket = yes; then
   98:         AC_MSG_RESULT(yes)
   99:     elif test $libnet_cv_have_packet_socket = probably; then
  100:         AC_MSG_RESULT(test program got EPERM... assuming yes)
  101:     elif test $libnet_cv_have_packet_socket = no; then
  102:         AC_MSG_RESULT(no)
  103:     fi
  104: 
  105:     rm -f pf_packet-test* core core.pf_packet-test
  106: 
  107:     ])
  108: 
  109:     if test $libnet_cv_have_packet_socket = yes -o $libnet_cv_have_packet_socket = probably; then
  110:         AC_DEFINE(HAVE_PACKET_SOCKET, 1,
  111:           [Define if we're running on a Linux system with PF_PACKET sockets.])
  112:     fi
  113: ])
  114: 
  115: dnl
  116: dnl Looks for a previous libnet version and attempts to determine which verion
  117: dnl it is.  Version 0.8 was the first version that actually knew internally
  118: dnl what version it was.
  119: dnl
  120: dnl usage:
  121: dnl
  122: dnl     AC_LIBNET_CHECK_LIBNET_VERSION
  123: dnl
  124: dnl results:
  125: dnl
  126: dnl
  127: dnl
  128: 
  129: AC_DEFUN([AC_LIBNET_CHECK_LIBNET_VER],
  130: [
  131:     AC_CHECK_LIB(net, libnet_build_ip, AC_MSG_CHECKING(version) \
  132: 
  133: changequote(<<, >>)dnl
  134:     if [[ ! -f $LIB_PREFIX/libnet.a ]] ; then
  135: changequote([, ])dnl
  136:         AC_MSG_RESULT($LIB_PREFIX/libnet.a doesn't exist)
  137:         AC_MSG_RESULT(previous libnet install lives elsewhere, you should probably find it)
  138:     else
  139:         __LIBNET_VERSION=`strings $LIB_PREFIX/libnet.a | grep "libnet version"\
  140:                 | cut -f3 -d" "`;\
  141:         if test -z "$__LIBNET_VERSION"; then
  142:             AC_MSG_RESULT(<0.8)
  143:         else
  144:             AC_MSG_RESULT($__LIBNET_VERSION)
  145:         fi
  146:     fi\
  147:     )
  148: ])
  149: 
  150: 
  151: dnl
  152: dnl Checks to see if this linux kernel uses ip_sum or ip_csum
  153: dnl (Pulled from queso)
  154: dnl
  155: dnl usage:
  156: dnl
  157: dnl     AC_LIBNET_CHECK_IP_CSUM
  158: dnl
  159: dnl results:
  160: dnl
  161: dnl     HAVE_STRUCT_IP_CSUM (DEFINED)
  162: dnl
  163: 
  164: AC_DEFUN([AC_LIBNET_CHECK_IP_CSUM],
  165: [
  166:     AC_MSG_CHECKING([struct ip contains ip_csum])
  167:     AC_TRY_COMPILE([
  168:         #define __BSD_SOURCE
  169:         #define _BSD_SOURCE
  170:         #include <sys/types.h>
  171:         #include <netinet/in.h>
  172:         #include <netinet/in_systm.h>
  173:         #include <netinet/ip.h>],
  174:         [
  175:             struct ip ip;
  176:             ip.ip_csum = 0;
  177:         ],
  178:         [AC_MSG_RESULT(yes);
  179:         AC_DEFINE(HAVE_STRUCT_IP_CSUM)],
  180:         [AC_MSG_RESULT(no);
  181:     ])
  182: ])
  183: 
  184: 
  185: dnl
  186: dnl Checks endianess
  187: dnl
  188: dnl usage:
  189: dnl
  190: dnl     AC_LIBNET_ENDIAN_CHECK
  191: dnl
  192: dnl results:
  193: dnl
  194: dnl     LIBNET_BIG_ENDIAN = 1   or
  195: dnl     LIBNET_LIL_ENDIAN = 1
  196: dnl
  197: 
  198: AC_DEFUN([AC_LIBNET_ENDIAN_CHECK],
  199:     [AC_C_BIGENDIAN
  200: 	if test $ac_cv_c_bigendian = yes ; then
  201:             AC_DEFINE(LIBNET_BIG_ENDIAN, 1,
  202:                 [We are running on a big-endian machine.])
  203:             ENDIANESS="LIBNET_BIG_ENDIAN"
  204:             LIBNET_CONFIG_DEFINES="$LIBNET_CONFIG_DEFINES -DLIBNET_BIG_ENDIAN"
  205:         else
  206:             AC_DEFINE(LIBNET_LIL_ENDIAN, 1, 
  207:                 [We are running on a little-endian machine.])
  208:             ENDIANESS="LIBNET_LIL_ENDIAN"
  209:             LIBNET_CONFIG_DEFINES="$LIBNET_CONFIG_DEFINES -DLIBNET_LIL_ENDIAN"
  210:         fi
  211:     ])
  212: 
  213: dnl
  214: dnl Improved version of AC_CHECK_LIB
  215: dnl
  216: dnl Thanks to John Hawkinson (jhawk@mit.edu)
  217: dnl
  218: dnl usage:
  219: dnl
  220: dnl     AC_LBL_CHECK_LIB(LIBRARY, FUNCTION [, ACTION-IF-FOUND [,
  221: dnl         ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
  222: dnl
  223: dnl results:
  224: dnl
  225: dnl     LIBS
  226: dnl
  227:  
  228: define([AC_LBL_CHECK_LIB],
  229: [AC_MSG_CHECKING([for $2 in -l$1])
  230: dnl Use a cache variable name containing both the library and function name,
  231: dnl because the test really is for library $1 defining function $2, not
  232: dnl just for library $1.  Separate tests with the same $1 and different $2's
  233: dnl may have different results.
  234: ac_lib_var=`echo $1['_']$2['_']$5 | sed 'y%./+- %__p__%'`
  235: AC_CACHE_VAL(ac_cv_lbl_lib_$ac_lib_var,
  236: [ac_save_LIBS="$LIBS"
  237: LIBS="-l$1 $5 $LIBS"
  238: AC_TRY_LINK(dnl
  239: ifelse([$2], [main], , dnl Avoid conflicting decl of main.
  240: [/* Override any gcc2 internal prototype to avoid an error.  */
  241: ]ifelse(AC_LANG, CPLUSPLUS, [#ifdef __cplusplus
  242: extern "C"
  243: #endif
  244: ])dnl
  245: [/* We use char because int might match the return type of a gcc2
  246:     builtin and then its argument prototype would still apply.  */
  247: char $2();
  248: ]),
  249:             [$2()],
  250:             eval "ac_cv_lbl_lib_$ac_lib_var=yes",
  251:             eval "ac_cv_lbl_lib_$ac_lib_var=no")
  252: LIBS="$ac_save_LIBS"
  253: ])dnl
  254: if eval "test \"`echo '$ac_cv_lbl_lib_'$ac_lib_var`\" = yes"; then
  255:   AC_MSG_RESULT(yes)
  256:   ifelse([$3], ,
  257: [changequote(, )dnl
  258:   ac_tr_lib=HAVE_LIB`echo $1 | sed -e 's/[^a-zA-Z0-9_]/_/g' \
  259:     -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
  260: changequote([, ])dnl
  261:   AC_DEFINE_UNQUOTED($ac_tr_lib)
  262:   LIBS="-l$1 $LIBS"
  263: ], [$3])
  264: else
  265:   AC_MSG_RESULT(no)
  266: ifelse([$4], , , [$4
  267: ])dnl
  268: fi
  269: ])
  270: 
  271: dnl
  272: dnl AC_LBL_LIBRARY_NET
  273: dnl
  274: dnl This test is for network applications that need socket() and
  275: dnl gethostbyname() -ish functions.  Under Solaris, those applications
  276: dnl need to link with "-lsocket -lnsl".  Under IRIX, they need to link
  277: dnl with "-lnsl" but should *not* link with "-lsocket" because
  278: dnl libsocket.a breaks a number of things (for instance:
  279: dnl gethostbyname() under IRIX 5.2, and snoop sockets under most
  280: dnl versions of IRIX).
  281: dnl
  282: dnl Unfortunately, many application developers are not aware of this,
  283: dnl and mistakenly write tests that cause -lsocket to be used under
  284: dnl IRIX.  It is also easy to write tests that cause -lnsl to be used
  285: dnl under operating systems where neither are necessary (or useful),
  286: dnl such as SunOS 4.1.4, which uses -lnsl for TLI.
  287: dnl
  288: dnl This test exists so that every application developer does not test
  289: dnl this in a different, and subtly broken fashion.
  290:  
  291: dnl It has been argued that this test should be broken up into two
  292: dnl seperate tests, one for the resolver libraries, and one for the
  293: dnl libraries necessary for using Sockets API. Unfortunately, the two
  294: dnl are carefully intertwined and allowing the autoconf user to use
  295: dnl them independantly potentially results in unfortunate ordering
  296: dnl dependancies -- as such, such component macros would have to
  297: dnl carefully use indirection and be aware if the other components were
  298: dnl executed. Since other autoconf macros do not go to this trouble,
  299: dnl and almost no applications use sockets without the resolver, this
  300: dnl complexity has not been implemented.
  301: dnl
  302: dnl The check for libresolv is in case you are attempting to link
  303: dnl statically and happen to have a libresolv.a lying around (and no
  304: dnl libnsl.a).
  305: dnl
  306: AC_DEFUN([AC_LBL_LIBRARY_NET],
  307: [
  308:     # Most operating systems have gethostbyname() in the default searched
  309:     # libraries (i.e. libc):
  310:     AC_CHECK_FUNC(gethostbyname, ,
  311:         # Some OSes (eg. Solaris) place it in libnsl:
  312:         AC_LBL_CHECK_LIB(nsl, gethostbyname, ,
  313:             # Some strange OSes (SINIX) have it in libsocket:
  314:             AC_LBL_CHECK_LIB(socket, gethostbyname, ,
  315:                 # Unfortunately libsocket sometimes depends on libnsl.
  316:                 # AC_CHECK_LIB's API is essentially broken so the
  317:                 # following ugliness is necessary:
  318:                 AC_LBL_CHECK_LIB(socket, gethostbyname,
  319:                     LIBS="-lsocket -lnsl $LIBS",
  320:                     AC_CHECK_LIB(resolv, gethostbyname),
  321:                     -lnsl))))
  322:     AC_CHECK_FUNC(socket, , AC_CHECK_LIB(socket, socket, ,
  323:         AC_LBL_CHECK_LIB(socket, socket, LIBS="-lsocket -lnsl $LIBS", ,
  324:             -lnsl)))
  325:     # DLPI needs putmsg under HPUX so test for -lstr while we're at it
  326:     AC_CHECK_LIB(str, putmsg)
  327:     ])
  328: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>