Fix a problem with the libffi testsuite using a method to determine the compiler to use resulting in the tool being different from one the library has been built with, and causing a catastrophic failure from the inability to actually choose any compiler at all in a cross-compilation configuration.
Address this problem by providing a DejaGNU configuration file defining the compiler to use, via the CC_FOR_TARGET TCL variable, set from $CC by autoconf, which will have all the required options set for the target compiler to build executables in the environment configured, removing failures like: FAIL: libffi.call/closure_fn0.c -W -Wall -Wno-psabi -O0 (test for excess errors) Excess errors: default_target_compile: No compiler to compile with UNRESOLVED: libffi.call/closure_fn0.c -W -Wall -Wno-psabi -O0 compilation failed to produce executable and bringing overall test results for the `riscv64-linux-gnu' target (here with the `x86_64-linux-gnu' host and RISC-V QEMU in the Linux user emulation mode as the target board) from: === libffi Summary === # of unexpected failures 708 # of unresolved testcases 708 # of unsupported tests 30 to: === libffi Summary === # of expected passes 1934 # of unsupported tests 28 This is a combined backport of the relevant parts of upstream libffi changes as follows: - commit 8308984e479e ("[PATCH] Make sure we're running dejagnu tests with the right compiler."), - commit 2d9b3939751b ("[PATCH] Fix for closures with sunpro compiler"), - commit 0c3824702d3d ("[PATCH] Always set CC_FOR_TARGET for dejagnu, to make the testsuite respect $CC"), - commit 7d698125b1f0 ("[PATCH] Use the proper C++ compiler to run C++ tests"), - commit 6b6df1a7bb37 ("[PATCH] Adds `local.exp` to CLEANFILES"), - commit 6cf0dea78a5a ("[PATCH] Change CLEANFILES to DISTCLEANFILES") libffi/ * Makefile.am (DISTCLEANFILES): New variable. * configure.ac: Produce `local.exp'. * Makefile.in: Regenerate. * configure: Regenerate. * testsuite/Makefile.am (EXTRA_DEJAGNU_SITE_CONFIG): New variable. * testsuite/Makefile.in: Regenerate. --- Hi, As you may recall I have proposed a clean solution for the problem discussed here, which I posted for inclusion with upstream libffi, with an intent to have it backported to GCC as soon as it has been accepted by the maintainer, as a part of patch series that have been archived here: <https://sourceware.org/pipermail/libffi-discuss/2020/002502.html>. I have pinged the series last week: <https://sourceware.org/pipermail/libffi-discuss/2020/002517.html>, and then again just now: <https://sourceware.org/pipermail/libffi-discuss/2020/002518.html>. I think with the GCC 10 release about to be rolled out we need a contingency plan, so I propose that, unless my proposed libffi changes have been accepted upstream real soon now, such as by the end of this coming Friday AoE, we include this change instead. Therefore, OK to apply once Friday AoE has passed and the upstream libffi changes have gone nowhere? Maciej [Change log corrected to include history before v4.] Changes from v4: - Replace with a backport of the partially complete solution already present upstream. Changes from v3: - Replace with a backport of a change submitted upstream. Changes from v2: - Revert to v1. - Rename testsuite/libffi-test-support.exp.in to testsuite/libffi-site-extra.exp.in. Changes from v1: - Remove testsuite/libffi-test-support.exp.in and the associated changes. - Pass $(CC) via `--tool_exec' in $(AM_RUNTESTFLAGS). --- libffi/Makefile.am | 3 +++ libffi/Makefile.in | 4 ++++ libffi/configure | 5 +++++ libffi/configure.ac | 5 +++++ libffi/testsuite/Makefile.am | 2 ++ libffi/testsuite/Makefile.in | 1 + 6 files changed, 20 insertions(+) gcc-test-libffi-cc-for-target.diff Index: gcc/libffi/Makefile.am =================================================================== --- gcc.orig/libffi/Makefile.am +++ gcc/libffi/Makefile.am @@ -15,6 +15,9 @@ EXTRA_DIST = LICENSE ChangeLog.v1 Change libffi.xcodeproj/project.pbxproj \ libtool-ldflags +# local.exp is generated by configure +DISTCLEANFILES = local.exp + # Automake Documentation: # If your package has Texinfo files in many directories, you can use the # variable TEXINFO_TEX to tell Automake where to find the canonical Index: gcc/libffi/Makefile.in =================================================================== --- gcc.orig/libffi/Makefile.in +++ gcc/libffi/Makefile.in @@ -454,6 +454,9 @@ EXTRA_DIST = LICENSE ChangeLog.v1 Change libtool-ldflags +# local.exp is generated by configure +DISTCLEANFILES = local.exp + # Automake Documentation: # If your package has Texinfo files in many directories, you can use the # variable TEXINFO_TEX to tell Automake where to find the canonical @@ -1674,6 +1677,7 @@ installcheck: installcheck-recursive -rm -f src/x86/$(am__dirstamp) -rm -f src/xtensa/$(DEPDIR)/$(am__dirstamp) -rm -f src/xtensa/$(am__dirstamp) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" Index: gcc/libffi/configure =================================================================== --- gcc.orig/libffi/configure +++ gcc/libffi/configure @@ -14961,6 +14961,11 @@ _ACEOF +cat > local.exp <<EOF +set CC_FOR_TARGET "$CC" +set CXX_FOR_TARGET "$CXX" +EOF + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } Index: gcc/libffi/configure.ac =================================================================== --- gcc.orig/libffi/configure.ac +++ gcc/libffi/configure.ac @@ -61,6 +61,11 @@ AC_PROG_LIBTOOL # Test for 64-bit build. AC_CHECK_SIZEOF([size_t]) +cat > local.exp <<EOF +set CC_FOR_TARGET "$CC" +set CXX_FOR_TARGET "$CXX" +EOF + AM_MAINTAINER_MODE AC_CHECK_HEADERS(sys/mman.h) Index: gcc/libffi/testsuite/Makefile.am =================================================================== --- gcc.orig/libffi/testsuite/Makefile.am +++ gcc/libffi/testsuite/Makefile.am @@ -13,6 +13,8 @@ RUNTEST = `if [ -f $(top_srcdir)/../deja AM_RUNTESTFLAGS = +EXTRA_DEJAGNU_SITE_CONFIG=../local.exp + CLEANFILES = *.exe core* *.log *.sum EXTRA_DIST = config/default.exp libffi.call/cls_19byte.c \ Index: gcc/libffi/testsuite/Makefile.in =================================================================== --- gcc.orig/libffi/testsuite/Makefile.in +++ gcc/libffi/testsuite/Makefile.in @@ -279,6 +279,7 @@ RUNTEST = `if [ -f $(top_srcdir)/../deja echo $(top_srcdir)/../dejagnu/runtest ; \ else echo runtest; fi` +EXTRA_DEJAGNU_SITE_CONFIG = ../local.exp CLEANFILES = *.exe core* *.log *.sum EXTRA_DIST = config/default.exp libffi.call/cls_19byte.c \ libffi.call/cls_align_longdouble_split.c \