@@ -7,6 +7,9 @@ AC_CONFIG_MACRO_DIRS([m4])
77AM_SILENT_RULES ([ yes] )
88AC_LANG ( [ C++] )
99
10+ AC_ARG_ENABLE ( hardening ,
11+ AS_HELP_STRING ( [ --disable-hardening] , [ Use C++ compiler flags which produce a hardened binary] ) )
12+
1013GMOCK_DIR="${GMOCK_DIR=/usr/src/gmock}"
1114AC_ARG_VAR ( [ GMOCK_DIR] , [ directory containing Google Mock] )
1215GTEST_DIR="${GTEST_DIR="$GMOCK_DIR/gtest"}"
@@ -25,6 +28,25 @@ AC_CHECK_PROGS([ANT], [ant])
2528
2629PKG_CHECK_MODULES([ json_c] , [ json-c] )
2730
31+ if test "x${enable_hardening}" != "xno"; then
32+ common_harden_copts="-fstack-protector-all -fPIE -Wa,--noexecstack -Wformat -Wformat-security"
33+ clang_harden_copts="-Qunused-arguments $common_harden_copts"
34+ gcc_harden_copts="$common_harden_copts"
35+ AS_CASE ( [ $CXX] ,
36+ [ clang++] , [ AS_VAR_APPEND ( [ CXXFLAGS] , [ " $clang_harden_copts"] ) ] ,
37+ [ g++] , [ AS_VAR_APPEND ( [ CXXFLAGS] , [ " $gcc_harden_copts"] ) ] ,
38+ [ AC_MSG_FAILURE ( [ Hardening enabled, but we don't have hardening flags for C++ compiler $CXX] ) ] )
39+ AS_CASE ( [ $CC] ,
40+ [ clang] , [ AS_VAR_APPEND ( [ CFLAGS] , [ " $clang_harden_copts"] ) ] ,
41+ [ gcc] , [ AS_VAR_APPEND ( [ CFLAGS] , [ " $gcc_harden_copts"] ) ] ,
42+ [ AC_MSG_FAILURE ( [ "Hardening enabled, but we don't have hardening flags for C compiler $CC"] ) ] )
43+ AS_VAR_APPEND ( [ CPPFLAGS] , [ " -D_FORTIFY_SOURCE=2"] )
44+ AS_VAR_APPEND ( [ LDFLAGS] , [ " -pie -Wl,-z,relro,-z,now"] )
45+ AC_DEFINE ( [ ENABLE_HARDENING] , [ ] , [ Hardening enabled.] )
46+ else
47+ AC_MSG_WARN ( [ NOT building hardened binaries] )
48+ fi
49+
2850# Checks for header files.
2951AC_HEADER_RESOLV
3052AC_CHECK_HEADERS ( [ arpa/inet.h fcntl.h limits.h netinet/in.h stddef.h stdint.h stdlib.h string.h sys/socket.h sys/time.h unistd.h leveldb/filter_policy.h] )
0 commit comments