From aa56d27aead95faedd6225322b7783d1437e1013 Mon Sep 17 00:00:00 2001 From: Dianne Skoll Date: Mon, 20 Oct 2025 11:32:25 -0400 Subject: [PATCH] Better checking for -flto flags. --- configure | 85 +++++++++++++++++++++++++++++++++++++++------------- configure.ac | 44 +++++++++++++++++---------- 2 files changed, 92 insertions(+), 37 deletions(-) diff --git a/configure b/configure index ac0af0f4..2ae949bc 100755 --- a/configure +++ b/configure @@ -2660,6 +2660,12 @@ cat <<'EOF' EOF +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + ac_config_headers="$ac_config_headers src/config.h" @@ -4221,29 +4227,66 @@ fi if test "$GCC" = yes; then - CFLAGS="$CFLAGS -Wall -Wextra -Wstrict-prototypes" + CFLAGS="$CFLAGS -Wall -Wextra -Wstrict-prototypes" # Check for link-time optimization support - f=-flto=auto - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC supports $f" >&5 -printf %s "checking whether $CC supports $f... " >&6; } - if $CC -Werror -E $f - < /dev/null > /dev/null 2>&1 ; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - CFLAGS="$CFLAGS $f" - f=-ffat-lto-objects - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC supports $f" >&5 -printf %s "checking whether $CC supports $f... " >&6; } - if $CC -Werror -E $f - < /dev/null > /dev/null 2>&1 ; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - CFLAGS="$CFLAGS $f" - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - fi + CFLAGS="$CFLAGS -flto=auto" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -flto=auto" >&5 +printf %s "checking whether $CC supports -flto=auto... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int x = 1; +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + lto=yes +else case e in #( + e) lto=no + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lto" >&5 +printf "%s\n" "$lto" >&6; } + if test "x$lto" != "xyes" ; then + CFLAGS="$CFLAGS -Wall -Wextra -Wstrict-prototypes" else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -ffat-lto-object" >&5 +printf %s "checking whether $CC supports -ffat-lto-object... " >&6; } + CFLAGS="$CFLAGS -flto=auto -ffat-lto-objects" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int x = 1; +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + lto=yes +else case e in #( + e) lto=no + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lto" >&5 +printf "%s\n" "$lto" >&6; } + if test "x$lto" != "xyes" ; then + CFLAGS="$CFLAGS -Wall -Wextra -Wstrict-prototypes -flto=auto" + fi fi fi diff --git a/configure.ac b/configure.ac index 4dbe445f..07d2cc70 100644 --- a/configure.ac +++ b/configure.ac @@ -13,6 +13,7 @@ cat <<'EOF' EOF +AC_LANG([C]) AC_CONFIG_HEADERS([src/config.h]) AC_ARG_ENABLE(perl-build-artifacts, @@ -44,24 +45,35 @@ AC_CHECK_HEADERS(strings.h sys/types.h glob.h wctype.h locale.h langinfo.h sys/i dnl Checks for typedefs, structures, and compiler characteristics. AC_STRUCT_TM -if test "$GCC" = yes; then - CFLAGS="$CFLAGS -Wall -Wextra -Wstrict-prototypes" +if test "$GCC" = yes; then + CFLAGS="$CFLAGS -Wall -Wextra -Wstrict-prototypes" # Check for link-time optimization support - f=-flto=auto - AC_MSG_CHECKING([whether $CC supports $f]) - if $CC -Werror -E $f - < /dev/null > /dev/null 2>&1 ; then - AC_MSG_RESULT([yes]) - CFLAGS="$CFLAGS $f" - f=-ffat-lto-objects - AC_MSG_CHECKING([whether $CC supports $f]) - if $CC -Werror -E $f - < /dev/null > /dev/null 2>&1 ; then - AC_MSG_RESULT([yes]) - CFLAGS="$CFLAGS $f" - else - AC_MSG_RESULT([no]) - fi + CFLAGS="$CFLAGS -flto=auto" + AC_MSG_CHECKING([whether $CC supports -flto=auto]) + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[int x = 1;]], + [[]])], + [lto=yes], + [lto=no] + ) + AC_MSG_RESULT([$lto]) + if test "x$lto" != "xyes" ; then + CFLAGS="$CFLAGS -Wall -Wextra -Wstrict-prototypes" else - AC_MSG_RESULT([no]) + AC_MSG_CHECKING([whether $CC supports -ffat-lto-object]) + CFLAGS="$CFLAGS -flto=auto -ffat-lto-objects" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[int x = 1;]], + [[]])], + [lto=yes], + [lto=no] + ) + AC_MSG_RESULT([$lto]) + if test "x$lto" != "xyes" ; then + CFLAGS="$CFLAGS -Wall -Wextra -Wstrict-prototypes -flto=auto" + fi fi fi