py-matplotlib: Add variants for optional dependencies. (#2008)

This commit is contained in:
Elizabeth Fischer 2016-10-12 17:55:38 -04:00 committed by Todd Gamblin
parent 67ef6df4db
commit b27f4e3aeb

View file

@ -38,36 +38,51 @@ class PyMatplotlib(Package):
version('1.4.3', '86af2e3e3c61849ac7576a6f5ca44267') version('1.4.3', '86af2e3e3c61849ac7576a6f5ca44267')
version('1.4.2', '7d22efb6cce475025733c50487bd8898') version('1.4.2', '7d22efb6cce475025733c50487bd8898')
variant('gui', default=False, description='Enable GUI') # See: http://matplotlib.org/users/installing.html
# Variants enabled by default for a standard configuration
variant('tk', default=True, description='Enable Tk GUI')
variant('image', default=True,
description='Enable reading/saving JPEG, BMP and TIFF files')
# Variants optionally available to user
variant('ipython', default=False, description='Enable ipython support') variant('ipython', default=False, description='Enable ipython support')
variant('qt', default=False, description='Enable Qt GUI')
variant('latex', default=False,
description='Enable LaTeX text rendering support')
variant('animation', default=False,
description='Enable animation support')
# Python 2.7, 3.4, or 3.5 # Python 2.7, 3.4, or 3.5
extends('python', ignore=r'bin/nosetests.*$|bin/pbr$') extends('python', ignore=r'bin/nosetests.*$|bin/pbr$')
# Required dependencies # ------ Required dependencies
depends_on('py-numpy@1.6:', type=nolink) depends_on('py-setuptools', type='build')
depends_on('py-setuptools', type='build')
depends_on('py-dateutil@1.1:', type=nolink)
depends_on('py-pyparsing', type=nolink)
depends_on('libpng@1.2:') depends_on('libpng@1.2:')
depends_on('py-pytz', type=nolink)
depends_on('freetype@2.3:') depends_on('freetype@2.3:')
depends_on('py-cycler@0.9:', type=nolink)
# Optional GUI framework depends_on('py-numpy@1.6:', type=nolink)
depends_on('tk@8.3:', when='+gui') # not 8.6.0 or 8.6.1 depends_on('py-dateutil@1.1:', type=nolink)
depends_on('qt', when='+gui') depends_on('py-pyparsing', type=nolink)
depends_on('py-pyside', when='+gui', type=nolink) depends_on('py-pytz', type=nolink)
# TODO: Add more GUI dependencies depends_on('py-cycler@0.9:', type=nolink)
# Optional external programs # ------ Optional GUI frameworks
depends_on('tk@8.3:', when='+tk') # not 8.6.0 or 8.6.1
depends_on('qt', when='+qt')
depends_on('py-pyside', when='+qt', type=nolink)
# --------- Optional external programs
# ffmpeg/avconv or mencoder # ffmpeg/avconv or mencoder
depends_on('ImageMagick') depends_on('ImageMagick', when='+animation')
# Optional dependencies # --------- Optional dependencies
depends_on('py-pillow', type=nolink) depends_on('pkg-config', type='build') # why not...
depends_on('pkg-config', type='build') depends_on('py-pillow', when='+image', type=nolink)
depends_on('py-ipython', when='+ipython') depends_on('py-ipython', when='+ipython')
depends_on('ghostscript', when='+latex', type='run')
depends_on('texlive', when='+latex', type='run')
# Testing dependencies # Testing dependencies
depends_on('py-nose') # type='test' depends_on('py-nose') # type='test'
@ -83,7 +98,7 @@ def install(self, spec, prefix):
setup_py('build') setup_py('build')
setup_py('install', '--prefix={0}'.format(prefix)) setup_py('install', '--prefix={0}'.format(prefix))
if '+gui' in spec: if '+qt' in spec or '+tk' in spec:
# Set backend in matplotlib configuration file # Set backend in matplotlib configuration file
config_file = None config_file = None
for p, d, f in os.walk(prefix.lib): for p, d, f in os.walk(prefix.lib):
@ -95,5 +110,11 @@ def install(self, spec, prefix):
kwargs = {'ignore_absent': False, 'backup': False, 'string': False} kwargs = {'ignore_absent': False, 'backup': False, 'string': False}
rc = FileFilter(config_file) rc = FileFilter(config_file)
rc.filter('^backend.*', 'backend : Qt4Agg', **kwargs)
rc.filter('^#backend.qt4.*', 'backend.qt4 : PySide', **kwargs) # Only make Qt4 be the default backend if Tk is turned off
if '+qt' in spec and '+tk' not in spec:
rc.filter('^backend.*', 'backend : Qt4Agg', **kwargs)
# Additional options in case user is doing Qt4:
if '+qt' in spec:
rc.filter('^#backend.qt4.*', 'backend.qt4 : PySide', **kwargs)