From: <ds...@us...> - 2007-11-12 22:00:20
|
Revision: 4239 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4239&view=rev Author: dsdale Date: 2007-11-12 14:00:15 -0800 (Mon, 12 Nov 2007) Log Message: ----------- expose remaining build options in setup.cfg. See setup.cfg for details Modified Paths: -------------- trunk/matplotlib/CHANGELOG trunk/matplotlib/lib/configobj.py trunk/matplotlib/lib/dateutil/__init__.py trunk/matplotlib/lib/pytz/__init__.py trunk/matplotlib/setup.cfg.template trunk/matplotlib/setup.py trunk/matplotlib/setupext.py Modified: trunk/matplotlib/CHANGELOG =================================================================== --- trunk/matplotlib/CHANGELOG 2007-11-12 20:45:15 UTC (rev 4238) +++ trunk/matplotlib/CHANGELOG 2007-11-12 22:00:15 UTC (rev 4239) @@ -1,3 +1,9 @@ +2007-11-12 Exposed all the build options in setup.cfg. These options are + read into a dict called "options" by setupext.py. Also, added + "-mpl" tags to the version strings for packages provided by + matplotlib. Versions provided by mpl will be identified and + updated on subsequent installs - DSD + 2007-11-12 Added support for STIX fonts. A new rcParam, mathtext.fontset, can be used to choose between: Modified: trunk/matplotlib/lib/configobj.py =================================================================== --- trunk/matplotlib/lib/configobj.py 2007-11-12 20:45:15 UTC (rev 4238) +++ trunk/matplotlib/lib/configobj.py 2007-11-12 22:00:15 UTC (rev 4239) @@ -109,7 +109,7 @@ True, False = 1, 0 -__version__ = '4.4.0' +__version__ = '4.4.0-mpl' __revision__ = '$Id: configobj.py 156 2006-01-31 14:57:08Z fuzzyman $' Modified: trunk/matplotlib/lib/dateutil/__init__.py =================================================================== --- trunk/matplotlib/lib/dateutil/__init__.py 2007-11-12 20:45:15 UTC (rev 4238) +++ trunk/matplotlib/lib/dateutil/__init__.py 2007-11-12 22:00:15 UTC (rev 4239) @@ -6,4 +6,4 @@ """ __author__ = "Gustavo Niemeyer <gu...@ni...>" __license__ = "PSF License" -__version__ = "1.2" +__version__ = "1.2-mpl" Modified: trunk/matplotlib/lib/pytz/__init__.py =================================================================== --- trunk/matplotlib/lib/pytz/__init__.py 2007-11-12 20:45:15 UTC (rev 4238) +++ trunk/matplotlib/lib/pytz/__init__.py 2007-11-12 22:00:15 UTC (rev 4239) @@ -12,7 +12,7 @@ OLSON_VERSION = '2007g' VERSION = OLSON_VERSION #VERSION = OLSON_VERSION + '.2' -__version__ = OLSON_VERSION +__version__ = OLSON_VERSION+'-mpl' OLSEN_VERSION = OLSON_VERSION # Old releases had this misspelling Modified: trunk/matplotlib/setup.cfg.template =================================================================== --- trunk/matplotlib/setup.cfg.template 2007-11-12 20:45:15 UTC (rev 4238) +++ trunk/matplotlib/setup.cfg.template 2007-11-12 22:00:15 UTC (rev 4239) @@ -13,7 +13,11 @@ [provide_packages] # By default, matplotlib checks for a few dependencies and # installs them if missing. This feature can be turned off -# by uncommenting the following lines: +# by uncommenting the following lines. Acceptible values are: +# True: install, overwrite an existing installation +# False: do not install +# auto: install only if the package is unavailable. This +# is the default behavior # ## Date/timezone support: #pytz = False @@ -40,8 +44,34 @@ # installed on your system. # # You can uncomment any the following lines if you know you do -# not want to use the GUI toolkit. +# not want to use the GUI toolkit. Acceptible values are: +# True: build the extension. Exits with a warning if the +# required dependencies are not available +# False: do not build the extension +# auto: build if the required dependencies are available, +# otherwise skip silently. This is the default +# behavior +# #gtk = False #gtkagg = False #tkagg = False #wxagg = False + +[rc_options] +# User-configurable options +# +# Default backend, one of: Agg, Cairo, CocoaAgg, GTK, GTKAgg, +# GTKCairo, FltkAgg, QtAgg, Qt4Agg, SVG, TkAgg, WX, WXAgg. +# Only the Agg and SVG backends do not require external +# dependencies. Do not choose GTK, GTKAgg, GTKCairo, TkAgg or +# WXAgg if you have disabled the relevent extension modules. +# Agg will be used by default. +#backend = Agg +# +# The numerix module was historically used to provide +# compatibility between the Numeric, numarray, and NumPy array +# packages. Now that NumPy has emerge as the universal array +# package for python, numerix is not really necessary and is +# maintained to provide backward compatibility. Do not change +# this unless you have a compelling reason to do so. +#numerix = numpy Modified: trunk/matplotlib/setup.py =================================================================== --- trunk/matplotlib/setup.py 2007-11-12 20:45:15 UTC (rev 4238) +++ trunk/matplotlib/setup.py 2007-11-12 22:00:15 UTC (rev 4239) @@ -3,74 +3,19 @@ matplotlib, inlcuding the *-devel versions of these libraries if you are using a package manager like RPM or debian. -matplotlib has added some extension module code which can optionally -be built by setting the appropriate flag below. - -The GTKAgg and TkAgg will try to build if they detect pygtk or Tkinter -respectively; set them to 0 if you do not want to build them +The matplotlib build options can be modified with a setup.cfg file. See +setup.cfg.template for more information. """ -rc = {'backend':'PS', 'numerix':'numpy'} - -# build the image support module - requires agg. By default, matplotlib will -# build support for whatever array packages you have installed. -BUILD_IMAGE = 1 - - -# build a small extension to manage the focus on win32 platforms. -#BUILD_WINDOWING = 0 -BUILD_WINDOWING = 'auto' - - VERBOSE = False # insert lots of diagnostic prints in extension code +# This dict will be updated as we try to select the best option during +# the build process. However, values in setup.cfg will be used, if +# defined. +rc = {'backend':'Agg', 'numerix':'numpy'} - -## You shouldn't need to customize below this point -import ConfigParser -import os - -# Build the antigrain geometry toolkit. Agg makes heavy use of -# templates, so it probably requires a fairly recent compiler to build -# it. It makes very nice antialiased output and also supports alpha -# blending -BUILD_AGG = 1 -BUILD_GTKAGG = 1 -BUILD_GTK = 1 - -# build TK GUI with Agg renderer ; requires Tkinter Python extension -# and Tk includes -# Use False or 0 if you don't want to build -BUILD_TKAGG = 'auto' - - -# build wxPython extension code to efficiently blit agg into wx. Only -# needed for wxpython <2.8 if you plan on doing animations -BUILD_WXAGG = 1 - -if os.path.exists("setup.cfg"): - config = ConfigParser.SafeConfigParser() - config.read("setup.cfg") - try: - BUILD_GTK = config.getboolean("gui_support", "gtk") - except: - pass - try: - BUILD_GTKAGG = config.getboolean("gui_support", "gtkagg") - except: - pass - try: - BUILD_TKAGG = config.getboolean("gui_support", "tkagg") - except: - pass - try: - BUILD_WXAGG = config.getboolean("gui_support", "wxagg") - except: - pass - - # BEFORE importing disutils, remove MANIFEST. distutils doesn't properly # update it when the contents of directories change. import os @@ -106,7 +51,7 @@ check_for_cairo, check_provide_traits, check_provide_pytz, \ check_provide_dateutil, check_provide_configobj, check_for_dvipng, \ check_for_ghostscript, check_for_latex, check_for_pdftops, \ - check_for_datetime + check_for_datetime, options #import distutils.sysconfig # jdh @@ -127,12 +72,6 @@ ext_modules = [] -# these are not optional -BUILD_FT2FONT = 1 -BUILD_TTCONV = 1 -BUILD_CONTOUR = 1 -BUILD_NXUTILS = 1 - for line in file('lib/matplotlib/__init__.py').readlines(): if (line.startswith('__version__')): exec(line.strip()) @@ -166,16 +105,6 @@ if not check_for_numpy(): sys.exit() -# The NUMERIX variable (a list) is left over from the days when it had -# a string for each of the supported backends. Now there is only one -# supported backend, so this approach could (should?) get changed for -# simplicity. - -import numpy -NUMERIX = ['numpy'] - -rc['numerix'] = NUMERIX[-1] - try: import subprocess except ImportError: havesubprocess = False else: havesubprocess = True @@ -196,61 +125,64 @@ if not check_for_freetype(): sys.exit(1) -if BUILD_FT2FONT: - build_ft2font(ext_modules, packages) +build_ft2font(ext_modules, packages) +build_ttconv(ext_modules, packages) +build_contour(ext_modules, packages) +build_nxutils(ext_modules, packages) -if BUILD_TTCONV: - build_ttconv(ext_modules, packages) - -if 1: # I don't think we need to make these optional - build_contour(ext_modules, packages) - build_nxutils(ext_modules, packages) - build_swigagg(ext_modules, packages) build_transforms(ext_modules, packages) print_raw("") print_raw("OPTIONAL BACKEND DEPENDENCIES") -if check_for_gtk() and (BUILD_GTK or BUILD_GTKAGG): - if BUILD_GTK: + +# the options can be True, False, or 'auto'. If True, try to build +# regardless of the lack of dependencies. If auto, silently skip +# when dependencies are missing. +hasgtk = check_for_gtk() +if options['build_gtk']: + if hasgtk or (options['build_gtk'] is True): build_gdk(ext_modules, packages) rc['backend'] = 'GTK' - if BUILD_GTKAGG: - BUILD_AGG = 1 +if options['build_gtkagg']: + if hasgtk or (options['build_gtkagg'] is True): + options['build_agg'] = 1 build_gtkagg(ext_modules, packages) rc['backend'] = 'GTKAgg' -if check_for_tk() and BUILD_TKAGG: - BUILD_AGG = 1 - build_tkagg(ext_modules, packages) - rc['backend'] = 'TkAgg' +if options['build_tkagg']: + if check_for_tk() or (options['build_tkagg'] is True): + options['build_agg'] = 1 + build_tkagg(ext_modules, packages) + rc['backend'] = 'TkAgg' -explanation = None -if check_for_wx() and BUILD_WXAGG: - BUILD_AGG = 1 - import wx - if getattr(wx, '__version__', '0.0')[0:3] < '2.8': - build_wxagg(ext_modules, packages) - wxagg_backend_status = "yes" - else: - print_message("WxAgg extension not required for wxPython >= 2.8") - rc['backend'] = 'WXAgg' +if options['build_wxagg']: + if check_for_wx() or (options['build_wxagg'] is True): + options['build_agg'] = 1 + import wx + if getattr(wx, '__version__', '0.0')[0:3] < '2.8' : + build_wxagg(ext_modules, packages) + wxagg_backend_status = "yes" + else: + print_message("WxAgg extension not required for wxPython >= 2.8") + rc['backend'] = 'WXAgg' -# These are informational only. We don't build -# any extensions for them. +# These are informational only. We don't build any extensions for them. check_for_qt() check_for_qt4() check_for_cairo() -if check_for_libpng() and BUILD_AGG: +if check_for_libpng() and options['build_agg']: build_agg(ext_modules, packages) - if rc['backend'] == 'PS': rc['backend'] = 'Agg' + rc['backend'] = 'Agg' +else: + rc['backend'] = 'SVG' -if BUILD_WINDOWING and sys.platform=='win32': +if options['build_windowing'] and sys.platform=='win32': build_windowing(ext_modules, packages) -if BUILD_IMAGE: +if options['build_image']: build_image(ext_modules, packages) for mod in ext_modules: @@ -314,12 +246,13 @@ print_raw("[Edit setup.cfg to suppress the above messages]") print_line() -# packagers: set rc['numerix'] and rc['backend'] here to override the auto -# defaults, eg -#rc['numerix'] = numpy -#rc['backend'] = 'GTKAgg' +# Write the default matplotlibrc file if sys.platform=='win32': - rc = dict(backend='TkAgg', numerix='numpy') + rc['backend'] = 'TkAgg' + rc['numerix'] = 'numpy' +else: + if options['backend']: rc['backend'] = options['backend'] + if options['numerix']: rc['numerix'] = options['numerix'] template = file('matplotlibrc.template').read() file('lib/matplotlib/mpl-data/matplotlibrc', 'w').write(template%rc) Modified: trunk/matplotlib/setupext.py =================================================================== --- trunk/matplotlib/setupext.py 2007-11-12 20:45:15 UTC (rev 4238) +++ trunk/matplotlib/setupext.py 2007-11-12 22:00:15 UTC (rev 4239) @@ -97,38 +97,64 @@ # for nonstandard installation/build with --prefix variable numpy_inc_dirs = [] -# Based on the contents of setup.cfg, determine if the status block -# should be displayed, if missing external packages should be provided -display_status = True -provide_pytz = True -provide_dateutil = True -provide_configobj = True -provide_traits = True +# matplotlib build options, which can be altered using setup.cfg +options = {'display_status': True, + 'provide_pytz': 'auto', + 'provide_dateutil': 'auto', + 'provide_configobj': 'auto', + 'provide_traits': 'auto', + 'build_agg': True, + 'build_gtk': 'auto', + 'build_gtkagg': 'auto', + 'build_tkagg': 'auto', + 'build_wxagg': 'auto', + 'build_image': True, + 'build_windowing': True, + 'backend': None, + 'numerix': None} + +# Based on the contents of setup.cfg, determine the build options if os.path.exists("setup.cfg"): config = ConfigParser.SafeConfigParser() config.read("setup.cfg") - try: - display_status = not config.getboolean("status", "suppress") - except: - pass - try: - provide_pytz = config.getboolean("provide_packages", "pytz") - except: - pass - try: - provide_dateutil = config.getboolean("provide_packages", "dateutil") - except: - pass - try: - provide_configobj = config.getboolean("provide_packages", "configobj") - except: - pass - try: - provide_traits = config.getboolean("provide_packages", "enthought.traits") - except: - pass + try: options['display_status'] = not config.getboolean("status", "suppress") + except: pass -if display_status: + try: options['provide_pytz'] = config.getboolean("provide_packages", "pytz") + except: options['provide_pytz'] = 'auto' + + try: options['provide_dateutil'] = config.getboolean("provide_packages", + "dateutil") + except: options['provide_dateutil'] = 'auto' + + try: options['provide_configobj'] = config.getboolean("provide_packages", + "configobj") + except: options['provide_configobj'] = 'auto' + + try: options['provide_traits'] = config.getboolean("provide_packages", + "enthought.traits") + except: options['provide_traits'] = 'auto' + + try: options['build_gtk'] = config.getboolean("gui_support", "gtk") + except: options['build_gtk'] = 'auto' + + try: options['build_gtkagg'] = config.getboolean("gui_support", "gtkagg") + except: options['build_gtkagg'] = 'auto' + + try: options['build_tkagg'] = config.getboolean("gui_support", "tkagg") + except: options['build_tkagg'] = 'auto' + + try: options['build_wxagg'] = config.getboolean("gui_support", "wxagg") + except: options['build_wxagg'] = 'auto' + + try: options['backend'] = config.get("rc_options", "backend") + except: pass + + try: options['numerix'] = config.get("rc_options", "numerix") + except: pass + + +if options['display_status']: def print_line(char='='): print char * 76 @@ -356,24 +382,34 @@ return True def check_provide_pytz(hasdatetime=True): + if hasdatetime and (options['provide_pytz'] is True): + print_status("pytz", "matplotlib will provide") + return True try: import pytz except ImportError: - if hasdatetime and provide_pytz: + if hasdatetime and options['provide_pytz']: print_status("pytz", "matplotlib will provide") return True else: print_status("pytz", "no") return False else: - print_status("pytz", pytz.__version__) - return False + if pytz.__version__.endswith('mpl'): + print_status("pytz", "matplotlib will provide") + return True + else: + print_status("pytz", pytz.__version__) + return False def check_provide_dateutil(hasdatetime=True): + if hasdatetime and (options['provide_dateutil'] is True): + print_status("dateutil", "matplotlib will provide") + return True try: import dateutil except ImportError: - if hasdatetime and provide_dateutil: + if hasdatetime and options['provide_dateutil']: print_status("dateutil", "matplotlib will provide") return True else: @@ -381,26 +417,41 @@ return False else: try: - print_status("dateutil", dateutil.__version__) + if dateutil.__version__.endswith('mpl'): + print_status("dateutil", "matplotlib will provide") + return True + else: + print_status("dateutil", dateutil.__version__) + return False except AttributeError: print_status("dateutil", "present, version unknown") - return False + return False def check_provide_configobj(): + if options['provide_configobj'] is True: + print_status("configobj", "matplotlib will provide") + return True try: import configobj except ImportError: - if provide_configobj: + if options['provide_configobj']: print_status("configobj", "matplotlib will provide") return True else: print_status("configobj", "no") return False else: - print_status("configobj", configobj.__version__) - return False + if configobj.__version__.endswith('mpl'): + print_status("configobj", "matplotlib will provide") + return True + else: + print_status("configobj", configobj.__version__) + return False def check_provide_traits(): + if options['provide_traits'] is True: + print_status("enthought.traits", "matplotlib will provide") + return True try: from enthought import traits try: @@ -416,7 +467,7 @@ print_status("enthought.traits", version.version) return False except ImportError: - if provide_traits: + if options['provide_traits']: print_status("enthought.traits", "matplotlib will provide") return True else: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |