setup.py: report modules which built but import failed (closes #21282)

Patch by Lukas Vacek.
diff --git a/setup.py b/setup.py
index c0bb513..e6b4d51 100644
--- a/setup.py
+++ b/setup.py
@@ -167,6 +167,7 @@
     def __init__(self, dist):
         build_ext.__init__(self, dist)
         self.failed = []
+        self.failed_on_import = []
 
     def build_extensions(self):
 
@@ -247,8 +248,9 @@
         build_ext.build_extensions(self)
 
         longest = max([len(e.name) for e in self.extensions])
-        if self.failed:
-            longest = max(longest, max([len(name) for name in self.failed]))
+        if self.failed or self.failed_on_import:
+            all_failed = self.failed + self.failed_on_import
+            longest = max(longest, max([len(name) for name in all_failed]))
 
         def print_three_column(lst):
             lst.sort(key=str.lower)
@@ -276,6 +278,14 @@
             print_three_column(failed)
             print()
 
+        if self.failed_on_import:
+            failed = self.failed_on_import[:]
+            print()
+            print("Following modules built successfully"
+                  " but were removed because they could not be imported:")
+            print_three_column(failed)
+            print()
+
     def build_extension(self, ext):
 
         if ext.name == '_ctypes':
@@ -334,7 +344,7 @@
         try:
             importlib._bootstrap._SpecMethods(spec).load()
         except ImportError as why:
-            self.failed.append(ext.name)
+            self.failed_on_import.append(ext.name)
             self.announce('*** WARNING: renaming "%s" since importing it'
                           ' failed: %s' % (ext.name, why), level=3)
             assert not self.inplace