@@ -457,6 +457,7 @@ class OptionalBackendPackage(SetupPackage):
457457 optional = True
458458 force = False
459459 install = 'auto'
460+ check = "installing"
460461
461462 def get_config (self ):
462463 try :
@@ -469,19 +470,38 @@ def get_config(self):
469470
470471 def check (self ):
471472 """
472- This method should be called using super() even when overriding this
473- method in a base class to check for a opt-out in the config file.
473+ Do not override this method!
474+
475+ For custom dependency checks override self.check_requirements().
474476 """
475- if self .get_config () is True :
476- return "installing"
477+ # check configuration file
478+ if self .get_config () in [True , 'auto' ]:
479+ self .check = "installing"
477480 else :
478481 # Some backend extensions (e.g. Agg) need to be built for certain
479482 # other GUI backends (e.g. TkAgg) even when manually disabled
480483 if self .force is True :
481- return "installation is forced (overriding configuration )"
484+ self . check = "installing forced (config override )"
482485 else :
483486 raise CheckFailed ("skipping due to configuration" )
484487
488+ # check requirements and add extra information (if any) to message
489+ custom_info = self .check_requirements ()
490+ if custom_info :
491+ self .check += ", " + self .check_requirements ()
492+
493+ return self .check
494+
495+ def check_requirements (self ):
496+ """
497+ Override this method to do custom dependency checks.
498+
499+ - Raise CheckFailed() if requirements are not met.
500+ - Return message with additional information, or an empty string
501+ (or None) for no additional information.
502+ """
503+ return ""
504+
485505
486506class Platform (SetupPackage ):
487507 name = "platform"
@@ -1016,9 +1036,7 @@ class BackendTkAgg(OptionalBackendPackage):
10161036 def __init__ (self ):
10171037 self .tcl_tk_cache = None
10181038
1019- def check (self ):
1020- super (BackendTkAgg , self ).check ()
1021-
1039+ def check_requirements (self ):
10221040 try :
10231041 if sys .version_info [0 ] < 3 :
10241042 import Tkinter
@@ -1304,9 +1322,7 @@ def add_flags(self, ext):
13041322class BackendGtk (OptionalBackendPackage ):
13051323 name = "gtk"
13061324
1307- def check (self ):
1308- super (BackendGtk , self ).check ()
1309-
1325+ def check_requirements (self ):
13101326 try :
13111327 import gtk
13121328 except ImportError :
@@ -1459,9 +1475,7 @@ def backend_gtk3agg_internal_check(x):
14591475class BackendGtk3Agg (OptionalBackendPackage ):
14601476 name = "gtk3agg"
14611477
1462- def check (self ):
1463- super (BackendGtk3Agg , self ).check ()
1464-
1478+ def check_requirements (self ):
14651479 if 'TRAVIS' in os .environ :
14661480 raise CheckFailed ("Can't build with Travis" )
14671481
@@ -1524,9 +1538,7 @@ def backend_gtk3cairo_internal_check(x):
15241538class BackendGtk3Cairo (OptionalBackendPackage ):
15251539 name = "gtk3cairo"
15261540
1527- def check (self ):
1528- super (BackendGtk3Cairo , self ).check ()
1529-
1541+ def check_requirements (self ):
15301542 if 'TRAVIS' in os .environ :
15311543 raise CheckFailed ("Can't build with Travis" )
15321544
@@ -1554,9 +1566,7 @@ def get_package_data(self):
15541566class BackendWxAgg (OptionalBackendPackage ):
15551567 name = "wxagg"
15561568
1557- def check (self ):
1558- super (BackendWxAgg , self ).check ()
1559-
1569+ def check_requirements (self ):
15601570 try :
15611571 import wxversion
15621572 except ImportError :
@@ -1594,9 +1604,7 @@ def check(self):
15941604class BackendMacOSX (OptionalBackendPackage ):
15951605 name = 'macosx'
15961606
1597- def check (self ):
1598- super (BackendMacOSX , self ).check ()
1599-
1607+ def check_requirements (self ):
16001608 if sys .platform != 'darwin' :
16011609 raise CheckFailed ("Mac OS-X only" )
16021610
@@ -1623,9 +1631,7 @@ class Windowing(OptionalBackendPackage):
16231631 """
16241632 name = "windowing"
16251633
1626- def check (self ):
1627- super (Windowing , self ).check ()
1628-
1634+ def check_requirements (self ):
16291635 if sys .platform != 'win32' :
16301636 raise CheckFailed ("Microsoft Windows only" )
16311637 config = self .get_config ()
@@ -1656,9 +1662,7 @@ def convert_qt_version(self, version):
16561662 temp .insert (0 , str (int (chunk , 16 )))
16571663 return '.' .join (temp )
16581664
1659- def check (self ):
1660- super (BackendQt4 , self ).check ()
1661-
1665+ def check_requirements (self ):
16621666 try :
16631667 from PyQt4 import pyqtconfig
16641668 except ImportError :
@@ -1676,9 +1680,7 @@ def check(self):
16761680class BackendPySide (OptionalBackendPackage ):
16771681 name = "pyside"
16781682
1679- def check (self ):
1680- super (BackendPySide , self ).check ()
1681-
1683+ def check_requirements (self ):
16821684 try :
16831685 from PySide import __version__
16841686 from PySide import QtCore
@@ -1694,9 +1696,7 @@ def check(self):
16941696class BackendCairo (OptionalBackendPackage ):
16951697 name = "cairo"
16961698
1697- def check (self ):
1698- super (BackendCairo , self ).check ()
1699-
1699+ def check_requirements (self ):
17001700 try :
17011701 import cairo
17021702 except ImportError :
0 commit comments