diff --git a/distrib/configure.ac.in b/distrib/configure.ac.in
index facba914c24e69e74e9785382939861dd80e1be1..a37800458b673c9945582686950e79da2beee77a 100644
--- a/distrib/configure.ac.in
+++ b/distrib/configure.ac.in
@@ -50,7 +50,36 @@ AC_PATH_PROG(SedCmd,gsed sed,sed)
 #
 dnl ** How to invoke gcc/cpp **
 #
-FP_ARG_WITH_PATH_GNU_PROG([CC], [gcc])
+if test "$TargetOS_CPP" = "darwin"
+then
+    AC_MSG_CHECKING(XCode version)
+    XCodeVersion=`xcodebuild -version | grep Xcode | sed "s/Xcode //"`
+    # Old XCode versions don't actually give the XCode version
+    if test "$XCodeVersion" = ""
+    then
+        AC_MSG_RESULT(not found (too old?))
+    else
+        AC_MSG_RESULT($XCodeVersion)
+        XCodeVersion1=`echo "$XCodeVersion" | sed 's/\..*//'`
+changequote(, )dnl
+        XCodeVersion2=`echo "$XCodeVersion" | sed 's/[^.]*\.\([^.]*\).*/\1/'`
+changequote([, ])dnl
+        AC_MSG_NOTICE(XCode version component 1: $XCodeVersion1)
+        AC_MSG_NOTICE(XCode version component 2: $XCodeVersion2)
+    fi
+fi
+
+dnl ** Which gcc to use?
+dnl --------------------------------------------------------------
+if test "$TargetOS_CPP" = "darwin" &&
+   test "$XCodeVersion1" -ge 4
+then
+  # From Xcode 4, use 'gcc-4.2' to force the use of the gcc legacy backend (instead of the LLVM
+  # backend)
+  FP_ARG_WITH_PATH_GNU_PROG([CC], [gcc-4.2])
+else
+  FP_ARG_WITH_PATH_GNU_PROG([CC], [gcc])
+fi
 export CC
 WhatGccIsCalled="$CC"
 AC_SUBST(WhatGccIsCalled)