From: Neal Norwitz <nnorwitz@gmail.com>
Date: Fri, 28 Feb 2003 17:21:39 +0000 (+0000)
Subject: Fix SF bug #690012 (among others), iconv_codec stops build
X-Git-Tag: v2.3c1~1644
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3f5fcc8acce9fa620fe29d15980850e433f1d5c9;p=python

Fix SF bug #690012 (among others), iconv_codec stops build

Change setup.py to catch all exceptions.
  - Rename module if the exception was an ImportError
  - Only warn if the exception was any other error

Revert _iconv_codec to raising a RuntimeError.
---

diff --git a/Modules/_iconv_codec.c b/Modules/_iconv_codec.c
index a26a341423..3570f461e5 100644
--- a/Modules/_iconv_codec.c
+++ b/Modules/_iconv_codec.c
@@ -674,14 +674,14 @@ init_iconv_codec(void)
     iconv_t hdl = iconv_open(UNICODE_ENCODING, "ISO-8859-1");
 
     if (hdl == (iconv_t)-1) {
-        PyErr_SetString(PyExc_ImportError,
+        PyErr_SetString(PyExc_RuntimeError,
 	  "can't initialize the _iconv_codec module: iconv_open() failed");
 	return;
     }
 
     res = iconv(hdl, &inptr, &insize, &outptr, &outsize);
     if (res == (size_t)-1) {
-        PyErr_SetString(PyExc_ImportError,
+        PyErr_SetString(PyExc_RuntimeError,
 	  "can't initialize the _iconv_codec module: iconv() failed");
 	return;
     }
@@ -698,7 +698,7 @@ init_iconv_codec(void)
        byteswap = 1;
     else {
 	iconv_close(hdl);
-        PyErr_SetString(PyExc_ImportError,
+        PyErr_SetString(PyExc_RuntimeError,
 	  "can't initialize the _iconv_codec module: mixed endianess");
 	return;
     }
diff --git a/setup.py b/setup.py
index ca4bf9f881..7c362f55cd 100644
--- a/setup.py
+++ b/setup.py
@@ -207,9 +207,10 @@ class PyBuildExt(build_ext):
             self.get_ext_filename(self.get_ext_fullname(ext.name)))
         try:
             imp.load_dynamic(ext.name, ext_filename)
-        except ImportError, why:
+        except:
 
-            if 1:
+            exc_type, why, tb = sys.exc_info()
+            if issubclass(exc_type, ImportError):
                 self.announce('*** WARNING: renaming "%s" since importing it'
                               ' failed: %s' % (ext.name, why), level=3)
                 assert not self.inplace
@@ -231,7 +232,8 @@ class PyBuildExt(build_ext):
                     self.announce('unable to remove files (ignored)')
             else:
                 self.announce('*** WARNING: importing extension "%s" '
-                              'failed: %s' % (ext.name, why), level=3)
+                              'failed with %s: %s' % (ext.name, exc_type, why),
+                              level=3)
 
     def get_platform (self):
         # Get value of sys.platform