2
2
from distutils .core import Extension
3
3
import distutils .command .build_ext
4
4
import glob
5
+ import importlib
5
6
import multiprocessing
6
7
import os
7
8
import pathlib
@@ -1398,13 +1399,8 @@ def check(self):
1398
1399
return "installing; run-time loading from Python Tcl / Tk"
1399
1400
1400
1401
def runtime_check (self ):
1401
- """ Checks whether TkAgg runtime dependencies are met
1402
- """
1403
- try :
1404
- import tkinter
1405
- except ImportError :
1406
- return False
1407
- return True
1402
+ """Checks whether TkAgg runtime dependencies are met."""
1403
+ return importlib .util .find_spec ("tkinter" ) is not None
1408
1404
1409
1405
def get_extension (self ):
1410
1406
sources = [
@@ -1425,144 +1421,44 @@ def add_flags(self, ext):
1425
1421
ext .libraries .extend (['dl' ])
1426
1422
1427
1423
1428
- def backend_gtk3agg_internal_check (x ):
1429
- try :
1430
- import gi
1431
- except ImportError :
1432
- return (False , "Requires pygobject to be installed." )
1433
-
1434
- try :
1435
- gi .require_version ("Gtk" , "3.0" )
1436
- except ValueError :
1437
- return (False , "Requires gtk3 development files to be installed." )
1438
- except AttributeError :
1439
- return (False , "pygobject version too old." )
1440
-
1441
- try :
1442
- from gi .repository import Gtk , Gdk , GObject
1443
- except (ImportError , RuntimeError ):
1444
- return (False , "Requires pygobject to be installed." )
1445
-
1446
- return (True , "version %s.%s.%s" % (
1447
- Gtk .get_major_version (),
1448
- Gtk .get_micro_version (),
1449
- Gtk .get_minor_version ()))
1450
-
1451
-
1452
1424
class BackendGtk3Agg (OptionalBackendPackage ):
1453
1425
name = "gtk3agg"
1454
1426
1455
1427
def check_requirements (self ):
1456
- if 'TRAVIS' in os . environ :
1457
- raise CheckFailed ( "Can't build with Travis " )
1428
+ if not any ( map ( importlib . util . find_spec , [ "cairocffi" , "cairo" ])) :
1429
+ sys . exit ( "Requires cairocffi or pycairo to be installed. " )
1458
1430
1459
- # This check needs to be performed out-of-process, because
1460
- # importing gi and then importing regular old pygtk afterward
1461
- # segfaults the interpreter.
1462
1431
try :
1463
- p = multiprocessing .Pool ()
1464
- except :
1465
- return "unknown (can not use multiprocessing to determine)"
1466
- try :
1467
- res = p .map_async (backend_gtk3agg_internal_check , [0 ])
1468
- success , msg = res .get (timeout = 10 )[0 ]
1469
- except multiprocessing .TimeoutError :
1470
- p .terminate ()
1471
- # No result returned. Probably hanging, terminate the process.
1472
- success = False
1473
- raise CheckFailed ("Check timed out" )
1474
- except :
1475
- p .close ()
1476
- # Some other error.
1477
- success = False
1478
- msg = "Could not determine"
1479
- raise
1480
- else :
1481
- p .close ()
1482
- finally :
1483
- p .join ()
1484
-
1485
- if success :
1486
- return msg
1487
- else :
1488
- raise CheckFailed (msg )
1489
-
1490
- def get_package_data (self ):
1491
- return {'matplotlib' : ['mpl-data/*.glade' ]}
1492
-
1493
-
1494
- def backend_gtk3cairo_internal_check (x ):
1495
- try :
1496
- import cairocffi
1497
- except ImportError :
1498
- try :
1499
- import cairo
1432
+ import gi
1500
1433
except ImportError :
1501
- return (False , "Requires cairocffi or pycairo to be installed." )
1502
-
1503
- try :
1504
- import gi
1505
- except ImportError :
1506
- return (False , "Requires pygobject to be installed." )
1507
-
1508
- try :
1509
- gi .require_version ("Gtk" , "3.0" )
1510
- except ValueError :
1511
- return (False , "Requires gtk3 development files to be installed." )
1512
- except AttributeError :
1513
- return (False , "pygobject version too old." )
1514
-
1515
- try :
1516
- from gi .repository import Gtk , Gdk , GObject
1517
- except (RuntimeError , ImportError ):
1518
- return (False , "Requires pygobject to be installed." )
1519
-
1520
- return (True , "version %s.%s.%s" % (
1521
- Gtk .get_major_version (),
1522
- Gtk .get_micro_version (),
1523
- Gtk .get_minor_version ()))
1524
-
1525
-
1526
- class BackendGtk3Cairo (OptionalBackendPackage ):
1527
- name = "gtk3cairo"
1434
+ raise CheckFailed ("Requires pygobject to be installed." )
1528
1435
1529
- def check_requirements (self ):
1530
- if 'TRAVIS' in os .environ :
1531
- raise CheckFailed ("Can't build with Travis" )
1532
-
1533
- # This check needs to be performed out-of-process, because
1534
- # importing gi and then importing regular old pygtk afterward
1535
- # segfaults the interpreter.
1536
1436
try :
1537
- p = multiprocessing .Pool ()
1538
- except :
1539
- return "unknown (can not use multiprocessing to determine)"
1437
+ gi .require_version ("Gtk" , "3.0" )
1438
+ except ValueError :
1439
+ raise CheckFailed (
1440
+ "Requires gtk3 development files to be installed." )
1441
+ except AttributeError :
1442
+ raise CheckFailed ("pygobject version too old." )
1443
+
1540
1444
try :
1541
- res = p .map_async (backend_gtk3cairo_internal_check , [0 ])
1542
- success , msg = res .get (timeout = 10 )[0 ]
1543
- except multiprocessing .TimeoutError :
1544
- p .terminate ()
1545
- # No result returned. Probably hanging, terminate the process.
1546
- success = False
1547
- raise CheckFailed ("Check timed out" )
1548
- except :
1549
- p .close ()
1550
- success = False
1551
- raise
1552
- else :
1553
- p .close ()
1554
- finally :
1555
- p .join ()
1445
+ from gi .repository import Gtk , Gdk , GObject
1446
+ except (ImportError , RuntimeError ):
1447
+ raise CheckFailed ("Requires pygobject to be installed." )
1556
1448
1557
- if success :
1558
- return msg
1559
- else :
1560
- raise CheckFailed ( msg )
1449
+ return "version {}.{}.{}" . format (
1450
+ Gtk . get_major_version (),
1451
+ Gtk . get_micro_version (),
1452
+ Gtk . get_minor_version () )
1561
1453
1562
1454
def get_package_data (self ):
1563
1455
return {'matplotlib' : ['mpl-data/*.glade' ]}
1564
1456
1565
1457
1458
+ class BackendGtk3Cairo (BackendGtk3Agg ):
1459
+ name = "gtk3cairo"
1460
+
1461
+
1566
1462
class BackendWxAgg (OptionalBackendPackage ):
1567
1463
name = "wxagg"
1568
1464
0 commit comments