aclocal.m4 revision 77298
1dnl See whether strncmp reads past the end of its string parameters. 2dnl On some versions of SunOS4 at least, strncmp reads a word at a time 3dnl but erroneously reads past the end of strings. This can cause 4dnl a SEGV in some cases. 5AC_DEFUN(libiberty_AC_FUNC_STRNCMP, 6[AC_REQUIRE([AC_FUNC_MMAP]) 7AC_CACHE_CHECK([for working strncmp], ac_cv_func_strncmp_works, 8[AC_TRY_RUN([ 9/* Test by Jim Wilson and Kaveh Ghazi. 10 Check whether strncmp reads past the end of its string parameters. */ 11#include <sys/types.h> 12 13#ifdef HAVE_FCNTL_H 14#include <fcntl.h> 15#endif 16 17#ifdef HAVE_SYS_MMAN_H 18#include <sys/mman.h> 19#endif 20 21#ifndef MAP_ANON 22#ifdef MAP_ANONYMOUS 23#define MAP_ANON MAP_ANONYMOUS 24#else 25#define MAP_ANON MAP_FILE 26#endif 27#endif 28 29#ifndef MAP_FILE 30#define MAP_FILE 0 31#endif 32#ifndef O_RDONLY 33#define O_RDONLY 0 34#endif 35 36#define MAP_LEN 0x10000 37 38main () 39{ 40#if defined(HAVE_MMAP) || defined(HAVE_MMAP_ANYWHERE) 41 char *p; 42 int dev_zero; 43 44 dev_zero = open ("/dev/zero", O_RDONLY); 45 if (dev_zero < 0) 46 exit (1); 47 48 p = (char *) mmap (0, MAP_LEN, PROT_READ|PROT_WRITE, 49 MAP_ANON|MAP_PRIVATE, dev_zero, 0); 50 if (p == (char *)-1) 51 exit (2); 52 else 53 { 54 char *string = "__si_type_info"; 55 char *q = (char *) p + MAP_LEN - strlen (string) - 2; 56 char *r = (char *) p + 0xe; 57 58 strcpy (q, string); 59 strcpy (r, string); 60 strncmp (r, q, 14); 61 } 62#endif /* HAVE_MMAP || HAVE_MMAP_ANYWHERE */ 63 exit (0); 64} 65], ac_cv_func_strncmp_works=yes, ac_cv_func_strncmp_works=no, 66 ac_cv_func_strncmp_works=no) 67rm -f core core.* *.core]) 68if test $ac_cv_func_strncmp_works = no ; then 69 LIBOBJS="$LIBOBJS strncmp.o" 70fi 71]) 72 73dnl See if errno must be declared even when <errno.h> is included. 74AC_DEFUN(libiberty_AC_DECLARE_ERRNO, 75[AC_CACHE_CHECK(whether errno must be declared, libiberty_cv_declare_errno, 76[AC_TRY_COMPILE( 77[#include <errno.h>], 78[int x = errno;], 79libiberty_cv_declare_errno=no, 80libiberty_cv_declare_errno=yes)]) 81if test $libiberty_cv_declare_errno = yes 82then AC_DEFINE(NEED_DECLARATION_ERRNO, 1, 83 [Define if errno must be declared even when <errno.h> is included.]) 84fi 85]) 86 87# FIXME: We temporarily define our own version of AC_PROG_CC. This is 88# copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS. We 89# are probably using a cross compiler, which will not be able to fully 90# link an executable. This should really be fixed in autoconf 91# itself. 92 93AC_DEFUN(LIB_AC_PROG_CC, 94[AC_BEFORE([$0], [AC_PROG_CPP])dnl 95AC_PROVIDE([AC_PROG_CC]) 96AC_CHECK_PROG(CC, gcc, gcc) 97if test -z "$CC"; then 98 AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc) 99 test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH]) 100fi 101 102AC_PROG_CC_GNU 103 104if test $ac_cv_prog_gcc = yes; then 105 GCC=yes 106 ac_libiberty_warn_cflags='-W -Wall -Wtraditional -pedantic' 107dnl Check whether -g works, even if CFLAGS is set, in case the package 108dnl plays around with CFLAGS (such as to build both debugging and 109dnl normal versions of a library), tasteless as that idea is. 110 ac_test_CFLAGS="${CFLAGS+set}" 111 ac_save_CFLAGS="$CFLAGS" 112 CFLAGS= 113 AC_PROG_CC_G 114 if test "$ac_test_CFLAGS" = set; then 115 CFLAGS="$ac_save_CFLAGS" 116 elif test $ac_cv_prog_cc_g = yes; then 117 CFLAGS="-g -O2" 118 else 119 CFLAGS="-O2" 120 fi 121else 122 GCC= 123 ac_libiberty_warn_cflags= 124 test "${CFLAGS+set}" = set || CFLAGS="-g" 125fi 126AC_SUBST(ac_libiberty_warn_cflags) 127]) 128 129# Work around a bug in autoheader. This can go away when we switch to 130# autoconf >2.50. The use of define instead of AC_DEFUN is 131# deliberate. 132define(AC_DEFINE_NOAUTOHEADER, 133[cat >> confdefs.h <<\EOF 134[#define] $1 ifelse($#, 2, [$2], $#, 3, [$2], 1) 135EOF 136]) 137