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

Reply via email to