]> git.ipfire.org Git - thirdparty/autoconf.git/commitdiff
cross-compiling: handling modern platforms able to run foreign binaries.
authorJehan <jehan@girinstud.io>
Wed, 2 Oct 2013 05:53:50 +0000 (18:53 +1300)
committerPaul Eggert <eggert@cs.ucla.edu>
Sat, 9 Aug 2014 00:06:45 +0000 (17:06 -0700)
* 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

index b8cbe76e4e3af93ee97e275b934d223af7784826..434a0e9aa1a5f69142d06750a3f0204f62722a40 100644 (file)
@@ -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