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