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