1 dnl @(#) $Header: /tcpdump/master/libpcap/aclocal.m4,v 1.85.2.1 2005/04/21 03:42:09 guy Exp $ (LBL) 2 dnl 3 dnl Copyright (c) 1995, 1996, 1997, 1998 4 dnl The Regents of the University of California. All rights reserved. 5 dnl 6 dnl Redistribution and use in source and binary forms, with or without 7 dnl modification, are permitted provided that: (1) source code distributions 8 dnl retain the above copyright notice and this paragraph in its entirety, (2) 9 dnl distributions including binary code include the above copyright notice and 10 dnl this paragraph in its entirety in the documentation or other materials 11 dnl provided with the distribution, and (3) all advertising materials mentioning 12 dnl features or use of this software display the following acknowledgement: 13 dnl ``This product includes software developed by the University of California, 14 dnl Lawrence Berkeley Laboratory and its contributors.'' Neither the name of 15 dnl the University nor the names of its contributors may be used to endorse 16 dnl or promote products derived from this software without specific prior 17 dnl written permission. 18 dnl THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED 19 dnl WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF 20 dnl MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 21 dnl 22 dnl LBL autoconf macros 23 dnl 24 25 dnl 26 dnl Determine which compiler we're using (cc or gcc) 27 dnl If using gcc, determine the version number 28 dnl If using cc, require that it support ansi prototypes 29 dnl If using gcc, use -O2 (otherwise use -O) 30 dnl If using cc, explicitly specify /usr/local/include 31 dnl 32 dnl usage: 33 dnl 34 dnl AC_LBL_C_INIT(copt, incls) 35 dnl 36 dnl results: 37 dnl 38 dnl $1 (copt set) 39 dnl $2 (incls set) 40 dnl CC 41 dnl LDFLAGS 42 dnl ac_cv_lbl_gcc_vers 43 dnl LBL_CFLAGS 44 dnl 45 AC_DEFUN(AC_LBL_C_INIT, 46 [AC_PREREQ(2.12) 47 AC_BEFORE([$0], [AC_PROG_CC]) 48 AC_BEFORE([$0], [AC_LBL_FIXINCLUDES]) 49 AC_BEFORE([$0], [AC_LBL_DEVEL]) 50 AC_ARG_WITH(gcc, [ --without-gcc don't use gcc]) 51 $1="-O" 52 $2="" 53 if test "${srcdir}" != "." ; then 54 $2="-I\$(srcdir)" 55 fi 56 if test "${CFLAGS+set}" = set; then 57 LBL_CFLAGS="$CFLAGS" 58 fi 59 if test -z "$CC" ; then 60 case "$target_os" in 61 62 bsdi*) 63 AC_CHECK_PROG(SHLICC2, shlicc2, yes, no) 64 if test $SHLICC2 = yes ; then 65 CC=shlicc2 66 export CC 67 fi 68 ;; 69 esac 70 fi 71 if test -z "$CC" -a "$with_gcc" = no ; then 72 CC=cc 73 export CC 74 fi 75 AC_PROG_CC 76 if test "$GCC" = yes ; then 77 if test "$SHLICC2" = yes ; then 78 ac_cv_lbl_gcc_vers=2 79 $1="-O2" 80 else 81 AC_MSG_CHECKING(gcc version) 82 AC_CACHE_VAL(ac_cv_lbl_gcc_vers, 83 ac_cv_lbl_gcc_vers=`$CC -v 2>&1 | \ 84 sed -e '/^gcc version /!d' \ 85 -e 's/^gcc version //' \ 86 -e 's/ .*//' -e 's/^[[[^0-9]]]*//' \ 87 -e 's/\..*//'`) 88 AC_MSG_RESULT($ac_cv_lbl_gcc_vers) 89 if test $ac_cv_lbl_gcc_vers -gt 1 ; then 90 $1="-O2" 91 fi 92 fi 93 else 94 AC_MSG_CHECKING(that $CC handles ansi prototypes) 95 AC_CACHE_VAL(ac_cv_lbl_cc_ansi_prototypes, 96 AC_TRY_COMPILE( 97 [#include <sys/types.h>], 98 [int frob(int, char *)], 99 ac_cv_lbl_cc_ansi_prototypes=yes, 100 ac_cv_lbl_cc_ansi_prototypes=no)) 101 AC_MSG_RESULT($ac_cv_lbl_cc_ansi_prototypes) 102 if test $ac_cv_lbl_cc_ansi_prototypes = no ; then 103 case "$target_os" in 104 105 hpux*) 106 AC_MSG_CHECKING(for HP-UX ansi compiler ($CC -Aa -D_HPUX_SOURCE)) 107 savedcflags="$CFLAGS" 108 CFLAGS="-Aa -D_HPUX_SOURCE $CFLAGS" 109 AC_CACHE_VAL(ac_cv_lbl_cc_hpux_cc_aa, 110 AC_TRY_COMPILE( 111 [#include <sys/types.h>], 112 [int frob(int, char *)], 113 ac_cv_lbl_cc_hpux_cc_aa=yes, 114 ac_cv_lbl_cc_hpux_cc_aa=no)) 115 AC_MSG_RESULT($ac_cv_lbl_cc_hpux_cc_aa) 116 if test $ac_cv_lbl_cc_hpux_cc_aa = no ; then 117 AC_MSG_ERROR(see the INSTALL doc for more info) 118 fi 119 CFLAGS="$savedcflags" 120 V_CCOPT="-Aa $V_CCOPT" 121 AC_DEFINE(_HPUX_SOURCE,1,[needed on HP-UX]) 122 ;; 123 124 *) 125 AC_MSG_ERROR(see the INSTALL doc for more info) 126 ;; 127 esac 128 fi 129 $2="$$2 -I/usr/local/include" 130 LDFLAGS="$LDFLAGS -L/usr/local/lib" 131 132 case "$target_os" in 133 134 irix*) 135 V_CCOPT="$V_CCOPT -xansi -signed -g3" 136 ;; 137 138 osf*) 139 V_CCOPT="$V_CCOPT -std1 -g3" 140 ;; 141 142 ultrix*) 143 AC_MSG_CHECKING(that Ultrix $CC hacks const in prototypes) 144 AC_CACHE_VAL(ac_cv_lbl_cc_const_proto, 145 AC_TRY_COMPILE( 146 [#include <sys/types.h>], 147 [struct a { int b; }; 148 void c(const struct a *)], 149 ac_cv_lbl_cc_const_proto=yes, 150 ac_cv_lbl_cc_const_proto=no)) 151 AC_MSG_RESULT($ac_cv_lbl_cc_const_proto) 152 if test $ac_cv_lbl_cc_const_proto = no ; then 153 AC_DEFINE(const,) 154 fi 155 ;; 156 esac 157 fi 158 ]) 159 160 # 161 # Try compiling a sample of the type of code that appears in 162 # gencode.c with "inline", "__inline__", and "__inline". 163 # 164 # Autoconf's AC_C_INLINE, at least in autoconf 2.13, isn't good enough, 165 # as it just tests whether a function returning "int" can be inlined; 166 # at least some versions of HP's C compiler can inline that, but can't 167 # inline a function that returns a struct pointer. 168 # 169 # Make sure we use the V_CCOPT flags, because some of those might 170 # disable inlining. 171 # 172 AC_DEFUN(AC_LBL_C_INLINE, 173 [AC_MSG_CHECKING(for inline) 174 save_CFLAGS="$CFLAGS" 175 CFLAGS="$V_CCOPT" 176 AC_CACHE_VAL(ac_cv_lbl_inline, [ 177 ac_cv_lbl_inline="" 178 ac_lbl_cc_inline=no 179 for ac_lbl_inline in inline __inline__ __inline 180 do 181 AC_TRY_COMPILE( 182 [#define inline $ac_lbl_inline 183 static inline struct iltest *foo(void); 184 struct iltest { 185 int iltest1; 186 int iltest2; 187 }; 188 189 static inline struct iltest * 190 foo() 191 { 192 static struct iltest xxx; 193 194 return &xxx; 195 }],,ac_lbl_cc_inline=yes,) 196 if test "$ac_lbl_cc_inline" = yes ; then 197 break; 198 fi 199 done 200 if test "$ac_lbl_cc_inline" = yes ; then 201 ac_cv_lbl_inline=$ac_lbl_inline 202 fi]) 203 CFLAGS="$save_CFLAGS" 204 if test ! -z "$ac_cv_lbl_inline" ; then 205 AC_MSG_RESULT($ac_cv_lbl_inline) 206 else 207 AC_MSG_RESULT(no) 208 fi 209 AC_DEFINE_UNQUOTED(inline, $ac_cv_lbl_inline, [Define as token for inline if inlining supported])]) 210 211 dnl 212 dnl Use pfopen.c if available and pfopen() not in standard libraries 213 dnl Require libpcap 214 dnl Look for libpcap in .. 215 dnl Use the installed libpcap if there is no local version 216 dnl 217 dnl usage: 218 dnl 219 dnl AC_LBL_LIBPCAP(pcapdep, incls) 220 dnl 221 dnl results: 222 dnl 223 dnl $1 (pcapdep set) 224 dnl $2 (incls appended) 225 dnl LIBS 226 dnl LBL_LIBS 227 dnl 228 AC_DEFUN(AC_LBL_LIBPCAP, 229 [AC_REQUIRE([AC_LBL_LIBRARY_NET]) 230 dnl 231 dnl save a copy before locating libpcap.a 232 dnl 233 LBL_LIBS="$LIBS" 234 pfopen=/usr/examples/packetfilter/pfopen.c 235 if test -f $pfopen ; then 236 AC_CHECK_FUNCS(pfopen) 237 if test $ac_cv_func_pfopen = "no" ; then 238 AC_MSG_RESULT(Using $pfopen) 239 LIBS="$LIBS $pfopen" 240 fi 241 fi 242 AC_MSG_CHECKING(for local pcap library) 243 libpcap=FAIL 244 lastdir=FAIL 245 places=`ls .. | sed -e 's,/$,,' -e 's,^,../,' | \ 246 egrep '/libpcap-[[0-9]]*\.[[0-9]]*(\.[[0-9]]*)?([[ab]][[0-9]]*)?$'` 247 for dir in $places ../libpcap libpcap ; do 248 basedir=`echo $dir | sed -e 's/[[ab]][[0-9]]*$//'` 249 if test $lastdir = $basedir ; then 250 dnl skip alphas when an actual release is present 251 continue; 252 fi 253 lastdir=$dir 254 if test -r $dir/pcap.c ; then 255 libpcap=$dir/libpcap.a 256 d=$dir 257 dnl continue and select the last one that exists 258 fi 259 done 260 if test $libpcap = FAIL ; then 261 AC_MSG_RESULT(not found) 262 AC_CHECK_LIB(pcap, main, libpcap="-lpcap") 263 if test $libpcap = FAIL ; then 264 AC_MSG_ERROR(see the INSTALL doc for more info) 265 fi 266 else 267 $1=$libpcap 268 $2="-I$d $$2" 269 AC_MSG_RESULT($libpcap) 270 fi 271 LIBS="$libpcap $LIBS" 272 case "$target_os" in 273 274 aix*) 275 pseexe="/lib/pse.exp" 276 AC_MSG_CHECKING(for $pseexe) 277 if test -f $pseexe ; then 278 AC_MSG_RESULT(yes) 279 LIBS="$LIBS -I:$pseexe" 280 fi 281 ;; 282 esac]) 283 284 dnl 285 dnl Define RETSIGTYPE and RETSIGVAL 286 dnl 287 dnl usage: 288 dnl 289 dnl AC_LBL_TYPE_SIGNAL 290 dnl 291 dnl results: 292 dnl 293 dnl RETSIGTYPE (defined) 294 dnl RETSIGVAL (defined) 295 dnl 296 AC_DEFUN(AC_LBL_TYPE_SIGNAL, 297 [AC_BEFORE([$0], [AC_LBL_LIBPCAP]) 298 AC_TYPE_SIGNAL 299 if test "$ac_cv_type_signal" = void ; then 300 AC_DEFINE(RETSIGVAL,[],[return value of signal handlers]) 301 else 302 AC_DEFINE(RETSIGVAL,(0),[return value of signal handlers]) 303 fi 304 case "$target_os" in 305 306 irix*) 307 AC_DEFINE(_BSD_SIGNALS,1,[get BSD semantics on Irix]) 308 ;; 309 310 *) 311 dnl prefer sigset() to sigaction() 312 AC_CHECK_FUNCS(sigset) 313 if test $ac_cv_func_sigset = no ; then 314 AC_CHECK_FUNCS(sigaction) 315 fi 316 ;; 317 esac]) 318 319 dnl 320 dnl If using gcc, make sure we have ANSI ioctl definitions 321 dnl 322 dnl usage: 323 dnl 324 dnl AC_LBL_FIXINCLUDES 325 dnl 326 AC_DEFUN(AC_LBL_FIXINCLUDES, 327 [if test "$GCC" = yes ; then 328 AC_MSG_CHECKING(for ANSI ioctl definitions) 329 AC_CACHE_VAL(ac_cv_lbl_gcc_fixincludes, 330 AC_TRY_COMPILE( 331 [/* 332 * This generates a "duplicate case value" when fixincludes 333 * has not be run. 334 */ 335 # include <sys/types.h> 336 # include <sys/time.h> 337 # include <sys/ioctl.h> 338 # ifdef HAVE_SYS_IOCCOM_H 339 # include <sys/ioccom.h> 340 # endif], 341 [switch (0) { 342 case _IO('A', 1):; 343 case _IO('B', 1):; 344 }], 345 ac_cv_lbl_gcc_fixincludes=yes, 346 ac_cv_lbl_gcc_fixincludes=no)) 347 AC_MSG_RESULT($ac_cv_lbl_gcc_fixincludes) 348 if test $ac_cv_lbl_gcc_fixincludes = no ; then 349 # Don't cache failure 350 unset ac_cv_lbl_gcc_fixincludes 351 AC_MSG_ERROR(see the INSTALL for more info) 352 fi 353 fi]) 354 355 dnl 356 dnl Check for flex, default to lex 357 dnl Require flex 2.4 or higher 358 dnl Check for bison, default to yacc 359 dnl Default to lex/yacc if both flex and bison are not available 360 dnl Define the yy prefix string if using flex and bison 361 dnl 362 dnl usage: 363 dnl 364 dnl AC_LBL_LEX_AND_YACC(lex, yacc, yyprefix) 365 dnl 366 dnl results: 367 dnl 368 dnl $1 (lex set) 369 dnl $2 (yacc appended) 370 dnl $3 (optional flex and bison -P prefix) 371 dnl 372 AC_DEFUN(AC_LBL_LEX_AND_YACC, 373 [AC_ARG_WITH(flex, [ --without-flex don't use flex]) 374 AC_ARG_WITH(bison, [ --without-bison don't use bison]) 375 if test "$with_flex" = no ; then 376 $1=lex 377 else 378 AC_CHECK_PROGS($1, flex, lex) 379 fi 380 if test "$$1" = flex ; then 381 # The -V flag was added in 2.4 382 AC_MSG_CHECKING(for flex 2.4 or higher) 383 AC_CACHE_VAL(ac_cv_lbl_flex_v24, 384 if flex -V >/dev/null 2>&1; then 385 ac_cv_lbl_flex_v24=yes 386 else 387 ac_cv_lbl_flex_v24=no 388 fi) 389 AC_MSG_RESULT($ac_cv_lbl_flex_v24) 390 if test $ac_cv_lbl_flex_v24 = no ; then 391 s="2.4 or higher required" 392 AC_MSG_WARN(ignoring obsolete flex executable ($s)) 393 $1=lex 394 fi 395 fi 396 if test "$with_bison" = no ; then 397 $2=yacc 398 else 399 AC_CHECK_PROGS($2, bison, yacc) 400 fi 401 if test "$$2" = bison ; then 402 $2="$$2 -y" 403 fi 404 if test "$$1" != lex -a "$$2" = yacc -o "$$1" = lex -a "$$2" != yacc ; then 405 AC_MSG_WARN(don't have both flex and bison; reverting to lex/yacc) 406 $1=lex 407 $2=yacc 408 fi 409 if test "$$1" = flex -a -n "$3" ; then 410 $1="$$1 -P$3" 411 $2="$$2 -p $3" 412 fi]) 413 414 dnl 415 dnl Checks to see if union wait is used with WEXITSTATUS() 416 dnl 417 dnl usage: 418 dnl 419 dnl AC_LBL_UNION_WAIT 420 dnl 421 dnl results: 422 dnl 423 dnl DECLWAITSTATUS (defined) 424 dnl 425 AC_DEFUN(AC_LBL_UNION_WAIT, 426 [AC_MSG_CHECKING(if union wait is used) 427 AC_CACHE_VAL(ac_cv_lbl_union_wait, 428 AC_TRY_COMPILE([ 429 # include <sys/types.h> 430 # include <sys/wait.h>], 431 [int status; 432 u_int i = WEXITSTATUS(status); 433 u_int j = waitpid(0, &status, 0);], 434 ac_cv_lbl_union_wait=no, 435 ac_cv_lbl_union_wait=yes)) 436 AC_MSG_RESULT($ac_cv_lbl_union_wait) 437 if test $ac_cv_lbl_union_wait = yes ; then 438 AC_DEFINE(DECLWAITSTATUS,union wait,[type for wait]) 439 else 440 AC_DEFINE(DECLWAITSTATUS,int,[type for wait]) 441 fi]) 442 443 dnl 444 dnl Checks to see if the sockaddr struct has the 4.4 BSD sa_len member 445 dnl 446 dnl usage: 447 dnl 448 dnl AC_LBL_SOCKADDR_SA_LEN 449 dnl 450 dnl results: 451 dnl 452 dnl HAVE_SOCKADDR_SA_LEN (defined) 453 dnl 454 AC_DEFUN(AC_LBL_SOCKADDR_SA_LEN, 455 [AC_MSG_CHECKING(if sockaddr struct has sa_len member) 456 AC_CACHE_VAL(ac_cv_lbl_sockaddr_has_sa_len, 457 AC_TRY_COMPILE([ 458 # include <sys/types.h> 459 # include <sys/socket.h>], 460 [u_int i = sizeof(((struct sockaddr *)0)->sa_len)], 461 ac_cv_lbl_sockaddr_has_sa_len=yes, 462 ac_cv_lbl_sockaddr_has_sa_len=no)) 463 AC_MSG_RESULT($ac_cv_lbl_sockaddr_has_sa_len) 464 if test $ac_cv_lbl_sockaddr_has_sa_len = yes ; then 465 AC_DEFINE(HAVE_SOCKADDR_SA_LEN,1,[if struct sockaddr has sa_len]) 466 fi]) 467 468 dnl 469 dnl Checks to see if there's a sockaddr_storage structure 470 dnl 471 dnl usage: 472 dnl 473 dnl AC_LBL_SOCKADDR_STORAGE 474 dnl 475 dnl results: 476 dnl 477 dnl HAVE_SOCKADDR_STORAGE (defined) 478 dnl 479 AC_DEFUN(AC_LBL_SOCKADDR_STORAGE, 480 [AC_MSG_CHECKING(if sockaddr_storage struct exists) 481 AC_CACHE_VAL(ac_cv_lbl_has_sockaddr_storage, 482 AC_TRY_COMPILE([ 483 # include <sys/types.h> 484 # include <sys/socket.h>], 485 [u_int i = sizeof (struct sockaddr_storage)], 486 ac_cv_lbl_has_sockaddr_storage=yes, 487 ac_cv_lbl_has_sockaddr_storage=no)) 488 AC_MSG_RESULT($ac_cv_lbl_has_sockaddr_storage) 489 if test $ac_cv_lbl_has_sockaddr_storage = yes ; then 490 AC_DEFINE(HAVE_SOCKADDR_STORAGE,1,[if struct sockaddr_storage exists]) 491 fi]) 492 493 dnl 494 dnl Checks to see if the dl_hp_ppa_info_t struct has the HP-UX 11.00 495 dnl dl_module_id_1 member 496 dnl 497 dnl usage: 498 dnl 499 dnl AC_LBL_HP_PPA_INFO_T_DL_MODULE_ID_1 500 dnl 501 dnl results: 502 dnl 503 dnl HAVE_HP_PPA_INFO_T_DL_MODULE_ID_1 (defined) 504 dnl 505 dnl NOTE: any compile failure means we conclude that it doesn't have 506 dnl that member, so if we don't have DLPI, don't have a <sys/dlpi_ext.h> 507 dnl header, or have one that doesn't declare a dl_hp_ppa_info_t type, 508 dnl we conclude it doesn't have that member (which is OK, as either we 509 dnl won't be using code that would use that member, or we wouldn't 510 dnl compile in any case). 511 dnl 512 AC_DEFUN(AC_LBL_HP_PPA_INFO_T_DL_MODULE_ID_1, 513 [AC_MSG_CHECKING(if dl_hp_ppa_info_t struct has dl_module_id_1 member) 514 AC_CACHE_VAL(ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1, 515 AC_TRY_COMPILE([ 516 # include <sys/types.h> 517 # include <sys/dlpi.h> 518 # include <sys/dlpi_ext.h>], 519 [u_int i = sizeof(((dl_hp_ppa_info_t *)0)->dl_module_id_1)], 520 ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1=yes, 521 ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1=no)) 522 AC_MSG_RESULT($ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1) 523 if test $ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1 = yes ; then 524 AC_DEFINE(HAVE_HP_PPA_INFO_T_DL_MODULE_ID_1,1,[if ppa_info_t_dl_module_id exists]) 525 fi]) 526 527 dnl 528 dnl Checks to see if -R is used 529 dnl 530 dnl usage: 531 dnl 532 dnl AC_LBL_HAVE_RUN_PATH 533 dnl 534 dnl results: 535 dnl 536 dnl ac_cv_lbl_have_run_path (yes or no) 537 dnl 538 AC_DEFUN(AC_LBL_HAVE_RUN_PATH, 539 [AC_MSG_CHECKING(for ${CC-cc} -R) 540 AC_CACHE_VAL(ac_cv_lbl_have_run_path, 541 [echo 'main(){}' > conftest.c 542 ${CC-cc} -o conftest conftest.c -R/a1/b2/c3 >conftest.out 2>&1 543 if test ! -s conftest.out ; then 544 ac_cv_lbl_have_run_path=yes 545 else 546 ac_cv_lbl_have_run_path=no 547 fi 548 rm -f conftest*]) 549 AC_MSG_RESULT($ac_cv_lbl_have_run_path) 550 ]) 551 552 dnl 553 dnl Due to the stupid way it's implemented, AC_CHECK_TYPE is nearly useless. 554 dnl 555 dnl usage: 556 dnl 557 dnl AC_LBL_CHECK_TYPE 558 dnl 559 dnl results: 560 dnl 561 dnl int32_t (defined) 562 dnl u_int32_t (defined) 563 dnl 564 AC_DEFUN(AC_LBL_CHECK_TYPE, 565 [AC_MSG_CHECKING(for $1 using $CC) 566 AC_CACHE_VAL(ac_cv_lbl_have_$1, 567 AC_TRY_COMPILE([ 568 # include "confdefs.h" 569 # include <sys/types.h> 570 # if STDC_HEADERS 571 # include <stdlib.h> 572 # include <stddef.h> 573 # endif], 574 [$1 i], 575 ac_cv_lbl_have_$1=yes, 576 ac_cv_lbl_have_$1=no)) 577 AC_MSG_RESULT($ac_cv_lbl_have_$1) 578 if test $ac_cv_lbl_have_$1 = no ; then 579 AC_DEFINE($1, $2, [if we have $1]) 580 fi]) 581 582 dnl 583 dnl Checks to see if unaligned memory accesses fail 584 dnl 585 dnl usage: 586 dnl 587 dnl AC_LBL_UNALIGNED_ACCESS 588 dnl 589 dnl results: 590 dnl 591 dnl LBL_ALIGN (DEFINED) 592 dnl 593 AC_DEFUN(AC_LBL_UNALIGNED_ACCESS, 594 [AC_MSG_CHECKING(if unaligned accesses fail) 595 AC_CACHE_VAL(ac_cv_lbl_unaligned_fail, 596 [case "$host_cpu" in 597 598 # 599 # These are CPU types where: 600 # 601 # the CPU faults on an unaligned access, but at least some 602 # OSes that support that CPU catch the fault and simulate 603 # the unaligned access (e.g., Alpha/{Digital,Tru64} UNIX) - 604 # the simulation is slow, so we don't want to use it; 605 # 606 # the CPU, I infer (from the old 607 # 608 # XXX: should also check that they don't do weird things (like on arm) 609 # 610 # comment) doesn't fault on unaligned accesses, but doesn't 611 # do a normal unaligned fetch, either (e.g., presumably, ARM); 612 # 613 # for whatever reason, the test program doesn't work 614 # (this has been claimed to be the case for several of those 615 # CPUs - I don't know what the problem is; the problem 616 # was reported as "the test program dumps core" for SuperH, 617 # but that's what the test program is *supposed* to do - 618 # it dumps core before it writes anything, so the test 619 # for an empty output file should find an empty output 620 # file and conclude that unaligned accesses don't work). 621 # 622 # This run-time test won't work if you're cross-compiling, so 623 # in order to support cross-compiling for a particular CPU, 624 # we have to wire in the list of CPU types anyway, as far as 625 # I know, so perhaps we should just have a set of CPUs on 626 # which we know it doesn't work, a set of CPUs on which we 627 # know it does work, and have the script just fail on other 628 # cpu types and update it when such a failure occurs. 629 # 630 alpha*|arm*|hp*|mips*|sh*|sparc*|ia64|nv1) 631 ac_cv_lbl_unaligned_fail=yes 632 ;; 633 634 *) 635 cat >conftest.c <<EOF 636 # include <sys/types.h> 637 # include <sys/wait.h> 638 # include <stdio.h> 639 unsigned char a[[5]] = { 1, 2, 3, 4, 5 }; 640 main() { 641 unsigned int i; 642 pid_t pid; 643 int status; 644 /* avoid "core dumped" message */ 645 pid = fork(); 646 if (pid < 0) 647 exit(2); 648 if (pid > 0) { 649 /* parent */ 650 pid = waitpid(pid, &status, 0); 651 if (pid < 0) 652 exit(3); 653 exit(!WIFEXITED(status)); 654 } 655 /* child */ 656 i = *(unsigned int *)&a[[1]]; 657 printf("%d\n", i); 658 exit(0); 659 } 660 EOF 661 ${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS \ 662 conftest.c $LIBS >/dev/null 2>&1 663 if test ! -x conftest ; then 664 dnl failed to compile for some reason 665 ac_cv_lbl_unaligned_fail=yes 666 else 667 ./conftest >conftest.out 668 if test ! -s conftest.out ; then 669 ac_cv_lbl_unaligned_fail=yes 670 else 671 ac_cv_lbl_unaligned_fail=no 672 fi 673 fi 674 rm -f conftest* core core.conftest 675 ;; 676 esac]) 677 AC_MSG_RESULT($ac_cv_lbl_unaligned_fail) 678 if test $ac_cv_lbl_unaligned_fail = yes ; then 679 AC_DEFINE(LBL_ALIGN,1,[if unaligned access fails]) 680 fi]) 681 682 dnl 683 dnl If using gcc and the file .devel exists: 684 dnl Compile with -g (if supported) and -Wall 685 dnl If using gcc 2, do extra prototype checking 686 dnl If an os prototype include exists, symlink os-proto.h to it 687 dnl 688 dnl usage: 689 dnl 690 dnl AC_LBL_DEVEL(copt) 691 dnl 692 dnl results: 693 dnl 694 dnl $1 (copt appended) 695 dnl HAVE_OS_PROTO_H (defined) 696 dnl os-proto.h (symlinked) 697 dnl 698 AC_DEFUN(AC_LBL_DEVEL, 699 [rm -f os-proto.h 700 if test "${LBL_CFLAGS+set}" = set; then 701 $1="$$1 ${LBL_CFLAGS}" 702 fi 703 if test -f .devel ; then 704 if test "$GCC" = yes ; then 705 if test "${LBL_CFLAGS+set}" != set; then 706 if test "$ac_cv_prog_cc_g" = yes ; then 707 $1="-g $$1" 708 fi 709 $1="$$1 -Wall" 710 if test $ac_cv_lbl_gcc_vers -gt 1 ; then 711 $1="$$1 -Wmissing-prototypes -Wstrict-prototypes" 712 fi 713 fi 714 else 715 case "$target_os" in 716 717 irix6*) 718 V_CCOPT="$V_CCOPT -n32" 719 ;; 720 721 *) 722 ;; 723 esac 724 fi 725 os=`echo $target_os | sed -e 's/\([[0-9]][[0-9]]*\)[[^0-9]].*$/\1/'` 726 name="lbl/os-$os.h" 727 if test -f $name ; then 728 ln -s $name os-proto.h 729 AC_DEFINE(HAVE_OS_PROTO_H,1,[if there's an os_proto.h]) 730 else 731 AC_MSG_WARN(can't find $name) 732 fi 733 fi]) 734 735 dnl 736 dnl Improved version of AC_CHECK_LIB 737 dnl 738 dnl Thanks to John Hawkinson (jhawk (a] mit.edu) 739 dnl 740 dnl usage: 741 dnl 742 dnl AC_LBL_CHECK_LIB(LIBRARY, FUNCTION [, ACTION-IF-FOUND [, 743 dnl ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]]) 744 dnl 745 dnl results: 746 dnl 747 dnl LIBS 748 dnl 749 750 define(AC_LBL_CHECK_LIB, 751 [AC_MSG_CHECKING([for $2 in -l$1]) 752 dnl Use a cache variable name containing both the library and function name, 753 dnl because the test really is for library $1 defining function $2, not 754 dnl just for library $1. Separate tests with the same $1 and different $2's 755 dnl may have different results. 756 ac_lib_var=`echo $1['_']$2['_']$5 | sed 'y%./+- %__p__%'` 757 AC_CACHE_VAL(ac_cv_lbl_lib_$ac_lib_var, 758 [ac_save_LIBS="$LIBS" 759 LIBS="-l$1 $5 $LIBS" 760 AC_TRY_LINK(dnl 761 ifelse([$2], [main], , dnl Avoid conflicting decl of main. 762 [/* Override any gcc2 internal prototype to avoid an error. */ 763 ]ifelse(AC_LANG, CPLUSPLUS, [#ifdef __cplusplus 764 extern "C" 765 #endif 766 ])dnl 767 [/* We use char because int might match the return type of a gcc2 768 builtin and then its argument prototype would still apply. */ 769 char $2(); 770 ]), 771 [$2()], 772 eval "ac_cv_lbl_lib_$ac_lib_var=yes", 773 eval "ac_cv_lbl_lib_$ac_lib_var=no") 774 LIBS="$ac_save_LIBS" 775 ])dnl 776 if eval "test \"`echo '$ac_cv_lbl_lib_'$ac_lib_var`\" = yes"; then 777 AC_MSG_RESULT(yes) 778 ifelse([$3], , 779 [changequote(, )dnl 780 ac_tr_lib=HAVE_LIB`echo $1 | sed -e 's/[^a-zA-Z0-9_]/_/g' \ 781 -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` 782 changequote([, ])dnl 783 AC_DEFINE_UNQUOTED($ac_tr_lib) 784 LIBS="-l$1 $LIBS" 785 ], [$3]) 786 else 787 AC_MSG_RESULT(no) 788 ifelse([$4], , , [$4 789 ])dnl 790 fi 791 ]) 792 793 dnl 794 dnl AC_LBL_LIBRARY_NET 795 dnl 796 dnl This test is for network applications that need socket() and 797 dnl gethostbyname() -ish functions. Under Solaris, those applications 798 dnl need to link with "-lsocket -lnsl". Under IRIX, they need to link 799 dnl with "-lnsl" but should *not* link with "-lsocket" because 800 dnl libsocket.a breaks a number of things (for instance: 801 dnl gethostbyname() under IRIX 5.2, and snoop sockets under most 802 dnl versions of IRIX). 803 dnl 804 dnl Unfortunately, many application developers are not aware of this, 805 dnl and mistakenly write tests that cause -lsocket to be used under 806 dnl IRIX. It is also easy to write tests that cause -lnsl to be used 807 dnl under operating systems where neither are necessary (or useful), 808 dnl such as SunOS 4.1.4, which uses -lnsl for TLI. 809 dnl 810 dnl This test exists so that every application developer does not test 811 dnl this in a different, and subtly broken fashion. 812 813 dnl It has been argued that this test should be broken up into two 814 dnl seperate tests, one for the resolver libraries, and one for the 815 dnl libraries necessary for using Sockets API. Unfortunately, the two 816 dnl are carefully intertwined and allowing the autoconf user to use 817 dnl them independantly potentially results in unfortunate ordering 818 dnl dependancies -- as such, such component macros would have to 819 dnl carefully use indirection and be aware if the other components were 820 dnl executed. Since other autoconf macros do not go to this trouble, 821 dnl and almost no applications use sockets without the resolver, this 822 dnl complexity has not been implemented. 823 dnl 824 dnl The check for libresolv is in case you are attempting to link 825 dnl statically and happen to have a libresolv.a lying around (and no 826 dnl libnsl.a). 827 dnl 828 AC_DEFUN(AC_LBL_LIBRARY_NET, [ 829 # Most operating systems have gethostbyname() in the default searched 830 # libraries (i.e. libc): 831 # Some OSes (eg. Solaris) place it in libnsl 832 # Some strange OSes (SINIX) have it in libsocket: 833 AC_SEARCH_LIBS(gethostbyname, nsl socket resolv) 834 # Unfortunately libsocket sometimes depends on libnsl and 835 # AC_SEARCH_LIBS isn't up to the task of handling dependencies like this. 836 if test "$ac_cv_search_gethostbyname" = "no" 837 then 838 AC_CHECK_LIB(socket, gethostbyname, 839 LIBS="-lsocket -lnsl $LIBS", , -lnsl) 840 fi 841 AC_SEARCH_LIBS(socket, socket, , 842 AC_CHECK_LIB(socket, socket, LIBS="-lsocket -lnsl $LIBS", , -lnsl)) 843 # DLPI needs putmsg under HPUX so test for -lstr while we're at it 844 AC_SEARCH_LIBS(putmsg, str) 845 ]) 846 847 dnl 848 dnl Test for __attribute__ 849 dnl 850 851 AC_DEFUN(AC_C___ATTRIBUTE__, [ 852 AC_MSG_CHECKING(for __attribute__) 853 AC_CACHE_VAL(ac_cv___attribute__, [ 854 AC_COMPILE_IFELSE( 855 AC_LANG_SOURCE([[ 856 #include <stdlib.h> 857 858 static void foo(void) __attribute__ ((noreturn)); 859 860 static void 861 foo(void) 862 { 863 exit(1); 864 } 865 866 int 867 main(int argc, char **argv) 868 { 869 foo(); 870 } 871 ]]), 872 ac_cv___attribute__=yes, 873 ac_cv___attribute__=no)]) 874 if test "$ac_cv___attribute__" = "yes"; then 875 AC_DEFINE(HAVE___ATTRIBUTE__, 1, [define if your compiler has __attribute__]) 876 V_DEFS="$V_DEFS -D_U_=\"__attribute__((unused))\"" 877 else 878 V_DEFS="$V_DEFS -D_U_=\"\"" 879 fi 880 AC_MSG_RESULT($ac_cv___attribute__) 881 ]) 882 883 dnl 884 dnl Checks to see if tpacket_stats is defined in linux/if_packet.h 885 dnl If so then pcap-linux.c can use this to report proper statistics. 886 dnl 887 dnl -Scott Barron 888 dnl 889 AC_DEFUN(AC_LBL_TPACKET_STATS, 890 [AC_MSG_CHECKING(if if_packet.h has tpacket_stats defined) 891 AC_CACHE_VAL(ac_cv_lbl_tpacket_stats, 892 AC_TRY_COMPILE([ 893 # include <linux/if_packet.h>], 894 [struct tpacket_stats stats], 895 ac_cv_lbl_tpacket_stats=yes, 896 ac_cv_lbl_tpacket_stats=no)) 897 AC_MSG_RESULT($ac_cv_lbl_tpacket_stats) 898 if test $ac_cv_lbl_tpacket_stats = yes; then 899 AC_DEFINE(HAVE_TPACKET_STATS,1,[if if_packet.h has tpacket_stats defined]) 900 fi]) 901