How do I install mxTidy with Zope / Plone? Here are the steps. Be sure to use the same python as your Zope / Plone uses for setting up mxTidy correctly! 1) Download these packages: http://www.egenix.com/files/python/egenix-mx-base-2.0.5.tar.gz http://www.egenix.com/files/python/egenix-mx-experimental-0.8.0.tar.gz 2) Untar the packages tar xfvz egenix-mx-base-2.0.5.tar.gz tar xfvz egenix-mx-experimental-0.8.0.tar.gz 3) Change to egenix-mx-base-2.0.5 python setup.py install 4) Change to egenix-mx-experimental-0.8.0 python setup.py install Maybe you'll get an error like "Can't compile etc.pp."... If so, copy the "patched" file below (it just skips the "buggy" number-module which isn't needed for tidy) to egenix-mx-experimental-0.8.0/mxEXPERIMENTAL.py and try again. 5) Restart your Zope / Plone to take changes effect! ----------------------------------------------------- patched mxEXPERIMENTAL.py for easier mxTidy-Setup ----------------------------------------------------- #!/usr/local/bin/python2.0 """ Configuration for the eGenix mx EXPERIMENTAL distribution. Copyright (c) 1997-2000, Marc-Andre Lemburg; mailto:mal(ät)lemburg.com Copyright (c) 2000-2003, eGenix.com Software GmbH; mailto:info(ät)egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ from mxSetup import mx_Extension import sys, glob, os # # Package version # version = '0.8.0' # # Setup information # name = "egenix-mx-experimental" # # Meta-Data # description = "eGenix mx-Extensions - EXPERIMENTAL package" long_description = """\ The eGenix mx Extension Series are a collection of Python extensions written in ANSI C and Python which provide a large spectrum of useful additions to everyday Python programming. This package includes experimental subpackages of the series. Please understand that the software in these packages is still in alpha state and does not meet the quality standards of production quality software. This software is brought to you by eGenix.com. The included subpackages are either covered by the eGenix.com Public License or the eGenix.com Commercial License and/or other licenses. Please check the subpackage documentation for details or contact eGenix.com for more license information. """ license = ( "Copyright (c) 2000-2003, eGenix.com Software GmbH, All Rights Reserved" ) author = "Marc-Andre Lemburg" author_email = "mal(ät)egenix.com" url = "http://www.egenix.com/files/python/eGenix-mx-Extensions.html" # # Python packages # packages = [ 'mx', # mxTidy 'mx.Tidy', 'mx.Tidy.mxTidy', # mxURL 'mx.URL', 'mx.URL.mxURL', # mxUID 'mx.UID', 'mx.UID.mxUID', ] # # C libraries # libraries = [ # libtidy.a needed by mxTidy ('libtidy', {'sources': glob.glob(os.path.join('mx','Tidy','mxTidy','libtidy','*.c')), 'include_dirs': [os.path.join('mx','Tidy','mxTidy','libtidy')], 'macros': [('COMPILING_TIDY', 1)], }), ] # # C Extensions # ext_modules = [ # mxTidy mx_Extension('mx.Tidy.mxTidy.mxTidy', ['mx/Tidy/mxTidy/mxTidy.c'], include_dirs=['mx/Tidy/mxTidy', 'mx/Tidy/mxTidy/libtidy'], libraries=['libtidy'], library_dirs=['mx/Tidy/mxTidy/libtidy']), # mxURL mx_Extension('mx.URL.mxURL.mxURL', ['mx/URL/mxURL/mxURL.c'], include_dirs=['mx/URL/mxURL']), # mxUID mx_Extension('mx.UID.mxUID.mxUID', ['mx/UID/mxUID/mxUID.c'], include_dirs=['mx/UID/mxUID']), ] # # Data files # data_files = [ # mxTidy 'mx/Tidy/Doc/mxTidy.html', 'mx/Tidy/Doc/mxLicense.html', 'mx/Tidy/Doc/Overview.html', 'mx/Tidy/Doc/pending.html', 'mx/Tidy/Doc/release-notes.html', 'mx/Tidy/Doc/tidy.gif', 'mx/Tidy/COPYRIGHT', 'mx/Tidy/LICENSE', 'mx/Tidy/README', 'mx/Tidy/mxTidy/mxTidy.h', 'mx/Tidy/mxTidy/mxh.h', 'mx/Tidy/mxTidy/input.html', # mxURL 'mx/URL/Doc/mxURL.html', 'mx/URL/Doc/mxLicense.html', 'mx/URL/COPYRIGHT', 'mx/URL/LICENSE', 'mx/URL/README', 'mx/URL/mxURL/mxURL.h', 'mx/URL/mxURL/mxh.h', # mxUID 'mx/UID/Doc/mxUID.html', 'mx/UID/Doc/mxLicense.html', 'mx/UID/COPYRIGHT', 'mx/UID/LICENSE', 'mx/UID/README', 'mx/UID/mxUID/mxUID.h', 'mx/UID/mxUID/mxh.h', ]