Commit 5c2ac8c1 authored by Benjamin Peterson's avatar Benjamin Peterson

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

Patch by Lukas Vacek.
parent 30a6df5b
...@@ -1356,6 +1356,7 @@ Roger Upole ...@@ -1356,6 +1356,7 @@ Roger Upole
Daniel Urban Daniel Urban
Michael Urman Michael Urman
Hector Urtubia Hector Urtubia
Lukas Vacek
Ville Vainio Ville Vainio
Andi Vajda Andi Vajda
Case Van Horsen Case Van Horsen
......
...@@ -167,6 +167,7 @@ class PyBuildExt(build_ext): ...@@ -167,6 +167,7 @@ class PyBuildExt(build_ext):
def __init__(self, dist): def __init__(self, dist):
build_ext.__init__(self, dist) build_ext.__init__(self, dist)
self.failed = [] self.failed = []
self.failed_on_import = []
def build_extensions(self): def build_extensions(self):
...@@ -247,8 +248,9 @@ class PyBuildExt(build_ext): ...@@ -247,8 +248,9 @@ class PyBuildExt(build_ext):
build_ext.build_extensions(self) build_ext.build_extensions(self)
longest = max([len(e.name) for e in self.extensions]) longest = max([len(e.name) for e in self.extensions])
if self.failed: if self.failed or self.failed_on_import:
longest = max(longest, max([len(name) for name in self.failed])) all_failed = self.failed + self.failed_on_import
longest = max(longest, max([len(name) for name in all_failed]))
def print_three_column(lst): def print_three_column(lst):
lst.sort(key=str.lower) lst.sort(key=str.lower)
...@@ -276,6 +278,14 @@ class PyBuildExt(build_ext): ...@@ -276,6 +278,14 @@ class PyBuildExt(build_ext):
print_three_column(failed) print_three_column(failed)
print() 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): def build_extension(self, ext):
if ext.name == '_ctypes': if ext.name == '_ctypes':
...@@ -334,7 +344,7 @@ class PyBuildExt(build_ext): ...@@ -334,7 +344,7 @@ class PyBuildExt(build_ext):
try: try:
importlib._bootstrap._SpecMethods(spec).load() importlib._bootstrap._SpecMethods(spec).load()
except ImportError as why: except ImportError as why:
self.failed.append(ext.name) self.failed_on_import.append(ext.name)
self.announce('*** WARNING: renaming "%s" since importing it' self.announce('*** WARNING: renaming "%s" since importing it'
' failed: %s' % (ext.name, why), level=3) ' failed: %s' % (ext.name, why), level=3)
assert not self.inplace assert not self.inplace
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment