11541Srgrimes# Process this file with autoconf to produce a configure script, like so:
222521Sdyson# 
31541Srgrimes# aclocal -I .. -I ../config && autoconf && autoheader && automake
41541Srgrimes
51541SrgrimesAC_INIT(libssp, 1.0)
61541SrgrimesAC_CONFIG_SRCDIR(ssp.c)
71541SrgrimesAC_CANONICAL_SYSTEM
81541SrgrimesACX_NONCANONICAL_TARGET
91541Srgrimes
101541SrgrimesAM_INIT_AUTOMAKE([no-dist])
111541Srgrimes
121541SrgrimesAC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
131541SrgrimesAC_ARG_ENABLE(version-specific-runtime-libs,
141541Srgrimes[  --enable-version-specific-runtime-libs    Specify that runtime libraries should be installed in a compiler-specific directory ],
151541Srgrimes[case "$enableval" in
161541Srgrimes yes) version_specific_libs=yes ;;
171541Srgrimes no)  version_specific_libs=no ;;
181541Srgrimes *)   AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]);;
191541Srgrimes esac],
201541Srgrimes[version_specific_libs=no])
211541SrgrimesAC_MSG_RESULT($version_specific_libs)
221541Srgrimes
231541SrgrimesAM_MAINTAINER_MODE
241541Srgrimes
251541SrgrimesGCC_NO_EXECUTABLES
261541Srgrimes
271541SrgrimesAM_ENABLE_MULTILIB(, ..)
281541Srgrimes
291541Srgrimestarget_alias=${target_alias-$host_alias}
301541SrgrimesAC_SUBST(target_alias)
311541Srgrimes
321541SrgrimesAC_CONFIG_HEADERS(config.h)
331541Srgrimes
341541SrgrimesAC_LANG_C
351541Srgrimes# The same as in boehm-gc and libstdc++. Have to borrow it from there.
3622521Sdyson# We must force CC to /not/ be precious variables; otherwise
3724378Sbde# the wrong, non-multilib-adjusted value will be used in multilibs.
381541Srgrimes# As a side effect, we have to subst CFLAGS ourselves.
391541Srgrimes
402175Spaulm4_rename([_AC_ARG_VAR_PRECIOUS],[real_PRECIOUS])
412175Spaulm4_define([_AC_ARG_VAR_PRECIOUS],[])
422175SpaulAC_PROG_CC
431541Srgrimesm4_rename_force([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
441541Srgrimes
451541SrgrimesAC_SUBST(CFLAGS)
461541Srgrimes
471541Srgrimesif test "x$GCC" != "xyes"; then
489336Sdfr  AC_MSG_ERROR([libssp must be built with GCC])
499336Sdfrfi
509336SdfrAC_PROG_CPP
519336Sdfr
529336SdfrAC_MSG_CHECKING([whether -fstack-protector works])
539336Sdfrsave_CFLAGS="$CFLAGS"
541541SrgrimesCFLAGS="$CFLAGS -fstack-protector -Werror"
551541SrgrimesAC_TRY_COMPILE([
561541Srgrimesvoid __attribute__((noinline)) bar (char *x)
571541Srgrimes{
581828Sdg  __builtin_memset (x, 0, 64);
591541Srgrimes}],[char buf[64]; bar (buf);],
601828Sdg[AC_MSG_RESULT(yes)],
611828Sdg[AC_MSG_RESULT(no)])
621541SrgrimesCFLAGS="$save_CFLAGS"
631828Sdg
641541Srgrimes# Add CET specific flags if CET is enabled
651541SrgrimesGCC_CET_FLAGS(CET_FLAGS)
669336SdfrXCFLAGS="$XCFLAGS $CET_FLAGS"
671541SrgrimesAC_SUBST(XCFLAGS)
681541Srgrimes
691541SrgrimesAC_MSG_CHECKING([whether hidden visibility is supported])
7024378SbdeAC_TRY_COMPILE([
719336Sdfrvoid __attribute__((visibility ("hidden"))) bar (void) {}],,
729336Sdfr[ssp_hidden=yes],[ssp_hidden=no])
739336SdfrAC_MSG_RESULT($ssp_hidden)
749336Sdfrif test x$ssp_hidden = xyes; then
759336Sdfr  AC_DEFINE([HAVE_HIDDEN_VISIBILITY],[1],[__attribute__((visibility ("hidden"))) supported])
7624378Sbdefi
7724378Sbde
7824378SbdeAC_MSG_CHECKING([whether symbol versioning is supported])
799336SdfrAC_ARG_ENABLE(symvers,
809336SdfrAS_HELP_STRING([--disable-symvers],
819336Sdfr  [disable symbol versioning for libssp]),
829336Sdfrssp_use_symver=$enableval,
831541Srgrimesssp_use_symver=yes)
849336Sdfrif test "x$ssp_use_symver" != xno; then
859336Sdfr  if test x$gcc_no_link = xyes; then
869336Sdfr    # If we cannot link, we cannot build shared libraries, so do not use
879336Sdfr    # symbol versioning.
889336Sdfr    ssp_use_symver=no
899336Sdfr  else
901541Srgrimes    save_LDFLAGS="$LDFLAGS"
911541Srgrimes    LDFLAGS="$LDFLAGS -fPIC -shared -Wl,--version-script,./conftest.map"
929336Sdfr    cat > conftest.map <<EOF
939336SdfrFOO_1.0 {
949336Sdfr  global: *foo*; bar; local: *;
959336Sdfr};
969336SdfrEOF
979336Sdfr    AC_TRY_LINK([int foo;],[],[ssp_use_symver=gnu],[ssp_use_symver=no])
989336Sdfr    if test x$ssp_use_symver = xno; then
999336Sdfr      case "$target_os" in
1009336Sdfr        solaris2*)
1019336Sdfr          LDFLAGS="$save_LDFLAGS"
1029336Sdfr          LDFLAGS="$LDFLAGS -fPIC -shared -Wl,-M,./conftest.map"
1039336Sdfr          # Sun ld cannot handle wildcards and treats all entries as undefined.
1049336Sdfr          cat > conftest.map <<EOF
1059336SdfrFOO_1.0 {
1069336Sdfr  global: foo; local: *;
1079336Sdfr};
1089336SdfrEOF
1099336Sdfr          AC_TRY_LINK([int foo;],[],[ssp_use_symver=sun],[ssp_use_symver=no])
1109336Sdfr	  ;;
1111541Srgrimes      esac
1121541Srgrimes    fi
1131541Srgrimes    LDFLAGS="$save_LDFLAGS"
1141541Srgrimes  fi
1151541Srgrimesfi
1161541SrgrimesAC_MSG_RESULT($ssp_use_symver)
1171541SrgrimesAM_CONDITIONAL(LIBSSP_USE_SYMVER, [test "x$ssp_use_symver" != xno])
1181541SrgrimesAM_CONDITIONAL(LIBSSP_USE_SYMVER_GNU, [test "x$ssp_use_symver" = xgnu])
1191541SrgrimesAM_CONDITIONAL(LIBSSP_USE_SYMVER_SUN, [test "x$ssp_use_symver" = xsun])
1209336Sdfr
1219336SdfrAC_CHECK_HEADERS(alloca.h malloc.h paths.h syslog.h string.h unistd.h fcntl.h stdio.h limits.h)
1229336Sdfr
1239336Sdfrif test x$gcc_no_link = xyes; then
1249336Sdfr  # Presume the ISO C functions are available; add target-specific
1259336Sdfr  # configuration here if required.
1269336Sdfr  AC_DEFINE(HAVE_STRNCPY)
1279336Sdfr  AC_DEFINE(HAVE_STRNCAT)
1289336Sdfrelse
1299336Sdfr  AC_CHECK_FUNCS(memmove mempcpy strncpy strncat)
1309336Sdfrfi
1319336Sdfr
1329336SdfrAC_MSG_CHECKING([whether vsnprintf is usable])
1339336SdfrAC_RUN_IFELSE([AC_LANG_PROGRAM([
13422521Sdyson#include <stdarg.h>
13522521Sdyson#include <string.h>
13622521Sdyson#include <stdio.h>
13722521Sdysonint foo (char *buf, size_t n, const char *fmt, ...)
13822521Sdyson{
13922521Sdyson  va_list ap;
14022521Sdyson  int ret;
14122521Sdyson  va_start (ap, fmt);
14222521Sdyson  ret = vsnprintf (buf, n, fmt, ap);
14322521Sdyson  va_end (ap);
14422521Sdyson  return ret;
14522521Sdyson}],
14622521Sdyson[char buf@<:@8@:>@; memset (buf, 'A', sizeof (buf));
14722521Sdyson if (foo (buf, 4, ".%s.", "CDEFG") != 7)
14822521Sdyson   return 1;
14922521Sdyson return memcmp (buf, ".CD\0AAAA", sizeof (buf)) != 0;])],
15022521Sdyson[ssp_have_usable_vsnprintf=define],
15122521Sdyson[ssp_have_usable_vsnprintf=undef],
15222521Sdyson[ssp_have_usable_vsnprintf=undef])
15322521Sdysonif test "x$ssp_have_usable_vsnprintf" = xdefine; then
15422521Sdyson  AC_MSG_RESULT(yes)
15522521Sdyson  AC_DEFINE([HAVE_USABLE_VSNPRINTF],[1],[vsnprintf is present and works])
15622521Sdysonelse
15722521Sdyson  AC_MSG_RESULT(no)
15822521Sdysonfi
15922521SdysonAC_SUBST(ssp_have_usable_vsnprintf)
16022521Sdyson
16122521SdysonAM_PROG_LIBTOOL
16222521SdysonACX_LT_HOST_FLAGS
16322521SdysonAC_SUBST(enable_shared)
16422521SdysonAC_SUBST(enable_static)
16522521Sdyson
16622521SdysonGCC_WITH_TOOLEXECLIBDIR
16722521Sdyson
16822521Sdyson# Calculate toolexeclibdir
16922521Sdyson# Also toolexecdir, though it's only used in toolexeclibdir
17022521Sdysoncase ${version_specific_libs} in
17122521Sdyson  yes)
17222521Sdyson    # Need the gcc compiler version to know where to install libraries
17322521Sdyson    # and header files if --enable-version-specific-runtime-libs option
17422521Sdyson    # is selected.
17522521Sdyson    toolexecdir='$(libdir)/gcc/$(target_alias)'
17622521Sdyson    toolexeclibdir='$(toolexecdir)/$(gcc_version)$(MULTISUBDIR)'
17722521Sdyson    ;;
17822521Sdyson  no)
17922521Sdyson    if test -n "$with_cross_host" &&
18022521Sdyson       test x"$with_cross_host" != x"no"; then
18122521Sdyson      # Install a library built with a cross compiler in tooldir, not libdir.
18222521Sdyson      toolexecdir='$(exec_prefix)/$(target_alias)'
18322521Sdyson      case ${with_toolexeclibdir} in
18422521Sdyson	no)
18522521Sdyson	  toolexeclibdir='$(toolexecdir)/lib'
18622521Sdyson	  ;;
18722521Sdyson	*)
18822521Sdyson	  toolexeclibdir=${with_toolexeclibdir}
18922521Sdyson	  ;;
19022521Sdyson      esac
19122521Sdyson    else
19222521Sdyson      toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
19322521Sdyson      toolexeclibdir='$(libdir)'
19422521Sdyson    fi
19522521Sdyson    multi_os_directory=`$CC -print-multi-os-directory`
1961541Srgrimes    case $multi_os_directory in
1971541Srgrimes      .) ;; # Avoid trailing /.
1981541Srgrimes      *) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;;
1991541Srgrimes    esac
2001541Srgrimes    ;;
20122521Sdysonesac
2021541SrgrimesAC_SUBST(toolexecdir)
2031541SrgrimesAC_SUBST(toolexeclibdir)
2041541Srgrimes
2051541Srgrimesif test ${multilib} = yes; then
2061541Srgrimes  multilib_arg="--enable-multilib"
2071541Srgrimeselse
2081541Srgrimes  multilib_arg=
2091541Srgrimesfi
2101541Srgrimes
2119336Sdfr# Determine what GCC version number to use in filesystem paths.
2129336SdfrGCC_BASE_VER
2139336Sdfr
2149336SdfrAC_CONFIG_FILES([Makefile ssp/ssp.h])
2159336SdfrAC_OUTPUT
2169336Sdfr