1# Process this file with autoconf to produce a configure script, like so: 2# 3# aclocal -I .. -I ../config && autoconf && autoheader && automake 4 5AC_PREREQ(2.64) 6AC_INIT(libssp, 1.0) 7AC_CONFIG_SRCDIR(ssp.c) 8AC_CANONICAL_SYSTEM 9ACX_NONCANONICAL_TARGET 10 11AM_INIT_AUTOMAKE([no-dist]) 12 13AC_MSG_CHECKING([for --enable-version-specific-runtime-libs]) 14AC_ARG_ENABLE(version-specific-runtime-libs, 15[ --enable-version-specific-runtime-libs Specify that runtime libraries should be installed in a compiler-specific directory ], 16[case "$enableval" in 17 yes) version_specific_libs=yes ;; 18 no) version_specific_libs=no ;; 19 *) AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]);; 20 esac], 21[version_specific_libs=no]) 22AC_MSG_RESULT($version_specific_libs) 23 24AM_MAINTAINER_MODE 25 26GCC_NO_EXECUTABLES 27 28AM_ENABLE_MULTILIB(, ..) 29 30target_alias=${target_alias-$host_alias} 31AC_SUBST(target_alias) 32 33AC_CONFIG_HEADERS(config.h) 34 35AC_LANG_C 36# The same as in boehm-gc and libstdc++. Have to borrow it from there. 37# We must force CC to /not/ be precious variables; otherwise 38# the wrong, non-multilib-adjusted value will be used in multilibs. 39# As a side effect, we have to subst CFLAGS ourselves. 40 41m4_rename([_AC_ARG_VAR_PRECIOUS],[real_PRECIOUS]) 42m4_define([_AC_ARG_VAR_PRECIOUS],[]) 43AC_PROG_CC 44m4_rename_force([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS]) 45 46AC_SUBST(CFLAGS) 47 48if test "x$GCC" != "xyes"; then 49 AC_MSG_ERROR([libssp must be built with GCC]) 50fi 51AC_PROG_CPP 52 53AC_MSG_CHECKING([whether -fstack-protector works]) 54save_CFLAGS="$CFLAGS" 55CFLAGS="$CFLAGS -fstack-protector -Werror" 56AC_TRY_COMPILE([ 57void __attribute__((noinline)) bar (char *x) 58{ 59 __builtin_memset (x, 0, 64); 60}],[char buf[64]; bar (buf);], 61[AC_MSG_RESULT(yes)], 62[AC_MSG_RESULT(no)]) 63CFLAGS="$save_CFLAGS" 64 65AC_MSG_CHECKING([whether hidden visibility is supported]) 66AC_TRY_COMPILE([ 67void __attribute__((visibility ("hidden"))) bar (void) {}],, 68[ssp_hidden=yes],[ssp_hidden=no]) 69AC_MSG_RESULT($ssp_hidden) 70if test x$ssp_hidden = xyes; then 71 AC_DEFINE([HAVE_HIDDEN_VISIBILITY],[1],[__attribute__((visibility ("hidden"))) supported]) 72fi 73 74AC_MSG_CHECKING([whether symbol versioning is supported]) 75AC_ARG_ENABLE(symvers, 76AS_HELP_STRING([--disable-symvers], 77 [disable symbol versioning for libssp]), 78ssp_use_symver=$enableval, 79ssp_use_symver=yes) 80if test "x$ssp_use_symver" != xno; then 81 if test x$gcc_no_link = xyes; then 82 # If we cannot link, we cannot build shared libraries, so do not use 83 # symbol versioning. 84 ssp_use_symver=no 85 else 86 save_LDFLAGS="$LDFLAGS" 87 LDFLAGS="$LDFLAGS -fPIC -shared -Wl,--version-script,./conftest.map" 88 cat > conftest.map <<EOF 89FOO_1.0 { 90 global: *foo*; bar; local: *; 91}; 92EOF 93 AC_TRY_LINK([int foo;],[],[ssp_use_symver=gnu],[ssp_use_symver=no]) 94 if test x$ssp_use_symver = xno; then 95 case "$target_os" in 96 solaris2*) 97 LDFLAGS="$save_LDFLAGS" 98 LDFLAGS="$LDFLAGS -fPIC -shared -Wl,-M,./conftest.map" 99 # Sun ld cannot handle wildcards and treats all entries as undefined. 100 cat > conftest.map <<EOF 101FOO_1.0 { 102 global: foo; local: *; 103}; 104EOF 105 AC_TRY_LINK([int foo;],[],[ssp_use_symver=sun],[ssp_use_symver=no]) 106 ;; 107 esac 108 fi 109 LDFLAGS="$save_LDFLAGS" 110 fi 111fi 112AC_MSG_RESULT($ssp_use_symver) 113AM_CONDITIONAL(LIBSSP_USE_SYMVER, [test "x$ssp_use_symver" != xno]) 114AM_CONDITIONAL(LIBSSP_USE_SYMVER_GNU, [test "x$ssp_use_symver" = xgnu]) 115AM_CONDITIONAL(LIBSSP_USE_SYMVER_SUN, [test "x$ssp_use_symver" = xsun]) 116 117AC_CHECK_HEADERS(alloca.h malloc.h paths.h syslog.h string.h unistd.h fcntl.h stdio.h limits.h) 118 119if test x$gcc_no_link = xyes; then 120 # Presume the ISO C functions are available; add target-specific 121 # configuration here if required. 122 AC_DEFINE(HAVE_STRNCPY) 123 AC_DEFINE(HAVE_STRNCAT) 124else 125 AC_CHECK_FUNCS(memmove mempcpy strncpy strncat) 126fi 127 128AC_MSG_CHECKING([whether vsnprintf is usable]) 129AC_RUN_IFELSE(AC_LANG_PROGRAM([ 130#include <stdarg.h> 131#include <string.h> 132#include <stdio.h> 133int foo (char *buf, size_t n, const char *fmt, ...) 134{ 135 va_list ap; 136 int ret; 137 va_start (ap, fmt); 138 ret = vsnprintf (buf, n, fmt, ap); 139 va_end (ap); 140 return ret; 141}], 142[char buf@<:@8@:>@; memset (buf, 'A', sizeof (buf)); 143 if (foo (buf, 4, ".%s.", "CDEFG") != 7) 144 return 1; 145 return memcmp (buf, ".CD\0AAAA", sizeof (buf)) != 0;]), 146[ssp_have_usable_vsnprintf=define], 147[ssp_have_usable_vsnprintf=undef], 148[ssp_have_usable_vsnprintf=undef]) 149if test "x$ssp_have_usable_vsnprintf" = xdefine; then 150 AC_MSG_RESULT(yes) 151 AC_DEFINE([HAVE_USABLE_VSNPRINTF],[1],[vsnprintf is present and works]) 152else 153 AC_MSG_RESULT(no) 154fi 155AC_SUBST(ssp_have_usable_vsnprintf) 156 157AM_PROG_LIBTOOL 158ACX_LT_HOST_FLAGS 159AC_SUBST(enable_shared) 160AC_SUBST(enable_static) 161 162# Calculate toolexeclibdir 163# Also toolexecdir, though it's only used in toolexeclibdir 164case ${version_specific_libs} in 165 yes) 166 # Need the gcc compiler version to know where to install libraries 167 # and header files if --enable-version-specific-runtime-libs option 168 # is selected. 169 toolexecdir='$(libdir)/gcc/$(target_alias)' 170 toolexeclibdir='$(toolexecdir)/$(gcc_version)$(MULTISUBDIR)' 171 ;; 172 no) 173 if test -n "$with_cross_host" && 174 test x"$with_cross_host" != x"no"; then 175 # Install a library built with a cross compiler in tooldir, not libdir. 176 toolexecdir='$(exec_prefix)/$(target_alias)' 177 toolexeclibdir='$(toolexecdir)/lib' 178 else 179 toolexecdir='$(libdir)/gcc-lib/$(target_alias)' 180 toolexeclibdir='$(libdir)' 181 fi 182 multi_os_directory=`$CC -print-multi-os-directory` 183 case $multi_os_directory in 184 .) ;; # Avoid trailing /. 185 *) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;; 186 esac 187 ;; 188esac 189AC_SUBST(toolexecdir) 190AC_SUBST(toolexeclibdir) 191 192if test ${multilib} = yes; then 193 multilib_arg="--enable-multilib" 194else 195 multilib_arg= 196fi 197 198AC_CONFIG_FILES([Makefile ssp/ssp.h]) 199AC_OUTPUT 200