[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