configure.ac 6.0 KB

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