configure: Check the type of binaries produced by the compiler rather than that used by the host environment.

Francois Gouget fgouget at free.fr
Mon Aug 31 04:47:30 CDT 2009


This better deals with 32bit chroots on 64bit x86 systems.
---

To run gcc 2.95 I use a chroot environment since it is no longer 
supported in the current Debian releases. This is a 32bit Debian 4.0 
chroot so it naturally produces 32bit binaries.

However configure's $host variable still gets set to x86_64-*, 
presumably because uname still reports the machine as being 64bit since 
it's running a 64bit kernel.

This causes Wine's configure.ac to unconditionally add the 
unneeded '-m32' option to the gcc command line. However gcc 2.95 does 
not support that option so I get an error telling me the compiler cannot 
produce binaries.

I think the core of the problem is that we should check the kind of 
binaries produced by the compiler rather than the host architecture to 
determine whether to add -m32 or not.

So this is what this patch does by calling 'gcc -dumpmachine'. But maybe 
there's a better way...


 configure.ac |   29 +++++++++++++++++++----------
 2 files changed, 38 insertions(+), 20 deletions(-)

diff --git a/configure.ac b/configure.ac
index 1925035..3c8e402 100644
--- a/configure.ac
+++ b/configure.ac
@@ -107,7 +107,16 @@ dnl We can't use AC_PROG_CPP for winegcc, it uses by default $(CC) -E
 AC_CHECK_TOOL(CPPBIN,cpp,cpp)
 AC_DEFINE_UNQUOTED(EXEEXT,["$ac_exeext"],[Define to the file extension for executables.])
 
-case $host in
+cc_host=`$CC -dumpmachine 2>/dev/null`
+if test "x$cc_host" = "x"
+then
+    cc_host="$host"
+    cc_cpu="$host_cpu"
+else
+    cc_cpu=`echo "$cc_host" | sed -e 's/-.*//'`
+fi
+
+case $cc_host in
   *-darwin*)
     if test "x$enable_win64" = "xyes"
     then
@@ -115,7 +124,7 @@ case $host in
       CXX="$CXX -m64"
       LD="${LD:-ld} -arch x86_64"
       AS="${AS:-as} -arch x86_64"
-      host_cpu="x86_64"
+      cc_cpu="x86_64"
       notice_platform="64-bit "
       AC_SUBST(TARGETFLAGS,"-m64")
     else
@@ -123,7 +132,7 @@ case $host in
       CXX="$CXX -m32"
       LD="${LD:-ld} -arch i386"
       AS="${AS:-as} -arch i386"
-      host_cpu="i386"
+      cc_cpu="i386"
       notice_platform="32-bit "
       AC_SUBST(TARGETFLAGS,"-m32")
       enable_win16=${enable_win16:-yes}
@@ -140,7 +149,7 @@ case $host in
                       AC_MSG_ERROR([Cannot build a 32-bit program, you need to install 32-bit development libraries.])])
       LD="${LD:-ld} -m elf_i386"
       AS="${AS:-as} --32"
-      host_cpu="i386"
+      cc_cpu="i386"
       notice_platform="32-bit "
       AC_SUBST(TARGETFLAGS,"-m32")
       enable_win16=${enable_win16:-yes}
@@ -273,7 +282,7 @@ then
   if test "$ICOTOOL" = "false"; then WINE_WARNING([icotool is missing, icons can't be rebuilt.]); fi
 fi
 
-case $host_cpu in
+case $cc_cpu in
   *i[[3456789]]86*)
     AC_PATH_PROG(PRELINK, prelink, false, [/sbin /usr/sbin $PATH])
     ;;
@@ -632,7 +641,7 @@ case $host_os in
         AC_CHECK_FUNCS(IOHIDManagerCreate)
         LIBS="$ac_save_LIBS"
     fi
-    case $host_cpu in
+    case $cc_cpu in
       *powerpc*)
         LDDLLFLAGS="$LDDLLFLAGS -read_only_relocs warning"  dnl FIXME
         ;;
@@ -699,7 +708,7 @@ case $host_os in
       WINE_TRY_CFLAGS([-Wl,--enable-new-dtags],
                       [LDRPATH_INSTALL="$LDRPATH_INSTALL -Wl,--enable-new-dtags"])
 
-      case $host_cpu in
+      case $cc_cpu in
         *i[[3456789]]86* | x86_64)
           WINE_TRY_CFLAGS([-Wl,--section-start,.interp=0x7bf00400],
                           [LDEXECFLAGS="$LDEXECFLAGS -Wl,--section-start,.interp=0x7bf00400"])
@@ -1488,7 +1497,7 @@ AC_CACHE_CHECK([whether external symbols need an underscore prefix], ac_cv_c_ext
                       [if (ac_test) return 1],
                       ac_cv_c_extern_prefix="yes",ac_cv_c_extern_prefix="no"))
 
-case $host_cpu in
+case $cc_cpu in
   *i[[3456789]]86*)
     AC_CACHE_CHECK([whether external symbols need stdcall decoration], ac_cv_c_stdcall_suffix,
         WINE_TRY_ASM_LINK(["jmp _ac_test at 4"],
@@ -1613,7 +1622,7 @@ esac
 AC_SUBST(MAIN_BINARY,"wine")
 test -z "$with_wine64" || MAIN_BINARY="wine32"
 
-case $host_cpu in
+case $cc_cpu in
   *i[[3456789]]86*)
     case $host_os in
       linux* | k*bsd*-gnu)
@@ -2011,7 +2020,7 @@ fi
 
 dnl *** check for the need to define platform-specific symbols
 
-case $host_cpu in
+case $cc_cpu in
   *i[[3456789]]86*) WINE_CHECK_DEFINE([__i386__]) ;;
   *x86_64*)         WINE_CHECK_DEFINE([__x86_64__]) ;;
   *alpha*)          WINE_CHECK_DEFINE([__ALPHA__]) ;;
-- 
1.6.3.3




More information about the wine-patches mailing list