diff --git a/lib/py/setup.py b/lib/py/setup.py
index 8664b03..5870cd0 100644
--- a/lib/py/setup.py
+++ b/lib/py/setup.py
@@ -19,43 +19,86 @@
 # under the License.
 #
 
+import sys
 try:
     from setuptools import setup, Extension
 except:
-    from distutils.core import setup, Extension
-import sys
+    from distutils.core import setup, Extension, Command
+
+from distutils.command.build_ext import build_ext
+from distutils.errors import CCompilerError, DistutilsExecError, DistutilsPlatformError
 
 include_dirs = []
 if sys.platform == 'win32':
     include_dirs.append('compat/win32')
-fastbinarymod = Extension('thrift.protocol.fastbinary',
-                    sources = ['src/protocol/fastbinary.c'],
+    ext_errors = (CCompilerError, DistutilsExecError, DistutilsPlatformError, IOError)
+else:
+    ext_errors = (CCompilerError, DistutilsExecError, DistutilsPlatformError)
+
+class BuildFailed(Exception):
+    pass
+
+class ve_build_ext(build_ext):
+    def run(self):
+        try:
+            build_ext.run(self)
+        except DistutilsPlatformError, x:
+            raise BuildFailed()
+
+    def build_extension(self, ext):
+        try:
+            build_ext.build_extension(self, ext)
+        except ext_errors, x:
+            raise BuildFailed()
+
+def run_setup(with_binary):
+    if with_binary:
+        extensions = dict(
+            ext_modules = [
+                 Extension('thrift.protocol.fastbinary',
+                       sources = ['src/protocol/fastbinary.c'],
                     include_dirs = include_dirs,
                 )
+            ],
+            cmdclass=dict(build_ext=ve_build_ext)
+        )
+    else:
+        extensions = dict()
+        
+    setup(name = 'thrift',
+        version = '0.8.0-dev',
+        description = 'Python bindings for the Apache Thrift RPC system',
+        author = ['Thrift Developers'],
+        author_email = ['dev@thrift.apache.org'],
+        url = 'http://thrift.apache.org',
+        license = 'Apache License 2.0',
+        packages = [
+            'thrift',
+            'thrift.protocol',
+            'thrift.transport',
+            'thrift.server',
+        ],
+        package_dir = {'thrift' : 'src'},
+        classifiers = [
+            'Development Status :: 5 - Production/Stable',
+            'Environment :: Console',
+            'Intended Audience :: Developers',
+            'Programming Language :: Python',
+            'Programming Language :: Python :: 2',
+            'Topic :: Software Development :: Libraries',
+            'Topic :: System :: Networking'
+        ],
+        **extensions
+    )
 
-setup(name = 'thrift',
-    version = '0.8.0-dev',
-    description = 'Python bindings for the Apache Thrift RPC system',
-    author = ['Thrift Developers'],
-    author_email = ['dev@thrift.apache.org'],
-    url = 'http://thrift.apache.org',
-    license = 'Apache License 2.0',
-    packages = [
-        'thrift',
-        'thrift.protocol',
-        'thrift.transport',
-        'thrift.server',
-    ],
-    package_dir = {'thrift' : 'src'},
-    ext_modules = [fastbinarymod],
-    classifiers=[
-        'Development Status :: 5 - Production/Stable',
-        'Environment :: Console',
-        'Intended Audience :: Developers',
-        'Programming Language :: Python',
-        'Programming Language :: Python :: 2',
-        'Topic :: Software Development :: Libraries',
-        'Topic :: System :: Networking'
-    ]
-)
+try:
+    run_setup(True)
+except BuildFailed:
+    print
+    print '*' * 80
+    print "An error occured while trying to compile with the C extension enabled" 
+    print "Attempting to build without the extension now"
+    print '*' * 80
+    print
 
+    run_setup(False)
