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