On Tue, 2017-02-14 at 21:58 -0500, Mike Frysinger wrote:
> On 09 Feb 2017 21:13, Mark Wielaard wrote:
> > +# See if we can add -D_FORTIFY_SOURCE=2. Don't do it if it is already
> > +# (differently) defined or if it generates warnings/errors because we
> > +# don't use the right optimisation level (string.h will warn about that).
> > +AC_MSG_CHECKING([whether to add -D_FORTIFY_SOURCE=2 to CFLAGS])
>
> -D flags should be in CPPFLAGS ...
Normally yes, but _FORTIFY_SOURCE is "special". It depends on CFLAGS
optimization settings. If the user has given CFLAGS="-O0" for example,
or set _FORTIFY_SOURCE to 1 in CFLAGS already adding -D_FORTIFY_SOURCE=2
to CPPFLAGS won't work as intended.
> > +case "$CFLAGS" in
> > + *-D_FORTIFY_SOURCE=2*)
> > + AC_MSG_RESULT([no, already there])
> > + ;;
> > + *)
> > + save_CFLAGS="$CFLAGS"
> > + CFLAGS="-D_FORTIFY_SOURCE=2 -Werror $CFLAGS"
> > + AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
> > + #include <string.h>
> > + int main() { return 0; }
> > + ]])], [ AC_MSG_RESULT([yes])
> > + CFLAGS="-D_FORTIFY_SOURCE=2 $save_CFLAGS" ],
> > + [ AC_MSG_RESULT([no])
> > + CFLAGS="$save_CFLAGS"])
> > + ;;
>
> why not AC_PREPROC_IFELSE and check if _FORTIFY_SOURCE is defined ?
Same reason. We need to test whether the combination of
-D_FORTIFY_SOURCE=2 and any other CFLAG/CPPFLAGS flags work or not. Just
scanning preprocessor flags won't show issues exposed by actually
compiling with a C header (string.h) to see if that errors out.
Cheers,
Mark