dnl Process this file with autoconf to produce a configure script

AC_INIT
AC_CONFIG_SRCDIR([xmalloc.c])
AC_CONFIG_MACRO_DIRS([../config])

# This works around the fact that libtool configuration may change LD
# for this particular configuration, but some shells, instead of
# keeping the changes in LD private, export them just because LD is
# exported.  We don't use libtool yet, but some day we might, so...
ORIGINAL_LD_FOR_MULTILIBS=$LD

dnl We use these options to decide which functions to include.
AC_ARG_WITH(target-subdir,
[  --with-target-subdir=SUBDIR      Configuring in a subdirectory for target])
AC_ARG_WITH(build-subdir,
[  --with-build-subdir=SUBDIR       Configuring in a subdirectory for build])
AC_ARG_WITH(cross-host,
[  --with-cross-host=HOST           Configuring with a cross compiler])
AC_ARG_WITH(newlib,
[  --with-newlib                    Configuring with newlib])

if test "${srcdir}" = "."; then
 if test -n "${with_build_subdir}"; then
   libiberty_topdir="${srcdir}/../.."
   with_target_subdir=
 elif test -z "${with_target_subdir}"; then
   libiberty_topdir="${srcdir}/.."
 else
   if test "${with_target_subdir}" != "."; then
     libiberty_topdir="${srcdir}/${with_multisrctop}../.."
   else
     libiberty_topdir="${srcdir}/${with_multisrctop}.."
   fi
 fi
else
 libiberty_topdir="${srcdir}/.."
fi
AC_SUBST(libiberty_topdir)
AC_CONFIG_AUX_DIR($libiberty_topdir)

dnl Very limited version of automake's enable-maintainer-mode

AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
 dnl maintainer-mode is disabled by default
 AC_ARG_ENABLE(maintainer-mode,
[  --enable-maintainer-mode
                         enable make rules and dependencies not useful
                         (and sometimes confusing) to the casual installer],
     maintainer_mode=$enableval,
     maintainer_mode=no)

AC_MSG_RESULT($maintainer_mode)

if test "$maintainer_mode" = "yes"; then
 MAINT=''
 NOTMAINT='#'
else
 MAINT='#'
 NOTMAINT=''
fi
AC_SUBST(MAINT)dnl
AC_SUBST(NOTMAINT)dnl

if test -z "$ETAGS"; then
 ETAGS=etags
fi
AC_SUBST([ETAGS])

# Do we have a single-tree copy of texinfo?  Even if we do, we can't
# rely on it - libiberty is built before texinfo.
AC_CHECK_PROG(MAKEINFO, makeinfo, makeinfo, )
if test "x$MAKEINFO" = "x"; then
   MAKEINFO="@echo makeinfo missing; true"
   BUILD_INFO=
else
   BUILD_INFO=info
   case "$MAKEINFO" in
     */missing\ makeinfo*)
       BUILD_INFO=
       AC_MSG_WARN([
*** Makeinfo is missing. Info documentation will not be built.])
       ;;
     *)
       case x"`$MAKEINFO --version | grep 'GNU texinfo'`" in
         x*\ [[1-3]].* )
           MAKEINFO="@echo $MAKEINFO is too old, 4.0 or newer required; true"
           BUILD_INFO=
           AC_MSG_WARN([
*** Makeinfo is too old. Info documentation will not be built.])
         ;;
       esac
       ;;
   esac
fi
AC_SUBST(MAKEINFO)
AC_SUBST(BUILD_INFO)

AC_CHECK_PROG(PERL, perl, perl, )
if test x"$PERL" = x""; then
 HAVE_PERL='#'
else
 HAVE_PERL=''
fi
AC_SUBST(HAVE_PERL)

AC_CANONICAL_HOST

dnl When we start using automake:
dnl AM_INIT_AUTOMAKE(libiberty, 1.0)

dnl These must be called before AM_PROG_LIBTOOL, because it may want
dnl to call AC_CHECK_PROG.
AC_CHECK_TOOL(AR, ar)
AC_CHECK_TOOL(RANLIB, ranlib, :)

GCC_PLUGIN_OPTION(PLUGIN_OPTION)
if test -n "$PLUGIN_OPTION"; then
 if $AR --help 2>&1 | grep -q "\--plugin"; then
   AR_PLUGIN_OPTION="$PLUGIN_OPTION"
   AC_SUBST(AR_PLUGIN_OPTION)
 fi
 if $RANLIB --help 2>&1 | grep -q "\--plugin"; then
   RANLIB_PLUGIN_OPTION="$PLUGIN_OPTION"
   AC_SUBST(RANLIB_PLUGIN_OPTION)
 fi
fi

dnl When switching to automake, replace the following with AM_ENABLE_MULTILIB.
# Add --enable-multilib to configure.
# Default to --enable-multilib
AC_ARG_ENABLE(multilib,
[  --enable-multilib       build many library versions (default)],
[case "$enableval" in
 yes) multilib=yes ;;
 no)  multilib=no ;;
 *)   AC_MSG_ERROR([bad value $enableval for multilib option]) ;;
esac],
             [multilib=yes])

# Even if the default multilib is not a cross compilation,
# it may be that some of the other multilibs are.
if test $cross_compiling = no && test $multilib = yes \
  && test "x${with_multisubdir}" != x ; then
  cross_compiling=maybe
fi

# We may wish to install the target headers somewhere.
AC_MSG_CHECKING([whether to install libiberty headers and static library])
dnl install-libiberty is disabled by default

AC_ARG_ENABLE(install-libiberty,
[  --enable-install-libiberty       Install headers and library for end users],
enable_install_libiberty=$enableval,
enable_install_libiberty=no)dnl

# Option parsed, now set things appropriately.
case x"$enable_install_libiberty" in
 xyes|x)
   target_header_dir=libiberty
   ;;
 xno)
   target_header_dir=
   ;;
 *)
   # This could be sanity-checked in various ways...
   target_header_dir="${enable_install_libiberty}"
   ;;
esac
AC_MSG_RESULT($enable_install_libiberty)
AC_MSG_NOTICE([target_header_dir = $target_header_dir])

GCC_NO_EXECUTABLES
AC_PROG_CC
AC_GNU_SOURCE
AC_SYS_LARGEFILE
AC_PROG_CPP_WERROR

ACX_PROG_CC_WARNING_OPTS([-W -Wall -Wwrite-strings -Wc++-compat \
                         -Wstrict-prototypes \
                         -Wshadow=local], [ac_libiberty_warn_cflags])
ACX_PROG_CC_WARNING_ALMOST_PEDANTIC([], [ac_libiberty_warn_cflags])

AC_PROG_CC_C_O
# autoconf is lame and doesn't give us any substitution variable for this.
if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
 NO_MINUS_C_MINUS_O=yes
else
 OUTPUT_OPTION='-o $@'
fi
AC_SUBST(NO_MINUS_C_MINUS_O)
AC_SUBST(OUTPUT_OPTION)

AC_C_CONST
AC_C_INLINE
AC_C_BIGENDIAN

dnl When we start using libtool:
dnl Default to a non shared library.  This may be overridden by the
dnl configure option --enable-shared.
dnl AM_DISABLE_SHARED

dnl When we start using libtool:
dnl AM_PROG_LIBTOOL

dnl When we start using automake:
dnl AM_CONFIG_HEADER(config.h:config.in)
AC_CONFIG_HEADER(config.h:config.in)

dnl When we start using automake:
dnl AM_MAINTAINER_MODE
dnl AC_EXEEXT

dnl When we start using automake:
dnl AM_PROG_INSTALL
AC_PROG_INSTALL

# Don't build the shared library for build.
if [[ -n "${with_build_subdir}" ]]; then
 enable_shared=no
fi

frag=
case "${host}" in
 rs6000-ibm-aix3.1 | rs6000-ibm-aix)
                       frag=mh-aix ;;
 *-*-cxux7*)           frag=mh-cxux7 ;;
 *-*-freebsd2.1.*)     frag=mh-fbsd21 ;;
 *-*-freebsd2.2.[[012]])       frag=mh-fbsd21 ;;
 i370-*-opened*)       frag=mh-openedition ;;
 i[[34567]]86-*-windows*)      frag=mh-windows ;;
esac

if [[ -n "${frag}" ]]; then
 frag=${libiberty_topdir}/libiberty/config/$frag
fi

GCC_PICFLAG

# If they didn't specify --enable-shared, don't generate shared libs.
case "${enable_shared}" in
 yes) shared=yes ;;
 no) shared=no ;;
 "") shared=no ;;
 *) shared=yes ;;
esac

# ...unless --enable-host-{shared,pie} was passed from top-level config:
if [[ "${enable_host_shared}" = "yes" ]] || [[ "${enable_host_pie}" = "yes" ]]; then
 shared=yes
fi

if [[ "${shared}" != "yes" ]]; then
 PICFLAG=
fi
AC_SUBST(PICFLAG)

NOASANFLAG=
case " ${CFLAGS} " in
 *\ -fsanitize=address\ *) NOASANFLAG=-fno-sanitize=address ;;
 *\ -fsanitize=hwaddress\ *) NOASANFLAG=-fno-sanitize=hwaddress ;;
esac
AC_SUBST(NOASANFLAG)

GCC_CET_HOST_FLAGS(CET_HOST_FLAGS)
AC_SUBST(CET_HOST_FLAGS)

GCC_CHECK_ASSEMBLER_HWCAP

echo "# Warning: this fragment is automatically generated" > temp-frag

if [[ -n "${frag}" ]] && [[ -f "${frag}" ]]; then
 echo "Appending ${frag} to xhost-mkfrag"
 echo "# Following fragment copied from ${frag}" >> temp-frag
 cat ${frag} >> temp-frag
fi

# record if we want to build shared libs.
if [[ "${shared}" = "yes" ]]; then
 echo enable_shared = yes >> temp-frag
else
 echo enable_shared = no >> temp-frag
fi

frag=xhost-mkfrag
${CONFIG_SHELL-/bin/sh} ${libiberty_topdir}/move-if-change temp-frag xhost-mkfrag

host_makefile_frag=${frag}
AC_SUBST_FILE(host_makefile_frag)

# It's OK to check for header files.  Although the compiler may not be
# able to link anything, it had better be able to at least compile
# something.
AC_CHECK_HEADERS(sys/file.h sys/param.h limits.h stdlib.h malloc.h string.h unistd.h strings.h sys/time.h time.h sys/resource.h sys/stat.h sys/mman.h fcntl.h alloca.h sys/pstat.h sys/sysmp.h sys/sysinfo.h machine/hal_sysinfo.h sys/table.h sys/sysctl.h sys/systemcfg.h stdint.h stdio_ext.h process.h sys/prctl.h spawn.h)
AC_HEADER_SYS_WAIT
AC_HEADER_TIME

libiberty_AC_DECLARE_ERRNO

# Determine sizes of some types.
AC_CHECK_SIZEOF([int])
AC_CHECK_SIZEOF([long])
AC_CHECK_SIZEOF([size_t])

# Check for presense of long long
AC_CHECK_TYPE([long long],
 [AC_DEFINE(HAVE_LONG_LONG, 1, [Define if you have the `long long' type.]) AC_CHECK_SIZEOF([long long])],
 [])

# Look for a 64-bit type.
AC_MSG_CHECKING([for a 64-bit type])
AC_CACHE_VAL(liberty_cv_uint64,
[AC_TRY_COMPILE(
[#ifdef HAVE_STDINT_H
#include <stdint.h>
#endif],
[extern uint64_t foo;],
liberty_cv_uint64=uint64_t,
[AC_TRY_COMPILE(
[#ifdef HAVE_LIMITS_H
#include <limits.h>
#endif
#ifndef CHAR_BIT
#define CHAR_BIT 8
#endif],
[extern char foo[sizeof(long) * CHAR_BIT >= 64 ? 1 : -1];],
liberty_cv_uint64="unsigned long",
[AC_TRY_COMPILE(
[#ifdef HAVE_LIMITS_H
#include <limits.h>
#endif
#ifndef CHAR_BIT
#define CHAR_BIT 8
#endif],
[extern char foo[sizeof(long long) * CHAR_BIT >= 64 ? 1 : -1];],
liberty_cv_uint64="unsigned long long", liberty_cv_uint64=none)])])])
AC_MSG_RESULT($liberty_cv_uint64)
if test "$liberty_cv_uint64" != none; then
 AC_DEFINE_UNQUOTED(UNSIGNED_64BIT_TYPE, $liberty_cv_uint64,
                    [Define to an unsigned 64-bit type available in the compiler.])
fi

AC_TYPE_INTPTR_T
AC_TYPE_UINTPTR_T
AC_TYPE_SSIZE_T

# Given the above check, we always have uintptr_t or a fallback
# definition.  So define HAVE_UINTPTR_T in case any imported code
# relies on it.
AC_DEFINE(HAVE_UINTPTR_T, 1, [Define if you have the \`uintptr_t' type.])

AC_TYPE_PID_T

# This is the list of functions which libiberty will provide if they
# are not available on the host.

funcs="asprintf"
funcs="$funcs atexit"
funcs="$funcs basename"
funcs="$funcs bcmp"
funcs="$funcs bcopy"
funcs="$funcs bsearch"
funcs="$funcs bzero"
funcs="$funcs calloc"
funcs="$funcs clock"
funcs="$funcs ffs"
funcs="$funcs getcwd"
funcs="$funcs getpagesize"
funcs="$funcs gettimeofday"
funcs="$funcs index"
funcs="$funcs insque"
funcs="$funcs memchr"
funcs="$funcs memcmp"
funcs="$funcs memcpy"
funcs="$funcs memmem"
funcs="$funcs memmove"
funcs="$funcs mempcpy"
funcs="$funcs memset"
funcs="$funcs mkstemps"
funcs="$funcs putenv"
funcs="$funcs random"
funcs="$funcs rename"
funcs="$funcs rindex"
funcs="$funcs setenv"
funcs="$funcs snprintf"
funcs="$funcs sigsetmask"
funcs="$funcs stpcpy"
funcs="$funcs stpncpy"
funcs="$funcs strcasecmp"
funcs="$funcs strchr"
funcs="$funcs strdup"
funcs="$funcs strncasecmp"
funcs="$funcs strndup"
funcs="$funcs strnlen"
funcs="$funcs strrchr"
funcs="$funcs strstr"
funcs="$funcs strtod"
funcs="$funcs strtol"
funcs="$funcs strtoul"
funcs="$funcs strtoll"
funcs="$funcs strtoull"
funcs="$funcs strverscmp"
funcs="$funcs tmpnam"
funcs="$funcs vasprintf"
funcs="$funcs vfprintf"
funcs="$funcs vprintf"
funcs="$funcs vsnprintf"
funcs="$funcs vsprintf"
funcs="$funcs waitpid"
funcs="$funcs setproctitle"

# Also in the old function.def file: alloca, vfork, getopt.

vars="sys_errlist sys_nerr sys_siglist"

checkfuncs="__fsetlocking canonicalize_file_name dup3 getrlimit getrusage \
getsysinfo gettimeofday on_exit pipe2 posix_spawn posix_spawnp psignal \
pstat_getdynamic pstat_getstatic \
realpath setrlimit spawnve spawnvpe strerror strsignal sysconf sysctl \
sysmp table times wait3 wait4"

# Darwin has sbrk, but it is deprecated and that produces build-time warnings
# so do not check for it.
case "${host}" in
 *-*-darwin*) ;;
 *) checkfuncs="$checkfuncs sbrk"
esac

# These are neither executed nor required, but they help keep
# autoheader happy without adding a bunch of text to acconfig.h.
if test "x" = "y"; then
 AC_CHECK_FUNCS(asprintf atexit \
   basename bcmp bcopy bsearch bzero \
   calloc canonicalize_file_name clock \
   dup3 \
   ffs __fsetlocking \
   getcwd getpagesize getrlimit getrusage getsysinfo gettimeofday \
   index insque \
   memchr memcmp memcpy memmem memmove memset mkstemps \
   on_exit \
   pipe2 posix_spawn posix_spawnp psignal \
   pstat_getdynamic pstat_getstatic putenv \
   random realpath rename rindex \
   sbrk setenv setproctitle setrlimit sigsetmask snprintf spawnve spawnvpe \
    stpcpy stpncpy strcasecmp strchr strdup \
    strerror strncasecmp strndup strnlen strrchr strsignal strstr strtod \
    strtol strtoul strtoll strtoull strverscmp sysconf sysctl sysmp \
   table times tmpnam \
   vasprintf vfprintf vprintf vsprintf \
   wait3 wait4 waitpid)
 AC_CHECK_DECLS([basename(char *), ffs, asprintf, vasprintf, snprintf, vsnprintf, strtol, strtoul, strtoll, strtoull, strnlen])
 AC_DEFINE(HAVE_SYS_ERRLIST, 1, [Define if you have the sys_errlist variable.])
 AC_DEFINE(HAVE_SYS_NERR,    1, [Define if you have the sys_nerr variable.])
 AC_DEFINE(HAVE_SYS_SIGLIST, 1, [Define if you have the sys_siglist variable.])
fi

# For each of these functions, if the host does not provide the
# function we want to put FN.o in LIBOBJS, and if the host does
# provide the function, we want to define HAVE_FN in config.h.

setobjs=
CHECK=
if test -n "${with_target_subdir}"; then

 # We are being configured as a target library.  AC_REPLACE_FUNCS
 # may not work correctly, because the compiler may not be able to
 # link executables.  Note that we may still be being configured
 # native.

 # If we are being configured for newlib, we know which functions
 # newlib provide and which ones we will be expected to provide.

 if test "x${with_newlib}" = "xyes"; then
   AC_LIBOBJ([asprintf])
   AC_LIBOBJ([basename])
   AC_LIBOBJ([insque])
   AC_LIBOBJ([random])
   AC_LIBOBJ([strdup])
   AC_LIBOBJ([vasprintf])

   for f in $funcs; do
     case "$f" in
       asprintf | basename | insque | random | strdup | vasprintf)
         ;;
       *)
         n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
         AC_DEFINE_UNQUOTED($n)
         ;;
     esac
   done

   # newlib doesnt provide any of the variables in $vars, so we
   # dont have to check them here.

   # Of the functions in $checkfuncs, newlib only has strerror.
   AC_DEFINE(HAVE_STRERROR)

   setobjs=yes

 fi

 # If we are being configured for Mingw, we know which functions
 # Mingw provides and which ones we will be expected to provide.

 case "${host}" in
 *-*-mingw*)
   AC_LIBOBJ([asprintf])
   AC_LIBOBJ([basename])
   AC_LIBOBJ([bcmp])
   AC_LIBOBJ([bcopy])
   AC_LIBOBJ([bzero])
   AC_LIBOBJ([clock])
   AC_LIBOBJ([ffs])
   AC_LIBOBJ([getpagesize])
   AC_LIBOBJ([index])
   AC_LIBOBJ([insque])
   AC_LIBOBJ([mempcpy])
   AC_LIBOBJ([mkstemps])
   AC_LIBOBJ([random])
   AC_LIBOBJ([rindex])
   AC_LIBOBJ([sigsetmask])
   AC_LIBOBJ([stpcpy])
   AC_LIBOBJ([stpncpy])
   AC_LIBOBJ([strndup])
   AC_LIBOBJ([strnlen])
   AC_LIBOBJ([strverscmp])
   AC_LIBOBJ([vasprintf])
   AC_LIBOBJ([waitpid])

   for f in $funcs; do
     case "$f" in
       asprintf | basename | bcmp | bcopy | bzero | clock | ffs | getpagesize | index | insque | mempcpy | mkstemps | random | rindex | sigsetmask | stpcpy | stpncpy | strdup | strndup | strnlen | strverscmp | vasprintf | waitpid)
         ;;
       *)
         n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
         AC_DEFINE_UNQUOTED($n)
         ;;
     esac
   done

   # Mingw doesnt provide any of the variables in $vars, so we
   # dont have to check them here.

   # Of the functions in $checkfuncs, Mingw only has strerror.
   AC_DEFINE(HAVE_STRERROR)

   setobjs=yes
   ;;

 *-*-msdosdjgpp)
   AC_LIBOBJ([vasprintf])
   AC_LIBOBJ([vsnprintf])
   AC_LIBOBJ([snprintf])
   AC_LIBOBJ([asprintf])

   for f in atexit basename bcmp bcopy bsearch bzero calloc clock ffs \
            getcwd getpagesize getrusage gettimeofday \
            index insque memchr memcmp memcpy memmove memset psignal \
            putenv random rename rindex sbrk setenv stpcpy strcasecmp \
            strchr strdup strerror strncasecmp strrchr strstr strtod \
            strtol strtoul sysconf times tmpnam vfprintf vprintf \
            vsprintf waitpid
   do
     n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
     AC_DEFINE_UNQUOTED($n)
   done


   setobjs=yes
   ;;

 esac

else

  # Not a target library, so we set things up to run the test suite.
  CHECK=really-check

fi

AC_SUBST(CHECK)
AC_SUBST(target_header_dir)

case "${host}" in
 *-*-cygwin* | *-*-mingw*)
   AC_DEFINE(HAVE_SYS_ERRLIST)
   AC_DEFINE(HAVE_SYS_NERR)
   ;;
esac

if test -z "${setobjs}"; then
 case "${host}" in

 *-*-vxworks*)
   # Handle VxWorks configuration specially, since on VxWorks the
   # libraries are actually on the target board, not in the file
   # system.
   AC_LIBOBJ([basename])
   AC_LIBOBJ([getpagesize])
   AC_LIBOBJ([insque])
   AC_LIBOBJ([random])
   AC_LIBOBJ([strcasecmp])
   AC_LIBOBJ([strncasecmp])
   AC_LIBOBJ([strdup])
   AC_LIBOBJ([vfork])
   AC_LIBOBJ([waitpid])
   AC_LIBOBJ([vasprintf])
   for f in $funcs; do
     case "$f" in
       basename | getpagesize | insque | random | strcasecmp)
         ;;
       strncasecmp | strdup | vfork | waitpid | vasprintf)
         ;;
       *)
         n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
         AC_DEFINE_UNQUOTED($n)
         ;;
     esac
   done

   # VxWorks doesn't provide any of the variables in $vars, so we
   # don't have to check them here.

   # Of the functions in $checkfuncs, VxWorks only has strerror.
   AC_DEFINE(HAVE_STRERROR)

   setobjs=yes
   ;;

 esac
fi

if test -z "${setobjs}"; then

 case "${host}" in

 *-*-android*)
   # On android, getpagesize is defined in unistd.h as a static inline
   # function, which AC_CHECK_FUNCS does not handle properly.
   ac_cv_func_getpagesize=yes
   ;;

 hppa*-*-hpux*)
   # Replace system snprintf and vsnprintf with libiberty implementations.
   AC_LIBOBJ([snprintf])
   AC_LIBOBJ([vsnprintf])
   ;;

 *-*-mingw32*)
   # Under mingw32, sys_nerr and sys_errlist exist, but they are
   # macros, so the test below won't find them.
   libiberty_cv_var_sys_nerr=yes
   libiberty_cv_var_sys_errlist=yes
   ;;

 *-*-msdosdjgpp*)
   # vfork and fork are stubs.
   ac_cv_func_vfork_works=no
   ;;

 *-*-uwin*)
   # Under some versions of uwin, vfork is notoriously buggy and the test
   # can hang configure; on other versions, vfork exists just as a stub.
   # FIXME: This should be removed once vfork in uwin's runtime is fixed.
   ac_cv_func_vfork_works=no
   # Under uwin 2.0+, sys_nerr and sys_errlist exist, but they are
   # macros (actually, these are imported from a DLL, but the end effect
   # is the same), so the test below won't find them.
   libiberty_cv_var_sys_nerr=yes
   libiberty_cv_var_sys_errlist=yes
   ;;

 *-*-*vms*)
   # Under VMS, vfork works very different than on Unix. The standard test
   # won't work, and it isn't easily adaptable. It makes more sense to
   # just force it.
   ac_cv_func_vfork_works=yes
   ;;

 esac

 # We haven't set the list of objects yet.  Use the standard autoconf
 # tests.  This will only work if the compiler works.
 AC_ISC_POSIX
 AC_REPLACE_FUNCS($funcs)
 libiberty_AC_FUNC_C_ALLOCA
 AC_FUNC_FORK
 if test $ac_cv_func_vfork_works = no; then
   AC_LIBOBJ([vfork])
 fi
 # We only need _doprnt if we might use it to implement v*printf.
 if test $ac_cv_func_vprintf != yes \
    || test $ac_cv_func_vfprintf != yes \
    || test $ac_cv_func_vsprintf != yes; then
   AC_REPLACE_FUNCS(_doprnt)
 else
   AC_CHECK_FUNCS(_doprnt)
 fi

 for v in $vars; do
   AC_MSG_CHECKING([for $v])
   AC_CACHE_VAL(libiberty_cv_var_$v,
     [AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern int $v [];]],[[if ($v [0]) return 1;]])],
                     [eval "libiberty_cv_var_$v=yes"],
                     [eval "libiberty_cv_var_$v=no"])])
   if eval "test \"`echo '$libiberty_cv_var_'$v`\" = yes"; then
     AC_MSG_RESULT(yes)
     n=HAVE_`echo $v | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
     AC_DEFINE_UNQUOTED($n)
   else
     AC_MSG_RESULT(no)
   fi
 done

 # special check for _system_configuration because AIX <4.3.2 do not
 # contain the `physmem' member.
 AC_MSG_CHECKING([for external symbol _system_configuration])
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/systemcfg.h>]],
                       [[double x = _system_configuration.physmem;]])],
   [AC_MSG_RESULT([yes])
   AC_DEFINE(HAVE__SYSTEM_CONFIGURATION, 1,
             [Define if you have the _system_configuration variable.])],
   [AC_MSG_RESULT([no])])

 AC_CHECK_FUNCS($checkfuncs)
 AC_CHECK_DECLS([basename(char *), ffs, asprintf, vasprintf, snprintf, vsnprintf])
 AC_CHECK_DECLS([calloc, getenv, getopt, malloc, realloc])
 case "${host}" in
     *-*-darwin*) ;; # Darwin's sbrk implementation is deprecated.
     *) AC_CHECK_DECLS([sbrk]);;
 esac
 AC_CHECK_DECLS([strtol, strtoul, strtoll, strtoull])
 AC_CHECK_DECLS([strverscmp])
 AC_CHECK_DECLS([strnlen])
 libiberty_NEED_DECLARATION(canonicalize_file_name)
fi

# Figure out which version of pexecute to use.
case "${host}" in
    *-*-mingw* | *-*-winnt*)   pexecute=pex-win32  ;;
    *-*-msdosdjgpp*)           pexecute=pex-djgpp  ;;
    *-*-msdos*)                pexecute=pex-msdos  ;;
    *)                         pexecute=pex-unix   ;;
esac
AC_SUBST(pexecute)

AC_MSG_CHECKING([for SHA1 HW acceleration support])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#include <x86intrin.h>
#include <cpuid.h>

__attribute__((__target__ ("sse4.1,sha")))
void foo (__m128i *buf, unsigned int e, __m128i msg0, __m128i msg1)
{
 __m128i abcd = _mm_loadu_si128 ((const __m128i *) buf);
 __m128i e0 = _mm_set_epi32 (e, 0, 0, 0);
 abcd = _mm_shuffle_epi32 (abcd, 0x1b);
 const __m128i shuf_mask = _mm_set_epi64x (0x0001020304050607ULL, 0x08090a0b0c0d0e0fULL);
 abcd = _mm_shuffle_epi8 (abcd, shuf_mask);
 e0 = _mm_sha1nexte_epu32 (e0, msg1);
 abcd = _mm_sha1rnds4_epu32 (abcd, e0, 0);
 msg0 = _mm_sha1msg1_epu32 (msg0, msg1);
 msg0 = _mm_sha1msg2_epu32 (msg0, msg1);
 msg0 = _mm_xor_si128 (msg0, msg1);
 e0 = _mm_add_epi32 (e0, msg0);
 e0 = abcd;
 _mm_storeu_si128 (buf, abcd);
 e = _mm_extract_epi32 (e0, 3);
}

int bar (void)
{
 unsigned int eax, ebx, ecx, edx;
 (void) __get_cpuid;
 (void) __get_cpuid_count;
 if (__get_cpuid_count (7, 0, &eax, &ebx, &ecx, &edx)
     && (ebx & bit_SHA) != 0
     && __get_cpuid (1, &eax, &ebx, &ecx, &edx)
     && (ecx & bit_SSE4_1) != 0)
   return 1;
 return 0;
}
]], [[bar ();]])],
 [AC_MSG_RESULT([x86 SHA1])
 AC_DEFINE(HAVE_X86_SHA1_HW_SUPPORT, 1,
           [Define if you have x86 SHA1 HW acceleration support.])],
 [AC_MSG_RESULT([no])])

libiberty_AC_FUNC_STRNCMP

# Install a library built with a cross compiler in $(tooldir) rather
# than $(libdir).
if test -z "${with_cross_host}"; then
 INSTALL_DEST=libdir
else
 INSTALL_DEST=tooldir
fi
AC_SUBST(INSTALL_DEST)

m4_pattern_allow(LIBOBJS)
L=""
for l in x $LIBOBJS; do
 case $l in
   x) ;;
   *) L="$L ./$l" ;;
 esac
done
LIBOBJS="$L"

dnl Required by html and install-html
AC_SUBST(datarootdir)
AC_SUBST(docdir)
AC_SUBST(htmldir)

# We need multilib support, but only if configuring for the target.
AC_CONFIG_FILES([Makefile])
AC_CONFIG_COMMANDS([default],
 [[test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h
if test -n "$CONFIG_FILES"; then
 if test -n "${with_target_subdir}"; then
   # FIXME: We shouldn't need to set ac_file
   ac_file=Makefile
   LD="${ORIGINAL_LD_FOR_MULTILIBS}"
   . ${libiberty_topdir}/config-ml.in
 fi
fi]],
[[srcdir=${srcdir}
host=${host}
target=${target}
with_target_subdir=${with_target_subdir}
with_multisubdir=${with_multisubdir}
ac_configure_args="--enable-multilib ${ac_configure_args}"
CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
ORIGINAL_LD_FOR_MULTILIBS="${ORIGINAL_LD_FOR_MULTILIBS}"
libiberty_topdir=${libiberty_topdir}
]])
AC_OUTPUT