From fbec57294abd097fdc5894e0ec0d0133a0b5445b Mon Sep 17 00:00:00 2001 From: Jehan Date: Wed, 2 Oct 2013 18:53:50 +1300 Subject: [PATCH] cross-compiling: handling modern platforms able to run foreign binaries. * lib/autoconf/lang.m4 (_AC_COMPILER_EXEEXT_CROSS): When only --host is set, and no --build, but in the end, the resulting computed $build and $host are different, set $cross_compiling = yes. Indeed we can't rely only on a successful test program run, because false positives occur on some platforms. In particular modern GNU/Linux distributions set Wine to automatically handle Windows binaries. Consequently $cross_compiling gets set to "no" even though we are in an obvious cross-compilation case. (tiny change) --- lib/autoconf/lang.m4 | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/autoconf/lang.m4 b/lib/autoconf/lang.m4 index b8cbe76e..434a0e9a 100644 --- a/lib/autoconf/lang.m4 +++ b/lib/autoconf/lang.m4 @@ -592,11 +592,21 @@ ac_exeext=$ac_cv_exeext # detect cross-compiling on Blue Gene. Note also that AC_COMPUTE_INT # requires programs that create files when not cross-compiling, so it # is safe and not a bad idea to check for this capability in general. +# +# Another false negative would occur on many modern linux distributions, +# which would have Wine run automatically for Windows binaries. This is +# a default configuration on several Debian-derivated distributions for +# instance (see `update-binfmts`). +# As a consequence the simple test program would run without errors, +# even though we are on an obvious cross-compilation case and further +# more complicated tests would fail. m4_define([_AC_COMPILER_EXEEXT_CROSS], [# Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. AC_MSG_CHECKING([whether we are cross compiling]) -if test "$cross_compiling" != yes; then +if test "$cross_compiling" = maybe && test "x$build" != "x$host"; then + cross_compiling=yes +elif test "$cross_compiling" != yes; then _AC_DO_VAR(ac_link) if _AC_DO_TOKENS([./conftest$ac_cv_exeext]); then cross_compiling=no -- 2.47.2