From 8330887e9320a998256cdd13d8715505e87e0826 Mon Sep 17 00:00:00 2001 From: Viktor Ashirov Date: May 23 2018 14:11:29 +0000 Subject: Issue 49684 - AC_PROG_CC clobbers CFLAGS set by --enable-debug Bug description: Default CFLAGS and CXXFLAGS might be unset without --enable-debug. Fix description: * Provide default CFLAGS and CXXFLAGS that would be set by AC_PROG_CC otherwise. * Split compiler flags and preprocessor flags into separate variables so they are applied in a correct order. https://pagure.io/389-ds-base/issue/49684 Reviewed by: mhonek (Thanks!) --- diff --git a/Makefile.am b/Makefile.am index ec22761..2db1b93 100644 --- a/Makefile.am +++ b/Makefile.am @@ -16,11 +16,13 @@ PYTHON := python3 BUILDNUM := $(shell perl $(srcdir)/buildnum.pl) NQBUILDNUM := $(subst \,,$(subst $(QUOTE),,$(BUILDNUM))) DEBUG_DEFINES = @debug_defs@ -GCCSEC_DEFINES = @gccsec_defs@ -ASAN_DEFINES = @asan_defs@ -MSAN_DEFINES = @msan_defs@ -TSAN_DEFINES = @tsan_defs@ -UBSAN_DEFINES = @ubsan_defs@ +DEBUG_CFLAGS = @debug_cflags@ +DEBUG_CXXFLAGS = @debug_cxxflags@ +GCCSEC_CFLAGS = @gccsec_cflags@ +ASAN_CFLAGS = @asan_cflags@ +MSAN_CFLAGS = @msan_cflags@ +TSAN_CFLAGS = @tsan_cflags@ +UBSAN_CFLAGS = @ubsan_cflags@ SYSTEMD_DEFINES = @systemd_defs@ @@ -133,7 +135,9 @@ PATH_DEFINES = -DLOCALSTATEDIR="\"$(localstatedir)\"" -DSYSCONFDIR="\"$(sysconfd # Now that we have all our defines in place, setup the CPPFLAGS # These flags are the "must have" for all components -AM_CPPFLAGS = $(DEBUG_DEFINES) $(GCCSEC_DEFINES) $(ASAN_DEFINES) $(MSAN_DEFINES) $(TSAN_DEFINES) $(UBSAN_DEFINES) $(PROFILING_DEFINES) $(RUST_DEFINES) +AM_CPPFLAGS = $(DEBUG_DEFINES) $(PROFILING_DEFINES) $(RUST_DEFINES) +AM_CFLAGS = $(DEBUG_CFLAGS) $(GCCSEC_CFLAGS) $(ASAN_CFLAGS) $(MSAN_CFLAGS) $(TSAN_CFLAGS) $(UBSAN_CFLAGS) +AM_CXXFLAGS = $(DEBUG_CXXFLAGS) $(GCCSEC_CFLAGS) $(ASAN_CFLAGS) $(MSAN_CFLAGS) $(TSAN_CFLAGS) $(UBSAN_CFLAGS) # Flags for Directory Server # WARNING: This needs a clean up, because slap.h is a horrible mess and is publically exposed! DSPLUGIN_CPPFLAGS = $(DS_DEFINES) $(DS_INCLUDES) $(PATH_DEFINES) $(SYSTEMD_DEFINES) $(NUNCSTANS_INCLUDES) @openldap_inc@ @ldapsdk_inc@ @nss_inc@ $(NSPR_INCLUDES) @systemd_inc@ @@ -190,7 +194,7 @@ AM_LDFLAGS = -lpthread else #AM_LDFLAGS = -Wl,-z,defs # Provide the tcmalloc links if needed -AM_LDFLAGS = $(RUST_LDFLAGS) $(ASAN_DEFINES) $(MSAN_DEFINES) $(TSAN_DEFINES) $(UBSAN_DEFINES) $(PROFILING_LINKS) $(TCMALLOC_LINK) $(CLANG_LDFLAGS) +AM_LDFLAGS = $(RUST_LDFLAGS) $(ASAN_CFLAGS) $(MSAN_CFLAGS) $(TSAN_CFLAGS) $(UBSAN_CFLAGS) $(PROFILING_LINKS) $(TCMALLOC_LINK) $(CLANG_LDFLAGS) endif #end hpux # https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html#Updating-version-info @@ -2151,37 +2155,37 @@ test_libsds_SOURCES = src/libsds/test/test_sds.c \ src/libsds/test/test_sds_ht.c \ src/libsds/test/test_fixtures.c -test_libsds_LDFLAGS = $(ASAN_DEFINES) $(MSAN_DEFINES) $(TSAN_DEFINES) $(UBSAN_DEFINES) $(PROFILING_LINKS) $(CMOCKA_LINKS) +test_libsds_LDFLAGS = $(ASAN_CFLAGS) $(MSAN_CFLAGS) $(TSAN_CFLAGS) $(UBSAN_CFLAGS) $(PROFILING_LINKS) $(CMOCKA_LINKS) test_libsds_LDADD = libsds.la $(NSPR_LINK) test_libsds_CPPFLAGS = $(AM_CPPFLAGS) $(CMOCKA_INCLUDES) $(SDS_CPPFLAGS) benchmark_sds_SOURCES = src/libsds/test/benchmark.c \ $(libavl_a_SOURCES) -benchmark_sds_LDFLAGS = $(ASAN_DEFINES) $(MSAN_DEFINES) $(TSAN_DEFINES) $(UBSAN_DEFINES) $(PROFILING_LINKS) $(CMOCKA_LINKS) +benchmark_sds_LDFLAGS = $(ASAN_CFLAGS) $(MSAN_CFLAGS) $(TSAN_CFLAGS) $(UBSAN_CFLAGS) $(PROFILING_LINKS) $(CMOCKA_LINKS) benchmark_sds_LDADD = libsds.la $(NSPR_LINK) benchmark_sds_CPPFLAGS = $(AM_CPPFLAGS) $(CMOCKA_INCLUDES) $(SDS_CPPFLAGS) $(DS_INCLUDES) benchmark_par_sds_SOURCES = src/libsds/test/benchmark_parwrap.c \ src/libsds/test/benchmark_par.c \ $(libavl_a_SOURCES) -benchmark_par_sds_LDFLAGS = $(ASAN_DEFINES) $(MSAN_DEFINES) $(TSAN_DEFINES) $(UBSAN_DEFINES) $(PROFILING_LINKS) $(CMOCKA_LINKS) +benchmark_par_sds_LDFLAGS = $(ASAN_CFLAGS) $(MSAN_CFLAGS) $(TSAN_CFLAGS) $(UBSAN_CFLAGS) $(PROFILING_LINKS) $(CMOCKA_LINKS) benchmark_par_sds_LDADD = libsds.la $(NSPR_LINK) benchmark_par_sds_CPPFLAGS = $(AM_CPPFLAGS) $(CMOCKA_INCLUDES) $(SDS_CPPFLAGS) $(DS_INCLUDES) test_nuncstans_SOURCES = src/nunc-stans/test/test_nuncstans.c test_nuncstans_CPPFLAGS = $(AM_CPPFLAGS) $(CMOCKA_INCLUDES) $(NUNCSTANS_CPPFLAGS) test_nuncstans_LDADD = libnunc-stans.la libsds.la $(NSPR_LINK) -test_nuncstans_LDFLAGS = $(ASAN_DEFINES) $(MSAN_DEFINES) $(TSAN_DEFINES) $(UBSAN_DEFINES) $(PROFILING_LINKS) $(CMOCKA_LINKS) $(EVENT_LINK) +test_nuncstans_LDFLAGS = $(ASAN_CFLAGS) $(MSAN_CFLAGS) $(TSAN_CFLAGS) $(UBSAN_CFLAGS) $(PROFILING_LINKS) $(CMOCKA_LINKS) $(EVENT_LINK) test_nuncstans_stress_large_SOURCES = src/nunc-stans/test/test_nuncstans_stress_large.c src/nunc-stans/test/test_nuncstans_stress_core.c test_nuncstans_stress_large_CPPFLAGS = $(AM_CPPFLAGS) $(CMOCKA_INCLUDES) $(NUNCSTANS_CPPFLAGS) test_nuncstans_stress_large_LDADD = libnunc-stans.la libsds.la $(NSPR_LINK) -test_nuncstans_stress_large_LDFLAGS = $(ASAN_DEFINES) $(MSAN_DEFINES) $(TSAN_DEFINES) $(UBSAN_DEFINES) $(PROFILING_LINKS) $(CMOCKA_LINKS) $(EVENT_LINK) +test_nuncstans_stress_large_LDFLAGS = $(ASAN_CFLAGS) $(MSAN_CFLAGS) $(TSAN_CFLAGS) $(UBSAN_CFLAGS) $(PROFILING_LINKS) $(CMOCKA_LINKS) $(EVENT_LINK) test_nuncstans_stress_small_SOURCES = src/nunc-stans/test/test_nuncstans_stress_small.c src/nunc-stans/test/test_nuncstans_stress_core.c test_nuncstans_stress_small_CPPFLAGS = $(AM_CPPFLAGS) $(CMOCKA_INCLUDES) $(NUNCSTANS_CPPFLAGS) test_nuncstans_stress_small_LDADD = libnunc-stans.la libsds.la $(NSPR_LINK) -test_nuncstans_stress_small_LDFLAGS = $(ASAN_DEFINES) $(MSAN_DEFINES) $(TSAN_DEFINES) $(UBSAN_DEFINES) $(PROFILING_LINKS) $(CMOCKA_LINKS) $(EVENT_LINK) +test_nuncstans_stress_small_LDFLAGS = $(ASAN_CFLAGS) $(MSAN_CFLAGS) $(TSAN_CFLAGS) $(UBSAN_CFLAGS) $(PROFILING_LINKS) $(CMOCKA_LINKS) $(EVENT_LINK) endif diff --git a/configure.ac b/configure.ac index 47e376e..aece658 100644 --- a/configure.ac +++ b/configure.ac @@ -104,7 +104,9 @@ AC_MSG_CHECKING(for --enable-debug) AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug], [Enable debug features (default: no)]), [ AC_MSG_RESULT(yes) - debug_defs="-g3 -DDEBUG -DMCC_DEBUG -O0" + debug_defs="-DDEBUG -DMCC_DEBUG" + debug_cflags="-g3 -O0" + debug_cxxflags="-g3 -O0" debug_rust_defs="-C debuginfo=2" cargo_defs="" rust_target_dir="debug" @@ -113,11 +115,16 @@ AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug], [Enable debug features (de [ AC_MSG_RESULT(no) debug_defs="" + # set the default safe CFLAGS that would be set by AC_PROG_CC otherwise + debug_cflags="-g -O2" + debug_cxxflags="-g -O2" debug_rust_defs="-C debuginfo=2" cargo_defs="--release" rust_target_dir="release" ]) AC_SUBST([debug_defs]) +AC_SUBST([debug_cflags]) +AC_SUBST([debug_cxxflags]) AC_SUBST([debug_rust_defs]) AC_SUBST([cargo_defs]) AC_SUBST([rust_target_dir]) @@ -127,15 +134,15 @@ AC_MSG_CHECKING(for --enable-asan) AC_ARG_ENABLE(asan, AS_HELP_STRING([--enable-asan], [Enable gcc/clang address sanitizer options (default: no)]), [ AC_MSG_RESULT(yes) - asan_defs="-fsanitize=address -fno-omit-frame-pointer" + asan_cflags="-fsanitize=address -fno-omit-frame-pointer" asan_rust_defs="-Z sanitizer=address" ], [ AC_MSG_RESULT(no) - asan_defs="" + asan_cflags="" asan_rust_defs="" ]) -AC_SUBST([asan_defs]) +AC_SUBST([asan_cflags]) AC_SUBST([asan_rust_defs]) AM_CONDITIONAL(enable_asan,test "$enable_asan" = "yes") @@ -143,15 +150,15 @@ AC_MSG_CHECKING(for --enable-msan) AC_ARG_ENABLE(msan, AS_HELP_STRING([--enable-msan], [Enable gcc/clang memory sanitizer options (default: no)]), [ AC_MSG_RESULT(yes) - msan_defs="-fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer" + msan_cflags="-fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer" msan_rust_defs="-Z sanitizer=memory" ], [ AC_MSG_RESULT(no) - msan_defs="" + msan_cflags="" msan_rust_defs="" ]) -AC_SUBST([msan_defs]) +AC_SUBST([msan_cflags]) AC_SUBST([msan_rust_defs]) AM_CONDITIONAL(enable_msan,test "$enable_msan" = "yes") @@ -159,15 +166,15 @@ AC_MSG_CHECKING(for --enable-tsan) AC_ARG_ENABLE(tsan, AS_HELP_STRING([--enable-tsan], [Enable gcc/clang thread sanitizer options (default: no)]), [ AC_MSG_RESULT(yes) - tsan_defs="-fsanitize=thread -fno-omit-frame-pointer" + tsan_cflags="-fsanitize=thread -fno-omit-frame-pointer" tsan_rust_defs="-Z sanitizer=thread" ], [ AC_MSG_RESULT(no) - tsan_defs="" + tsan_cflags="" tsan_rust_defs="" ]) -AC_SUBST([tsan_defs]) +AC_SUBST([tsan_cflags]) AC_SUBST([tsan_rust_defs]) AM_CONDITIONAL(enable_tsan,test "$enable_tsan" = "yes") @@ -175,15 +182,15 @@ AC_MSG_CHECKING(for --enable-ubsan) AC_ARG_ENABLE(ubsan, AS_HELP_STRING([--enable-tsan], [Enable gcc/clang undefined behaviour sanitizer options (default: no)]), [ AC_MSG_RESULT(yes) - ubsan_defs="-fsanitize=undefined -fno-omit-frame-pointer" + ubsan_cflags="-fsanitize=undefined -fno-omit-frame-pointer" ubsan_rust_defs="" ], [ AC_MSG_RESULT(no) - ubsan_defs="" + ubsan_cflags="" ubsan_rust_defs="" ]) -AC_SUBST([ubsan_defs]) +AC_SUBST([ubsan_cflags]) AC_SUBST([ubsan_rust_defs]) AM_CONDITIONAL(enable_ubsan,test "$enable_ubsan" = "yes") @@ -220,19 +227,19 @@ AC_ARG_ENABLE(gcc-security, AS_HELP_STRING([--enable-gcc-security], [Enable gcc [ AC_MSG_RESULT(yes) AM_COND_IF([RPM_HARDEND_CC], - [ gccsec_defs="-Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -Werror=format-security -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 " ], - [ gccsec_defs="-Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -Werror=format-security" ] + [ gccsec_cflags="-Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -Werror=format-security -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 " ], + [ gccsec_cflags="-Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -Werror=format-security" ] ) ], [ # Without this, -fPIC doesn't work on generic fedora builds, --disable-gcc-sec. AC_MSG_RESULT(no) AM_COND_IF([RPM_HARDEND_CC], - [ gccsec_defs="-specs=/usr/lib/rpm/redhat/redhat-hardened-cc1" ], - [ gccsec_defs="" ] + [ gccsec_cflags="-specs=/usr/lib/rpm/redhat/redhat-hardened-cc1" ], + [ gccsec_cflags="" ] ) ]) -AC_SUBST([gccsec_defs]) +AC_SUBST([gccsec_cflags]) # Pull in profiling. AC_MSG_CHECKING(for --enable-profiling) diff --git a/src/svrcore/configure.ac b/src/svrcore/configure.ac index b855a42..32f5ed8 100644 --- a/src/svrcore/configure.ac +++ b/src/svrcore/configure.ac @@ -46,13 +46,13 @@ AC_MSG_CHECKING(for --enable-asan) AC_ARG_ENABLE(asan, AS_HELP_STRING([--enable-asan], [Enable gcc address sanitizer options (default: no)]), [ AC_MSG_RESULT(yes) - asan_defs="-fsanitize=address -fno-omit-frame-pointer" + asan_cflags="-fsanitize=address -fno-omit-frame-pointer" ], [ AC_MSG_RESULT(no) - asan_defs="" + asan_cflags="" ]) -AC_SUBST([asan_defs]) +AC_SUBST([asan_cflags]) AC_SUBST([NSPR_CFLAGS]) AC_SUBST([NSPR_LIBS]) diff --git a/src/svrcore/src/Makefile.am b/src/svrcore/src/Makefile.am index fba3583..f74dfab 100644 --- a/src/svrcore/src/Makefile.am +++ b/src/svrcore/src/Makefile.am @@ -1,8 +1,9 @@ -ASAN_DEFINES = @asan_defs@ +ASAN_CFLAGS = @asan_cflags@ DEBUG_DEFINES = @debug_defs@ +DEBUG_CFLAGS = @debug_cflags@ -AM_CPPFLAGS = $(ASAN_DEFINES) $(DEBUG_DEFINES) -AM_LDFLAGS = $(ASAN_DEFINES) $(DEBUG_DEFINES) +AM_CPPFLAGS = $(DEBUG_DEFINES) +AM_CFLAGS = $(DEBUG_CFLAGS) $(ASAN_CFLAGS) EXTRA_DIST = key.ico \ logo.ico \