diff options
author | Dan McGee <dan@archlinux.org> | 2007-11-01 03:30:09 +0100 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2007-11-04 17:42:07 +0100 |
commit | 8feccaed7861010caefa4f7b9824a612a78e3043 (patch) | |
tree | 207bea0248d1b3d48092150e80cb3b983103a658 | |
parent | 288dd54982b85f6feae7d41faf91a531d9f71085 (diff) | |
download | pacman-8feccaed7861010caefa4f7b9824a612a78e3043.tar.gz pacman-8feccaed7861010caefa4f7b9824a612a78e3043.tar.xz |
Use an autoconf macro to see if -fstack-protector is available
Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r-- | acinclude.m4 | 40 | ||||
-rw-r--r-- | configure.ac | 6 |
2 files changed, 44 insertions, 2 deletions
diff --git a/acinclude.m4 b/acinclude.m4 index 9656eac3..566953df 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -6583,3 +6583,43 @@ SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ]) + + +dnl Add some custom macros for pacman and libalpm + +dnl GCC_STACK_PROTECT_LIB +dnl adds -lssp to LIBS if it is available +dnl ssp is usually provided as part of libc, but was previously a separate lib +dnl It does not hurt to add -lssp even if libc provides SSP - in that case +dnl libssp will simply be ignored. +AC_DEFUN([GCC_STACK_PROTECT_LIB],[ + AC_CACHE_CHECK([whether libssp exists], ssp_cv_lib, + [ssp_old_libs="$LIBS" + LIBS="$LIBS -lssp" + AC_TRY_LINK(,, ssp_cv_lib=yes, ssp_cv_lib=no) + LIBS="$ssp_old_libs" + ]) + if test $ssp_cv_lib = yes; then + LIBS="$LIBS -lssp" + fi +]) + +dnl GCC_STACK_PROTECT_CC +dnl checks -fstack-protector with the C compiler, if it exists then updates +dnl CFLAGS and defines ENABLE_SSP_CC +AC_DEFUN([GCC_STACK_PROTECT_CC],[ + AC_LANG_ASSERT(C) + if test "X$CC" != "X"; then + AC_CACHE_CHECK([whether ${CC} accepts -fstack-protector], + ssp_cv_cc, + [ssp_old_cflags="$CFLAGS" + CFLAGS="$CFLAGS -fstack-protector" + AC_TRY_COMPILE(,, ssp_cv_cc=yes, ssp_cv_cc=no) + CFLAGS="$ssp_old_cflags" + ]) + if test $ssp_cv_cc = yes; then + CFLAGS="$CFLAGS -fstack-protector" + AC_DEFINE([ENABLE_SSP_CC], 1, [Define if SSP C support is enabled.]) + fi + fi +]) diff --git a/configure.ac b/configure.ac index 366eefa9..d93cea84 100644 --- a/configure.ac +++ b/configure.ac @@ -254,8 +254,10 @@ if test "x$debug" = "xyes" ; then AC_DEFINE([PACMAN_DEBUG], , [Enable debug code]) # Check for mcheck AC_CHECK_HEADERS([mcheck.h]) - - CFLAGS="$CFLAGS -g -Wall -Werror -fstack-protector-all" + # Check for -fstack-protector availability + GCC_STACK_PROTECT_LIB + GCC_STACK_PROTECT_CC + CFLAGS="$CFLAGS -Wall -Werror" else AC_MSG_RESULT(no) CFLAGS="$CFLAGS -Wall" |