aclocal.m4 revision 77298
177298Sobriendnl See whether strncmp reads past the end of its string parameters.
277298Sobriendnl On some versions of SunOS4 at least, strncmp reads a word at a time
377298Sobriendnl but erroneously reads past the end of strings.  This can cause
477298Sobriendnl a SEGV in some cases.
577298SobrienAC_DEFUN(libiberty_AC_FUNC_STRNCMP,
677298Sobrien[AC_REQUIRE([AC_FUNC_MMAP])
777298SobrienAC_CACHE_CHECK([for working strncmp], ac_cv_func_strncmp_works,
877298Sobrien[AC_TRY_RUN([
977298Sobrien/* Test by Jim Wilson and Kaveh Ghazi.
1077298Sobrien   Check whether strncmp reads past the end of its string parameters. */
1177298Sobrien#include <sys/types.h>
1277298Sobrien
1377298Sobrien#ifdef HAVE_FCNTL_H
1477298Sobrien#include <fcntl.h>
1577298Sobrien#endif
1677298Sobrien
1777298Sobrien#ifdef HAVE_SYS_MMAN_H
1877298Sobrien#include <sys/mman.h>
1977298Sobrien#endif
2077298Sobrien
2177298Sobrien#ifndef MAP_ANON
2277298Sobrien#ifdef MAP_ANONYMOUS
2377298Sobrien#define MAP_ANON MAP_ANONYMOUS
2477298Sobrien#else
2577298Sobrien#define MAP_ANON MAP_FILE
2677298Sobrien#endif
2777298Sobrien#endif
2877298Sobrien
2977298Sobrien#ifndef MAP_FILE
3077298Sobrien#define MAP_FILE 0
3177298Sobrien#endif
3277298Sobrien#ifndef O_RDONLY
3377298Sobrien#define O_RDONLY 0
3477298Sobrien#endif
3577298Sobrien
3677298Sobrien#define MAP_LEN 0x10000
3777298Sobrien
3877298Sobrienmain ()
3977298Sobrien{
4077298Sobrien#if defined(HAVE_MMAP) || defined(HAVE_MMAP_ANYWHERE)
4177298Sobrien  char *p;
4277298Sobrien  int dev_zero;
4377298Sobrien
4477298Sobrien  dev_zero = open ("/dev/zero", O_RDONLY);
4577298Sobrien  if (dev_zero < 0)
4677298Sobrien    exit (1);
4777298Sobrien  
4877298Sobrien  p = (char *) mmap (0, MAP_LEN, PROT_READ|PROT_WRITE,
4977298Sobrien		     MAP_ANON|MAP_PRIVATE, dev_zero, 0);
5077298Sobrien  if (p == (char *)-1)
5177298Sobrien    exit (2);
5277298Sobrien  else
5377298Sobrien    {
5477298Sobrien      char *string = "__si_type_info";
5577298Sobrien      char *q = (char *) p + MAP_LEN - strlen (string) - 2;
5677298Sobrien      char *r = (char *) p + 0xe;
5777298Sobrien
5877298Sobrien      strcpy (q, string);
5977298Sobrien      strcpy (r, string);
6077298Sobrien      strncmp (r, q, 14);
6177298Sobrien    }
6277298Sobrien#endif /* HAVE_MMAP || HAVE_MMAP_ANYWHERE */
6377298Sobrien  exit (0);
6477298Sobrien}
6577298Sobrien], ac_cv_func_strncmp_works=yes, ac_cv_func_strncmp_works=no,
6677298Sobrien  ac_cv_func_strncmp_works=no)
6777298Sobrienrm -f core core.* *.core])
6877298Sobrienif test $ac_cv_func_strncmp_works = no ; then
6977298Sobrien  LIBOBJS="$LIBOBJS strncmp.o"
7077298Sobrienfi
7177298Sobrien])
7277298Sobrien
7377298Sobriendnl See if errno must be declared even when <errno.h> is included.
7477298SobrienAC_DEFUN(libiberty_AC_DECLARE_ERRNO,
7577298Sobrien[AC_CACHE_CHECK(whether errno must be declared, libiberty_cv_declare_errno,
7677298Sobrien[AC_TRY_COMPILE(
7777298Sobrien[#include <errno.h>],
7877298Sobrien[int x = errno;],
7977298Sobrienlibiberty_cv_declare_errno=no,
8077298Sobrienlibiberty_cv_declare_errno=yes)])
8177298Sobrienif test $libiberty_cv_declare_errno = yes
8277298Sobrienthen AC_DEFINE(NEED_DECLARATION_ERRNO, 1,
8377298Sobrien  [Define if errno must be declared even when <errno.h> is included.])
8477298Sobrienfi
8577298Sobrien])
8677298Sobrien
8777298Sobrien# FIXME: We temporarily define our own version of AC_PROG_CC.  This is
8877298Sobrien# copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS.  We
8977298Sobrien# are probably using a cross compiler, which will not be able to fully
9077298Sobrien# link an executable.  This should really be fixed in autoconf
9177298Sobrien# itself.
9277298Sobrien
9377298SobrienAC_DEFUN(LIB_AC_PROG_CC,
9477298Sobrien[AC_BEFORE([$0], [AC_PROG_CPP])dnl
9577298SobrienAC_PROVIDE([AC_PROG_CC])
9677298SobrienAC_CHECK_PROG(CC, gcc, gcc)
9777298Sobrienif test -z "$CC"; then
9877298Sobrien  AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
9977298Sobrien  test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
10077298Sobrienfi
10177298Sobrien
10277298SobrienAC_PROG_CC_GNU
10377298Sobrien
10477298Sobrienif test $ac_cv_prog_gcc = yes; then
10577298Sobrien  GCC=yes
10677298Sobrien  ac_libiberty_warn_cflags='-W -Wall -Wtraditional -pedantic'
10777298Sobriendnl Check whether -g works, even if CFLAGS is set, in case the package
10877298Sobriendnl plays around with CFLAGS (such as to build both debugging and
10977298Sobriendnl normal versions of a library), tasteless as that idea is.
11077298Sobrien  ac_test_CFLAGS="${CFLAGS+set}"
11177298Sobrien  ac_save_CFLAGS="$CFLAGS"
11277298Sobrien  CFLAGS=
11377298Sobrien  AC_PROG_CC_G
11477298Sobrien  if test "$ac_test_CFLAGS" = set; then
11577298Sobrien    CFLAGS="$ac_save_CFLAGS"
11677298Sobrien  elif test $ac_cv_prog_cc_g = yes; then
11777298Sobrien    CFLAGS="-g -O2"
11877298Sobrien  else
11977298Sobrien    CFLAGS="-O2"
12077298Sobrien  fi
12177298Sobrienelse
12277298Sobrien  GCC=
12377298Sobrien  ac_libiberty_warn_cflags=
12477298Sobrien  test "${CFLAGS+set}" = set || CFLAGS="-g"
12577298Sobrienfi
12677298SobrienAC_SUBST(ac_libiberty_warn_cflags)
12777298Sobrien])
12877298Sobrien
12977298Sobrien# Work around a bug in autoheader.  This can go away when we switch to
13077298Sobrien# autoconf >2.50.  The use of define instead of AC_DEFUN is
13177298Sobrien# deliberate.
13277298Sobriendefine(AC_DEFINE_NOAUTOHEADER,
13377298Sobrien[cat >> confdefs.h <<\EOF
13477298Sobrien[#define] $1 ifelse($#, 2, [$2], $#, 3, [$2], 1)
13577298SobrienEOF
13677298Sobrien])
137