From: Jehan Date: Wed, 2 Oct 2013 05:53:50 +0000 (+1300) Subject: cross-compiling: handling modern platforms able to run foreign binaries. X-Git-Tag: v2.69b~109 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fbec57294abd097fdc5894e0ec0d0133a0b5445b;p=thirdparty%2Fautoconf.git 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) --- 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