[Zodb-checkins] SVN: ZODB/trunk/ Reverted to old setup.py in
preparation for packaging.
Jim Fulton
jim at zope.com
Thu Mar 2 00:08:28 EST 2006
Log message for revision 65714:
Reverted to old setup.py in preparation for packaging.
Changed:
D ZODB/trunk/buildsupport/
U ZODB/trunk/setup.py
-=-
Modified: ZODB/trunk/setup.py
===================================================================
--- ZODB/trunk/setup.py 2006-03-02 05:06:59 UTC (rev 65713)
+++ ZODB/trunk/setup.py 2006-03-02 05:08:28 UTC (rev 65714)
@@ -1,6 +1,6 @@
-#############################################################################
+##############################################################################
#
-# Copyright (c) 2005 Zope Corporation and Contributors.
+# Copyright (c) 2002, 2003 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
@@ -11,37 +11,274 @@
# FOR A PARTICULAR PURPOSE.
#
##############################################################################
+"""Zope Object Database: object database and persistence
+The Zope Object Database provides an object-oriented database for
+Python that provides a high-degree of transparency. Applications can
+take advantage of object database features with few, if any, changes
+to application logic. ZODB includes features such as a plugable storage
+interface, rich transaction support, and undo.
+"""
+
+# The (non-obvious!) choices for the Trove Development Status line:
+# Development Status :: 5 - Production/Stable
+# Development Status :: 4 - Beta
+# Development Status :: 3 - Alpha
+
+classifiers = """\
+Development Status :: 3 - Alpha
+Intended Audience :: Developers
+License :: OSI Approved :: Zope Public License
+Programming Language :: Python
+Topic :: Database
+Topic :: Software Development :: Libraries :: Python Modules
+Operating System :: Microsoft :: Windows
+Operating System :: Unix
+"""
+
+import glob
import os
-import site
import sys
+from distutils.core import setup
+from distutils.extension import Extension
+from distutils import dir_util
+from distutils.core import setup
+from distutils.dist import Distribution
+from distutils.command.install_lib import install_lib
+from distutils.command.build_py import build_py
+from distutils.util import convert_path
-here = os.path.dirname(os.path.abspath(__file__))
-buildsupport = os.path.join(here, "buildsupport")
+if sys.version_info < (2, 3, 4):
+ print "ZODB 3.3 requires Python 2.3.4 or higher"
+ sys.exit(0)
-# 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
+# Include directories for C extensions
+include = ['src']
-import zpkgsetup.package
-import zpkgsetup.publication
-import zpkgsetup.setup
+# Set up dependencies for the BTrees package
+base_btrees_depends = [
+ "src/BTrees/BTreeItemsTemplate.c",
+ "src/BTrees/BTreeModuleTemplate.c",
+ "src/BTrees/BTreeTemplate.c",
+ "src/BTrees/BucketTemplate.c",
+ "src/BTrees/MergeTemplate.c",
+ "src/BTrees/SetOpTemplate.c",
+ "src/BTrees/SetTemplate.c",
+ "src/BTrees/TreeSetTemplate.c",
+ "src/BTrees/sorters.c",
+ "src/persistent/cPersistence.h",
+ ]
-# Note that release.py must be able to recognize the VERSION line.
-VERSION = "3.7.0a0"
+_flavors = {"O": "object", "I": "int", "F": "float"}
-context = zpkgsetup.setup.SetupContext(
- "ZODB", VERSION, __file__)
+KEY_H = "src/BTrees/%skeymacros.h"
+VALUE_H = "src/BTrees/%svaluemacros.h"
-context.load_metadata(
- os.path.join(here,
- zpkgsetup.publication.PUBLICATION_CONF))
+def BTreeExtension(flavor):
+ key = flavor[0]
+ value = flavor[1]
+ name = "BTrees._%sBTree" % flavor
+ sources = ["src/BTrees/_%sBTree.c" % flavor]
+ kwargs = {"include_dirs": include}
+ if flavor != "fs":
+ kwargs["depends"] = (base_btrees_depends + [KEY_H % _flavors[key],
+ VALUE_H % _flavors[value]])
+ if key != "O":
+ kwargs["define_macros"] = [('EXCLUDE_INTSET_SUPPORT', None)]
+ return Extension(name, sources, **kwargs)
-context.walk_packages("src")
-context.setup()
+exts = [BTreeExtension(flavor)
+ for flavor in ("OO", "IO", "OI", "II", "IF", "fs")]
+
+cPersistence = Extension(name = 'persistent.cPersistence',
+ include_dirs = include,
+ sources= ['src/persistent/cPersistence.c',
+ 'src/persistent/ring.c'],
+ depends = ['src/persistent/cPersistence.h',
+ 'src/persistent/ring.h',
+ 'src/persistent/ring.c']
+ )
+
+cPickleCache = Extension(name = 'persistent.cPickleCache',
+ include_dirs = include,
+ sources= ['src/persistent/cPickleCache.c',
+ 'src/persistent/ring.c'],
+ depends = ['src/persistent/cPersistence.h',
+ 'src/persistent/ring.h',
+ 'src/persistent/ring.c']
+ )
+
+TimeStamp = Extension(name = 'persistent.TimeStamp',
+ include_dirs = include,
+ sources= ['src/persistent/TimeStamp.c']
+ )
+
+##coptimizations = Extension(name = 'ZODB.coptimizations',
+## include_dirs = include,
+## sources= ['src/ZODB/coptimizations.c']
+## )
+
+winlock = Extension(name = 'ZODB.winlock',
+ include_dirs = include,
+ sources = ['src/ZODB/winlock.c']
+ )
+
+cZopeInterface = Extension(
+ name = 'zope.interface._zope_interface_coptimizations',
+ sources= ['src/zope/interface/_zope_interface_coptimizations.c']
+ )
+
+cZopeProxy = Extension(
+ name = 'zope.proxy._zope_proxy_proxy',
+ sources= ['src/zope/proxy/_zope_proxy_proxy.c']
+ )
+
+exts += [cPersistence,
+ cPickleCache,
+ TimeStamp,
+ winlock,
+ cZopeInterface,
+ cZopeProxy,
+ ]
+
+# The ZODB.zodb4 code is not being packaged, because it is only
+# need to convert early versions of Zope3 databases to ZODB3.
+
+packages = ["BTrees", "BTrees.tests",
+ "ZEO", "ZEO.auth", "ZEO.zrpc", "ZEO.tests",
+ "ZODB", "ZODB.FileStorage", "ZODB.tests",
+ "Persistence", "Persistence.tests",
+ "persistent", "persistent.tests",
+ "transaction", "transaction.tests",
+ "ThreadedAsync",
+ "zdaemon", "zdaemon.tests",
+
+ "zope",
+ "zope.interface", "zope.interface.tests",
+ "zope.interface.common", "zope.interface.common.tests",
+ "zope.proxy", "zope.proxy.tests",
+ "zope.testing",
+
+ "ZopeUndo", "ZopeUndo.tests",
+ "ZConfig", "ZConfig.tests",
+ "ZConfig.components",
+ "ZConfig.components.basic", "ZConfig.components.basic.tests",
+ "ZConfig.components.logger", "ZConfig.components.logger.tests",
+ "ZConfig.tests.library", "ZConfig.tests.library.widget",
+ "ZConfig.tests.library.thing",
+ ]
+
+scripts = ["src/scripts/fsdump.py",
+ "src/scripts/fsoids.py",
+ "src/scripts/fsrefs.py",
+ "src/scripts/fstail.py",
+ "src/scripts/fstest.py",
+ "src/scripts/repozo.py",
+ "src/scripts/zeopack.py",
+ "src/ZConfig/scripts/zconfig",
+ "src/ZEO/runzeo.py",
+ "src/ZEO/zeopasswd.py",
+ "src/ZEO/mkzeoinst.py",
+ "src/ZEO/zeoctl.py",
+ "src/zdaemon/zdrun.py",
+ "src/zdaemon/zdctl.py",
+ ]
+
+def copy_other_files(cmd, outputbase):
+ # A delicate dance to copy files with certain extensions
+ # into a package just like .py files.
+ extensions = ["*.conf", "*.xml", "*.txt", "*.sh"]
+ directories = [
+ "transaction",
+ "persistent/tests",
+ "ZConfig/components/basic",
+ "ZConfig/components/logger",
+ "ZConfig/tests/input",
+ "ZConfig/tests/library",
+ "ZConfig/tests/library/thing",
+ "ZConfig/tests/library/thing/extras",
+ "ZConfig/tests/library/widget",
+ "ZEO",
+ "ZODB",
+ "ZODB/tests",
+ "zdaemon",
+ "zdaemon/tests",
+ "zope/interface", "zope/interface/tests",
+ "zope/testing",
+ ]
+ # zope.testing's testrunner-ex is not a package, but contains
+ # packages, in a fairly elaborate subtree. Major special-casing
+ # for this. First find all the (non-SVN) directories starting
+ # there, and append them all to `directories`.
+ for root, dirs, files in os.walk("src/zope/testing/testrunner-ex"):
+ dirs[:] = [d for d in dirs if ".svn" not in d]
+ assert root.startswith("src/")
+ normpath = root[4:].replace("\\", "/")
+ directories.append(normpath)
+ for dir in directories:
+ exts = extensions
+ if dir.startswith("zope/testing/testrunner-ex"):
+ # testrunner-ex isn't a package, so not even the .py files
+ # get copied unless we force that there.
+ exts = extensions + ["*.py"]
+ dir = convert_path(dir)
+ inputdir = os.path.join("src", dir)
+ outputdir = os.path.join(outputbase, dir)
+ if not os.path.exists(outputdir):
+ dir_util.mkpath(outputdir)
+ for pattern in exts:
+ for fn in glob.glob(os.path.join(inputdir, pattern)):
+ # glob is going to give us a path including "src",
+ # which must be stripped to get the destination dir
+ dest = os.path.join(outputbase, fn[4:])
+ cmd.copy_file(fn, dest)
+
+class MyLibInstaller(install_lib):
+ """Custom library installer, used to put hosttab in the right place."""
+
+ # We use the install_lib command since we need to put hosttab
+ # inside the library directory. This is where we already have the
+ # real information about where to install it after the library
+ # location has been set by any relevant distutils command line
+ # options.
+
+ def run(self):
+ install_lib.run(self)
+ copy_other_files(self, self.install_dir)
+
+class MyPyBuilder(build_py):
+ def build_packages(self):
+ build_py.build_packages(self)
+ copy_other_files(self, self.build_lib)
+
+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['build_py'] = MyPyBuilder
+ self.cmdclass['install_lib'] = MyLibInstaller
+
+doclines = __doc__.split("\n")
+
+setup(name="ZODB3",
+ version="3.5.0a6",
+ maintainer="Zope Corporation",
+ maintainer_email="zodb-dev at zope.org",
+ url = "http://www.zope.org/Wikis/ZODB",
+ download_url = "http://www.zope.org/Products/ZODB3.5",
+ packages = packages,
+ package_dir = {'': 'src'},
+ ext_modules = exts,
+ headers = ['src/persistent/cPersistence.h',
+ 'src/persistent/ring.h'],
+ license = "ZPL 2.1",
+ platforms = ["any"],
+ description = doclines[0],
+ classifiers = filter(None, classifiers.split("\n")),
+ long_description = "\n".join(doclines[2:]),
+ distclass = MyDistribution,
+ scripts = scripts,
+ )
More information about the Zodb-checkins
mailing list