[Checkins] SVN: Zope/trunk/ Merge tseaver-retire_zpkg-2.10 branch, removing the use of 'zpkg' in

Tres Seaver tseaver at palladion.com
Thu Jul 6 00:15:02 EDT 2006


Log message for revision 69001:
  Merge tseaver-retire_zpkg-2.10 branch, removing the use of 'zpkg' in
  favor of the "classic" './configure && make && make install' recipe.
  

Changed:
  D   Zope/trunk/buildsupport/
  U   Zope/trunk/configure
  U   Zope/trunk/doc/CHANGES.txt
  U   Zope/trunk/inst/Makefile.in
  U   Zope/trunk/inst/configure.py
  _U  Zope/trunk/lib/python/
  _U  Zope/trunk/lib/python/Zope2/
  D   Zope/trunk/releases/
  U   Zope/trunk/setup.py

-=-
Modified: Zope/trunk/configure
===================================================================
--- Zope/trunk/configure	2006-07-06 04:04:47 UTC (rev 69000)
+++ Zope/trunk/configure	2006-07-06 04:15:00 UTC (rev 69001)
@@ -38,7 +38,8 @@
 {
     echo
     echo "configure [--help] [--quiet] [--with-python=path] [--prefix=path] "
-    echo "          [--ignore-largefile] [--ignore-zlib] [--optimize]"
+    echo "          [--build-base=path] [--ignore-largefile] [--ignore-zlib]"
+    echo "          [--optimize]"
     echo
     echo " Creates a Makefile suitable for building and installing Zope"
     echo
@@ -47,6 +48,7 @@
     echo "  --quiet             suppress nonessential output"
     echo "  --with-python       specify a path to a Python interpreter to use"
     echo "  --prefix            specify an installation path for binary data"
+    echo "  --build-base        specify a temporary path for build files"
     echo "  --ignore-largefile  ignore large file support warnings"
     echo "  --ignore-expat      ignore warnings about expat/pyexpat"
     echo "  --ignore-zlib       ignore warnings about zlib"

Modified: Zope/trunk/doc/CHANGES.txt
===================================================================
--- Zope/trunk/doc/CHANGES.txt	2006-07-06 04:04:47 UTC (rev 69000)
+++ Zope/trunk/doc/CHANGES.txt	2006-07-06 04:15:00 UTC (rev 69001)
@@ -21,6 +21,18 @@
       - Removed deprecated support for product initialization based on
         '__ac_permissions__' and 'meta_types' attributes.
 
+      - reStructuredText/ZReST: setting raw_enabled to 0 for security
+        reasons
+
+      - Collector #2113:  'zopectl test' masked Ctrl-C.
+
+      - OFS Image: Image and File updated to use isinstance(data, str)
+        and raises TypeError upon encountering unicode objects.
+
+      - OFS Application: Updated deprecation warnings.
+        Support for '__ac_permissions__' and 'meta_types' will be removed in
+        Zope 2.11, 'methods' support might remain longer.
+
       - removed zLOG module which was deprecated since Zope 2.9
 
     Features added
@@ -52,4 +64,1281 @@
         http://codespeak.net/pipermail/z3-five/2006q2/001474.html
         
       - The defaultView directive now only looks up views, not attributes.
-      
+
+    Other Changes
+
+      - Returned to the "classic" './configure && make && make install'
+        recipe, dropping the use of 'zpkg' for building Zope2 releases.
+
+  Zope 2.10.0 beta 1 (2006/05/30)
+
+    Restructuring
+
+      - Zope 2.10+ now includes site.zcml as part of its instance 
+        creation skel directory.  As a consequence Five now requires 
+        this file to exist in every instance.  If upgrading a site 
+        from Zope 2.9 to 2.10, you will need to copy site.zcml and 
+        package-includes/ from your installed Zope installation 
+        location (skel/etc/) into the etc/ directory of your upgraded 
+        instance.
+  
+        The rationale for requiring this new file is to bring Zope 2 
+        instances closer in consistency to Zope 3 instances.  It also 
+        eases use of Zope 3 coding techniques in Zope 2 and removes 
+        some confusion when trying to run pure Zope 3 applications on 
+        Zope 2.
+
+      - Products.PageTemplates now uses the Zope 3 ZPT implementation
+        in zope.pagetemplate.
+
+      - The TAL package has been deprecated in favour of the TAL
+        engine from zope.tal.
+
+      - Products.PageTemplates.TALES has been deprecated in favour of
+        the TALES engine from zope.tales.
+
+      - ZTUtils.Iterator has been deprecated in favour of the TALES
+        iterator implementation in zope.tales.tales.
+
+      - ZCatalog: removed manage_deleteIndex(), manage_delColumns()
+        which were deprecated since Zope 2.4
+
+      - deprecated the zLOG module. Use Pythons 'logging' module instead.
+
+      - replaced all zLOG occurences (expect the zLOG module itself) with 
+        the 'logging' module
+
+      - PluginIndexes/TextIndex is deprecated. Use ZCTextIndex instead
+
+      - the 'StructuredText' module is deprecated. Use zope.structuredtext
+        instead
+
+      - removed ZopeTutorial (Elvis is now really dead)
+
+      - ZClasses are deprecated and should no longer be used. In addition
+        any code related to the ZClasses (re)distribution mechanism is
+        removed.
+
+      - ZGadyFlyDA/Gadfly is deprecated
+
+      - deprecated OFS.content_types (to be removed in Zope 2.11) and
+        replaced all occurences with zope.app.content_types 
+
+      - OFS.content_types: moved code to zope.app.content_types and added
+        method aliases
+
+      - Using FastCGI is offically deprecated.
+
+    Features added
+
+      - Included Zope 3.3 and corresponding Five 1.5 release.
+
+      - There is now a default favicon.ico.
+    
+      - Experimental WSGI and Twisted support for http.
+        Zope now has a WSGI interface for integration with other
+        web-servers than ZServer. Most notably Twisted is supported.
+        The WSGI application is ZPublisher.WSGIPublisher.publish_module
+        
+        You can make ZServer use the twisted interface with the 
+        "use-wsgi on" keyword in the http-server section in zope.conf.
+        
+        You can run Twisted by installing Twisted (2.1 recommended) and
+        replacing the http-server section with a server section in 
+        zope.conf. It is not possible to run a Twisted server together with
+        a ZServer at the same time.
+        
+          <server>
+            address 8080
+            type Zope2-HTTP
+          </server>
+        
+        WSGI: http://www.python.org/dev/peps/pep-0333/
+        Twisted: http://twistedmatrix.com/
+
+      - The traversal has been refactored to take heed of Zope3s 
+        IPublishTraverse adapter interfaces. The ZCML directives 
+        five:traversable and five:defaultViewable are therefore no
+        longer needed, as everything now is five:traversable and
+        five:defaultViewable. 
+
+        There was a bug in earlier versions of Five that allowed you 
+        to do custom publishing traversal with ITraversable adapters.
+        This bug has been corrected. Anybody using ITraversable 
+        adapters need to convert them to IPublishTraversal adapters.
+
+      - Testing.makerequest: Added an 'environ' argument so
+        clients can use mappings other than os.environ.
+
+      - Updated to Docutils 0.4.0 
+
+      - reStructuredText: The default value for the 'stylesheet'
+        property has been changed from 'default.css' to None because
+        there is no 'default.css' file by default. 
+
+      - ZReST: rewritten render() method to integrate it smoothly
+        with Docutils 0.4.0. The default value for the 'stylesheet'
+        property has been changed from 'default.css' to None because
+        there is no 'default.css' file by default. 
+
+      - Added a "clock server" servertype which allows users to
+        configure methods that should be called periodically as if
+        they were being called by a remote user agent on one of Zope's
+        HTTP ports.  This is meant to replace wget+cron for some class
+        of periodic callables.
+
+        To use, create a "clock-server" directive section anywhere
+        in your zope.conf file, like so:
+
+         <clock-server>
+            method /do_stuff
+            period 60
+            user admin
+            password 123
+            host localhost
+         </clock-server>
+
+        Any number of clock-server sections may be defined within a
+        single zope.conf.  Note that you must specify a
+        username/password combination with the appropriate level of
+        access to call the method you've defined.  You can omit the
+        username and password if the method is anonymously callable.
+        Obviously the password is stored in the clear in the config
+        file, so you need to protect the config file with filesystem
+        security if the Zope account is privileged and those who have
+        filesystem access should not see the password.
+
+        Descriptions of the values within the clock-server section
+        follow::
+
+          method -- the traversal path (from the Zope root) to an
+          executable Zope method (Python Script, external method,
+          product method, etc).  The method must take no arguments or
+          must obtain its arguments from a query string.
+
+          period -- the number of seconds between each clock "tick" (and
+          thus each call to the above "method").  The lowest number
+          providable here is typically 30 (this is the asyncore mainloop
+          "timeout" value).
+
+          user -- a zope username.
+
+          password -- the password for the zope username provided above.
+
+          host -- the hostname passed in via the "Host:" header in the
+          faux request.  Could be useful if you have virtual host rules
+          set up inside Zope itself.
+
+        To make sure the clock is working, examine your Z2.log file.  It
+        should show requests incoming via a "Zope Clock Server"
+        useragent.
+
+      - Added a 'conflict-error-log-level' directive to zope.conf, to set
+        the level at which conflict errors (which are normally retried
+        automatically) are logged. The default is 'info'.
+
+      - The SiteErrorLog now copies exceptions to the event log by default.
+
+      - ObjectManager now has an hasObject method to test presence. This
+        brings it in line with BTreeFolder.
+
+      - Improved logging of ConflictErrors. All conflict errors are
+        logged at INFO, with counts of how many occurred and how many
+        were resolved. Tracebacks for all conflicts are logged a DEBUG
+        level, although these won't help anyone much. If a conflict
+        error is unresolved, it will now bubble up to error_log and
+        standard_error_message.
+
+      - Use new-style security declarations everywhere possible. This
+        means remove the use of __ac_permissions__, foo__roles__ and
+        default__class_init__. A few corner cases can't be converted
+        because of circular imports.
+
+      - Fixed unclear security declarations. Warn when an attempt is
+        made to have a security declaration on a nonexistent method.
+
+      - updated to ZPL 2.1
+
+      - interfaces: Added 'Interfaces' tab to basic core objects.
+        This is a Five feature and only available if the classes are made
+        five:traversable. It allows to inspect interfaces and to assign
+        marker interfaces through the ZMI.
+
+      - webdav: Added support for the z3 WriteLock interface.
+        It is no longer necessary to have the WriteLockInterface in the
+        __implements__ list of lockable objects. All classes inheriting from
+        LockableItem inherit also the IWriteLock interface. Note that this
+        enables webdav locking for all subclasses by default even if they
+        don't specify the WriteLockInterface explicitly.
+
+      - App ProductContext: Made registerClass aware of z3 interfaces.
+        Z2 and z3 interfaces are registered side by side in the same tuple in
+        Products.meta_types. IFAwareObjectManagers like the ZCatalog work now
+        with z3 interfaces as well.
+
+      - Zope now sends Zope 3 events when objects are added or removed
+        from standard containers. manage_afterAdd, manage_beforeDelete
+        and manage_afterClone are now deprecated. See
+        lib/python/Products/Five/tests/event.txt for details.
+
+      - Zope now utilizes ZODB 3.6.  It had previously used
+        ZODB 3.4.  As a result, the DBTab package was removed, as
+        ZODB 3.6 has multidatabase support that makes DBTab
+        unnecessary.
+
+      - Added a 'product-config' section type to zope.conf, allowing
+        arbitrary key-value mappings.  Products can look for such
+        confgiurations to set product-specific options.  Products mwy
+        also register their own section types, extending the
+        'zope.product.base' type. (see the example '<product-config>'
+        section in skel/etc/zope.conf.in for sample usage).
+
+      - Collector #1490: Added a new zope.conf option to control the
+        character set used to encode unicode data that reaches
+        ZPublisher without any specified encoding.
+
+      - AccessControl, Acquisition, App, OFS, webdav, PluginIndexes,
+        ZCatalog and ZCTextIndex: Added some Zope 3 style interfaces.
+        This makes the bridged interfaces shipped with Five obsolete.
+
+      - ZConfig extension, address now also accepts symbolic port names
+        from etc/services (unix) or etc\services (win32)
+
+      - ZPublisher.HTTPRequest.FileUpload now supports full file
+        object interface.  This means Iterator support was added. (for
+        line in fileobject: ..., as well as fileobject.next() and
+        fileobject.xreadlines() ) Collector #1837
+
+      - Switched the bundled Zope 3 to release 3.2 and upgraded the
+        Five product to version 1.3 (see Products/Five/CHANGES.txt).
+
+      - The PageTemplate implementation now uses Zope 3 message
+        catalogs by default for translation.  Old-style translation
+        services such as Localizer or PlacelessTranslationService are
+        still supported as fall-backs.  See Products/Five/doc/i18n.txt
+        for more information.
+
+      - Switched to the new improved test runner from Zope 3.  Run
+        test.py with -h to find out more.
+
+      - lib/python/docutils is now a reference to docutils package
+        from the Zope 3 source tree (to get rid of redundant packages)
+
+    Bugs Fixed
+
+      - Collector #1447: When editing content on a virtual-hosted zope,
+        AcceleratedHTTPCacheManager now purges the correct URL.
+
+      - When you add roles in manage_access, roles are now stripped of
+        any leading or trailing spaces.
+
+      - Collector #2062: Fix manage_historyCopy, which was broken, and write
+        tests for it.
+
+      - Collector #2061: Fix problems where windows line endings are passed
+        to restricted code compilers.
+
+      - Collector #2051: Applied patch by Yoshinori Okuji to fix some
+        XML export/import problems, including tests for that feature.
+
+      - Collector #2037: fixed broken ACTUAL_URL for '/'
+
+      - Missing import of NotFound in webdav.Resource
+
+      - Collector #1819: fixed method signature of
+        MountedObject.SimpleTrailblazer._construct()
+
+      - Collector #2019: removed validateValue() from cAccessControl (already
+        removed in former Zope versions from the AccessControl Python
+        implementation)
+
+      - Collector #1991: ZPublisher did not deal properly with a trailing
+        %20 in the URL
+
+      - zope.app.introspector was not included with the source archive
+
+      - Collector #2013: improved XHTML conformance of error messages,
+        some of which did not close '<p>' tags.
+
+      - Collector #2002: fixed broken 'ls -R' functionality (didn't
+        recurse properly subclasses of OFS.Folder)
+
+      - Collector #1992: unified the visible hostnames of the FTP and
+        HTTP servers
+
+      - Collector #1999: fixed broken FTP rename functionality
+        (RNFR now returns 350 as status code instead 250)
+
+      - HTTPResponse: for XML content the encoding specified within
+        the XML preamble is adjusted to the real encoding of the content
+        as specified through the 'charset' within the content-type
+        property.
+
+      - Collector #1939: When running as a service, Zope could
+        potentially collect too much log output filling the NT Event
+        Log. When that happened, a 'print' during exception handling
+        would cause an IOError in the restart code causing the service
+        not to restart automatically.
+
+        Problem is that a service/pythonw.exe process *always* has an
+        invalid sys.stdout.  But due to the magic of buffering, small
+        "print" statements would not fail - but once the file actually
+        got written to, the error happened.  Never a problem when
+        debugging, as the process has a console, and hence a valid
+        stdout.
+
+      - For content-type HTTP headers starting with 'text/' or 'application/'
+        the 'charset' field is automatically if not specified by the
+        application. The 'charset' is determined by the content-type header
+        specified by the application (if available) or from the
+        zpublisher_default_encoding value as configured in etc/zope.conf
+
+      - Collector #1976: FTP STOR command would load the file being
+        uploaded in memory. Changed to use a TemporaryFile.
+
+      - OFS ObjectManager: Fixed list_imports() to tolerate missing
+        import directories.
+
+      - Collector #1621, 1894:  Removed support for use of long-deprecated
+        'whrandom' module.
+
+      - OFS PropertySheets / webdav: Fixed dav__resourcetype.
+        __dav_collection__ with a false value was overridden by
+        isAnObjectManager.
+
+      - added missing Zope 3 imports: zope.app.intid, zope.app.keyreference, 
+        zope.app.session, zope.contentprovider, zope.viewlet
+
+    Other
+
+      - AccessControl.User: Use a better __repr__.
+
+      - ZSQLMethod.manage_main: Moved the error message that warns of a
+        non-existing or closed database connection next to the Connection ID
+        dropdown and present it using red to increase its visibility.
+
+      - The ImageFile module has finally been deprecated for good and
+        will be removed in Zope 2.11.  Use App.ImageFile instead.
+
+  after Zope 2.8.1
+
+      - The '@' character is now allowed in object ids (RFC 1738 allows it).
+
+    Bugs Fixed
+
+      - If a content object implemented any in-place numeric operators, 
+        untrusted code could call them, thus modifying the content.
+
+      - If Python 2.4 is used, despite the fact that Python 2.4 is
+        unsupported, untrusted code could use generator expressions to
+        gain access to container items.
+
+      - Collector #1895: testrunner: omitting the 'var' from recursive
+        directory walking
+
+      - OFS.Image.manage_FTPget() would str() it's .data attribute,
+        potentially loading the whole file in memory as a
+        string. Changed to use RESPONSE.write() iterating through the
+        Pdata chain, just like index_html().
+
+      - Collector #1863: Prevent possibly sensitive information to leak via
+        the TransientObject's __repr__ method.
+
+      - Repaired 'handle_errors' usage for doctests, along with the
+        supporting 'debug' argument passed to
+        'ZPublisher.Test.publish_module'.
+
+      - Collector #1879: applied patch by Dieter Maurer to fix a bug in 
+        ac_aquire() ignoring the default argument
+
+      - Collector #1864, #1906: fixed header normalization in appendHeader()
+
+      - Collector #1899: fixed migration issue when using export/import for
+        ZCatalog instances
+
+      - Collector #1871: Applied patch to support lists with records using
+        ZTUtils.make_query()
+
+      - AccessControl: creating a new user through "zpasswd inituser" did not
+        work properly with a top-level user folder with enabled password
+        encryption.
+
+      - ZCatalog: refreshCatalog() could not be called safely from a ZEO
+        client script
+
+      - Catalog.clear(): fixed handling of _length attribute (caused import
+        problems for some .zexp files e.g. Squishdot instances)
+
+      - DateIndex now properly removes documents from both indexes if
+        the value is None
+
+      - Collector #1888: Some parts of the TALInterpreter would not pass a 
+        default when  translating, yet expect a string back. This would cause 
+        an error (usually "NoneType has no attribute 'replace'") in the case 
+        the message was not translated.
+        
+  Zope 2.8.1 (2005/08/11)
+
+    Features added
+
+      - Interface: Added Z3 -> Z2 bridge utilities.
+        This allows to migrate interfaces to Zope 3 style interfaces and
+        bridge them back to oldstyle interfaces for backwards compatibility.
+
+    Bugs Fixed
+
+      - Zope2.Startup.zopectl: fork before execv when running unit tests
+        (don't exit the shell, if run from there).
+
+      - TAL: MassageIDs are now handled the same way as in zope.tal.
+
+      - DocumentTemplate: ustr no longer mangles MassageIDs.
+        Custom string types are now returned unchanged.
+
+      -  As developed in a long thread starting at
+         http://mail.zope.org/pipermail/zope/2005-July/160433.html
+         there appears to be a race bug in the Microsoft Windows socket
+         implementation, rarely visible in ZEO and/or in
+         ZServer/medusa/thread/select_trigger.py when multiple processes try
+         to create an "asyncore trigger" simultaneously, most often (in
+         stress tests) manifesting as a hung process.  Windows-specific
+         trigger code in both changed to work around this bug when it occurs.
+
+      - Collector #1807: fixed memory leak in cAccessControl.guarded_getattr()
+
+
+  Zope 2.8.1 b1 (2005/07/28)
+
+    Features Added
+
+      - PluginIndexes, ZCTextIndex and ZCatalog: Added some z3 interfaces.
+
+      - Verbose security exception reporting has been folded into Zope,
+        removing the need for the VerboseSecurity product.  See the
+        documentation for the "verbose-security" option in zope.conf.
+
+      - "TemporaryStorage" (the storage that is used mainly to back the
+        default sessioning database) is now MVCC capable, which essentially
+        means that its usage will no longer generate ZODB ReadConflictErrors.
+
+    Bugs Fixed
+
+      - Collector #1852: fixed wrong URL construction in webdav.davcmds
+
+      - Collector #1844: fixed whitespace handling in the ZMI "Find" tab
+
+      - Collector #1813: removed spurious inclusion of CMFBTreeFolder.
+        in Products/BTreeFolder2 (CMFCore will include it after 1.5, with
+        an appropriate module alias for backward compatibility).
+
+      - Replaced all transaction.commit(1) calls by  transaction.savepoint()
+
+      - Collector #1832: UnIndex swallowed ConflictErrors.
+
+      - Collector #1815: ZCTextIndex accepts (again) sequences of strings to
+        be indexed.
+
+      - Collector #1812: Fixed key error in ZSQL ZMI/Test
+
+      - Fixed CMFBTreeFolder for CMF 1.5+
+
+      - WebDAV COPY and MOVE did not call '_notifyOfCopyTo' and '_postCopy'
+        hooks like it was done in OFS.CopySupport. Additionally added
+        'manage_changeOwnershipType' to make MOVE behave even closer to
+        OFS.CopySupport.
+
+      - Collector #1548: Fix 'httplib' usage in ZPublisher.Client.
+
+      - Collector #1808: manage_convertIndexes no longer tries to change the
+        index types causing some trouble with CMF.
+
+      - manage_convertIndexes did not treat DateRangeIndexes and PathIndexes
+        properly.
+
+      - Updated Zope X3 to bugfix release 3.0.1
+
+      - Updated Five to bugfix release 1.0.2 (see Products/Five/CHANGES.txt)
+
+  Zope 2.8.0 (2005/06/11)
+
+    Bugs Fixed
+
+      - Collector #1792: applied patch for broken ZClasses
+
+      - doc/FAQ.txt updated: should bear some resemblance to reality now.
+        (PCGI stuff removed; error information updated; PID information
+        updated; upgrade procedure added; some common version questions added.)
+
+      - Collector #1770: Fixed RestructuredText subtitle
+
+      - Collector #1803: Fixed InitializeClass for some corner case.
+
+      - Collector #1798, issue 1: ZopeTestCase no longer tries to
+        install products that were installed by Zope during startup.
+
+      - Collector #1799: Avoid lying about parent's refcount when
+        calling back into Python code.
+
+      - Collector #889:  made 'and' operator for KeywordIndexes actually
+        restrict results as expected (thanks to 'aroda' for the patch!).
+
+      - Collector #1323: applied patch to fix umask problem in zdctl
+
+      - Updated Five to bugfix release 1.0.1 (see Products/Five/CHANGES.txt)
+
+  Zope 2.8.0 b2 (2005/05/22)
+
+    Features added
+
+      - Made WebDAV server distinguishable from the default HTTP
+        server both in the ZMI and in event.log.
+
+      - Included BTreeFolder2
+
+    Bugs fixed
+
+      - Collector #1507/1728: Server addresses are now handled the same way on
+        all platforms. This fixes the default binding on Windows.
+
+      - Collector #1781: made 'create_mount_points' ZConfig option actually
+        work (thanks to Dieter Maurer for the patch).
+
+      - Collector #1780: DateTime.strftime() now handles dates <= 1900 or
+        >= 2038
+
+      - Collector #1775: turning off debug mode by default
+
+      - Collector #1784: fixed handling of multiple attributes in ZCTextIndex
+
+      - Don't copy '.svn' directories from skeleton into an instance
+        (thanks to Dale Hirt for the patch).
+
+      - Collector #1776: Improved setup.py.
+        The Finder class is now used for the complete lib/python tree and has
+        a blacklist instead of a whitelist for file extensions. So there
+        should no longer be a need to update setup.py if modules or files are
+        added or removed in lib/python.
+
+      - Collector #1751: Improved error reporting reporting during the
+        startup phase
+
+      - Collector #1745: Fixed ZSQL error KeyError 'query'
+
+      - Collector #1735: fixed UnicodeDecodeError in Loader.py
+
+  Zope 2.8b1 (2005/04/24)
+
+    Features added
+
+      - Added lazy: TAL expression and fixed defer: expression for python
+        expression
+
+      - ZCatalog.CatalogBrains: An _unrestrictedGetObject method has
+        been added.
+
+      - ZODB transactions now support savepoints. See
+        transaction/savepoint.txt.  These will replace
+        subtransactions.
+
+    Bugs fixed
+
+      - Collector #1754: Fixed import of 'transaction' in
+        'zopectl adduser' (which wasy dying with a NameError).
+
+      - Collector #1750: StructuredText: fixed handling of image URLs
+        with query string
+
+      - Collector #1748: Fixed SIGSEGV in Acquisition
+
+      - Hotfix_20050405:  classes defined in untrusted code could shadow
+        the roles of methods defined as protected by their bases.
+
+      - Collector #1656: Fixed enumeration within untrusted code
+        (forward-port from 2.7 branch).
+
+      - Collector #1721: Fixed handling of an empty indexed_attrs parameter
+
+
+  Zope 2.8a2 (2005/04/02)
+
+    Features added
+
+      - ZCatalog.CatalogBrains:  'getObject' now raises errors, rather than
+        returning None, in cases where the path points either to a nonexistent
+        object (in which case it raises NotFound) or to one which the user
+        cannot access (raising Unauthorized).  Sites which rely on the old
+        behavior can restore setting a new zope.conf option,
+        'catalog-getObject-raises', to "off".
+
+        This compatibility option will be removed in Zope 2.10.
+
+      - PluginIndexes: the ZCatalog's "Indexes" tab now show the number of
+        distinct values indexed by each index instead of a mixture of indexed
+        objects versus number of distinct values. Indexes derived from UnIndex
+        show both values within their own ZMI screen. In addition most indexes
+        have now a "Browse" tab to browse through the list of indexed
+        values and their occurrences.
+
+      - FTPServer: a RNFR (rename from) request is now being responded
+        with a 550 error code if the source file does not exist
+
+      - Fixed ObjectManager to not swallow exceptions during object
+        deletion (in debug mode and if the user is not Manager). This
+        allows for better debugging, while still keeping the possibility
+        for a Manager to delete buggy objects.
+
+      - Added a ZConfig directive 'large-file-threshold' to control
+        the request content-size threshold at which a temporary file
+        gets created. Use the same value for deciding between reading
+        the whole request in memory or just a chunk inside
+        webdav.NullResource.PUT().
+
+      - RAMCacheManager: Allow invalidation of a cache entry from the
+        Statistics view in the ZMI
+
+      - Collector #1454/OFS.File: Accept content types ending with
+        "javascript" as editable through the File edit form, just like
+        text/<foo> types
+
+      - Zope X3 3.0.0's 'src/zope' package is included now.
+
+      - Five (Zope 3 integration technology for Zope 2) is included
+        now in Products/Five.
+
+    Bugs fixed
+
+      - Collector #1460: guarded_apply was too restrictive.
+
+      - OFS.Traversable still used a string 'NotFound' exception.
+
+      - ZPublisher would fail to recognize a XML-RPC request if the
+        content-type header included a 'charset' parameter.
+
+      - Forward-ported 'aq_acquire'-related fix and associated tests
+        from Zope 2.7.4.
+
+      - Collector #1730: XML page templates couldn't call aq_parent in
+        path expressions.
+
+      - Fixed brain.getObject() to correctly traverse to an object even
+        if one of its parents is not accessible, to be close to what the
+        Publisher does.
+
+      - Forward ported fix for OFS.CopySupport tests which corrected
+        signature of a faux security policy's 'validate' method.
+
+      - 'setup.py' did not install the 'Zope' compatibility module
+        (the old 'Zope' package has been renamed to 'Zope2').
+
+      - Fixed Shared.DC.ZRDB.Results to behave with the new-style
+        ExtensionClass. Added a test.
+
+      - 'setup.py' did not install the new 'Zope' compatibility module
+        (the 'Zope' package has been renamedd to 'Zope2').
+
+      - Collector #1507: Zope now binds again to all available IP addresses if
+        ip-address is unset
+
+      - Use 'del' instead of 'list.remove()' in
+        Catalog.delColumn(). There can be only one column with the
+        same name, and it could potentially break catalog metadata as
+        remove() may remove more than one element from the list if
+        they have the same value. Also, we already have the list index
+        we are interested in deleting so it doesn't make sense to look
+        up the value and call 'list.remove()' on it.
+
+      - Collector #1628: FTP server has been broken (directory
+        listings did not work)
+
+      - Collector #1705: CopySource._postCopy is never called
+
+      - Collector #1617: Fixed crash in ZPT code (caused by improper
+        checks in cAccessControl)
+
+      - Collector #1683: fixing batching in the DA "Test" tab
+
+      - Collector #1648: Fix bug in Medusa FTP
+
+      - Collector #1667: allow 'max-number-of-session-objects 0' to have
+        the same effect as setting the value via the web interface (i.e.,
+        make the number of session objects unlimited, rather than falling
+        back to the default).
+
+      - Collector: #1651: removed compiler warning
+
+      - Collector #1661: make 'python-check-interval' setting in zope.conf
+        actually work as documented.  This setting allows for important
+        tuning opportunities for production Zope servers.
+
+      - Collector #1657:  Don't break host-based virtual hosting when
+        purging an HTTP accelerator.
+
+      - DTML Methods were not interoperable with the new filestream_iterator
+        and caches based on it (FileCacheManager).
+
+      - Collector #1655: fixed severe memory leak in TemporaryStorage
+
+      - Collector #1407: fixed XML escaping problem introduced in 2.7.4 b1
+
+      - Collector #1151: HTTP compression was broken on error pages
+
+      - The REQUEST now contains a new entry ACTUAL_URL which contains the
+        full URL without query string as it appears within the location bar of
+        the browser. The key has been added to provide a single key that is
+        available for vhosted and non-vhosted installations.
+
+      - Collector #1605: VHM did not quote URLs
+
+      - webdav.Resource: during COPY, manage_afterClone was called way
+        too early, thus the object wasn't bound to the database and
+        couldn't find a context. Changed to behave the same way as
+        CopySupport.
+
+      - RAMCacheManager: opimized performance by using cPickle instead
+        of pickle and by using the highest pickle protocol available
+        instead of using ASCII pickles (patch by Dieter Maurer)
+
+      - Collector #631: Image URLs in StructuredText containing port
+        numbers were not rendered correctly
+
+      - Collector #1498: Don't choke on malformed cookies. Cookies of
+        the form "foo=bar; hmm; baz=gee" will give an empty value for
+        'hmm' instead of silently discarding it and the rest of the
+        string. (Thanks to 'sirilyan' for the patch.)
+
+      - bin/zopectl test now uses os.execv, instead os os.system,
+        so that options with characters that needs shell quoting
+        doesn't break the command.
+
+      - Collector #1219:  Make XML export sane again.
+
+      - Collector #945:  Allow adding empty PythonScript instances
+        programmatically.
+
+      - Updated doc/UNITTEST.txt and lib/python/Testing/README.txt to
+        reflect progress made since UNITTEST.txt was originally written.
+
+      - Removed Version objects from the add menu. Versions are agreed to be a
+        feature that should not be used as it is not well implemented and
+        allows for data loss.
+
+      - Collector #1510: Allow encoding of application/xhtml+xml pages
+        according to the charset specified in the Content-Type header
+        (thanks to Jacek Konieczny for the patch).
+
+      - Collector #1599: made sqltest work with unicode strings (thanks
+        to Peter Sabaini for the patch).
+
+      - zopectl: fixed handling of child processes (patch by Dieter Maurer)
+
+      - Collector #1593: fixed dumb _get_id() implementation in
+        OFS.CopySupport that produced copy_of_copy_of....files (thanks
+        to Alexandre Boeglin for the patch).
+
+      - Collector #1450: files in utilities/ZODBTools are now installed
+        during the installation process in the 'bin' directory
+
+      - Collector #1003: added new 'http-header-max-length' directive
+        to zope.conf to specific the maximum length of a HTTP request
+        header before it is considered as a possible DoS attack and
+        discarded.
+
+      - Collector #1371: added new 'cgi-maxlen' directive to zope.conf
+        to limit the amount of form data being processed by Zope
+        to prevent DoS attacks
+
+      - Collector #1407: changed WebDAV display name for objects
+        to title_or_id()
+
+      - the 'trusted-proxy' directive in zope.conf now also accepts
+        hostnames instead of IP addresses only (patch by Dieter Maurer)
+
+      - Fixed test.py to not over-resolve symbolic links. Needed to run
+        tests when the Products directory and a product are symlinks.
+
+      - Collector #1583/ZReST: Fixed handling of the title attribute
+        for non-ascii characters.
+
+      - Collector #1577: Fixed cryptic error message in ZPublisher if a
+        non-ASCII string is passed to a date, int, long or float property.
+
+      - Collector #1576: Fixed Z Search Interface to use proper HTML.
+
+      - Collector #1127: strftime did not take timezone into account.
+
+      - Collector #1569/DateTime: Added a new ISO8601-method that will
+        return correctly formatted ISO 8601-representations to augment
+        the ISO method which isn't compliant with ISO 8601.
+
+      - ZPublisher: changed some hardcoded 'latin1' arguments to 'iso-8859-15'
+        since latin1 is obsolete.
+
+      - Collector #1566: Installation of Zope on some older Solaris versions
+        could fail due to a broken "echo" implementation causing the
+        creation of a borked version.txt file.
+
+      - Collector #934: Image and File objects are now always internally
+        split into small chunks even when initialized from a string.
+
+      - docutils: updated to V 0.3.5. The Zope core now contains a full copy of
+        the docutils package except some GPLed files which can not be included
+        with the Zope distribution due to license constraints on svn.zope.org.
+
+      - docutils: moved from lib/python/docutils to
+        lib/python/third_party/docutils
+
+      - Collector #1557/OFS.Image: Introducing new 'alt' property. The 'alt'
+        attribute is no longer taken from the 'title' property but from the new
+        'alt' property.  The border="0" attribute is no longer part of the HTML
+        output except specified otherwise.
+
+      - Set a default value of '' for the new 'alt' property as not to
+        break existing content.
+
+      - Collector #1511: made IPCServer show up in the Control Panel under
+        "Network Services"
+
+      - Collector #1443: Applied patch by Simon Eisenmann that reimplements
+        the XML parser used in WebDAV fixing a memory leak.
+
+      - Always unescape element contents on webdav.xmltools
+
+      - Use saxutils to escape/unescape values for/from
+        PROPFIND/PROPPATCH.
+
+      - Make OFS.PropertySheet use the escaping function from
+        webdav.xmltools.
+
+      - Escape/unescape &quot; and &apos;
+
+      - Don't escape properties stored as XML (ie: having a
+        __xml_attrs__ metadata set by PROPPATCH) when building a
+        PROPFIND response.
+
+      - If a PROPPATCH element value contains only a CDATA section,
+        store the CDATA contents only.
+
+      - Catch AttributeErrors and KeyErrors raised from
+        __bobo_traverse__ and convert them to NotFound. In debug mode
+        a more verbose error message is issued, the same way it's done
+        on attribute/item traversal.
+
+      - Collector #1523: replace the text field for importing .zexp/.xml
+        files with a selection list
+
+      - Stitch newly-created object into it's container *before*
+        calling it's PUT() method. This fixes an issue with
+        OFS.File/OFS.Image that would result into reading the whole
+        file in memory and wrapping it into a *single* Pdata object.
+
+      - Import ZServer.CONNECTION_LIMIT variable *inside* the method
+        that uses it. Before this, the variable was imported at the
+        module level, thus binding it too early which would cause the
+        ZConfig handler to have no real effect.
+
+  Zope 2.8a1 (2004/10/17)
+
+    Features added
+
+     - Included Stefan Holek's ZopeTestCase 0.9
+
+     - The SiteErrorLog allows you to acknowledge (or delete) exceptions,
+       so you can reduce or clear the list without restarting your
+       Zope server. Additionally the SiteErrorLog is covered by unit tests
+       now.
+
+     - Unit tests added for the SiteErrorLog.
+
+     - UI improvement for the ZCatalog. The "catalog contents" allow
+       you to filter the cataloged objects by path now.
+
+     - Made test.py follow symbolic links on POSIX systems.
+
+     - added utilities/reindex_catalog.py to perform ZCatalog maintenance
+       operations from the command line (through zopectl)
+
+     - RESPONSE.setBody and RESPONSE.setStatus now accept lock
+       parameters in the same way as RESPONSE.redirect. These prevent
+       further calls to the methods from overwriting the previous value.
+       This is useful when writing http proxies.
+
+     - DateTime: new DateTime instance can be constructed from a given
+       DateTime instance: d_new = DateTime(d_old)
+
+     - The DateTime parser now throws a SyntaxError upon any parsing errors.
+
+     - ZCatalog: added a new configuration option in the "Advanced" tab
+       to provide optional logging of the progress of long running
+       reindexing or recataloging operations.
+
+     - made Zope.configure return the starter instance to enable other
+       methods to be called, such as starter.setupConfiguredLoggers()
+
+     - Improved Unicode handling in Page Templates. Template contents
+       and title will now be saved as a Unicode string if
+       the management_page_charset variable can be acquired and is true.
+       The character set of an uploaded file can now be specified.
+
+     - zopectl now accepts the -m argument to set a umask for files created
+       by the managed process (e.g. -m 002 or --umask 002).
+
+     - AccessControl/permission_settings() now has a new optional parameter
+       'permission' to retrieve the permission settings for a particular
+       permission.
+
+     - The obsolete 'SearchIndex' package has been removed
+
+     - Traversal now supports a "post traversal hook" that get's run
+       after traversal finished and the security context is established.
+
+     - Using "_usage" parameters in a ZCatalog query is deprecated and
+       logged as DeprecationWarning.
+
+     - MailHost now has two additional properties, a user id and a
+       password. These are used to attempt ESMTP authentication
+       before sending a mail.
+
+     - Folder listings in FTP now include "." as well as "..".
+
+     - When a VHM is activated, it adds the mapping
+       'VIRTUAL_URL_PARTS': (SERVER_URL, BASEPATH1, virtual_url_path)
+       to the request's 'other' dictionary.  If BASEPATH1 is empty, it
+       is omitted from the tuple.  The joined parts are also added
+       under the key 'VIRTUAL_URL'.  Since the parts are evaluated
+       before traversal continues, they will not reflect modifications
+       to the path during traversal or by the addition of a default
+       method such as 'index_html'.
+
+     - Extension Classes, a key Zope foundation, have been totally
+       rewritten based on Python new-style classes.
+
+       This change provides a number of advantages:
+
+       o Use of new-style class features (e.g. slots, descriptors,
+         etc.) in Zope objects. Support for object protocols (special
+         __ methods) added since Python 1.4.
+
+       o Support for cyclic garbage collection.
+
+       o Ability to use new-style classes as base classes of Zope objects.
+
+       o Pave the way for sharing code between Zope 2 and Zope 3.
+
+       Note -- Extension classes with __of__ methods are made into
+         Python read descriptors.
+
+         If an extension classes is used to implement a descriptor,
+         indirectly by implementing __of__ or directly by implementing
+         __get__, the behavior of the descriptor will differ from
+         ordinary descriptors in an important way. The descriptors
+         __get__ method will be called *even if* the descriptor is
+         stored on an instance of an extension class.  Normally
+         descritor __get__ methods are called only of the descriptor
+         is stored in a class.
+
+     - ZODB 3.3
+
+       This is the first version of ZODB that does not require
+       ExtensionClass.
+
+     - Add 'parity' method to ZTUtils Iterators.
+
+     - Allow untrusted code to mutate ZPublisher record objects.
+
+     - Added a "mime-types" configuration value which names a file
+       giving additional MIME type to filename extension mappings.
+       The "mime-types" setting may be given more than once in the
+       configuration file; the files have the same format at the
+       mime.types file distributed with Apache.
+
+     - Changed the ZEO server and control process to work with a
+       single configuration file; this is now the default way to
+       configure these processes.  (It's still possible to use
+       separate configuration files.)  The ZEO configuration file can
+       now include a "runner" section used by the control process and
+       ignored by the ZEO server process itself.  If present, the
+       control process can use the same configuration file.
+
+     - ZConfig was updated to version 2.0.  The new version includes
+       two new ways to perform schema extension; of particular
+       interest in Zope is the ability for a configuration file to
+       "import" new schema components to allow 3rd-party components
+       (such as storages, databases, or logging handlers) to be used.
+
+     - The testrunner.py script has been replaced with test.py which
+       is now installed into the 'bin' folder.
+
+    Bugs fixed
+
+     - Removed Python 2.3.3 as valid option. ZODB 3.3 requires Python
+       2.3.4 or later.
+
+     - Collector #1332: Added in-place migration of the Catalog.__len__
+       attribute to avoid new-style class caching problems. Instances of
+       ZCatalog or instances of classes with ZCatalog as base class will be
+       migrated automatically. Instances of Catalog or classes with Catalog
+       as base class must be migrated manually by calling the migrate__len__()
+       method on the every instance. In addition old BTree migration code
+       (for pre-Zope 2.5 instances) has been removed. If you want to migrate
+       from such an old version to Zope 2.8, you need to clear and reindex
+       your ZCatalog).
+
+     - Collector #1595: same as in Collector #1132 for indexes derived from
+       UnIndex. Exisiting ZCatalog instances must be converted manually
+       by calling the "manage_convertIndexes" method through-the-web for
+       every single ZCatalog instance. See also doc/FAQ.txt (Installation,
+       question #4)
+
+     - Collector #1457: ZCTextIndex's QueryError and ParseError
+       are now available for import from untrusted code.
+
+     - Collector #1473: zpasswd.py can now accept --username
+       without --password
+
+     - Collector #1491: talgettext.py did not create a proper header
+       for the generated .pot file if multiple pagetemplate files
+       were processed.
+
+     - Collector #1477: TaintedString.strip() now implements the
+       same signature as str.strip()
+
+     - TAL: tal:on-error does not trap ConflictError anymore.
+
+     - OFS.CopySupport: Enforced "Delete objects" permission during
+       move (CMF Collector #259).
+
+     - Removed DWIM'y attempt to filter acquired-but-not-aceessible
+       results from 'guarded_getattr'.
+
+     - Collector #1267: applied patch to fix segmentation faults on
+       x86_64 systems
+
+     - ZReST: the charset used in the rendered HTML was not set to the
+       corresponding output_encoding property of the ZReST instance. In addition
+       changing the encodings through the Properties tab did not re-render
+       the HTML.
+
+     - Collector #1234: an exception triple passed to LOG() was not
+       propagated properly to the logging module of Python
+
+     - Collector #1441: Removed headers introduced to make Microsoft
+       webfolders and office apps happy, since they make a lot of
+       standards-compliant things unhappy AND they trick MS Office
+       into trying to edit office files stored in Zope via WebDAV even
+       when the user isn't allowed to edit them and is only trying to
+       download them.
+
+     - Collector #1445: Fixed bad interaction between -p and -v(v)
+       options to test.py that resulted in exceptions being printed
+       when they shouldn't have been.
+
+     - Collector #729: manage_main doesn't display the correct page title
+       most of the time. It is not completely fixed but using title_or_id
+       makes folders display the correct id as a fallback.
+
+     - Collector #1370: Fixed html generated by Z Search interface.
+
+     - Collector #1295: Fixed minor niglet with the Elvis tutorial.
+
+     - added "version.txt" to setup.py to avoid untrue "unreleased version"
+       messages within the control panel
+
+     - Collector #1436: applied patch to fix a memory leak in
+       cAccessControl.
+
+     - Collector #1431: fixed NetBSD support in initgroups.c
+
+     - Collector #1406: fixed segmentation fault by acquisition
+
+     - Collector #1392: ExternalMethod ignored management_page_charset
+
+     - unrestrictedTraverse() refactored to remove hasattr calls (which mask
+       conflict errors) and for greater readability and maintainability.
+
+     - Zope can now be embedded in C/C++ without exceptions being raised
+       in zdoptions.
+
+     - Collector #1213: Fixed wrong labels of cache parameters
+
+     - Collector #1265: Fixed handling of orphans in ZTUtil.Batch
+
+     - Collector #1293: missing 'address' parameters within one of the server
+       sections raise an exception.
+
+     - Collector #1345: AcceleratedHTTPCacheManager now sends the
+       Last-Modified header.
+
+     - Collector #1126: ZPublisher.Converters.field2lines now using
+       splitlines() instead of split('\n').
+
+     - Collector #1322: fixed HTML quoting problem with ZSQL methods
+       in DA.py
+
+     - Collector #1124: The ZReST product now uses the same reST encoding
+       parameters from zope.conf as the low-level reStructuredText
+       implementation.
+
+     - Collector #1259: removed the "uninstall" target from the Makefile
+       since the uninstall routine could also remove non-Zope files. Because
+       this was to dangerous it has been removed completely.
+
+     - Collector #1299: Fixed bug in sequence.sort()
+
+     - Collector #1159: Added test for __MACH__ to initgroups.c so the
+       initgroups method becomes available on Mac OS X.
+
+     - Collector #1004: text,token properties were missing in
+       PropertyManager management page.
+
+     - Display index name on error message when index can't be used as
+       'sort_on'.
+
+     - PUT would fail if the created object had a __len__ = 0 (eg:
+       BTreeFolder2) and fallback to _default_put_factory. Fix by
+       checking if the returned object is None instead.
+
+     - Collector #1160: HTTPResponse.expireCookie() potentially didn't
+       when an 'expires' keyword argument was passed.
+
+     - Collector #1289: Allow ZSQL methods to be edited via WebDAV.
+
+     - WebDAV property values were not being properly escaped on
+       'propstat'.
+
+     - WebDAV 'supportedlock' was not checking if the object did
+       implement the WriteLockInterface before returning it's
+       value.
+
+     - reStructuredText ignored the encoding settings in zope.conf
+
+     - ObjectManager no longer raises string exceptions
+
+     - Collector #1260: Testing/__init__.py no longer changes the
+       INSTANCE_HOME.
+
+     - App.config.setConfiguration() did not update the legacy source
+       for debug_mode, Globals.DevelopmentMode.
+
+     - Script (Python) objects now have a _filepath attribute, also
+       used as the '__file__' global at runtime.  This prevents an
+       import problem caused by the fix to #1074.
+
+     - Minor usability tweaks:
+
+       * Increased FindSupport meta type selection widgets
+         height to 8 lines
+
+     - The DateTime module did not recognize the settings for
+       "datetime-format".
+
+     - Stop testrunner.py from recursing into the 'build-base' directory
+       created by setup.py.
+
+     - Collector #1074: Change Scripts' __name__ to None
+
+     - Range searches with KeywordIndexes did not work with record-style
+       query parameters
+
+     - Item_w__name__ now has a working getId() method
+
+     - PageTemplateFile now using Item_w__name__ mixin, fixing
+       its getId() and absolute_url() methods.
+
+     - Only one VirtualHostMonster is allowed per container.
+
+     - Collector #1133: TreeTag choked on Ids of type long.
+
+     - Collector #1012: A carefully crafted compressed tree state
+       could violate size limit.  Limit is no longer hardcoded.
+
+     - Collector #1139: tal:attributes didn't escape double quotes.
+
+     - Management interface of TopicIndexes has been completely broken
+
+     - Collector #1129: Improper parsing of ISO8601 in DateTime.
+
+     - Removed pervasive use of string exceptions (some may still be
+       hiding in the woodwork, but all raise's with string literals are
+       gone).
+
+     - AccessControl.User used a misleading string exeception,
+       'NotImplemented', which shadowed the Python builtin.
+
+     - Collector #426: Inconsistent, undocumented error() method.
+
+     - Collector #799: Eliminate improper uses of SCRIPT_NAME.
+
+     - Collector #445: Add internal global declaration for Script bindings.
+
+     - Collector #616: Make CONTEXTS available to TALES Python expressions.
+
+     - Collector #1074: Give Script execution context a __name__
+
+     - Collector #1095: Allow TAL paths starting with '/varname' as a
+       preferred spelling for 'CONTEXTS/varname'.
+
+     - Collector #391: Cut and paste now requires delete permissions.
+
+     - Collector #331: Referenses to URL in manage_tabs was changed
+       to REQUEST.URL to prevent accidental overriding.
+
+     - Made the control panel properly reflect the cache-size setting
+       of ZODB's object cache once again.
+
+     - ConflictError was swallowed in ObjectManager by
+       manage_beforeDelete and _delObject. This could break code
+       expecting to do cleanups before deletion.
+
+     - Python 2.3 BooleanType wasn't handled properly by ZTUtils
+       marshalling and ZPublisher's converters.
+
+     - Collector #1065: bin/ scripts didn't export HOME envars.
+
+     - Collector #572: WebDAV GET protected by 'FTP Access' permission.
+       Two new methods have been added to WebDAV resources, "manage_DAVget"
+       and "listDAVObjects". These are now used by WebDAV instead of the
+       earlier "manage_FTPget" and "objectValues". This separates the
+       permissions, and allows WebDAV specific overriding of these methods.
+
+     - Collector #904: Platform specific signals in zdaemon/Daemon.py
+       (fixed by removing the "fossil" module from 2.7 branch and head).
+
+     - Workaround for Collector #1081: The 'title' property for objects
+       derived from OFS.Folder or PropertyManager can now be
+       removed and replaced with a ustring property. This allows the usage
+       of non-ISO-8859-1 or ASCII charsets
+
+     - Collector #951: DateTime(None) is now equal to DateTime()
+
+     - Collector #1056: aq_acquire() ignored the default argument
+
+     - Collector #1087: ZPT: "repeat/item/length" did not work as documented
+       in the Zope Book.
+
+     - Collector #721: Entities in tal:attribute values weren't
+       properly escaped.
+
+     - Collector #851: Traversable.py: A bare try..except shadowed
+       conflict errors
+
+     - Collector #1058: Several fixes for PropertySheets when used
+       outside ZClasses
+
+     - Collector #1053: parseIndexRequest turned empty sequence of search
+       terms into unrestricted search.
+
+     - manage_tabs had a namespace problem with the acquisition of names from
+       the manage_options variable resulting to acquire "target" and "action"
+       from objects above in the hierachy.
+
+     - PathIndex and TopicIndex are now using a counter for the number
+       of indexed objects instead of using a very expensive calculation
+       based on the keys of their indexes.
+
+     - Collector #1039: Whitespace problem in Z2.log fixed
+
+     - changed some bare try: except:'s in Shared.DC.ZRDB.Connection
+       so that they now log exceptions that occur.
+
+     - ObjectManager will now attempt to set Owner local role keyed
+       to the user's id, rather than username.

Modified: Zope/trunk/inst/Makefile.in
===================================================================
--- Zope/trunk/inst/Makefile.in	2006-07-06 04:04:47 UTC (rev 69000)
+++ Zope/trunk/inst/Makefile.in	2006-07-06 04:15:00 UTC (rev 69001)
@@ -10,14 +10,17 @@
 PACKAGE_NAME=${NAME}-${MAJOR_VERSION}.${MINOR_VERSION}-${RELEASE_TAG}
 
 PYTHON="<<PYTHON>>"
-ZPKG=zpkg
 TMPDIR=/tmp
 PREFIX=<<PREFIX>>
 BASE_DIR=<<BASE_DIR>>
+BUILD_BASE=<<BUILD_BASE>>
 DISTUTILS_OPTS=<<DISTUTILS_OPTS>>
 INSTALL_FLAGS=<<INSTALL_FLAGS>>
 TESTOPTS=-v
-BUILD_FLAGS=-i
+BUILD_FLAGS=--build-base="${BUILD_BASE}" \
+            --build-lib="${BUILD_BASE}/build-lib" \
+            --build-scripts="${BUILD_BASE}/build-scripts"\
+            --build-temp="${BUILD_BASE}/build-temp"
 
 RM=rm -f
 RMRF=rm -rf
@@ -29,7 +32,7 @@
 TAR=tar
 MKDIR=mkdir -p
 
-.PHONY : clean install instance untestinst testinst build
+.PHONY : clean install instance untestinst testinst build unbuild
 .PHONY : default
 
 # default:     The default step (invoked when make is called without a target)
@@ -39,23 +42,38 @@
 	@echo to run a Zope instance directly from the build directory\).
 	@echo
 
-# build:
+# build:       Do whatever 'setup.py build' implies
 build:
 	${PYTHON} "${BASE_DIR}/setup.py" \
-           ${DISTUTILS_OPTS} build_ext ${BUILD_FLAGS}
+           ${DISTUTILS_OPTS} build ${BUILD_FLAGS}
 
+# unbuild:     Remove the build directory (undo the make build step)
+unbuild:
+	${RMRF} ${BUILD_BASE}
+
 # install:     Install a software home.
-install: version_txt
-	${PYTHON} "${BASE_DIR}/setup.py" ${DISTUTILS_OPTS} \
-	   build_ext ${BUILD_FLAGS} \
-	   install --home="${PREFIX}" ${INSTALL_FLAGS}
+install: build version_txt
+	${PYTHON} "${BASE_DIR}/setup.py" ${DISTUTILS_OPTS} install \
+	   --home="${PREFIX}" ${BUILD_FLAGS} ${INSTALL_FLAGS}
 	[ -f ${PREFIX}/bin/python ] || ${LN} ${PYTHON} ${PREFIX}/bin/python
 	@echo
 	@echo Zope binaries installed successfully.
 	@echo Now run \'${PREFIX}/bin/mkzopeinstance.py\'
 
-# inplace:     Do an in-place build
-inplace: build
+# inplace:     Install a software home into to the source directory.
+#
+# Note: We used to run 'build_ext -i' for 'inplace', but that was
+# suboptimal because it had a tendency to try to rebuild all of the
+# (possibly  already-built) extensions that might be built during a
+# previous 'make' step.  built_ext doesn't understand '--build-base'
+# and friends so we can't stop it from doing this easily.  So instead,
+# we rely on the stock install step and name the prefix as the current
+# directory.  This is a little less efficient than just building the
+# extensions because it also compiles bytecode, but it's more intuitive and
+# less expensive in the common case than letting distutils
+# potentially rebuild the binaries when we've done that already.
+inplace: PREFIX=${BASE_DIR}
+inplace: install
 
 # test:        Do an inplace build and run the Zope test suite.
 test: inplace
@@ -83,7 +101,7 @@
 
 # clean:       Delete the build files and any binaries/bytecode files in
 #              the source directory for good measure.
-clean:
+clean: unbuild
 	${FIND} "${BASE_DIR}" \
          -name '*.py[co]' -o -name '*.so' -o -name '*.o' | ${XARGS} ${RM}
 	${RMRF} build
@@ -93,10 +111,22 @@
 	printf "Zope ${MAJOR_VERSION}.${MINOR_VERSION}-${RELEASE_TAG}" >\
           "${BASE_DIR}/lib/python/version.txt"
 
-# Building a source distribution requires that zpkg be available:
-sdist:
-	${ZPKG} -C ${BASE_DIR}/releases/Zope2.cfg -r ${MAJOR_VERSION}.${MINOR_VERSION}${RELEASE_TAG}
+sdist: clobber sdist_tgz
 
+# sdist_tgz:   Create a tgz archive file as a source distribution.
+#
+sdist_tgz: version_txt
+	${MKDIR} ${TMPDIR}
+	${CD} ${TMPDIR} && ${LN} ${BASE_DIR} ${PACKAGE_NAME} && \
+          ${TAR} czfh ${BASE_DIR}/${PACKAGE_NAME}.tgz \
+           --exclude=${PACKAGE_NAME}.tgz\
+           --exclude=.svn\
+           --exclude=makefile \
+           --exclude=build-base \
+           --exclude=*~ \
+           --exclude=.#* ${PACKAGE_NAME} 
+	${RMRF} ${TMPDIR}/${PACKAGE_NAME}
+
 # clobber:     Make the source tree 'pristine' again.
 clobber: clean uninstance
 

Modified: Zope/trunk/inst/configure.py
===================================================================
--- Zope/trunk/inst/configure.py	2006-07-06 04:04:47 UTC (rev 69000)
+++ Zope/trunk/inst/configure.py	2006-07-06 04:15:00 UTC (rev 69001)
@@ -17,6 +17,7 @@
 import os
 import sys
 import versions
+import tempfile
 
 QUIET=0
 
@@ -33,7 +34,10 @@
     # below assumes this script is in the BASE_DIR/inst directory
     global PREFIX
     BASE_DIR=os.path.abspath(os.path.dirname(os.path.dirname(sys.argv[0])))
+    BUILD_BASE=os.path.join(os.getcwd(), 'build-base',
+                            'python-%s.%s' % sys.version_info[:2])
     PYTHON=sys.executable
+    TMP_DIR = tempfile.gettempdir()
     MAKEFILE=open(os.path.join(BASE_DIR, 'inst', IN_MAKEFILE)).read()
     REQUIRE_LF_ENABLED = 1
     REQUIRE_ZLIB = 1
@@ -65,6 +69,8 @@
             INSTALL_FLAGS = '--optimize=1 --no-compile'
         if o == '--no-compile':
             INSTALL_FLAGS = '--no-compile'
+        if o == '--build-base':
+            BUILD_BASE = a
         if o == '--quiet':
             DISTUTILS_OPTS = '-q'
             global QUIET
@@ -82,6 +88,8 @@
         '<<PYTHON>>':PYTHON,
         '<<PREFIX>>':PREFIX,
         '<<BASE_DIR>>':BASE_DIR,
+        '<<BUILD_BASE>>':BUILD_BASE,
+        '<<TMP_DIR>>':TMP_DIR,
         '<<INSTALL_FLAGS>>':INSTALL_FLAGS,
         '<<ZOPE_MAJOR_VERSION>>':versions.ZOPE_MAJOR_VERSION,
         '<<ZOPE_MINOR_VERSION>>':versions.ZOPE_MINOR_VERSION,


Property changes on: Zope/trunk/lib/python
___________________________________________________________________
Name: svn:ignore
   - *so
*.pyc
version.txt
build

   + *so
*.pyc
version.txt
build
zope.proxy



Property changes on: Zope/trunk/lib/python/Zope2
___________________________________________________________________
Name: svn:ignore
   - *so
*.pyc
build

   + *so
*.pyc
build
version.txt


Modified: Zope/trunk/setup.py
===================================================================
--- Zope/trunk/setup.py	2006-07-06 04:04:47 UTC (rev 69000)
+++ Zope/trunk/setup.py	2006-07-06 04:15:00 UTC (rev 69001)
@@ -1,45 +1,509 @@
-#############################################################################
+#!/usr/bin/env python2.3
+
+##############################################################################
 #
-# Copyright (c) 2005 Zope Corporation and Contributors.
-# All Rights Reserved.
+# Copyright (c) 2002 Zope Corporation and Contributors. All Rights Reserved.
 #
 # This software is subject to the provisions of the Zope Public License,
-# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# Version 2.0 (ZPL).  A copy of the ZPL should accompany this distribution.
 # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
-# FOR A PARTICULAR PURPOSE.
+# FOR A PARTICULAR PURPOSE
 #
 ##############################################################################
 
+"""
+Distutils setup for Zope
+
+  In-place building
+
+    This builds extension modules in-place, much like build_extensions.py
+    does.  Use 'setup.py' like this::
+
+      python setup.py build_ext -i
+
+  Installation
+
+    This builds extension modules, compiles python modules, and installs
+    everything needed to support Zope instances in the directory of
+    your choosing.  For example, to use '/usr/local/lib/zope'::
+
+      python setup.py install \
+        --home=/usr/local/lib/zope \
+        --install-platlib=/usr/local/lib/zope \
+        --install-purelib=/usr/local/lib/zope
+"""
+
+import glob
 import os
-import site
 import sys
 
-here = os.path.dirname(os.path.abspath(__file__))
-buildsupport = os.path.join(here, "buildsupport")
+import distutils.core
 
-# Add 'buildsupport' to sys.path and process *.pth files from 'buildsupport':
-last = len(sys.path)
-site.addsitedir(buildsupport)
-if len(sys.path) > last:
-    # Move all appended directories to the start.
-    # Make sure we use ZConfig shipped with the distribution
-    new = sys.path[last:]
-    del sys.path[last:]
-    sys.path[:0] = new
+# Override install_data to install into module directories, and to support
+# globbing on data_files.
 
-import zpkgsetup.package
-import zpkgsetup.publication
-import zpkgsetup.setup
+from distutils.command.install import install
+from distutils.command.install_data import install_data
+from distutils.util import convert_path
 
+class ZopeInstallData(install_data):
+    def finalize_options(self):
+        self.set_undefined_options('install',
+                                   ('install_purelib', 'install_dir'),
+                                   ('root', 'root'),
+                                   ('force', 'force'),
+                                  )
 
-context = zpkgsetup.setup.SetupContext(
-    "Zope", "2.8.42", __file__)
+    def run(self):
+        self.mkpath(self.install_dir)
+        for f in self.data_files:
+            if isinstance(f, str):
+                # it's a simple file, so copy it
+                f = convert_path(f)
+                gl = glob.glob(f)
+                if len(gl) == 0:
+                    raise distutils.core.DistutilsFileError, \
+                          "can't copy '%s': no matching files" % f
+                for g in gl:
+                    if os.path.isfile(g):
+                        if self.warn_dir:
+                            self.warn("setup script did not provide a "
+                                      "directory for '%s' -- installing "
+                                      "right in '%s'" %
+                                      (g, self.install_dir))
+                        (out, _) = self.copy_file(g, self.install_dir)
+                        self.outfiles.append(out)
+            else:
+                # it's a tuple with path to install to and a list of files
+                dir = convert_path(f[0])
+                if not os.path.isabs(dir):
+                    dir = os.path.join(self.install_dir, dir)
+                elif self.root:
+                    dir = change_root(self.root, dir)
+                self.mkpath(dir)
+                for data in f[1]:
+                    data = convert_path(data)
+                    gl = glob.glob(data)
+                    if len(gl) == 0:
+                        raise distutils.core.DistutilsFileError, \
+                              "can't copy '%s': no matching files" % data
+                    for g in gl:
+                        if os.path.isfile(g):
+                            (out, _) = self.copy_file(g, dir)
+                            self.outfiles.append(out)
 
-context.load_metadata(
-    os.path.join(here, "releases", "Zope2",
-                 zpkgsetup.publication.PUBLICATION_CONF))
+# We create a custom "install scheme" that works the same way on all
+# platforms.  We do this in order to prevent distutils from trying to
+# guess where to put our files on a per-platform basis.
 
-context.walk_packages("lib/python")
-context.setup()
+ZOPE_INSTALL_SCHEME = {
+    'purelib': '$base/lib/python',
+    'platlib': '$base/lib/python',
+    'headers': '$base/lib/python',
+    'scripts': '$base/bin',
+    'data'   : '$base/lib/python',
+    }
+
+class ZopeInstall(install):
+    # give distutils install step knowledge about build file placement options
+    user_options = install.user_options + [
+        ('build-base=', None, 'base directory for build library'),
+        ('build-lib=', None, 'build directory for all distribution'),
+        ('build-scripts=', None, 'build directory for scripts'),
+        ('build-temp=', None, 'temporary build directory'),
+        ]
+    build_scripts = None
+    build_temp = None
+
+    def run(self):
+        """ Override run to pass along build location info so
+        we can use custom build directories """
+        build = self.distribution.get_command_obj('build')
+        build.build_base = self.build_base
+        build.build_lib = self.build_lib
+        build.build_scripts = self.build_scripts
+        build.build_temp = self.build_temp
+
+        install.run(self)
+
+    def select_scheme(self, name):
+        """
+        Override the default platform installation schemes, ignoring whatever
+        'name' is passed in.  For our purposes, we want to put all library,
+        header, and data into [install_base]/lib/python.  Comment
+        this method out to achieve distutils-standard platform-specific
+        behavior for 'setup.py install'.  This is most useful if you set the
+        [install-base] by using the '--prefix' or '--home' flags on the
+        setup.py install command line.  Otherwise, all Zope software
+        will probably be installed to your Python's 'lib/python' directory.
+        """
+        scheme = ZOPE_INSTALL_SCHEME
+        import distutils.command.install
+        for key in distutils.command.install.SCHEME_KEYS:
+            attrname = 'install_' + key
+            if getattr(self, attrname) is None:
+                setattr(self, attrname, scheme[key])
+
+class ZopeDistribution(distutils.core.Distribution):
+    def __init__(self, attrs):
+        distutils.core.Distribution.__init__(self, attrs)
+        self.cmdclass["install"] = ZopeInstall
+        self.cmdclass["install_data"] = ZopeInstallData
+
+# presumes this script lives in the base dir
+BASE_DIR=os.path.dirname(os.path.abspath(sys.argv[0]))
+
+AUTHOR = 'Zope Corporation and Contributors'
+
+# Most modules are in lib/python in the source distribution
+PACKAGES_ROOT = os.path.join(BASE_DIR, 'lib', 'python')
+os.chdir(PACKAGES_ROOT)
+
+
+# Most of this is ripped from the Zope 3 setup.py.
+
+from distutils import dir_util
+from distutils.command.build import build as buildcmd
+from distutils.command.build_ext import build_ext
+from distutils.command.install_lib import install_lib as installcmd
+from distutils.core import setup
+from distutils.dist import Distribution
+from distutils.extension import Extension
+
+
+# This class serves multiple purposes.  It walks the file system looking for
+# auxiliary files that distutils doesn't install properly, and it actually
+# copies those files (when hooked into by distutils).  It also walks the file
+# system looking for candidate packages for distutils to install as normal.
+# The key here is that the package must have an __init__.py file.
+class Finder:
+    def __init__(self, ignore, prefix):
+        self._files = []
+        self._pkgs = {}
+        self._ignore = ignore
+        # We're finding packages in lib/python in the source dir, but we're
+        # copying them directly under build/lib.<plat>.  So we need to lop off
+        # the prefix when calculating the package names from the file names.
+        self._plen = len(prefix) + 1
+
+    def visit(self, dir, files):
+        # First see if this is one of the packages we want to add, or if
+        # we're really skipping this package.
+        if '__init__.py' in files:
+            aspkg = dir[self._plen:].replace(os.sep, '.')
+            self._pkgs[aspkg] = True
+            ignore = ('.py',) + self._ignore
+        else:
+            ignore = self._ignore
+        # Add any extra files we're interested in
+        for file in files:
+            base, ext = os.path.splitext(file)
+            if ext not in ignore:
+                self._files.append(os.path.join(dir, file))
+
+    def copy_files(self, cmd, outputbase):
+        for file in self._files:
+            dest = os.path.join(outputbase, file[self._plen:])
+            # Make sure the destination directory exists
+            dir = os.path.dirname(dest)
+            if not os.path.exists(dir):
+                dir_util.mkpath(dir)
+            cmd.copy_file(file, dest)
+
+    def get_packages(self):
+        return self._pkgs.keys()
+
+def remove_stale_bytecode(arg, dirname, names):
+    names = map(os.path.normcase, names)
+    for name in names:
+        if name.endswith(".pyc") or name.endswith(".pyo"):
+            srcname = name[:-1]
+            if srcname not in names:
+                fullname = os.path.join(dirname, name)
+                print "Removing stale bytecode file", fullname
+                os.unlink(fullname)
+#
+#   Aliases for directories containing headers, to allow for Zope3 extensions
+#   to include headers via stuff like '#include "zope.proxy/proxy.h"
+#
+HEADER_PATH_ALIASES = {'zope.proxy': 'zope/proxy'}
+
+# Create the finder instance, which will be used in lots of places.  `finder'
+# is the global we're most interested in.
+IGNORE_EXTS = ('.pyc', '.pyo', '.c', '.h', '.so', '.cfg')
+finder = Finder(IGNORE_EXTS, PACKAGES_ROOT)
+
+for dirpath, dirnames, filenames in os.walk(PACKAGES_ROOT):
+    if not '.svn' in dirpath:
+        finder.visit(dirpath, filenames)
+packages = finder.get_packages()
+
+# Distutils hook classes
+class MyBuilder(buildcmd):
+    def run(self):
+        os.path.walk(os.curdir, remove_stale_bytecode, None)
+        buildcmd.run(self)
+        finder.copy_files(self, self.build_lib)
+
+class MyExtBuilder(build_ext):
+    # Override the default build_ext to remove stale bytecodes.
+    # Technically, removing bytecode has nothing to do with
+    # building extensions, but Zope's the build_ext -i variant
+    # is used to build Zope in place.
+    #
+    # Note that we also create symlinks for the oddball include
+    # directories used by some Zope3 extensions.
+    def run(self):
+        os.path.walk(os.curdir, remove_stale_bytecode, None)
+        for k, v in HEADER_PATH_ALIASES.items():
+            if not os.path.exists(k):
+                os.symlink(v, k)
+        build_ext.run(self)
+
+class MyLibInstaller(installcmd):
+    def run(self):
+        installcmd.run(self)
+        finder.copy_files(self, self.install_dir)
+
+class MyDistribution(Distribution):
+    # To control the selection of MyLibInstaller and MyPyBuilder, we
+    # have to set it into the cmdclass instance variable, set in
+    # Distribution.__init__().
+    def __init__(self, *attrs):
+        Distribution.__init__(self, *attrs)
+        self.cmdclass['install'] = ZopeInstall
+        self.cmdclass['build'] = MyBuilder
+        self.cmdclass['build_ext'] = MyExtBuilder
+        self.cmdclass['install_lib'] = MyLibInstaller
+
+
+EXTENSIONCLASS_INCLUDEDIRS = ['ExtensionClass', '.'] 
+
+# All extension modules must be listed here.
+ext_modules = [
+
+    # AccessControl
+    Extension(name='AccessControl.cAccessControl',
+              include_dirs=EXTENSIONCLASS_INCLUDEDIRS+['Acquisition'],
+              sources=['AccessControl/cAccessControl.c'],
+              depends=['ExtensionClass/ExtensionClass.h',
+                       'ExtensionClass/pickle/pickle.c',
+                       'Acquisition/Acquisition.h']),
+
+    # BTrees
+    Extension(name='BTrees._OOBTree',
+              include_dirs=EXTENSIONCLASS_INCLUDEDIRS+['persistent'],
+              sources=['BTrees/_OOBTree.c']),
+    Extension(name='BTrees._OIBTree',
+              include_dirs=EXTENSIONCLASS_INCLUDEDIRS+['persistent'],
+              sources=['BTrees/_OIBTree.c']),
+    Extension(name='BTrees._IIBTree',
+              include_dirs=EXTENSIONCLASS_INCLUDEDIRS+['persistent'],
+              define_macros=[('EXCLUDE_INTSET_SUPPORT', None)],
+              sources=['BTrees/_IIBTree.c']),
+    Extension(name='BTrees._IOBTree',
+              include_dirs=EXTENSIONCLASS_INCLUDEDIRS+['persistent'],
+              define_macros=[('EXCLUDE_INTSET_SUPPORT', None)],
+              sources=['BTrees/_IOBTree.c']),
+    Extension(name='BTrees._IFBTree',
+              include_dirs=EXTENSIONCLASS_INCLUDEDIRS+['persistent'],
+              define_macros=[('EXCLUDE_INTSET_SUPPORT', None)],
+              sources=['BTrees/_IFBTree.c']),
+    Extension(name='BTrees._fsBTree',
+              include_dirs=EXTENSIONCLASS_INCLUDEDIRS+['persistent'],
+              define_macros=[('EXCLUDE_INTSET_SUPPORT', None)],
+              sources=['BTrees/_fsBTree.c']),
+
+    # DocumentTemplate
+    Extension(name='DocumentTemplate.cDocumentTemplate',
+              include_dirs=EXTENSIONCLASS_INCLUDEDIRS,
+              sources=['DocumentTemplate/cDocumentTemplate.c']),
+
+    # ExtensionClass
+    Extension(name='ExtensionClass._ExtensionClass',
+              include_dirs=EXTENSIONCLASS_INCLUDEDIRS,
+              sources=["ExtensionClass/_ExtensionClass.c"],
+              depends=["ExtensionClass/ExtensionClass.h"]),
+    Extension(name='Acquisition._Acquisition',
+              include_dirs=EXTENSIONCLASS_INCLUDEDIRS,
+              sources=["Acquisition/_Acquisition.c"],
+              depends=["ExtensionClass/ExtensionClass.h",
+                       "Acquisition/Acquisition.h"]),
+    Extension(name='MethodObject._MethodObject',
+              include_dirs=EXTENSIONCLASS_INCLUDEDIRS,
+              sources=["MethodObject/_MethodObject.c"],
+              depends=["ExtensionClass/ExtensionClass.h"]),
+    Extension(name='MultiMapping._MultiMapping',
+              include_dirs=EXTENSIONCLASS_INCLUDEDIRS,
+              sources=["MultiMapping/_MultiMapping.c"],
+              depends=["ExtensionClass/ExtensionClass.h"]),
+    Extension(name='ThreadLock._ThreadLock',
+              include_dirs=EXTENSIONCLASS_INCLUDEDIRS,
+              sources=["ThreadLock/_ThreadLock.c"],
+              depends=["ExtensionClass/ExtensionClass.h"]),
+    Extension(name='Missing._Missing',
+              include_dirs=EXTENSIONCLASS_INCLUDEDIRS,
+              sources=["Missing/_Missing.c"],
+              depends=["ExtensionClass/ExtensionClass.h"]),
+    Extension(name='Record._Record',
+              include_dirs=EXTENSIONCLASS_INCLUDEDIRS,
+              sources=["Record/_Record.c"],
+              depends=["ExtensionClass/ExtensionClass.h"]),
+    Extension(name='ComputedAttribute._ComputedAttribute',
+              include_dirs=EXTENSIONCLASS_INCLUDEDIRS,
+              sources=["ComputedAttribute/_ComputedAttribute.c"],
+              depends=["ExtensionClass/ExtensionClass.h"]),
+
+    # initgroups
+    Extension(name='initgroups._initgroups',
+              sources=['initgroups/_initgroups.c']),
+
+    # indexes
+    Extension(name='Products.PluginIndexes.TextIndex.Splitter.ZopeSplitter.ZopeSplitter',
+              sources=['Products/PluginIndexes/TextIndex/Splitter/ZopeSplitter/src/ZopeSplitter.c']),
+    Extension(name='Products.PluginIndexes.TextIndex.Splitter.ISO_8859_1_Splitter.ISO_8859_1_Splitter',
+              sources=['Products/PluginIndexes/TextIndex/Splitter/ISO_8859_1_Splitter/src/ISO_8859_1_Splitter.c']),
+    Extension(name='Products.PluginIndexes.TextIndex.Splitter.UnicodeSplitter.UnicodeSplitter',
+              sources=['Products/PluginIndexes/TextIndex/Splitter/UnicodeSplitter/src/UnicodeSplitter.c']),
+    Extension(name='Products.ZCTextIndex.stopper',
+              sources=['Products/ZCTextIndex/stopper.c']),
+    Extension(name='Products.ZCTextIndex.okascore',
+              sources=['Products/ZCTextIndex/okascore.c']),
+
+    #ZODB
+    Extension(name = 'persistent.cPersistence',
+              include_dirs = ['persistent'],
+              sources= ['persistent/cPersistence.c',
+                        'persistent/ring.c'],
+              depends = ['persistent/cPersistence.h',
+                         'persistent/ring.h',
+                         'persistent/ring.c']
+              ),
+    Extension(name = 'Persistence._Persistence',
+              include_dirs = ['.', 'persistent', 'ExtensionClass'],
+              sources = ['Persistence/_Persistence.c'],
+              depends = ['persistent/cPersistence.h',
+                         'ExtensionClass/ExtensionClass.h']
+              ),
+    Extension(name = 'persistent.cPickleCache',
+              include_dirs = ['persistent'],
+              sources= ['persistent/cPickleCache.c',
+                        'persistent/ring.c'],
+              depends = ['persistent/cPersistence.h',
+                         'persistent/ring.h',
+                         'persistent/ring.c']
+              ),
+    Extension(name = 'persistent.TimeStamp',
+              sources= ['persistent/TimeStamp.c']
+              ),
+    Extension(name = 'ZODB.winlock',
+              sources = ['ZODB/winlock.c']
+              ),
+
+    #zope
+    Extension("zope.proxy._zope_proxy_proxy",
+              ["zope/proxy/_zope_proxy_proxy.c"],
+              include_dirs = [".", "zope/proxy"],
+              depends = ["zope/proxy/proxy.h"]),
+
+    Extension("zope.security._proxy", ["zope/security/_proxy.c"],
+              include_dirs = [".", "zope/proxy"],
+              depends = ["zope/proxy/proxy.h"]),
+
+    Extension("zope.security._zope_security_checker",
+              ["zope/security/_zope_security_checker.c"],
+              include_dirs = [],
+              depends = []),
+
+    Extension("zope.interface._zope_interface_coptimizations",
+              ["zope/interface/_zope_interface_coptimizations.c"]),
+
+    Extension("zope.i18nmessageid._zope_i18nmessageid_message",
+              ["zope/i18nmessageid/_zope_i18nmessageid_message.c"]),
+
+    Extension("zope.hookable._zope_hookable",
+              ["zope/hookable/_zope_hookable.c"]),
+
+    Extension("zope.thread._zope_thread",
+              ["zope/thread/_zope_thread.c"]),
+
+    Extension("zope.app.container._zope_app_container_contained",
+              ["zope/app/container/_zope_app_container_contained.c"],
+              include_dirs = [".",
+                              "persistent",
+                              "zope/proxy",
+                              "zope/app/container"],
+              depends = [
+                 "persistent/cPersistence.h",
+                 "zope/proxy/_zope_proxy_proxy.c",
+                 ]),
+
+    ]
+
+# We're using the module docstring as the distutils descriptions.
+doclines = __doc__.split("\n")
+
+setup(name='Zope',
+      author=AUTHOR,
+      version="2.8",
+      maintainer="Zope Corporation",
+      maintainer_email="zope-dev at zope.org",
+      url = "http://www.zope.org/",
+      ext_modules = ext_modules,
+      license = "http://www.zope.org/Resources/ZPL",
+      platforms = ["any"],
+      description = doclines[0],
+      long_description = "\n".join(doclines[2:]),
+      packages = packages,
+      distclass = MyDistribution,
+      )
+
+# The rest of these modules live in the root of the source tree
+os.chdir(BASE_DIR)
+
+IGNORE_NAMES = (
+    'CVS', '.svn', # Revision Control Directories
+    )
+
+def skel_visit(skel, dirname, names):
+    for ignore in IGNORE_NAMES:
+        if ignore in names:
+            names.remove(ignore)
+    L = []
+    for name in names:
+        if os.path.isfile(os.path.join(dirname, name)):
+            L.append("%s/%s" % (dirname, name))
+    skel.append(("../../" + dirname, L))
+
+installed_data_files = [
+    ["../../doc", ['doc/*.txt']],
+    ["../../bin", ['utilities/README.txt']],
+    ]
+
+os.path.walk("skel", skel_visit, installed_data_files)
+
+setup(
+    name='Zope',
+    author=AUTHOR,
+
+    data_files=installed_data_files,
+    scripts=["utilities/mkzeoinstance.py", "utilities/mkzopeinstance.py",
+             "utilities/check_catalog.py", "utilities/load_site.py",
+             "utilities/requestprofiler.py", "utilities/zpasswd.py",
+             "utilities/copyzopeskel.py", "utilities/reindex_catalog.py",
+             "utilities/compilezpy.py", "utilities/decompilezpy.py",
+             "utilities/ZODBTools/timeout.py", "utilities/ZODBTools/analyze.py",
+             "utilities/ZODBTools/checkbtrees.py", "utilities/ZODBTools/fsdump.py",
+             "utilities/ZODBTools/fsrefs.py" , "utilities/ZODBTools/fstail.py",
+             "utilities/ZODBTools/fstest.py", "utilities/ZODBTools/migrate.py",
+             "utilities/ZODBTools/netspace.py", "utilities/ZODBTools/parsezeolog.py",
+             "utilities/ZODBTools/repozo.py", "utilities/ZODBTools/space.py",
+             "utilities/ZODBTools/timeout.py", "utilities/ZODBTools/zeopack.py",
+             "utilities/ZODBTools/zeoqueue.py", "utilities/ZODBTools/zeoreplay.py",
+             "utilities/ZODBTools/zeoserverlog.py", "utilities/ZODBTools/zeoup.py",
+             "utilities/ZODBTools/zodbload.py",
+             "test.py"],
+    distclass=ZopeDistribution,
+    )



More information about the Checkins mailing list