@@ -435,62 +435,52 @@ def _check_for_pkg_config(self, package, include_file, min_version=None,
435435
436436class OptionalPackage (SetupPackage ):
437437 optional = True
438-
439- def get_config (self ):
440- install = True
441- if config is not None :
442- try :
443- install = config .getboolean (
444- 'packages' , self .name )
445- except :
446- pass
447- return install
448-
449- def check (self ):
450- self .install = self .get_config ()
451- if not self .install :
452- raise CheckFailed ("skipping due to configuration" )
453- return "installing"
454-
455-
456- class OptionalBackendPackage (SetupPackage ):
457- optional = True
458438 force = False
459- install = 'auto'
460- check = "installing"
439+ config_category = "packages"
461440
462441 def get_config (self ):
442+ """
443+ Look at `setup.cfg` and return one of ["auto", True, False] indicating
444+ if the package is at default state ("auto"), forced by the user (True)
445+ or opted-out (False).
446+ """
463447 try :
464- self . install = config .getboolean ('gui_support' , self .name )
448+ return config .getboolean (self . config_category , self .name )
465449 except :
466- pass
467- if self .install is True :
468- self .optional = False
469- return self .install
450+ return "auto"
470451
471452 def check (self ):
472453 """
473454 Do not override this method!
474455
475456 For custom dependency checks override self.check_requirements().
457+ Two things are checked: Configuration file and requirements.
476458 """
477- # check configuration file
478- if self .get_config () in [True , 'auto' ]:
479- self .check = "installing"
459+ # Check configuration file
460+ conf = self .get_config ()
461+ # Default "auto" state or install forced by user
462+ if conf in [True , 'auto' ]:
463+ message = "installing"
464+ # Set non-optional if user sets `True` in config
465+ if conf is True :
466+ self .optional = False
467+ # Configuration opt-out by user
480468 else :
481469 # Some backend extensions (e.g. Agg) need to be built for certain
482470 # other GUI backends (e.g. TkAgg) even when manually disabled
483471 if self .force is True :
484- self . check = "installing forced (config override)"
472+ message = "installing forced (config override)"
485473 else :
486474 raise CheckFailed ("skipping due to configuration" )
487475
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 ()
476+ # Check requirements and add extra information (if any) to message.
477+ # If requirements are not met a CheckFailed should be raised in there.
478+ additional_info = self .check_requirements ()
479+ if additional_info :
480+ message += ", " + additional_info
492481
493- return self .check
482+ # No CheckFailed raised until now, return install message.
483+ return message
494484
495485 def check_requirements (self ):
496486 """
@@ -503,6 +493,10 @@ def check_requirements(self):
503493 return ""
504494
505495
496+ class OptionalBackendPackage (OptionalPackage ):
497+ config_category = "gui_support"
498+
499+
506500class Platform (SetupPackage ):
507501 name = "platform"
508502
0 commit comments