1169695Skan# Process this file with autoconf to produce a configure script, like so: 2169695Skan# 3169695Skan# aclocal -I .. -I ../config && autoconf && autoheader && automake 4169695Skan 5169695SkanAC_PREREQ(2.59) 6169695SkanAC_INIT(libssp, 1.0) 7169695SkanAC_CONFIG_SRCDIR(ssp.c) 8169695SkanAC_CANONICAL_SYSTEM 9169695SkanACX_NONCANONICAL_TARGET 10169695Skan 11169695SkanAM_INIT_AUTOMAKE 12169695Skan 13169695SkanAC_MSG_CHECKING([for --enable-version-specific-runtime-libs]) 14169695SkanAC_ARG_ENABLE(version-specific-runtime-libs, 15169695Skan[ --enable-version-specific-runtime-libs Specify that runtime libraries should be installed in a compiler-specific directory ], 16169695Skan[case "$enableval" in 17169695Skan yes) version_specific_libs=yes ;; 18169695Skan no) version_specific_libs=no ;; 19169695Skan *) AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]);; 20169695Skan esac], 21169695Skan[version_specific_libs=no]) 22169695SkanAC_MSG_RESULT($version_specific_libs) 23169695Skan 24169695SkanAM_MAINTAINER_MODE 25169695Skan 26169695SkanGCC_NO_EXECUTABLES 27169695Skan 28169695SkanAM_ENABLE_MULTILIB(, ..) 29169695Skan 30169695Skantarget_alias=${target_alias-$host_alias} 31169695SkanAC_SUBST(target_alias) 32169695Skan 33169695SkanAC_CONFIG_HEADERS(config.h) 34169695Skan 35169695SkanAC_LANG_C 36169695Skan# The same as in boehm-gc and libstdc++. Have to borrow it from there. 37169695Skan# We must force CC to /not/ be precious variables; otherwise 38169695Skan# the wrong, non-multilib-adjusted value will be used in multilibs. 39169695Skan# As a side effect, we have to subst CFLAGS ourselves. 40169695Skan 41169695Skanm4_rename([_AC_ARG_VAR_PRECIOUS],[real_PRECIOUS]) 42169695Skanm4_define([_AC_ARG_VAR_PRECIOUS],[]) 43169695SkanAC_PROG_CC 44169695Skanm4_rename([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS]) 45169695Skan 46169695SkanAC_SUBST(CFLAGS) 47169695Skan 48169695Skanif test "x$GCC" != "xyes"; then 49169695Skan AC_MSG_ERROR([libssp must be built with GCC]) 50169695Skanfi 51169695SkanAC_PROG_CPP 52169695Skan 53169695SkanAC_MSG_CHECKING([whether -fstack-protector works]) 54169695Skansave_CFLAGS="$CFLAGS" 55169695SkanCFLAGS="$CFLAGS -fstack-protector -Werror" 56169695SkanAC_TRY_COMPILE([ 57169695Skanvoid __attribute__((noinline)) bar (char *x) 58169695Skan{ 59169695Skan __builtin_memset (x, 0, 64); 60169695Skan}],[char buf[64]; bar (buf);], 61169695Skan[AC_MSG_RESULT(yes)], 62169695Skan[AC_MSG_RESULT(no)]) 63169695SkanCFLAGS="$save_CFLAGS" 64169695Skan 65169695SkanAC_MSG_CHECKING([whether hidden visibility is supported]) 66169695SkanAC_TRY_COMPILE([ 67169695Skanvoid __attribute__((visibility ("hidden"))) bar (void) {}],, 68169695Skan[ssp_hidden=yes],[ssp_hidden=no]) 69169695SkanAC_MSG_RESULT($ssp_hidden) 70169695Skanif test x$ssp_hidden = xyes; then 71169695Skan AC_DEFINE([HAVE_HIDDEN_VISIBILITY],[1],[__attribute__((visibility ("hidden"))) supported]) 72169695Skanfi 73169695Skan 74169695SkanAC_MSG_CHECKING([whether symbol versioning is supported]) 75169695Skancat > conftest.map <<EOF 76169695SkanFOO_1.0 { 77169695Skan global: *foo*; bar; local: *; 78169695Skan}; 79169695SkanEOF 80169695Skansave_LDFLAGS="$LDFLAGS" 81169695SkanLDFLAGS="$LDFLAGS -fPIC -shared -Wl,--version-script,./conftest.map" 82169695Skanif test x$gcc_no_link = xyes; then 83169695Skan # If we cannot link, we cannot build shared libraries, so do not use 84169695Skan # symbol versioning. 85169695Skan ssp_use_symver=no 86169695Skanelse 87169695Skan AC_TRY_LINK([int foo;],[],[ssp_use_symver=yes],[ssp_use_symver=no]) 88169695Skanfi 89169695SkanLDFLAGS="$save_LDFLAGS" 90169695SkanAC_MSG_RESULT($ssp_use_symver) 91169695SkanAM_CONDITIONAL(LIBSSP_USE_SYMVER, [test "x$ssp_use_symver" = xyes]) 92169695Skan 93169695SkanAC_CHECK_HEADERS(alloca.h paths.h syslog.h string.h unistd.h fcntl.h stdio.h limits.h) 94169695Skan 95169695Skanif test x$gcc_no_link = xyes; then 96169695Skan # Presume the ISO C functions are available; add target-specific 97169695Skan # configuration here if required. 98169695Skan AC_DEFINE(HAVE_STRNCPY) 99169695Skan AC_DEFINE(HAVE_STRNCAT) 100169695Skanelse 101169695Skan AC_CHECK_FUNCS(mempcpy strncpy strncat) 102169695Skanfi 103169695Skan 104169695SkanAC_MSG_CHECKING([whether vsnprintf is usable]) 105169695SkanAC_RUN_IFELSE(AC_LANG_PROGRAM([ 106169695Skan#include <stdarg.h> 107169695Skan#include <string.h> 108169695Skan#include <stdio.h> 109169695Skanint foo (char *buf, size_t n, const char *fmt, ...) 110169695Skan{ 111169695Skan va_list ap; 112169695Skan int ret; 113169695Skan va_start (ap, fmt); 114169695Skan ret = vsnprintf (buf, n, fmt, ap); 115169695Skan va_end (ap); 116169695Skan return ret; 117169695Skan}], 118169695Skan[char buf@<:@8@:>@; memset (buf, 'A', sizeof (buf)); 119169695Skan if (foo (buf, 4, ".%s.", "CDEFG") != 7) 120169695Skan return 1; 121169695Skan return memcmp (buf, ".CD\0AAAA", sizeof (buf)) != 0;]), 122169695Skan[ssp_have_usable_vsnprintf=define], 123169695Skan[ssp_have_usable_vsnprintf=undef], 124169695Skan[ssp_have_usable_vsnprintf=undef]) 125169695Skanif test "x$ssp_have_usable_vsnprintf" = xdefine; then 126169695Skan AC_MSG_RESULT(yes) 127169695Skan AC_DEFINE([HAVE_USABLE_VSNPRINTF],[1],[vsnprintf is present and works]) 128169695Skanelse 129169695Skan AC_MSG_RESULT(no) 130169695Skanfi 131169695SkanAC_SUBST(ssp_have_usable_vsnprintf) 132169695Skan 133169695SkanAM_PROG_LIBTOOL 134169695SkanAC_SUBST(enable_shared) 135169695SkanAC_SUBST(enable_static) 136169695Skan 137169695Skan# Calculate toolexeclibdir 138169695Skan# Also toolexecdir, though it's only used in toolexeclibdir 139169695Skancase ${version_specific_libs} in 140169695Skan yes) 141169695Skan # Need the gcc compiler version to know where to install libraries 142169695Skan # and header files if --enable-version-specific-runtime-libs option 143169695Skan # is selected. 144169695Skan toolexecdir='$(libdir)/gcc/$(target_alias)' 145169695Skan toolexeclibdir='$(toolexecdir)/$(gcc_version)$(MULTISUBDIR)' 146169695Skan ;; 147169695Skan no) 148169695Skan if test -n "$with_cross_host" && 149169695Skan test x"$with_cross_host" != x"no"; then 150169695Skan # Install a library built with a cross compiler in tooldir, not libdir. 151169695Skan toolexecdir='$(exec_prefix)/$(target_alias)' 152169695Skan toolexeclibdir='$(toolexecdir)/lib' 153169695Skan else 154169695Skan toolexecdir='$(libdir)/gcc-lib/$(target_alias)' 155169695Skan toolexeclibdir='$(libdir)' 156169695Skan fi 157169695Skan multi_os_directory=`$CC -print-multi-os-directory` 158169695Skan case $multi_os_directory in 159169695Skan .) ;; # Avoid trailing /. 160169695Skan *) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;; 161169695Skan esac 162169695Skan ;; 163169695Skanesac 164169695SkanAC_SUBST(toolexecdir) 165169695SkanAC_SUBST(toolexeclibdir) 166169695Skan 167169695Skanif test ${multilib} = yes; then 168169695Skan multilib_arg="--enable-multilib" 169169695Skanelse 170169695Skan multilib_arg= 171169695Skanfi 172169695Skan 173169695SkanAC_CONFIG_FILES([Makefile ssp/ssp.h]) 174169695SkanAC_OUTPUT 175