Changed to catch compile/link failures and raise CompileError, LibError,
or LinkError (exception classes defined in ccompiler.py).
diff --git a/Lib/distutils/unixccompiler.py b/Lib/distutils/unixccompiler.py
index 40f564a..c2f841f 100644
--- a/Lib/distutils/unixccompiler.py
+++ b/Lib/distutils/unixccompiler.py
@@ -21,7 +21,10 @@
 from types import *
 from copy import copy
 from distutils import sysconfig
-from distutils.ccompiler import CCompiler, gen_preprocess_options, gen_lib_options
+from distutils.ccompiler import \
+     CCompiler, gen_preprocess_options, gen_lib_options, \
+     CompileError, LibError, LinkError
+from distutils.errors import DistutilsExecError
 
 # XXX Things not currently handled:
 #   * optimization/debug/warning flags; we just use whatever's in Python's
@@ -132,7 +135,12 @@
                 self.announce ("skipping %s (%s up-to-date)" % (src, obj))
             else:
                 self.mkpath (os.path.dirname (obj))
-                self.spawn ([self.cc] + cc_args + [src, '-o', obj] + extra_postargs)
+                try:
+                    self.spawn ([self.cc] + cc_args +
+                                [src, '-o', obj] +
+                                extra_postargs)
+                except DistutilsExecError, msg:
+                    raise CompileError, msg
 
         # Return *all* object filenames, not just the ones we just built.
         return objects
@@ -164,7 +172,10 @@
             # needed -- or maybe Python's configure script took care of
             # it for us, hence the check for leading colon.
             if self.ranlib[0] != ':':
-                self.spawn ([self.ranlib, output_filename])
+                try:
+                    self.spawn ([self.ranlib, output_filename])
+                except DistutilsExecError, msg:
+                    raise LibError, msg
         else:
             self.announce ("skipping %s (up-to-date)" % output_filename)
 
@@ -229,7 +240,10 @@
             if extra_postargs:
                 ld_args.extend (extra_postargs)
             self.mkpath (os.path.dirname (output_filename))
-            self.spawn ([self.ld_shared] + ld_args)
+            try:
+                self.spawn ([self.ld_shared] + ld_args)
+            except DistutilsExecError, msg:
+                raise LinkError, msg
         else:
             self.announce ("skipping %s (up-to-date)" % output_filename)
 
@@ -267,7 +281,10 @@
             if extra_postargs:
                 ld_args.extend (extra_postargs)
             self.mkpath (os.path.dirname (output_filename))
-            self.spawn ([self.ld_exec] + ld_args)
+            try:
+                self.spawn ([self.ld_exec] + ld_args)
+            except DistutilsExecError, msg:
+                raise LinkError, msg
         else:
             self.announce ("skipping %s (up-to-date)" % output_filename)