You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.4 KiB
74 lines
2.4 KiB
diff --git a/configure.ac b/configure.ac |
|
index 878284d..9e2ba4d 100644 |
|
--- a/configure.ac |
|
+++ b/configure.ac |
|
@@ -214,21 +214,46 @@ AC_SEARCH_LIBS([dlopen], [dl], [], [ |
|
AC_MSG_ERROR([unable to find the dlopen() function]) |
|
]) |
|
|
|
-# Check for -fstack-protector |
|
-ssp_cc=yes |
|
+# Check for -fstack-protector and -fstack-protector-strong |
|
+SSP_CC_FLAG="" |
|
if test "X$CC-cc" != "X"; then |
|
- AC_MSG_CHECKING([whether ${CC-cc} accepts -fstack-protector]) |
|
+ # Do not duplicate options in CFLAGS |
|
+ ssp_sp_set=no |
|
+ ssp_sps_set=no |
|
+ for ssp_x in $CFLAGS; do |
|
+ case "X$ssp_x" in |
|
+ X-fstack-protector) ssp_sp_set=yes ;; |
|
+ X-fstack-protector-strong) ssp_sps_set=yes ;; |
|
+ esac |
|
+ done |
|
ssp_old_cflags="$CFLAGS" |
|
- CFLAGS="$CFLAGS -fstack-protector" |
|
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[alloca(100);]])], [], [ssp_cc=no]) |
|
+ # Prefer -fstack-protector-strong over -fstack-protector |
|
+ if test "X$ssp_sps_set" = "Xno"; then |
|
+ SSP_CC_FLAG="-fstack-protector-strong" |
|
+ fi |
|
+ AC_MSG_CHECKING([whether ${CC-cc} accepts -fstack-protector-strong]) |
|
+ CFLAGS="$ssp_old_cflags $SSP_CC_FLAG" |
|
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[alloca(100);]])], [ssp_cc=yes], [ssp_cc=no]) |
|
AC_MSG_RESULT([$ssp_cc]) |
|
if test "X$ssp_cc" = "Xno"; then |
|
- CFLAGS="$ssp_old_cflags" |
|
- else |
|
+ # Fallback to -fstack-protector |
|
+ if test "X$ssp_sp_set" = "Xno"; then |
|
+ SSP_CC_FLAG="-fstack-protector" |
|
+ fi |
|
+ AC_MSG_CHECKING([whether ${CC-cc} accepts -fstack-protector]) |
|
+ CFLAGS="$ssp_old_cflags $SSP_CC_FLAG" |
|
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[alloca(100);]])], [ssp_cc=yes], [ssp_cc=no]) |
|
+ AC_MSG_RESULT([$ssp_cc]) |
|
+ if test "X$ssp_cc" = "Xno"; then |
|
+ SSP_CC_FLAG="" |
|
+ fi |
|
+ fi |
|
+ CFLAGS="$ssp_old_cflags $SSP_CC_FLAG" |
|
+ if test "X$ssp_cc" = "Xyes"; then |
|
AC_DEFINE([ENABLE_SSP_CC], 1, [Define if SSP C support is enabled.]) |
|
fi |
|
fi |
|
-AM_CONDITIONAL(USE_SSP, test "$ssp_cc" = "yes") |
|
+AC_SUBST(SSP_CC_FLAG) |
|
|
|
# Check for DRM (mandatory) |
|
LIBDRM_VERSION=libdrm_version |
|
diff --git a/va/Makefile.am b/va/Makefile.am |
|
index 0d8eff1..5ee49c4 100644 |
|
--- a/va/Makefile.am |
|
+++ b/va/Makefile.am |
|
@@ -83,9 +83,7 @@ libva_cflags = \ |
|
-Wall \ |
|
$(NULL) |
|
|
|
-if USE_SSP |
|
-libva_cflags += -fstack-protector |
|
-endif |
|
+libva_cflags += $(SSP_CC_FLAG) |
|
|
|
lib_LTLIBRARIES = libva.la |
|
libvaincludedir = ${includedir}/va
|
|
|