# Process this file with autoconf to produce a configure script, like so:
# aclocal -I .. -I ../config && autoconf && autoheader && automake

AC_PREREQ(2.59)
AC_INIT(libmudflap, 1.0)
AC_CONFIG_SRCDIR(mf-runtime.c)
AC_CANONICAL_SYSTEM
ACX_NONCANONICAL_TARGET

AM_INIT_AUTOMAKE

AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
AC_ARG_ENABLE(version-specific-runtime-libs,
[  --enable-version-specific-runtime-libs    Specify that runtime libraries should be installed in a compiler-specific directory ],
[case "$enableval" in
 yes) version_specific_libs=yes ;;
 no)  version_specific_libs=no ;;
 *)   AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]);;
 esac],
[version_specific_libs=no])
AC_MSG_RESULT($version_specific_libs)

AM_MAINTAINER_MODE
AC_EXEEXT

AM_ENABLE_MULTILIB(, ..)

target_alias=${target_alias-$host_alias}
AC_SUBST(target_alias)

AC_CONFIG_HEADERS(config.h)

AC_LANG_C
# The same as in boehm-gc and libstdc++. Have to borrow it from there.
# We must force CC to /not/ be precious variables; otherwise
# the wrong, non-multilib-adjusted value will be used in multilibs.
# As a side effect, we have to subst CFLAGS ourselves.

m4_rename([_AC_ARG_VAR_PRECIOUS],[real_PRECIOUS])
m4_define([_AC_ARG_VAR_PRECIOUS],[])
AC_PROG_CC
m4_rename([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])

AC_SUBST(CFLAGS)

if test "x$GCC" != "xyes"; then
  AC_MSG_ERROR([libmudflap must be built with GCC])
fi
AC_PROG_CPP

# Some hosts don't have dlsym(RTLD_NEXT, "symbol") for use in
# symbol interposition.  We disable shared libraries for these.
AC_MSG_CHECKING([whether dlsym(RTLD_NEXT,...) is available])
AC_TRY_COMPILE([
#define _GNU_SOURCE
#include <dlfcn.h>
],
[void *foo = dlsym (RTLD_NEXT, "exit");],
[AC_MSG_RESULT(yes)],
[AC_MSG_RESULT(no)
enable_shared=no])

AC_CHECK_HEADERS(stdint.h execinfo.h signal.h dlfcn.h dirent.h pwd.h grp.h \
  netdb.h sys/ipc.h sys/sem.h sys/shm.h sys/wait.h ctype.h mntent.h \
  sys/socket.h netinet/in.h arpa/inet.h dlfcn.h sys/mman.h)

AC_CHECK_FUNCS(backtrace backtrace_symbols gettimeofday signal)
AC_CHECK_FUNCS(fopen64 fseeko64 ftello64 stat64 freopen64)
AC_CHECK_FUNCS(setbuf setbuffer setlinebuf setvbuf)
AC_CHECK_FUNCS(strnlen memrchr strncpy memmem sethostname)
AC_CHECK_FUNCS(__ctype_b_loc __ctype_tolower_loc __ctype_toupper_loc)
AC_CHECK_FUNCS(getlogin cuserid getpwnam getpwuid getpwent getgrnam getgrgid getgrent)
AC_CHECK_FUNCS(getlogin_r getpwnam_r getpwuid_r getgrnam_r getgrgid_r)
AC_CHECK_FUNCS(getservent getservbyname getservbyport getaddrinfo gai_strerror)
AC_CHECK_FUNCS(getprotoent getprotobyname getprotobynumber)
AC_CHECK_FUNCS(getmntent setmntent addmntent)
AC_CHECK_FUNCS(inet_ntoa mmap munmap)
AC_CHECK_FUNCS(__libc_freeres)

AC_TRY_COMPILE([#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>],[union semun foo;], [mf_have_semun=1], [mf_have_semun=0])
if test $mf_have_semun = 1
then
  AC_DEFINE(HAVE_UNION_SEMUN, 1, [union semun defined in sys/ipc.h or sys/sem.h])
fi


AC_MSG_CHECKING([for socklen_t in sys/socket.h])
AC_TRY_COMPILE([#define _POSIX_PII_SOCKET
#include <sys/types.h>
#include <sys/socket.h>], [socklen_t x = 5;],
  [AC_DEFINE(HAVE_SOCKLEN_T, 1, [Define it socklen_t typedef is in sys/socket.h.])
   AC_MSG_RESULT(yes)],
  [AC_MSG_RESULT(no)])

AC_LIBTOOL_DLOPEN
AM_PROG_LIBTOOL
AC_SUBST(enable_shared)
AC_SUBST(enable_static)

AC_CHECK_HEADER(stdint.h, [MF_HAVE_STDINT_H=1], [MF_HAVE_STDINT_H=0])
AC_SUBST(MF_HAVE_STDINT_H)
if test $MF_HAVE_STDINT_H = 1
then
   MF_HAVE_UINTPTR_T=1
else
   AC_TRY_COMPILE([#include <sys/types.h>], [uintptr_t k = 0;],
	[MF_HAVE_UINTPTR_T=1], [MF_HAVE_UINTPTR_T=0])
fi
AC_SUBST(MF_HAVE_UINTPTR_T)

if test ! -d pth
then
  # libmudflapth objects are built in this subdirectory
  mkdir pth
fi

AC_CHECK_HEADERS(pthread.h)

AC_MSG_CHECKING([for thread model used by GCC])
target_thread_file=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
AC_MSG_RESULT([$target_thread_file])

# We only support posix threads, or no threads at all.
posix_threads=
case ${target_thread_file} in
  posix)
    posix_threads=yes
    ;;
  single)
    ;;
  *)
    echo "${target_thread_file} is an unsupported thread package" 1>&2
    exit 1
    ;;
esac

AM_CONDITIONAL(LIBMUDFLAPTH, [test "x$posix_threads" != "x"])
if test "x$posix_threads" != "x"
then
        build_libmudflapth=1
else
        build_libmudflapth=0
fi
AC_SUBST(build_libmudflapth)

AC_CHECK_LIB(dl, dlsym)

# Calculate toolexeclibdir
# Also toolexecdir, though it's only used in toolexeclibdir
case ${version_specific_libs} in
  yes)
    # Need the gcc compiler version to know where to install libraries
    # and header files if --enable-version-specific-runtime-libs option
    # is selected.
    toolexecdir='$(libdir)/gcc/$(target_alias)'
    toolexeclibdir='$(toolexecdir)/$(gcc_version)$(MULTISUBDIR)'
    ;;
  no)
    if test -n "$with_cross_host" &&
       test x"$with_cross_host" != x"no"; then
      # Install a library built with a cross compiler in tooldir, not libdir.
      toolexecdir='$(exec_prefix)/$(target_alias)'
      toolexeclibdir='$(toolexecdir)/lib'
    else
      toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
      toolexeclibdir='$(libdir)'
    fi
    multi_os_directory=`$CC -print-multi-os-directory`
    case $multi_os_directory in
      .) ;; # Avoid trailing /.
      *) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;;
    esac
    ;;
esac
AC_SUBST(toolexecdir)
AC_SUBST(toolexeclibdir)

includedir=${toolexecdir}/include
AC_SUBST(includedir)

pthread_create_version='""'
if test "x$enable_shared" = "xyes" && test "x$posix_threads" != "x"; then
  # NB: don't check for -lpthread here, because then it would be
  # added to LIBS.  For the thread-unaware libmudflap.la, we don't
  # want it there.

  # glibc-related hacks.  dlsym() may pick the wrong version of
  # interposed functions like pthread_create on modern glibc.
  # We need to find the proper symbol version string, and use
  # the nonstandard dlvsym().
  AC_CHECK_FUNCS(dlvsym)
  AC_CHECK_TOOL(NM, nm)
  if test "x$ac_cv_have_dlvsym" != "x"; then
    # Try compiling a simple pthreads program.  Find the shared libraries it
    # ends up with.  Then use "nm" on those libraries to extract the
    # default symbol versioning suffix ("@@"), if any.  But that's tricky.
    # Rather, run nm on the resulting executable.  Unfortunately, autoconf
    # doesn't appear to have a macro that builds a test executable for
    # subsequent analysis ... so we do it by hand here.
    cat >> conftest.c << EOF
#include <pthread.h>
int main () { void *p = (void *) & pthread_create; return (int) p; }
EOF
    oldLIBS="$LIBS"
    LIBS="$LIBS -lpthread"
    pthread_create_version="\"\""
    AC_MSG_CHECKING(pthread_create symbol version)
    if eval $ac_link 2>&5 && test -s conftest${ac_exeext}; then
      version=`$NM conftest${ac_exeect} | grep 'pthread_create@@' | sed -e 's/^.*@@//'`
      if test "x$version" != "x"; then
        pthread_create_version="\"$version\""
      fi
    fi
    AC_MSG_RESULT($pthread_create_version)
    LIBS="$oldLIBS"
  fi
fi
AC_DEFINE_UNQUOTED(PTHREAD_CREATE_VERSION, $pthread_create_version, [pthread_create symbol version])


# Figure out whether the compiler supports "-ffunction-sections -fdata-sections",
# similarly to how libstdc++ does it
ac_test_CFLAGS="${CFLAGS+set}"
ac_save_CFLAGS="$CFLAGS"

# Check for -ffunction-sections -fdata-sections
AC_MSG_CHECKING([for gcc that supports -ffunction-sections -fdata-sections])
CFLAGS='-Werror -ffunction-sections -fdata-sections'
AC_TRY_COMPILE(, [int foo;], [ac_fdsections=yes], [ac_fdsections=no])
if test "$ac_test_CFLAGS" = set; then
  CFLAGS="$ac_save_CFLAGS"
else
  # this is the suspicious part
  CFLAGS=""
fi
if test x"$ac_fdsections" = x"yes"; then
  SECTION_FLAGS='-ffunction-sections -fdata-sections'
fi
AC_MSG_RESULT($ac_fdsections)
AC_SUBST(SECTION_FLAGS)


# Check for the name of the symbol used for the entry point.
AC_CACHE_CHECK([for the name of the symbol used for the entry point],
  [mudflap_cv_entry_point], [
for name in _start __start unknown; do
  AC_LINK_IFELSE([AC_LANG_PROGRAM([extern char $name@<:@@:>@;], [$name@<:@0@:>@ = 0;])],
		 [break])
done
mudflap_cv_entry_point="$name"])
if test "$mudflap_cv_entry_point" = unknown; then
  AC_MSG_ERROR([none of the known symbol names works])
fi
AC_DEFINE_UNQUOTED([ENTRY_POINT], [$mudflap_cv_entry_point],
  [Define to the name of the symbol used for the entry point.])


if test ${multilib} = yes; then
  multilib_arg="--enable-multilib"
else
  multilib_arg=
fi

# See if we support thread-local storage.
GCC_CHECK_TLS
GCC_CHECK_EMUTLS

AC_CONFIG_FILES([Makefile testsuite/Makefile testsuite/mfconfig.exp])
AC_OUTPUT
