Commit a8150bfa authored by Tres Seaver's avatar Tres Seaver

Merge tseaver-retire_zpkg-2.10 branch, removing the use of 'zpkg' in

favor of the "classic" './configure && make && make install' recipe.
parent 0af6314e
# This allows the ZConfig checked out with Zope to be used by the zpkg
# code invoked by setup.py.
#
# If zpkg ever requires a different version of ZConfig than Zope
# provides as part of it's checkout, this file should be replaced by
# an svn:external to the required version.
#
../lib/python
......@@ -38,7 +38,8 @@ usage()
{
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 @@ usage()
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"
......
......@@ -21,6 +21,18 @@ Zope Changes
- 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 @@ Zope Changes
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.
......@@ -10,14 +10,17 @@ RELEASE_TAG=<<VERSION_RELEASE_TAG>>
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 @@ CP=cp
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 @@ default: build
@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 @@ uninstance:
# 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,9 +111,21 @@ version_txt:
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
......
......@@ -17,6 +17,7 @@ import getopt
import os
import sys
import versions
import tempfile
QUIET=0
......@@ -33,7 +34,10 @@ def main():
# 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 @@ def main():
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 @@ def main():
'<<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,
......
# zpkg config file
#
build-application yes
collect-dependencies yes
resource-map Zope2.map
default-collection Zope
# These packages are the Zope 2 components.
#
docutils ../lib/python/docutils
pytz ../lib/python/pytz
zodbcode ../lib/python/zodbcode
zope ../lib/python/zope
# Child packages of Zope are handled separately when constructing Zope
# distributions; this tells where to find all of them.
zope.* ../lib/python/zope/
# These packages are copied from the ZConfig, zdaemon, and ZODB projects:
#
BTrees ../lib/python/BTrees
persistent ../lib/python/persistent
transaction ../lib/python/transaction
ThreadedAsync ../lib/python/ThreadedAsync
ZEO ../lib/python/ZEO
ZODB ../lib/python/ZODB
RestrictedPython ../lib/python/RestrictedPython
ZConfig ../lib/python/ZConfig
zdaemon ../lib/python/zdaemon
AccessControl ../lib/python/AccessControl
Acquisition ../lib/python/Acquisition
App ../lib/python/App
ComputedAttribute ../lib/python/ComputedAttribute
DateTime ../lib/python/DateTime
DocumentTemplate ../lib/python/DocumentTemplate
ExtensionClass ../lib/python/ExtensionClass
Globals ../lib/python/Globals
HelpSys ../lib/python/HelpSys
ImageFile ../lib/python/ImageFile.py
Interface ../lib/python/Interface
Lifetime ../lib/python/Lifetime
MethodObject ../lib/python/MethodObject
Missing ../lib/python/Missing
MultiMapping ../lib/python/MultiMapping
OFS ../lib/python/OFS
Persistence ../lib/python/Persistence
Products ../lib/python/Products
Record ../lib/python/Record
Shared ../lib/python/Shared
Signals ../lib/python/Signals
StructuredText ../lib/python/StructuredText
TAL ../lib/python/TAL
Testing ../lib/python/Testing
ThreadLock ../lib/python/ThreadLock
TreeDisplay ../lib/python/TreeDisplay
ZClasses ../lib/python/ZClasses
ZPublisher ../lib/python/ZPublisher
ZServer ../lib/python/ZServer
ZTUtils ../lib/python/ZTUtils
# we can't call the following item "Zope" because zpkg is
# case-ignorant for collection names and it would conflict with "zope"
# (the items listed here are collections, not packages, although most
# of the times they're the same; here the collection represents a
# top-level module, though)
Zopepy ../lib/python/Zope.py
Zope2 ../lib/python/Zope2
ZopeUndo ../lib/python/ZopeUndo
initgroups ../lib/python/initgroups
nt_svcutils ../lib/python/nt_svcutils
reStructuredText ../lib/python/reStructuredText
tempstorage ../lib/python/tempstorage
webdav ../lib/python/webdav
zExceptions ../lib/python/zExceptions
mechanize ../lib/python/mechanize
ClientCookie ../lib/python/ClientCookie
pullparser ../lib/python/pullparser.py
ClientForm ../lib/python/ClientForm.py
# These packages are the release collections based on the Zope 2
# project; they define what goes into the Zope 2 and related
# releases.
#
Zope ../releases/Zope2
# Things listed here represent features we want to include in the
# distribution.
#
# We'll start with a micro distribution, and add the commented out
# things once we're confident the core is working.
AccessControl
Acquisition
App
ComputedAttribute
DateTime
DocumentTemplate
ExtensionClass
Globals
HelpSys
ImageFile
Interface
Lifetime
MethodObject
Missing
MultiMapping
OFS
Persistence
Products
Record
RestrictedPython
Shared
Signals
StructuredText
TAL
Testing
ThreadLock
TreeDisplay
ZClasses
ZPublisher
ZServer
ZTUtils
# we can't call the following item "Zope" because zpkg is
# case-ignorant for collection names and it would conflict with "zope"
# (the items listed here are collections, not packages, although most
# of the times they're the same; here the collection represents a
# top-level module, though)
Zopepy
Zope2
ZopeUndo
docutils
initgroups
nt_svcutils
reStructuredText
tempstorage
webdav
zExceptions
zope.app
zope.app.apidoc
zope.app.cache
zope.app.dtmlpage
zope.app.introspector
zope.app.mail
zope.app.onlinehelp
zope.app.rdb
zope.app.sqlscript
zope.app.undo
zope.app.zptpage
zope.app.intid
# zope.app.keyreference should be stated as a dependency
# in zope.app.intid/DEPENDENCIES.cfg in Zope 3
zope.app.keyreference
zope.app.session
zope.contentprovider
zope.viewlet
zope.wfmc
zope.app.wfmc
# zope.app depends for us on:
# - ZODB
# - persistent
# - transaction
# - zdaemon
# - zodbcode
# - ZConfig (indirectly)
# - ThreadedAsync (indirectly)
# - ZConfig (indirectly)
# - zdaemon (indirectly)
# - pytz (indirectly)
<load>
README.txt svn://svn.zope.org/repos/main/Zope/tags/*/README.txt
ZopePublicLicense.txt svn://svn.zope.org/repos/main/Zope/tags/*/ZopePublicLicense.txt
bin/mkzopeinstance.py svn://svn.zope.org/repos/main/Zope/tags/*/utilities/mkzopeinstance.py
bin/mkzeoinstance.py svn://svn.zope.org/repos/main/Zope/tags/*/utilities/mkzeoinstance.py
doc svn://svn.zope.org/repos/main/Zope/tags/*/doc/
skel svn://svn.zope.org/repos/main/Zope/tags/*/skel/
utilities svn://svn.zope.org/repos/main/Zope/tags/*/utilities/
</load>
<distribution>
README.txt
ZopePublicLicense.txt
test.py
</distribution>
Metadata-Version: 1.1
Name: Zope
Summary: Zope 2 Application Server
Home-page: http://dev.zope.org/
Author: Zope Corporation and Contributors
Author-email: zope-dev@zope.org
License: ZPL 2.1
Description:
Zope is a web application server.
Platform: Unix
Platform: Windows
Classifier: Environment :: Web Environment
Classifier: License :: OSI Approved :: Zope Public License
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: Unix
Classifier: Programming Language :: C
Classifier: Programming Language :: Python
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
Classifier: Topic :: Software Development :: Libraries :: Python Modules
documentation doc/*.txt
script utilities/*.py
script utilities/ZODBTools/*.py
script zopetest
<data-files .>
skel
</data-files>
#!/usr/bin/env python
##############################################################################
#
# Copyright (c) 2004 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.
# 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.
#
##############################################################################
"""Zope 2 test script
see zope.testing testrunner.txt
$Id: test.py 33303 2005-07-13 22:28:33Z jim $
"""
import os.path, sys
shome = os.environ.get('SOFTWARE_HOME')
zhome = os.environ.get('ZOPE_HOME')
ihome = os.environ.get('INSTANCE_HOME')
if zhome:
zhome = os.path.abspath(zhome)
if shome:
shome = os.path.abspath(shome)
else:
shome = os.path.join(zhome, 'lib', 'python')
elif shome:
shome = os.path.abspath(shome)
zhome = os.path.dirname(os.path.dirname(shome))
elif ihome:
print >> sys.stderr, '''
If INSTANCE_HOME is set, then at least one of SOFTWARE_HOME or ZOPE_HOME
must be set
'''
else:
# No zope home, assume that it is the script directory
zhome = os.path.abspath(os.path.dirname(sys.argv[0]))
shome = os.path.join(zhome, 'lib', 'python')
sys.path.insert(0, shome)
defaults = '--tests-pattern ^tests$ -v'.split()
defaults += ['-m',
'!^('
'ZConfig'
'|'
'BTrees'
'|'
'persistent'
'|'
'ThreadedAsync'
'|'
'transaction'
'|'
'ZEO'
'|'
'ZODB'
'|'
'ZopeUndo'
'|'
'zdaemon'
'|'
'zope[.]testing'
'|'
'zope[.]app'
')[.]']
if ihome:
ihome = os.path.abspath(ihome)
defaults += ['--path', os.path.join(ihome, 'lib', 'python')]
products = os.path.join(ihome, 'Products')
if os.path.exists(products):
defaults += ['--package-path', products, 'Products']
else:
defaults += ['--test-path', shome]
from zope.testing import testrunner
def load_config_file(option, opt, config_file, *ignored):
config_file = os.path.abspath(config_file)
print "Parsing %s" % config_file
import Zope2
Zope2.configure(config_file)
testrunner.setup.add_option(
'--config-file', action="callback", type="string", dest='config_file',
callback=load_config_file,
help="""\
Initialize Zope with the given configuration file.
""")
sys.exit(testrunner.run(defaults))
#!/bin/env python2.4
##############################################################################
#
# Copyright (c) 2004 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.
# 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.
#
##############################################################################
"""Test script to run the unit and functional tests in a Zope installation.
$Id$
"""
import sys, os
here = os.path.dirname(os.path.realpath(__file__))
here = os.path.dirname(here)
if sys.platform in ("win32",):
lib = os.path.join(here, "Lib", "site-packages")
else:
lib = os.path.join(here, "lib", "python")
sys.path.append(lib)
ftesting = os.path.join(here, "zopeskel", "etc", "ftesting.zcml")
import zope.app.tests.test
zope.app.tests.test.FTESTING = ftesting
if __name__ == '__main__':
args = sys.argv[:1] + ["-l", lib] + sys.argv[1:]
zope.app.tests.test.process_args(args)
#############################################################################
#!/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
# Override install_data to install into module directories, and to support
# globbing on data_files.
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'),
)
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)
# 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.
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@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)
# 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
IGNORE_NAMES = (
'CVS', '.svn', # Revision Control Directories
)
import zpkgsetup.package
import zpkgsetup.publication
import zpkgsetup.setup
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']],
]
context = zpkgsetup.setup.SetupContext(
"Zope", "2.8.42", __file__)
os.path.walk("skel", skel_visit, installed_data_files)
context.load_metadata(
os.path.join(here, "releases", "Zope2",
zpkgsetup.publication.PUBLICATION_CONF))
setup(
name='Zope',
author=AUTHOR,
context.walk_packages("lib/python")
context.setup()
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,
)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment