diff --git a/configure b/configure
index f847ee2..ec9932b 100755
--- a/configure
+++ b/configure
@@ -116,7 +116,13 @@ audio_drv_list=""
 audio_card_list="ac97 es1370 sb16 hda"
 audio_possible_cards="ac97 es1370 sb16 cs4231a adlib gus hda"
 block_drv_whitelist=""
-host_cc="gcc"
+if test "$(uname -s)" = "Darwin"; then
+  # On MacOS X the standard supported system compiler is 'cc' (usually clang),
+  # and 'gcc' is a legacy llvm-gcc which is rather elderly and best avoided.
+  host_cc="cc"
+else
+  host_cc="gcc"
+fi
 libs_softmmu=""
 libs_tools=""
 audio_pt_int=""
@@ -250,7 +256,16 @@ done
 # Using uname is really, really broken.  Once we have the right set of checks
 # we can eliminate its usage altogether.
 
-cc="${CC-${cross_prefix}gcc}"
+# Preferred compiler:
+#  ${CC} (if set)
+#  ${cross_prefix}gcc (if cross-prefix specified)
+#  system compiler
+if test -z "${CC}${cross_prefix}"; then
+  cc="$host_cc"
+else
+  cc="${CC-${cross_prefix}gcc}"
+fi
+
 ar="${AR-${cross_prefix}ar}"
 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
 ld="${LD-${cross_prefix}ld}"
