Skip to content

Commit 5690503

Browse files
committed
Move GTK3 setupext checks to within the process.
Now that we don't support GTK2, there is no need to run the checks in a separate process anymore (gtk3, pyqt5, tk, and wx can all be imported into the same process). A cairo binding is also a dependency for gtk3agg, so the checks for gtk3agg and gtk3cairo should be literally identical.
1 parent c29d9b2 commit 5690503

File tree

1 file changed

+24
-129
lines changed

1 file changed

+24
-129
lines changed

setupext.py

Lines changed: 24 additions & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -1390,13 +1390,8 @@ def check(self):
13901390
return "installing; run-time loading from Python Tcl / Tk"
13911391

13921392
def runtime_check(self):
1393-
""" Checks whether TkAgg runtime dependencies are met
1394-
"""
1395-
try:
1396-
import tkinter
1397-
except ImportError:
1398-
return False
1399-
return True
1393+
"""Checks whether TkAgg runtime dependencies are met."""
1394+
return importlib.util.find_spec("tkinter") is not None
14001395

14011396
def get_extension(self):
14021397
sources = [
@@ -1417,144 +1412,44 @@ def add_flags(self, ext):
14171412
ext.libraries.extend(['dl'])
14181413

14191414

1420-
def backend_gtk3agg_internal_check(x):
1421-
try:
1422-
import gi
1423-
except ImportError:
1424-
return (False, "Requires pygobject to be installed.")
1425-
1426-
try:
1427-
gi.require_version("Gtk", "3.0")
1428-
except ValueError:
1429-
return (False, "Requires gtk3 development files to be installed.")
1430-
except AttributeError:
1431-
return (False, "pygobject version too old.")
1432-
1433-
try:
1434-
from gi.repository import Gtk, Gdk, GObject
1435-
except (ImportError, RuntimeError):
1436-
return (False, "Requires pygobject to be installed.")
1437-
1438-
return (True, "version %s.%s.%s" % (
1439-
Gtk.get_major_version(),
1440-
Gtk.get_micro_version(),
1441-
Gtk.get_minor_version()))
1442-
1443-
14441415
class BackendGtk3Agg(OptionalBackendPackage):
14451416
name = "gtk3agg"
14461417

14471418
def check_requirements(self):
1448-
if 'TRAVIS' in os.environ:
1449-
raise CheckFailed("Can't build with Travis")
1419+
if not any(map(importlib.util.find_spec, ["cairocffi", "cairo"])):
1420+
raise CheckFailed("Requires cairocffi or pycairo to be installed.")
14501421

1451-
# This check needs to be performed out-of-process, because
1452-
# importing gi and then importing regular old pygtk afterward
1453-
# segfaults the interpreter.
14541422
try:
1455-
p = multiprocessing.Pool()
1456-
except:
1457-
return "unknown (can not use multiprocessing to determine)"
1458-
try:
1459-
res = p.map_async(backend_gtk3agg_internal_check, [0])
1460-
success, msg = res.get(timeout=10)[0]
1461-
except multiprocessing.TimeoutError:
1462-
p.terminate()
1463-
# No result returned. Probably hanging, terminate the process.
1464-
success = False
1465-
raise CheckFailed("Check timed out")
1466-
except:
1467-
p.close()
1468-
# Some other error.
1469-
success = False
1470-
msg = "Could not determine"
1471-
raise
1472-
else:
1473-
p.close()
1474-
finally:
1475-
p.join()
1476-
1477-
if success:
1478-
return msg
1479-
else:
1480-
raise CheckFailed(msg)
1481-
1482-
def get_package_data(self):
1483-
return {'matplotlib': ['mpl-data/*.glade']}
1484-
1485-
1486-
def backend_gtk3cairo_internal_check(x):
1487-
try:
1488-
import cairocffi
1489-
except ImportError:
1490-
try:
1491-
import cairo
1423+
import gi
14921424
except ImportError:
1493-
return (False, "Requires cairocffi or pycairo to be installed.")
1494-
1495-
try:
1496-
import gi
1497-
except ImportError:
1498-
return (False, "Requires pygobject to be installed.")
1499-
1500-
try:
1501-
gi.require_version("Gtk", "3.0")
1502-
except ValueError:
1503-
return (False, "Requires gtk3 development files to be installed.")
1504-
except AttributeError:
1505-
return (False, "pygobject version too old.")
1506-
1507-
try:
1508-
from gi.repository import Gtk, Gdk, GObject
1509-
except (RuntimeError, ImportError):
1510-
return (False, "Requires pygobject to be installed.")
1511-
1512-
return (True, "version %s.%s.%s" % (
1513-
Gtk.get_major_version(),
1514-
Gtk.get_micro_version(),
1515-
Gtk.get_minor_version()))
1516-
1517-
1518-
class BackendGtk3Cairo(OptionalBackendPackage):
1519-
name = "gtk3cairo"
1425+
raise CheckFailed("Requires pygobject to be installed.")
15201426

1521-
def check_requirements(self):
1522-
if 'TRAVIS' in os.environ:
1523-
raise CheckFailed("Can't build with Travis")
1524-
1525-
# This check needs to be performed out-of-process, because
1526-
# importing gi and then importing regular old pygtk afterward
1527-
# segfaults the interpreter.
15281427
try:
1529-
p = multiprocessing.Pool()
1530-
except:
1531-
return "unknown (can not use multiprocessing to determine)"
1428+
gi.require_version("Gtk", "3.0")
1429+
except ValueError:
1430+
raise CheckFailed(
1431+
"Requires gtk3 development files to be installed.")
1432+
except AttributeError:
1433+
raise CheckFailed("pygobject version too old.")
1434+
15321435
try:
1533-
res = p.map_async(backend_gtk3cairo_internal_check, [0])
1534-
success, msg = res.get(timeout=10)[0]
1535-
except multiprocessing.TimeoutError:
1536-
p.terminate()
1537-
# No result returned. Probably hanging, terminate the process.
1538-
success = False
1539-
raise CheckFailed("Check timed out")
1540-
except:
1541-
p.close()
1542-
success = False
1543-
raise
1544-
else:
1545-
p.close()
1546-
finally:
1547-
p.join()
1436+
from gi.repository import Gtk, Gdk, GObject
1437+
except (ImportError, RuntimeError):
1438+
raise CheckFailed("Requires pygobject to be installed.")
15481439

1549-
if success:
1550-
return msg
1551-
else:
1552-
raise CheckFailed(msg)
1440+
return "version {}.{}.{}".format(
1441+
Gtk.get_major_version(),
1442+
Gtk.get_minor_version(),
1443+
Gtk.get_micro_version())
15531444

15541445
def get_package_data(self):
15551446
return {'matplotlib': ['mpl-data/*.glade']}
15561447

15571448

1449+
class BackendGtk3Cairo(BackendGtk3Agg):
1450+
name = "gtk3cairo"
1451+
1452+
15581453
class BackendWxAgg(OptionalBackendPackage):
15591454
name = "wxagg"
15601455

0 commit comments

Comments
 (0)