Home | History | Annotate | Download | only in tcpdump
      1 dnl Copyright (c) 1995, 1996, 1997, 1998
      2 dnl	The Regents of the University of California.  All rights reserved.
      3 dnl
      4 dnl Redistribution and use in source and binary forms, with or without
      5 dnl modification, are permitted provided that: (1) source code distributions
      6 dnl retain the above copyright notice and this paragraph in its entirety, (2)
      7 dnl distributions including binary code include the above copyright notice and
      8 dnl this paragraph in its entirety in the documentation or other materials
      9 dnl provided with the distribution, and (3) all advertising materials mentioning
     10 dnl features or use of this software display the following acknowledgement:
     11 dnl ``This product includes software developed by the University of California,
     12 dnl Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
     13 dnl the University nor the names of its contributors may be used to endorse
     14 dnl or promote products derived from this software without specific prior
     15 dnl written permission.
     16 dnl THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
     17 dnl WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
     18 dnl MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
     19 dnl
     20 dnl LBL autoconf macros
     21 dnl
     22 
     23 dnl
     24 dnl Do whatever AC_LBL_C_INIT work is necessary before using AC_PROG_CC.
     25 dnl
     26 dnl It appears that newer versions of autoconf (2.64 and later) will,
     27 dnl if you use AC_TRY_COMPILE in a macro, stick AC_PROG_CC at the
     28 dnl beginning of the macro, even if the macro itself calls AC_PROG_CC.
     29 dnl See the "Prerequisite Macros" and "Expanded Before Required" sections
     30 dnl in the Autoconf documentation.
     31 dnl
     32 dnl This causes a steaming heap of fail in our case, as we were, in
     33 dnl AC_LBL_C_INIT, doing the tests we now do in AC_LBL_C_INIT_BEFORE_CC,
     34 dnl calling AC_PROG_CC, and then doing the tests we now do in
     35 dnl AC_LBL_C_INIT.  Now, we run AC_LBL_C_INIT_BEFORE_CC, AC_PROG_CC,
     36 dnl and AC_LBL_C_INIT at the top level.
     37 dnl
     38 AC_DEFUN(AC_LBL_C_INIT_BEFORE_CC,
     39 [
     40     AC_BEFORE([$0], [AC_LBL_C_INIT])
     41     AC_BEFORE([$0], [AC_PROG_CC])
     42     AC_BEFORE([$0], [AC_LBL_FIXINCLUDES])
     43     AC_BEFORE([$0], [AC_LBL_DEVEL])
     44     AC_ARG_WITH(gcc, [  --without-gcc           don't use gcc])
     45     $1=""
     46     if test "${srcdir}" != "." ; then
     47 	    $1="-I$srcdir"
     48     fi
     49     if test "${CFLAGS+set}" = set; then
     50 	    LBL_CFLAGS="$CFLAGS"
     51     fi
     52     if test -z "$CC" ; then
     53 	    case "$host_os" in
     54 
     55 	    bsdi*)
     56 		    AC_CHECK_PROG(SHLICC2, shlicc2, yes, no)
     57 		    if test $SHLICC2 = yes ; then
     58 			    CC=shlicc2
     59 			    export CC
     60 		    fi
     61 		    ;;
     62 	    esac
     63     fi
     64     if test -z "$CC" -a "$with_gcc" = no ; then
     65 	    CC=cc
     66 	    export CC
     67     fi
     68 ])
     69 
     70 dnl
     71 dnl Determine which compiler we're using (cc or gcc)
     72 dnl If using gcc, determine the version number
     73 dnl If using cc:
     74 dnl     require that it support ansi prototypes
     75 dnl     use -O (AC_PROG_CC will use -g -O2 on gcc, so we don't need to
     76 dnl     do that ourselves for gcc)
     77 dnl     add -g flags, as appropriate
     78 dnl     explicitly specify /usr/local/include
     79 dnl
     80 dnl NOTE WELL: with newer versions of autoconf, "gcc" means any compiler
     81 dnl that defines __GNUC__, which means clang, for example, counts as "gcc".
     82 dnl
     83 dnl usage:
     84 dnl
     85 dnl	AC_LBL_C_INIT(copt, incls)
     86 dnl
     87 dnl results:
     88 dnl
     89 dnl	$1 (copt set)
     90 dnl	$2 (incls set)
     91 dnl	CC
     92 dnl	LDFLAGS
     93 dnl	LBL_CFLAGS
     94 dnl
     95 AC_DEFUN(AC_LBL_C_INIT,
     96 [
     97     AC_BEFORE([$0], [AC_LBL_FIXINCLUDES])
     98     AC_BEFORE([$0], [AC_LBL_DEVEL])
     99     AC_BEFORE([$0], [AC_LBL_SHLIBS_INIT])
    100     if test "$GCC" = yes ; then
    101 	    #
    102 	    # -Werror forces warnings to be errors.
    103 	    #
    104 	    ac_lbl_cc_force_warning_errors=-Werror
    105 
    106 	    #
    107 	    # Use -ffloat-store so that, on 32-bit x86, we don't
    108 	    # do 80-bit arithmetic with the FPU; that way we should
    109 	    # get the same results for floating-point calculations
    110 	    # on x86-32 and x86-64.
    111 	    #
    112 	    AC_LBL_CHECK_COMPILER_OPT($1, -ffloat-store)
    113     else
    114 	    $2="$$2 -I/usr/local/include"
    115 	    LDFLAGS="$LDFLAGS -L/usr/local/lib"
    116 
    117 	    case "$host_os" in
    118 
    119 	    darwin*)
    120 		    #
    121 		    # This is assumed either to be GCC or clang, both
    122 		    # of which use -Werror to force warnings to be errors.
    123 		    #
    124 		    ac_lbl_cc_force_warning_errors=-Werror
    125 		    ;;
    126 
    127 	    hpux*)
    128 		    #
    129 		    # HP C, which is what we presume we're using, doesn't
    130 		    # exit with a non-zero exit status if we hand it an
    131 		    # invalid -W flag, can't be forced to do so even with
    132 		    # +We, and doesn't handle GCC-style -W flags, so we
    133 		    # don't want to try using GCC-style -W flags.
    134 		    #
    135 		    ac_lbl_cc_dont_try_gcc_dashW=yes
    136 		    ;;
    137 
    138 	    irix*)
    139 		    #
    140 		    # MIPS C, which is what we presume we're using, doesn't
    141 		    # necessarily exit with a non-zero exit status if we
    142 		    # hand it an invalid -W flag, can't be forced to do
    143 		    # so, and doesn't handle GCC-style -W flags, so we
    144 		    # don't want to try using GCC-style -W flags.
    145 		    #
    146 		    ac_lbl_cc_dont_try_gcc_dashW=yes
    147 		    #
    148 		    # It also, apparently, defaults to "char" being
    149 		    # unsigned, unlike most other C implementations;
    150 		    # I suppose we could say "signed char" whenever
    151 		    # we want to guarantee a signed "char", but let's
    152 		    # just force signed chars.
    153 		    #
    154 		    # -xansi is normally the default, but the
    155 		    # configure script was setting it; perhaps -cckr
    156 		    # was the default in the Old Days.  (Then again,
    157 		    # that would probably be for backwards compatibility
    158 		    # in the days when ANSI C was Shiny and New, i.e.
    159 		    # 1989 and the early '90's, so maybe we can just
    160 		    # drop support for those compilers.)
    161 		    #
    162 		    # -g is equivalent to -g2, which turns off
    163 		    # optimization; we choose -g3, which generates
    164 		    # debugging information but doesn't turn off
    165 		    # optimization (even if the optimization would
    166 		    # cause inaccuracies in debugging).
    167 		    #
    168 		    $1="$$1 -xansi -signed -g3"
    169 		    ;;
    170 
    171 	    osf*)
    172 	    	    #
    173 		    # Presumed to be DEC OSF/1, Digital UNIX, or
    174 		    # Tru64 UNIX.
    175 		    #
    176 		    # The DEC C compiler, which is what we presume we're
    177 		    # using, doesn't exit with a non-zero exit status if we
    178 		    # hand it an invalid -W flag, can't be forced to do
    179 		    # so, and doesn't handle GCC-style -W flags, so we
    180 		    # don't want to try using GCC-style -W flags.
    181 		    #
    182 		    ac_lbl_cc_dont_try_gcc_dashW=yes
    183 		    #
    184 		    # -g is equivalent to -g2, which turns off
    185 		    # optimization; we choose -g3, which generates
    186 		    # debugging information but doesn't turn off
    187 		    # optimization (even if the optimization would
    188 		    # cause inaccuracies in debugging).
    189 		    #
    190 		    $1="$$1 -g3"
    191 		    ;;
    192 
    193 	    solaris*)
    194 		    #
    195 		    # Assumed to be Sun C, which requires -errwarn to force
    196 		    # warnings to be treated as errors.
    197 		    #
    198 		    ac_lbl_cc_force_warning_errors=-errwarn
    199 		    ;;
    200 
    201 	    ultrix*)
    202 		    AC_MSG_CHECKING(that Ultrix $CC hacks const in prototypes)
    203 		    AC_CACHE_VAL(ac_cv_lbl_cc_const_proto,
    204 			AC_TRY_COMPILE(
    205 			    [#include <sys/types.h>],
    206 			    [struct a { int b; };
    207 			    void c(const struct a *)],
    208 			    ac_cv_lbl_cc_const_proto=yes,
    209 			    ac_cv_lbl_cc_const_proto=no))
    210 		    AC_MSG_RESULT($ac_cv_lbl_cc_const_proto)
    211 		    if test $ac_cv_lbl_cc_const_proto = no ; then
    212 			    AC_DEFINE(const,[],
    213 			        [to handle Ultrix compilers that don't support const in prototypes])
    214 		    fi
    215 		    ;;
    216 	    esac
    217 	    $1="$$1 -O"
    218     fi
    219 ])
    220 
    221 dnl
    222 dnl Check whether, if you pass an unknown warning option to the
    223 dnl compiler, it fails or just prints a warning message and succeeds.
    224 dnl Set ac_lbl_unknown_warning_option_error to the appropriate flag
    225 dnl to force an error if it would otherwise just print a warning message
    226 dnl and succeed.
    227 dnl
    228 AC_DEFUN(AC_LBL_CHECK_UNKNOWN_WARNING_OPTION_ERROR,
    229     [
    230 	AC_MSG_CHECKING([whether the compiler fails when given an unknown warning option])
    231 	save_CFLAGS="$CFLAGS"
    232 	CFLAGS="$CFLAGS -Wxyzzy-this-will-never-succeed-xyzzy"
    233 	AC_TRY_COMPILE(
    234 	    [],
    235 	    [return 0],
    236 	    [
    237 		AC_MSG_RESULT([no])
    238 		#
    239 		# We're assuming this is clang, where
    240 		# -Werror=unknown-warning-option is the appropriate
    241 		# option to force the compiler to fail.
    242 		#
    243 		ac_lbl_unknown_warning_option_error="-Werror=unknown-warning-option"
    244 	    ],
    245 	    [
    246 		AC_MSG_RESULT([yes])
    247 	    ])
    248 	CFLAGS="$save_CFLAGS"
    249     ])
    250 
    251 dnl
    252 dnl Check whether the compiler option specified as the second argument
    253 dnl is supported by the compiler and, if so, add it to the macro
    254 dnl specified as the first argument
    255 dnl
    256 AC_DEFUN(AC_LBL_CHECK_COMPILER_OPT,
    257     [
    258 	AC_MSG_CHECKING([whether the compiler supports the $2 option])
    259 	save_CFLAGS="$CFLAGS"
    260 	if expr "x$2" : "x-W.*" >/dev/null
    261 	then
    262 	    CFLAGS="$CFLAGS $ac_lbl_unknown_warning_option_error $2"
    263 	elif expr "x$2" : "x-f.*" >/dev/null
    264 	then
    265 	    CFLAGS="$CFLAGS -Werror $2"
    266 	elif expr "x$2" : "x-m.*" >/dev/null
    267 	then
    268 	    CFLAGS="$CFLAGS -Werror $2"
    269 	else
    270 	    CFLAGS="$CFLAGS $2"
    271 	fi
    272 	AC_TRY_COMPILE(
    273 	    [],
    274 	    [return 0],
    275 	    [
    276 		AC_MSG_RESULT([yes])
    277 		CFLAGS="$save_CFLAGS"
    278 		$1="$$1 $2"
    279 	    ],
    280 	    [
    281 		AC_MSG_RESULT([no])
    282 		CFLAGS="$save_CFLAGS"
    283 	    ])
    284     ])
    285 
    286 dnl
    287 dnl Check whether the compiler supports an option to generate
    288 dnl Makefile-style dependency lines
    289 dnl
    290 dnl GCC uses -M for this.  Non-GCC compilers that support this
    291 dnl use a variety of flags, including but not limited to -M.
    292 dnl
    293 dnl We test whether the flag in question is supported, as older
    294 dnl versions of compilers might not support it.
    295 dnl
    296 dnl We don't try all the possible flags, just in case some flag means
    297 dnl "generate dependencies" on one compiler but means something else
    298 dnl on another compiler.
    299 dnl
    300 dnl Most compilers that support this send the output to the standard
    301 dnl output by default.  IBM's XLC, however, supports -M but sends
    302 dnl the output to {sourcefile-basename}.u, and AIX has no /dev/stdout
    303 dnl to work around that, so we don't bother with XLC.
    304 dnl
    305 AC_DEFUN(AC_LBL_CHECK_DEPENDENCY_GENERATION_OPT,
    306     [
    307 	AC_MSG_CHECKING([whether the compiler supports generating dependencies])
    308 	if test "$GCC" = yes ; then
    309 		#
    310 		# GCC, or a compiler deemed to be GCC by AC_PROG_CC (even
    311 		# though it's not); we assume that, in this case, the flag
    312 		# would be -M.
    313 		#
    314 		ac_lbl_dependency_flag="-M"
    315 	else
    316 		#
    317 		# Not GCC or a compiler deemed to be GCC; what platform is
    318 		# this?  (We're assuming that if the compiler isn't GCC
    319 		# it's the compiler from the vendor of the OS; that won't
    320 		# necessarily be true for x86 platforms, where it might be
    321 		# the Intel C compiler.)
    322 		#
    323 		case "$host_os" in
    324 
    325 		irix*|osf*|darwin*)
    326 			#
    327 			# MIPS C for IRIX, DEC C, and clang all use -M.
    328 			#
    329 			ac_lbl_dependency_flag="-M"
    330 			;;
    331 
    332 		solaris*)
    333 			#
    334 			# Sun C uses -xM.
    335 			#
    336 			ac_lbl_dependency_flag="-xM"
    337 			;;
    338 
    339 		hpux*)
    340 			#
    341 			# HP's older C compilers don't support this.
    342 			# HP's newer C compilers support this with
    343 			# either +M or +Make; the older compilers
    344 			# interpret +M as something completely
    345 			# different, so we use +Make so we don't
    346 			# think it works with the older compilers.
    347 			#
    348 			ac_lbl_dependency_flag="+Make"
    349 			;;
    350 
    351 		*)
    352 			#
    353 			# Not one of the above; assume no support for
    354 			# generating dependencies.
    355 			#
    356 			ac_lbl_dependency_flag=""
    357 			;;
    358 		esac
    359 	fi
    360 
    361 	#
    362 	# Is ac_lbl_dependency_flag defined and, if so, does the compiler
    363 	# complain about it?
    364 	#
    365 	# Note: clang doesn't seem to exit with an error status when handed
    366 	# an unknown non-warning error, even if you pass it
    367 	# -Werror=unknown-warning-option.  However, it always supports
    368 	# -M, so the fact that this test always succeeds with clang
    369 	# isn't an issue.
    370 	#
    371 	if test ! -z "$ac_lbl_dependency_flag"; then
    372 		AC_LANG_CONFTEST(
    373 		    [AC_LANG_SOURCE([[int main(void) { return 0; }]])])
    374 		echo "$CC" $ac_lbl_dependency_flag conftest.c >&5
    375 		if "$CC" $ac_lbl_dependency_flag conftest.c >/dev/null 2>&1; then
    376 			AC_MSG_RESULT([yes, with $ac_lbl_dependency_flag])
    377 			DEPENDENCY_CFLAG="$ac_lbl_dependency_flag"
    378 			MKDEP='${srcdir}/mkdep'
    379 		else
    380 			AC_MSG_RESULT([no])
    381 			#
    382 			# We can't run mkdep, so have "make depend" do
    383 			# nothing.
    384 			#
    385 			MKDEP=:
    386 		fi
    387 		rm -rf conftest*
    388 	else
    389 		AC_MSG_RESULT([no])
    390 		#
    391 		# We can't run mkdep, so have "make depend" do
    392 		# nothing.
    393 		#
    394 		MKDEP=:
    395 	fi
    396 	AC_SUBST(DEPENDENCY_CFLAG)
    397 	AC_SUBST(MKDEP)
    398     ])
    399 
    400 #
    401 # Try compiling a sample of the type of code that appears in
    402 # gencode.c with "inline", "__inline__", and "__inline".
    403 #
    404 # Autoconf's AC_C_INLINE, at least in autoconf 2.13, isn't good enough,
    405 # as it just tests whether a function returning "int" can be inlined;
    406 # at least some versions of HP's C compiler can inline that, but can't
    407 # inline a function that returns a struct pointer.
    408 #
    409 # Make sure we use the V_CCOPT flags, because some of those might
    410 # disable inlining.
    411 #
    412 AC_DEFUN(AC_LBL_C_INLINE,
    413     [AC_MSG_CHECKING(for inline)
    414     save_CFLAGS="$CFLAGS"
    415     CFLAGS="$V_CCOPT"
    416     AC_CACHE_VAL(ac_cv_lbl_inline, [
    417 	ac_cv_lbl_inline=""
    418 	ac_lbl_cc_inline=no
    419 	for ac_lbl_inline in inline __inline__ __inline
    420 	do
    421 	    AC_TRY_COMPILE(
    422 		[#define inline $ac_lbl_inline
    423 		static inline struct iltest *foo(void);
    424 		struct iltest {
    425 		    int iltest1;
    426 		    int iltest2;
    427 		};
    428 
    429 		static inline struct iltest *
    430 		foo()
    431 		{
    432 		    static struct iltest xxx;
    433 
    434 		    return &xxx;
    435 		}],,ac_lbl_cc_inline=yes,)
    436 	    if test "$ac_lbl_cc_inline" = yes ; then
    437 		break;
    438 	    fi
    439 	done
    440 	if test "$ac_lbl_cc_inline" = yes ; then
    441 	    ac_cv_lbl_inline=$ac_lbl_inline
    442 	fi])
    443     CFLAGS="$save_CFLAGS"
    444     if test ! -z "$ac_cv_lbl_inline" ; then
    445 	AC_MSG_RESULT($ac_cv_lbl_inline)
    446     else
    447 	AC_MSG_RESULT(no)
    448     fi
    449     AC_DEFINE_UNQUOTED(inline, $ac_cv_lbl_inline, [Define as token for inline if inlining supported])])
    450 
    451 dnl
    452 dnl Use pfopen.c if available and pfopen() not in standard libraries
    453 dnl Require libpcap
    454 dnl Look for libpcap in ..
    455 dnl Use the installed libpcap if there is no local version
    456 dnl
    457 dnl usage:
    458 dnl
    459 dnl	AC_LBL_LIBPCAP(pcapdep, incls)
    460 dnl
    461 dnl results:
    462 dnl
    463 dnl	$1 (pcapdep set)
    464 dnl	$2 (incls appended)
    465 dnl	LIBS
    466 dnl	LBL_LIBS
    467 dnl
    468 AC_DEFUN(AC_LBL_LIBPCAP,
    469     [AC_REQUIRE([AC_LBL_LIBRARY_NET])
    470     dnl
    471     dnl save a copy before locating libpcap.a
    472     dnl
    473     LBL_LIBS="$LIBS"
    474     pfopen=/usr/examples/packetfilter/pfopen.c
    475     if test -f $pfopen ; then
    476 	    AC_CHECK_FUNCS(pfopen)
    477 	    if test $ac_cv_func_pfopen = "no" ; then
    478 		    AC_MSG_RESULT(Using $pfopen)
    479 		    LIBS="$LIBS $pfopen"
    480 	    fi
    481     fi
    482 	libpcap=FAIL
    483 	AC_MSG_CHECKING(for local pcap library)
    484 	AC_ARG_WITH([system-libpcap],
    485 		[AS_HELP_STRING([--with-system-libpcap], [don't use local pcap library])])
    486 	if test "x$with_system_libpcap" != xyes ; then
    487 		lastdir=FAIL
    488     	places=`ls $srcdir/.. | sed -e 's,/$,,' -e "s,^,$srcdir/../," | \
    489 		egrep '/libpcap-[[0-9]]+\.[[0-9]]+(\.[[0-9]]*)?([[ab]][[0-9]]*|-PRE-GIT)?$'`
    490     	places2=`ls .. | sed -e 's,/$,,' -e "s,^,../," | \
    491 		egrep '/libpcap-[[0-9]]+\.[[0-9]]+(\.[[0-9]]*)?([[ab]][[0-9]]*|-PRE-GIT)?$'`
    492     	for dir in $places $srcdir/../libpcap ../libpcap $srcdir/libpcap $places2 ; do
    493 	    	basedir=`echo $dir | sed -e 's/[[ab]][[0-9]]*$//' | \
    494 	        	sed -e 's/-PRE-GIT$//' `
    495 	    	if test $lastdir = $basedir ; then
    496 		    	dnl skip alphas when an actual release is present
    497 		    	continue;
    498 	    	fi
    499 	    	lastdir=$dir
    500 	    	if test -r $dir/libpcap.a ; then
    501 		    	libpcap=$dir/libpcap.a
    502 		    	d=$dir
    503 		    	dnl continue and select the last one that exists
    504 	    	fi
    505 		done
    506 	fi
    507     if test $libpcap = FAIL ; then
    508 	    AC_MSG_RESULT(not found)
    509 
    510 	    #
    511 	    # Look for pcap-config.
    512 	    #
    513 	    AC_PATH_TOOL(PCAP_CONFIG, pcap-config)
    514 	    if test -n "$PCAP_CONFIG" ; then
    515 		#
    516 		# Found - use it to get the include flags for
    517 		# libpcap and the flags to link with libpcap.
    518 		#
    519 		# Please read section 11.6 "Shell Substitutions"
    520 		# in the autoconf manual before doing anything
    521 		# to this that involves quoting.  Especially note
    522 		# the statement "There is just no portable way to use
    523 		# double-quoted strings inside double-quoted back-quoted
    524 		# expressions (pfew!)."
    525 		#
    526 		cflags=`"$PCAP_CONFIG" --cflags`
    527 		$2="$cflags $$2"
    528 		libpcap=`"$PCAP_CONFIG" --libs`
    529 	    else
    530 		#
    531 		# Not found; look for pcap.
    532 		#
    533 		AC_CHECK_LIB(pcap, main, libpcap="-lpcap")
    534 		if test $libpcap = FAIL ; then
    535 		    AC_MSG_ERROR(see the INSTALL doc for more info)
    536 		fi
    537 		dnl
    538 		dnl Some versions of Red Hat Linux put "pcap.h" in
    539 		dnl "/usr/include/pcap"; had the LBL folks done so,
    540 		dnl that would have been a good idea, but for
    541 		dnl the Red Hat folks to do so just breaks source
    542 		dnl compatibility with other systems.
    543 		dnl
    544 		dnl We work around this by assuming that, as we didn't
    545 		dnl find a local libpcap, libpcap is in /usr/lib or
    546 		dnl /usr/local/lib and that the corresponding header
    547 		dnl file is under one of those directories; if we don't
    548 		dnl find it in either of those directories, we check to
    549 		dnl see if it's in a "pcap" subdirectory of them and,
    550 		dnl if so, add that subdirectory to the "-I" list.
    551 		dnl
    552 		dnl (We now also put pcap.h in /usr/include/pcap, but we
    553 		dnl leave behind a /usr/include/pcap.h that includes it,
    554 		dnl so you can still just include <pcap.h>.)
    555 		dnl
    556 		AC_MSG_CHECKING(for extraneous pcap header directories)
    557 		if test \( ! -r /usr/local/include/pcap.h \) -a \
    558 			\( ! -r /usr/include/pcap.h \); then
    559 		    if test -r /usr/local/include/pcap/pcap.h; then
    560 			d="/usr/local/include/pcap"
    561 		    elif test -r /usr/include/pcap/pcap.h; then
    562 			d="/usr/include/pcap"
    563 		    fi
    564 		fi
    565 		if test -z "$d" ; then
    566 		    AC_MSG_RESULT(not found)
    567 		else
    568 		    $2="-I$d $$2"
    569 		    AC_MSG_RESULT(found -- -I$d added)
    570 		fi
    571 	    fi
    572     else
    573 	    $1=$libpcap
    574 	    places=`ls $srcdir/.. | sed -e 's,/$,,' -e "s,^,$srcdir/../," | \
    575     	 		egrep '/libpcap-[[0-9]]*.[[0-9]]*(.[[0-9]]*)?([[ab]][[0-9]]*)?$'`
    576 	    places2=`ls .. | sed -e 's,/$,,' -e "s,^,../," | \
    577     	 		egrep '/libpcap-[[0-9]]*.[[0-9]]*(.[[0-9]]*)?([[ab]][[0-9]]*)?$'`
    578             pcapH=FAIL
    579 	    if test -r $d/pcap.h; then
    580                     pcapH=$d
    581 	    else
    582                 for dir in $places $srcdir/../libpcap ../libpcap $srcdir/libpcap $places2 ; do
    583                    if test -r $dir/pcap.h ; then
    584                        pcapH=$dir
    585                    fi
    586                 done
    587             fi
    588 
    589             if test $pcapH = FAIL ; then
    590                     AC_MSG_ERROR(cannot find pcap.h: see INSTALL)
    591  	    fi
    592             $2="-I$pcapH $$2"
    593 	    AC_MSG_RESULT($libpcap)
    594 	    AC_PATH_PROG(PCAP_CONFIG, pcap-config,, $d)
    595 	    if test -n "$PCAP_CONFIG"; then
    596 		#
    597 		# The libpcap directory has a pcap-config script.
    598 		# Use it to get any additioal libraries needed
    599 		# to link with the libpcap archive library in
    600 		# that directory.
    601 		#
    602 		# Please read section 11.6 "Shell Substitutions"
    603 		# in the autoconf manual before doing anything
    604 		# to this that involves quoting.  Especially note
    605 		# the statement "There is just no portable way to use
    606 		# double-quoted strings inside double-quoted back-quoted
    607 		# expressions (pfew!)."
    608 		#
    609 		additional_libs=`"$PCAP_CONFIG" --additional-libs --static`
    610 		libpcap="$libpcap $additional_libs"
    611 	    fi
    612     fi
    613     LIBS="$libpcap $LIBS"
    614     if ! test -n "$PCAP_CONFIG" ; then
    615 	#
    616 	# We don't have pcap-config; find out any additional link flags
    617 	# we need.  (If we have pcap-config, we assume it tells us what
    618 	# we need.)
    619 	#
    620 	case "$host_os" in
    621 
    622 	aix*)
    623 	    #
    624 	    # If libpcap is DLPI-based, we have to use /lib/pse.exp if
    625 	    # present, as we use the STREAMS routines.
    626 	    #
    627 	    # (XXX - true only if we're linking with a static libpcap?)
    628 	    #
    629 	    pseexe="/lib/pse.exp"
    630 	    AC_MSG_CHECKING(for $pseexe)
    631 	    if test -f $pseexe ; then
    632 		    AC_MSG_RESULT(yes)
    633 		    LIBS="$LIBS -I:$pseexe"
    634 	    fi
    635 
    636 	    #
    637 	    # If libpcap is BPF-based, we need "-lodm" and "-lcfg", as
    638 	    # we use them to load the BPF module.
    639 	    #
    640 	    # (XXX - true only if we're linking with a static libpcap?)
    641 	    #
    642 	    LIBS="$LIBS -lodm -lcfg"
    643 	    ;;
    644 	esac
    645     fi
    646 
    647     dnl
    648     dnl Check for "pcap_loop()", to make sure we found a working
    649     dnl libpcap and have all the right other libraries with which
    650     dnl to link.  (Otherwise, the checks below will fail, not
    651     dnl because the routines are missing from the library, but
    652     dnl because we aren't linking properly with libpcap, and
    653     dnl that will cause confusing errors at build time.)
    654     dnl
    655     AC_CHECK_FUNC(pcap_loop,,
    656 	[
    657 	    AC_MSG_ERROR(
    658 [This is a bug, please follow the guidelines in CONTRIBUTING and include the
    659 config.log file in your report.  If you have downloaded libpcap from
    660 tcpdump.org, and built it yourself, please also include the config.log
    661 file from the libpcap source directory, the Makefile from the libpcap
    662 source directory, and the output of the make process for libpcap, as
    663 this could be a problem with the libpcap that was built, and we will
    664 not be able to determine why this is happening, and thus will not be
    665 able to fix it, without that information, as we have not been able to
    666 reproduce this problem ourselves.])
    667 	])
    668 ])
    669 
    670 dnl
    671 dnl Define RETSIGTYPE and RETSIGVAL
    672 dnl
    673 dnl usage:
    674 dnl
    675 dnl	AC_LBL_TYPE_SIGNAL
    676 dnl
    677 dnl results:
    678 dnl
    679 dnl	RETSIGTYPE (defined)
    680 dnl	RETSIGVAL (defined)
    681 dnl
    682 AC_DEFUN(AC_LBL_TYPE_SIGNAL,
    683     [AC_BEFORE([$0], [AC_LBL_LIBPCAP])
    684     AC_TYPE_SIGNAL
    685     if test "$ac_cv_type_signal" = void ; then
    686 	    AC_DEFINE(RETSIGVAL,[],[return value of signal handlers])
    687     else
    688 	    AC_DEFINE(RETSIGVAL,(0),[return value of signal handlers])
    689     fi
    690     case "$host_os" in
    691 
    692     irix*)
    693 	    AC_DEFINE(_BSD_SIGNALS,1,[get BSD semantics on Irix])
    694 	    ;;
    695 
    696     *)
    697 	    dnl prefer sigaction() to sigset()
    698 	    AC_CHECK_FUNCS(sigaction)
    699 	    if test $ac_cv_func_sigaction = no ; then
    700 		    AC_CHECK_FUNCS(sigset)
    701 	    fi
    702 	    ;;
    703     esac])
    704 
    705 dnl
    706 dnl If using gcc, make sure we have ANSI ioctl definitions
    707 dnl
    708 dnl usage:
    709 dnl
    710 dnl	AC_LBL_FIXINCLUDES
    711 dnl
    712 AC_DEFUN(AC_LBL_FIXINCLUDES,
    713     [if test "$GCC" = yes ; then
    714 	    AC_MSG_CHECKING(for ANSI ioctl definitions)
    715 	    AC_CACHE_VAL(ac_cv_lbl_gcc_fixincludes,
    716 		AC_TRY_COMPILE(
    717 		    [/*
    718 		     * This generates a "duplicate case value" when fixincludes
    719 		     * has not be run.
    720 		     */
    721 #		include <sys/types.h>
    722 #		include <sys/time.h>
    723 #		include <sys/ioctl.h>
    724 #		ifdef HAVE_SYS_IOCCOM_H
    725 #		include <sys/ioccom.h>
    726 #		endif],
    727 		    [switch (0) {
    728 		    case _IO('A', 1):;
    729 		    case _IO('B', 1):;
    730 		    }],
    731 		    ac_cv_lbl_gcc_fixincludes=yes,
    732 		    ac_cv_lbl_gcc_fixincludes=no))
    733 	    AC_MSG_RESULT($ac_cv_lbl_gcc_fixincludes)
    734 	    if test $ac_cv_lbl_gcc_fixincludes = no ; then
    735 		    # Don't cache failure
    736 		    unset ac_cv_lbl_gcc_fixincludes
    737 		    AC_MSG_ERROR(see the INSTALL for more info)
    738 	    fi
    739     fi])
    740 
    741 dnl
    742 dnl Checks to see if union wait is used with WEXITSTATUS()
    743 dnl
    744 dnl usage:
    745 dnl
    746 dnl	AC_LBL_UNION_WAIT
    747 dnl
    748 dnl results:
    749 dnl
    750 dnl	DECLWAITSTATUS (defined)
    751 dnl
    752 AC_DEFUN(AC_LBL_UNION_WAIT,
    753     [AC_MSG_CHECKING(if union wait is used)
    754     AC_CACHE_VAL(ac_cv_lbl_union_wait,
    755 	AC_TRY_COMPILE([
    756 #	include <sys/types.h>
    757 #	include <sys/wait.h>],
    758 	    [int status;
    759 	    u_int i = WEXITSTATUS(status);
    760 	    u_int j = waitpid(0, &status, 0);],
    761 	    ac_cv_lbl_union_wait=no,
    762 	    ac_cv_lbl_union_wait=yes))
    763     AC_MSG_RESULT($ac_cv_lbl_union_wait)
    764     if test $ac_cv_lbl_union_wait = yes ; then
    765 	    AC_DEFINE(DECLWAITSTATUS,union wait,[type for wait])
    766     else
    767 	    AC_DEFINE(DECLWAITSTATUS,int,[type for wait])
    768     fi])
    769 
    770 dnl
    771 dnl Checks to see if the sockaddr struct has the 4.4 BSD sa_len member
    772 dnl
    773 dnl usage:
    774 dnl
    775 dnl	AC_LBL_SOCKADDR_SA_LEN
    776 dnl
    777 dnl results:
    778 dnl
    779 dnl	HAVE_SOCKADDR_SA_LEN (defined)
    780 dnl
    781 AC_DEFUN(AC_LBL_SOCKADDR_SA_LEN,
    782     [AC_MSG_CHECKING(if sockaddr struct has the sa_len member)
    783     AC_CACHE_VAL(ac_cv_lbl_sockaddr_has_sa_len,
    784 	AC_TRY_COMPILE([
    785 #	include <sys/types.h>
    786 #	include <sys/socket.h>],
    787 	[u_int i = sizeof(((struct sockaddr *)0)->sa_len)],
    788 	ac_cv_lbl_sockaddr_has_sa_len=yes,
    789 	ac_cv_lbl_sockaddr_has_sa_len=no))
    790     AC_MSG_RESULT($ac_cv_lbl_sockaddr_has_sa_len)
    791     if test $ac_cv_lbl_sockaddr_has_sa_len = yes ; then
    792 	    AC_DEFINE(HAVE_SOCKADDR_SA_LEN,1,[if struct sockaddr has the sa_len member])
    793     fi])
    794 
    795 dnl
    796 dnl Checks to see if -R is used
    797 dnl
    798 dnl usage:
    799 dnl
    800 dnl	AC_LBL_HAVE_RUN_PATH
    801 dnl
    802 dnl results:
    803 dnl
    804 dnl	ac_cv_lbl_have_run_path (yes or no)
    805 dnl
    806 AC_DEFUN(AC_LBL_HAVE_RUN_PATH,
    807     [AC_MSG_CHECKING(for ${CC-cc} -R)
    808     AC_CACHE_VAL(ac_cv_lbl_have_run_path,
    809 	[echo 'main(){}' > conftest.c
    810 	${CC-cc} -o conftest conftest.c -R/a1/b2/c3 >conftest.out 2>&1
    811 	if test ! -s conftest.out ; then
    812 		ac_cv_lbl_have_run_path=yes
    813 	else
    814 		ac_cv_lbl_have_run_path=no
    815 	fi
    816 	rm -f -r conftest*])
    817     AC_MSG_RESULT($ac_cv_lbl_have_run_path)
    818     ])
    819 
    820 dnl
    821 dnl Check whether a given format can be used to print 64-bit integers
    822 dnl
    823 AC_DEFUN(AC_LBL_CHECK_64BIT_FORMAT,
    824   [
    825     AC_MSG_CHECKING([whether %$1x can be used to format 64-bit integers])
    826     AC_RUN_IFELSE(
    827       [
    828 	AC_LANG_SOURCE(
    829 	  [[
    830 #	    ifdef HAVE_INTTYPES_H
    831 	    #include <inttypes.h>
    832 #	    endif
    833 	    #include <stdio.h>
    834 	    #include <sys/types.h>
    835 
    836 	    main()
    837 	    {
    838 	      uint64_t t = 1;
    839 	      char strbuf[16+1];
    840 	      sprintf(strbuf, "%016$1x", t << 32);
    841 	      if (strcmp(strbuf, "0000000100000000") == 0)
    842 		exit(0);
    843 	      else
    844 		exit(1);
    845 	    }
    846 	  ]])
    847       ],
    848       [
    849 	AC_DEFINE(PRId64, "$1d", [define if the platform doesn't define PRId64])
    850 	AC_DEFINE(PRIo64, "$1o", [define if the platform doesn't define PRIo64])
    851 	AC_DEFINE(PRIx64, "$1x", [define if the platform doesn't define PRIu64])
    852 	AC_DEFINE(PRIu64, "$1u", [define if the platform doesn't define PRIx64])
    853 	AC_MSG_RESULT(yes)
    854       ],
    855       [
    856 	AC_MSG_RESULT(no)
    857 	$2
    858       ])
    859   ])
    860 
    861 dnl
    862 dnl Checks to see if unaligned memory accesses fail
    863 dnl
    864 dnl usage:
    865 dnl
    866 dnl	AC_LBL_UNALIGNED_ACCESS
    867 dnl
    868 dnl results:
    869 dnl
    870 dnl	LBL_ALIGN (DEFINED)
    871 dnl
    872 AC_DEFUN(AC_LBL_UNALIGNED_ACCESS,
    873     [AC_MSG_CHECKING(if unaligned accesses fail)
    874     AC_CACHE_VAL(ac_cv_lbl_unaligned_fail,
    875 	[case "$host_cpu" in
    876 
    877 	#
    878 	# These are CPU types where:
    879 	#
    880 	#	the CPU faults on an unaligned access, but at least some
    881 	#	OSes that support that CPU catch the fault and simulate
    882 	#	the unaligned access (e.g., Alpha/{Digital,Tru64} UNIX) -
    883 	#	the simulation is slow, so we don't want to use it;
    884 	#
    885 	#	the CPU, I infer (from the old
    886 	#
    887 	# XXX: should also check that they don't do weird things (like on arm)
    888 	#
    889 	#	comment) doesn't fault on unaligned accesses, but doesn't
    890 	#	do a normal unaligned fetch, either (e.g., presumably, ARM);
    891 	#
    892 	#	for whatever reason, the test program doesn't work
    893 	#	(this has been claimed to be the case for several of those
    894 	#	CPUs - I don't know what the problem is; the problem
    895 	#	was reported as "the test program dumps core" for SuperH,
    896 	#	but that's what the test program is *supposed* to do -
    897 	#	it dumps core before it writes anything, so the test
    898 	#	for an empty output file should find an empty output
    899 	#	file and conclude that unaligned accesses don't work).
    900 	#
    901 	# This run-time test won't work if you're cross-compiling, so
    902 	# in order to support cross-compiling for a particular CPU,
    903 	# we have to wire in the list of CPU types anyway, as far as
    904 	# I know, so perhaps we should just have a set of CPUs on
    905 	# which we know it doesn't work, a set of CPUs on which we
    906 	# know it does work, and have the script just fail on other
    907 	# cpu types and update it when such a failure occurs.
    908 	#
    909 	alpha*|arm*|bfin*|hp*|mips*|sh*|sparc*|ia64|nv1)
    910 		ac_cv_lbl_unaligned_fail=yes
    911 		;;
    912 
    913 	*)
    914 		cat >conftest.c <<EOF
    915 #		include <sys/types.h>
    916 #		include <sys/wait.h>
    917 #		include <stdio.h>
    918 		unsigned char a[[5]] = { 1, 2, 3, 4, 5 };
    919 		main() {
    920 		unsigned int i;
    921 		pid_t pid;
    922 		int status;
    923 		/* avoid "core dumped" message */
    924 		pid = fork();
    925 		if (pid <  0)
    926 			exit(2);
    927 		if (pid > 0) {
    928 			/* parent */
    929 			pid = waitpid(pid, &status, 0);
    930 			if (pid < 0)
    931 				exit(3);
    932 			exit(!WIFEXITED(status));
    933 		}
    934 		/* child */
    935 		i = *(unsigned int *)&a[[1]];
    936 		printf("%d\n", i);
    937 		exit(0);
    938 		}
    939 EOF
    940 		${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS \
    941 		    conftest.c $LIBS >/dev/null 2>&1
    942 		if test ! -x conftest ; then
    943 			dnl failed to compile for some reason
    944 			ac_cv_lbl_unaligned_fail=yes
    945 		else
    946 			./conftest >conftest.out
    947 			if test ! -s conftest.out ; then
    948 				ac_cv_lbl_unaligned_fail=yes
    949 			else
    950 				ac_cv_lbl_unaligned_fail=no
    951 			fi
    952 		fi
    953 		rm -f -r conftest* core core.conftest
    954 		;;
    955 	esac])
    956     AC_MSG_RESULT($ac_cv_lbl_unaligned_fail)
    957     if test $ac_cv_lbl_unaligned_fail = yes ; then
    958 	    AC_DEFINE(LBL_ALIGN,1,[if unaligned access fails])
    959     fi])
    960 
    961 dnl
    962 dnl If the file .devel exists:
    963 dnl	Add some warning flags if the compiler supports them
    964 dnl	If an os prototype include exists, symlink os-proto.h to it
    965 dnl
    966 dnl usage:
    967 dnl
    968 dnl	AC_LBL_DEVEL(copt)
    969 dnl
    970 dnl results:
    971 dnl
    972 dnl	$1 (copt appended)
    973 dnl	HAVE_OS_PROTO_H (defined)
    974 dnl	os-proto.h (symlinked)
    975 dnl
    976 AC_DEFUN(AC_LBL_DEVEL,
    977     [rm -f os-proto.h
    978     if test "${LBL_CFLAGS+set}" = set; then
    979 	    $1="$$1 ${LBL_CFLAGS}"
    980     fi
    981     if test -f .devel ; then
    982 	    #
    983 	    # Skip all the warning option stuff on some compilers.
    984 	    #
    985 	    if test "$ac_lbl_cc_dont_try_gcc_dashW" != yes; then
    986 		    AC_LBL_CHECK_UNKNOWN_WARNING_OPTION_ERROR()
    987 		    AC_LBL_CHECK_COMPILER_OPT($1, -Wall)
    988 		    AC_LBL_CHECK_COMPILER_OPT($1, -Wmissing-prototypes)
    989 		    AC_LBL_CHECK_COMPILER_OPT($1, -Wstrict-prototypes)
    990 		    AC_LBL_CHECK_COMPILER_OPT($1, -Wwrite-strings)
    991 		    AC_LBL_CHECK_COMPILER_OPT($1, -Wpointer-arith)
    992 		    AC_LBL_CHECK_COMPILER_OPT($1, -Wcast-qual)
    993 		    AC_LBL_CHECK_COMPILER_OPT($1, -Wshadow)
    994 		    AC_LBL_CHECK_COMPILER_OPT($1, -Wdeclaration-after-statement)
    995 		    AC_LBL_CHECK_COMPILER_OPT($1, -Wpedantic)
    996 		    AC_LBL_CHECK_COMPILER_OPT($1, -Wold-style-definition)
    997 		    AC_LBL_CHECK_COMPILER_OPT($1, -Wused-but-marked-unused)
    998 		    AC_LBL_CHECK_COMPILER_OPT($1, -W)
    999 	    fi
   1000 	    AC_LBL_CHECK_DEPENDENCY_GENERATION_OPT()
   1001 	    #
   1002 	    # We used to set -n32 for IRIX 6 when not using GCC (presumed
   1003 	    # to mean that we're using MIPS C or MIPSpro C); it specified
   1004 	    # the "new" faster 32-bit ABI, introduced in IRIX 6.2.  I'm
   1005 	    # not sure why that would be something to do *only* with a
   1006 	    # .devel file; why should the ABI for which we produce code
   1007 	    # depend on .devel?
   1008 	    #
   1009 	    os=`echo $host_os | sed -e 's/\([[0-9]][[0-9]]*\)[[^0-9]].*$/\1/'`
   1010 	    name="lbl/os-$os.h"
   1011 	    if test -f $name ; then
   1012 		    ln -s $name os-proto.h
   1013 		    AC_DEFINE(HAVE_OS_PROTO_H, 1,
   1014 			[if there's an os_proto.h for this platform, to use additional prototypes])
   1015 	    else
   1016 		    AC_MSG_WARN(can't find $name)
   1017 	    fi
   1018     fi])
   1019 
   1020 dnl
   1021 dnl Improved version of AC_CHECK_LIB
   1022 dnl
   1023 dnl Thanks to John Hawkinson (jhawk (a] mit.edu)
   1024 dnl
   1025 dnl usage:
   1026 dnl
   1027 dnl	AC_LBL_CHECK_LIB(LIBRARY, FUNCTION [, ACTION-IF-FOUND [,
   1028 dnl	    ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
   1029 dnl
   1030 dnl results:
   1031 dnl
   1032 dnl	LIBS
   1033 dnl
   1034 dnl XXX - "AC_LBL_LIBRARY_NET" was redone to use "AC_SEARCH_LIBS"
   1035 dnl rather than "AC_LBL_CHECK_LIB", so this isn't used any more.
   1036 dnl We keep it around for reference purposes in case it's ever
   1037 dnl useful in the future.
   1038 dnl
   1039 
   1040 define(AC_LBL_CHECK_LIB,
   1041 [AC_MSG_CHECKING([for $2 in -l$1])
   1042 dnl Use a cache variable name containing the library, function
   1043 dnl name, and extra libraries to link with, because the test really is
   1044 dnl for library $1 defining function $2, when linked with potinal
   1045 dnl library $5, not just for library $1.  Separate tests with the same
   1046 dnl $1 and different $2's or $5's may have different results.
   1047 ac_lib_var=`echo $1['_']$2['_']$5 | sed 'y%./+- %__p__%'`
   1048 AC_CACHE_VAL(ac_cv_lbl_lib_$ac_lib_var,
   1049 [ac_save_LIBS="$LIBS"
   1050 LIBS="-l$1 $5 $LIBS"
   1051 AC_TRY_LINK(dnl
   1052 ifelse([$2], [main], , dnl Avoid conflicting decl of main.
   1053 [/* Override any gcc2 internal prototype to avoid an error.  */
   1054 ]ifelse(AC_LANG, CPLUSPLUS, [#ifdef __cplusplus
   1055 extern "C"
   1056 #endif
   1057 ])dnl
   1058 [/* We use char because int might match the return type of a gcc2
   1059     builtin and then its argument prototype would still apply.  */
   1060 char $2();
   1061 ]),
   1062 	    [$2()],
   1063 	    eval "ac_cv_lbl_lib_$ac_lib_var=yes",
   1064 	    eval "ac_cv_lbl_lib_$ac_lib_var=no")
   1065 LIBS="$ac_save_LIBS"
   1066 ])dnl
   1067 if eval "test \"`echo '$ac_cv_lbl_lib_'$ac_lib_var`\" = yes"; then
   1068   AC_MSG_RESULT(yes)
   1069   ifelse([$3], ,
   1070 [changequote(, )dnl
   1071   ac_tr_lib=HAVE_LIB`echo $1 | sed -e 's/[^a-zA-Z0-9_]/_/g' \
   1072     -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
   1073 changequote([, ])dnl
   1074   AC_DEFINE_UNQUOTED($ac_tr_lib)
   1075   LIBS="-l$1 $LIBS"
   1076 ], [$3])
   1077 else
   1078   AC_MSG_RESULT(no)
   1079 ifelse([$4], , , [$4
   1080 ])dnl
   1081 fi
   1082 ])
   1083 
   1084 dnl
   1085 dnl AC_LBL_LIBRARY_NET
   1086 dnl
   1087 dnl This test is for network applications that need socket() and
   1088 dnl gethostbyname() -ish functions.  Under Solaris, those applications
   1089 dnl need to link with "-lsocket -lnsl".  Under IRIX, they need to link
   1090 dnl with "-lnsl" but should *not* link with "-lsocket" because
   1091 dnl libsocket.a breaks a number of things (for instance:
   1092 dnl gethostbyname() under IRIX 5.2, and snoop sockets under most
   1093 dnl versions of IRIX).
   1094 dnl
   1095 dnl Unfortunately, many application developers are not aware of this,
   1096 dnl and mistakenly write tests that cause -lsocket to be used under
   1097 dnl IRIX.  It is also easy to write tests that cause -lnsl to be used
   1098 dnl under operating systems where neither are necessary (or useful),
   1099 dnl such as SunOS 4.1.4, which uses -lnsl for TLI.
   1100 dnl
   1101 dnl This test exists so that every application developer does not test
   1102 dnl this in a different, and subtly broken fashion.
   1103 
   1104 dnl It has been argued that this test should be broken up into two
   1105 dnl seperate tests, one for the resolver libraries, and one for the
   1106 dnl libraries necessary for using Sockets API. Unfortunately, the two
   1107 dnl are carefully intertwined and allowing the autoconf user to use
   1108 dnl them independantly potentially results in unfortunate ordering
   1109 dnl dependancies -- as such, such component macros would have to
   1110 dnl carefully use indirection and be aware if the other components were
   1111 dnl executed. Since other autoconf macros do not go to this trouble,
   1112 dnl and almost no applications use sockets without the resolver, this
   1113 dnl complexity has not been implemented.
   1114 dnl
   1115 dnl The check for libresolv is in case you are attempting to link
   1116 dnl statically and happen to have a libresolv.a lying around (and no
   1117 dnl libnsl.a).
   1118 dnl
   1119 AC_DEFUN(AC_LBL_LIBRARY_NET, [
   1120     # Most operating systems have gethostbyname() in the default searched
   1121     # libraries (i.e. libc):
   1122     # Some OSes (eg. Solaris) place it in libnsl
   1123     # Some strange OSes (SINIX) have it in libsocket:
   1124     AC_SEARCH_LIBS(gethostbyname, nsl socket resolv)
   1125     # Unfortunately libsocket sometimes depends on libnsl and
   1126     # AC_SEARCH_LIBS isn't up to the task of handling dependencies like this.
   1127     if test "$ac_cv_search_gethostbyname" = "no"
   1128     then
   1129 	AC_CHECK_LIB(socket, gethostbyname,
   1130                      LIBS="-lsocket -lnsl $LIBS", , -lnsl)
   1131     fi
   1132     AC_SEARCH_LIBS(socket, socket, ,
   1133 	AC_CHECK_LIB(socket, socket, LIBS="-lsocket -lnsl $LIBS", , -lnsl))
   1134     # DLPI needs putmsg under HPUX so test for -lstr while we're at it
   1135     AC_SEARCH_LIBS(putmsg, str)
   1136     ])
   1137 
   1138 dnl Copyright (c) 1999 WIDE Project. All rights reserved.
   1139 dnl
   1140 dnl Redistribution and use in source and binary forms, with or without
   1141 dnl modification, are permitted provided that the following conditions
   1142 dnl are met:
   1143 dnl 1. Redistributions of source code must retain the above copyright
   1144 dnl    notice, this list of conditions and the following disclaimer.
   1145 dnl 2. Redistributions in binary form must reproduce the above copyright
   1146 dnl    notice, this list of conditions and the following disclaimer in the
   1147 dnl    documentation and/or other materials provided with the distribution.
   1148 dnl 3. Neither the name of the project nor the names of its contributors
   1149 dnl    may be used to endorse or promote products derived from this software
   1150 dnl    without specific prior written permission.
   1151 dnl
   1152 dnl THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
   1153 dnl ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   1154 dnl IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   1155 dnl ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
   1156 dnl FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   1157 dnl DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   1158 dnl OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   1159 dnl HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   1160 dnl LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   1161 dnl OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   1162 dnl SUCH DAMAGE.
   1163 
   1164 dnl
   1165 dnl Test for __attribute__
   1166 dnl
   1167 
   1168 AC_DEFUN(AC_C___ATTRIBUTE__, [
   1169 AC_MSG_CHECKING(for __attribute__)
   1170 AC_CACHE_VAL(ac_cv___attribute__, [
   1171 AC_COMPILE_IFELSE([
   1172   AC_LANG_SOURCE([[
   1173 #include <stdlib.h>
   1174 
   1175 static void foo(void) __attribute__ ((noreturn));
   1176 
   1177 static void
   1178 foo(void)
   1179 {
   1180   exit(1);
   1181 }
   1182 
   1183 int
   1184 main(int argc, char **argv)
   1185 {
   1186   foo();
   1187 }
   1188   ]])],
   1189 ac_cv___attribute__=yes,
   1190 ac_cv___attribute__=no)])
   1191 if test "$ac_cv___attribute__" = "yes"; then
   1192   AC_DEFINE(HAVE___ATTRIBUTE__, 1, [define if your compiler has __attribute__])
   1193 else
   1194   #
   1195   # We can't use __attribute__, so we can't use __attribute__((unused)),
   1196   # so we define _U_ to an empty string.
   1197   #
   1198   V_DEFS="$V_DEFS -D_U_=\"\""
   1199 fi
   1200 AC_MSG_RESULT($ac_cv___attribute__)
   1201 ])
   1202 
   1203 
   1204 dnl
   1205 dnl Test whether __attribute__((unused)) can be used without warnings
   1206 dnl
   1207 
   1208 AC_DEFUN(AC_C___ATTRIBUTE___UNUSED, [
   1209 AC_MSG_CHECKING([whether __attribute__((unused)) can be used without warnings])
   1210 AC_CACHE_VAL(ac_cv___attribute___unused, [
   1211 save_CFLAGS="$CFLAGS"
   1212 CFLAGS="$CFLAGS $ac_lbl_cc_force_warning_errors"
   1213 AC_COMPILE_IFELSE([
   1214   AC_LANG_SOURCE([[
   1215 #include <stdlib.h>
   1216 #include <stdio.h>
   1217 
   1218 int
   1219 main(int argc  __attribute((unused)), char **argv __attribute((unused)))
   1220 {
   1221   printf("Hello, world!\n");
   1222   return 0;
   1223 }
   1224   ]])],
   1225 ac_cv___attribute___unused=yes,
   1226 ac_cv___attribute___unused=no)])
   1227 CFLAGS="$save_CFLAGS"
   1228 if test "$ac_cv___attribute___unused" = "yes"; then
   1229   V_DEFS="$V_DEFS -D_U_=\"__attribute__((unused))\""
   1230 else
   1231   V_DEFS="$V_DEFS -D_U_=\"\""
   1232 fi
   1233 AC_MSG_RESULT($ac_cv___attribute___unused)
   1234 ])
   1235 
   1236 dnl
   1237 dnl Test whether __attribute__((format)) can be used without warnings
   1238 dnl
   1239 
   1240 AC_DEFUN(AC_C___ATTRIBUTE___FORMAT, [
   1241 AC_MSG_CHECKING([whether __attribute__((format)) can be used without warnings])
   1242 AC_CACHE_VAL(ac_cv___attribute___format, [
   1243 save_CFLAGS="$CFLAGS"
   1244 CFLAGS="$CFLAGS $ac_lbl_cc_force_warning_errors"
   1245 AC_COMPILE_IFELSE([
   1246   AC_LANG_SOURCE([[
   1247 #include <stdlib.h>
   1248 
   1249 extern int foo(const char *fmt, ...)
   1250 		  __attribute__ ((format (printf, 1, 2)));
   1251 
   1252 int
   1253 main(int argc, char **argv)
   1254 {
   1255   foo("%s", "test");
   1256 }
   1257   ]])],
   1258 ac_cv___attribute___format=yes,
   1259 ac_cv___attribute___format=no)])
   1260 CFLAGS="$save_CFLAGS"
   1261 if test "$ac_cv___attribute___format" = "yes"; then
   1262   AC_DEFINE(__ATTRIBUTE___FORMAT_OK, 1,
   1263     [define if your compiler allows __attribute__((format)) without a warning])
   1264 fi
   1265 AC_MSG_RESULT($ac_cv___attribute___format)
   1266 ])
   1267 
   1268 dnl
   1269 dnl Test whether __attribute__((format)) can be applied to function
   1270 dnl pointers
   1271 dnl
   1272 
   1273 AC_DEFUN(AC_C___ATTRIBUTE___FORMAT_FUNCTION_POINTER, [
   1274 AC_MSG_CHECKING([whether __attribute__((format)) can be applied to function pointers])
   1275 AC_CACHE_VAL(ac_cv___attribute___format_function_pointer, [
   1276 AC_COMPILE_IFELSE([
   1277   AC_LANG_SOURCE([[
   1278 #include <stdlib.h>
   1279 
   1280 extern int (*foo)(const char *fmt, ...)
   1281 		  __attribute__ ((format (printf, 1, 2)));
   1282 
   1283 int
   1284 main(int argc, char **argv)
   1285 {
   1286   (*foo)("%s", "test");
   1287 }
   1288   ]])],
   1289 ac_cv___attribute___format_function_pointer=yes,
   1290 ac_cv___attribute___format_function_pointer=no)])
   1291 if test "$ac_cv___attribute___format_function_pointer" = "yes"; then
   1292   AC_DEFINE(__ATTRIBUTE___FORMAT_OK_FOR_FUNCTION_POINTERS, 1,
   1293     [define if your compiler allows __attribute__((format)) to be applied to function pointers])
   1294 fi
   1295 AC_MSG_RESULT($ac_cv___attribute___format_function_pointer)
   1296 ])
   1297 
   1298 AC_DEFUN(AC_C___ATTRIBUTE___NORETURN_FUNCTION_POINTER, [
   1299 AC_MSG_CHECKING([whether __attribute__((noreturn)) can be applied to function pointers without warnings])
   1300 AC_CACHE_VAL(ac_cv___attribute___noreturn_function_pointer, [
   1301 save_CFLAGS="$CFLAGS"
   1302 CFLAGS="$CFLAGS $ac_lbl_cc_force_warning_errors"
   1303 AC_COMPILE_IFELSE([
   1304   AC_LANG_SOURCE([[
   1305 #include <stdlib.h>
   1306 
   1307 extern int (*foo)(int i)
   1308 		  __attribute__ ((noreturn));
   1309 
   1310 int
   1311 main(int argc, char **argv)
   1312 {
   1313   (*foo)(1);
   1314 }
   1315   ]])],
   1316 ac_cv___attribute___noreturn_function_pointer=yes,
   1317 ac_cv___attribute___noreturn_function_pointer=no)])
   1318 CFLAGS="$save_CFLAGS"
   1319 if test "$ac_cv___attribute___noreturn_function_pointer" = "yes"; then
   1320   AC_DEFINE(__ATTRIBUTE___NORETURN_OK_FOR_FUNCTION_POINTERS, 1,
   1321     [define if your compiler allows __attribute__((noreturn)) to be applied to function pointers])
   1322 fi
   1323 AC_MSG_RESULT($ac_cv___attribute___noreturn_function_pointer)
   1324 ])
   1325 
   1326 AC_DEFUN(AC_LBL_SSLEAY,
   1327     [
   1328 	#
   1329 	# Find the last component of $libdir; it's not necessarily
   1330 	# "lib" - it might be "lib64" on, for example, x86-64
   1331 	# Linux systems.
   1332 	#
   1333 	# We assume the directory in which we're looking for
   1334 	# libcrypto has a subdirectory with that as its name.
   1335 	#
   1336 	tmplib=`echo "$libdir" | sed 's,.*/,,'`
   1337 
   1338 	#
   1339 	# XXX - is there a better way to check if a given library is
   1340 	# in a given directory than checking each of the possible
   1341 	# shared library suffixes?
   1342 	#
   1343 	# Are there any other suffixes we need to look for?  Do we
   1344 	# have to worry about ".so.{version}"?
   1345 	#
   1346 	# Or should we just look for "libcrypto.*"?
   1347 	#
   1348 	if test -d "$1/$tmplib" -a \( -f "$1/$tmplib/libcrypto.a" -o \
   1349 		          	    -f "$1/$tmplib/libcrypto.so" -o \
   1350 		          	    -f "$1/$tmplib/libcrypto.sl" -o \
   1351 			  	    -f "$1/$tmplib/libcrypto.dylib" \); then
   1352 		ac_cv_ssleay_path="$1"
   1353 	fi
   1354 
   1355 	#
   1356 	# Make sure we have the headers as well.
   1357 	#
   1358 	if test -d "$1/include/openssl" -a -f "$1/include/openssl/des.h"; then
   1359 		incdir="-I$1/include"
   1360 	fi
   1361 ])
   1362