summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDennis Camera <skonfig@dtnr.ch>2022-08-18 00:09:54 +0200
committerDennis Camera <skonfig@dtnr.ch>2022-08-18 00:09:54 +0200
commit3a3ad5b6bed9039e51d6766ad8849b8f65842638 (patch)
treef661b325cb40517ec7d061a0878284bb1aa65ead
parentcc238bc2307241a9c27a29a1b159605c72bec775 (diff)
downloadskonfig-c-3a3ad5b6bed9039e51d6766ad8849b8f65842638.tar.gz
skonfig-c-3a3ad5b6bed9039e51d6766ad8849b8f65842638.zip
[configure.ac] Check for some compiler security flags and use them if available
-rw-r--r--Makefile.am2
-rw-r--r--configure.ac32
2 files changed, 33 insertions, 1 deletions
diff --git a/Makefile.am b/Makefile.am
index 00cd7b4..6238617 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,6 +1,6 @@
AM_CPPFLAGS = -DSYSCONFDIR='"${sysconfdir}"'
AM_CFLAGS = -std=c99 -D_FORTIFY_SOURCE=2 -D_POSIX_C_SOURCE=200112L
-AM_CFLAGS += -Wall
+AM_CFLAGS += -Wall -Werror
AM_CFLAGS += -include config.h
if DEBUG
diff --git a/configure.ac b/configure.ac
index 26f7535..e32cbfd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -19,6 +19,38 @@ m4_version_prereq([2.70],[],[AC_PROG_CC_C99])
AC_PROG_CPP
AC_PROG_MAKE_SET
+
+# Check compiler options
+check_ccopt() { (
+ _ccopt=${1:?}
+ case ${CFLAGS-} in
+ (*\ ${_ccopt}\ *|${_ccopt}\ *|*\ ${_ccopt})
+ # option is already set
+ return 0
+ ;;
+ esac
+
+ AC_MSG_CHECKING([whether ${CC} supports ${_ccopt}])
+ CFLAGS=${CFLAGS-}${CFLAGS:+ }${_ccopt}
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM()],
+ [AC_MSG_RESULT([yes]); return 0],
+ [AC_MSG_RESULT([no]); return 1])
+); }
+check_set_ccopt() {
+ check_ccopt "${1:?}" && CFLAGS=${CFLAGS-}${CFLAGS:+ }${1:?}
+}
+
+check_set_ccopt -Wformat=2
+check_set_ccopt -Wformat-overflow=2
+
+check_set_ccopt -fstack-protector-strong \
+|| check_set_ccopt -fstack-protector # fallback
+
+check_set_ccopt -fstack-clash-protection \
+|| check_set_ccopt -fstack-check # fallback
+
+
# Checks for libraries.
# Checks for header files.