List:NDB Connectors« Previous MessageNext Message »
From:Monty Taylor Date:January 23 2008 12:23am
Subject:Rev 416: Stupid distutils. Added more methods and I still can't get make distcheck to work. 86ing distutils, but I thought I'd check this in in case w...
View as plain text  
At http://bazaar.launchpad.net/~ndb-connectors/ndb-connectors/devel

------------------------------------------------------------
revno: 416
revision-id:mtaylor@stripped
parent: mtaylor@stripped
committer: Monty Taylor <mtaylor@stripped>
branch nick: devel
timestamp: Tue 2008-01-22 19:22:42 -0500
message:
  Stupid distutils. Added more methods and I still can't get make distcheck to work. 86ing
distutils, but I thought I'd check this in in case we wanted to go backand look at it
later.
modified:
  python/Makefile.am             makefile.am-20070925115907-x2wrdte5kicyfrrw-1
  python/setup.py                setup.py-20071027082659-u3uu8u83f54jtbn4-1
=== modified file 'python/Makefile.am'
--- a/python/Makefile.am	2007-12-10 07:39:46 +0000
+++ b/python/Makefile.am	2008-01-23 00:22:42 +0000
@@ -28,7 +28,7 @@
 	$(SWIG) -c++ -python $(SWIG_OPTS) -o $@ $<
 
 $(builddir)/mysql/cluster/_ndbapi.so $(builddir)/mysql/cluster/_mgmapi.so
$(builddir)/mysql/cluster/_events.so $(builddir)/mysql/cluster/_listeners.so:
$(builddir)/ndbapi.cpp $(builddir)/mgmapi.cpp $(builddir)/events.cpp
$(builddir)/listeners.cpp
-	 CC="${CXX}" CFLAGS="${CFLAGS}" CPPFLAGS="${CPPFLAGS}" LDFLAGS="${LDFLAGS}"
SRCDIR="${srcdir}" TOP_SRCDIR="${top_srcdir}" BUILDDIR="${builddir}"
TOP_BUILDDIR="${top_builddir}" ${PYTHON} $(srcdir)/setup.py build 
--build-base="${top_builddir}/python/build"
+	 CC="${CXX}" CFLAGS="${CFLAGS}" CPPFLAGS="${CPPFLAGS}" LDFLAGS="${LDFLAGS}"
SRCDIR="${srcdir}" TOP_SRCDIR="${top_srcdir}" BUILDDIR="${builddir}"
TOP_BUILDDIR="${top_builddir}" ${PYTHON} $(srcdir)/setup.py build 
--build-base="${top_builddir}/python/build" --src-dir="${srcdir}"
 
 clean-local:
 	${PYTHON} ${srcdir}/setup.py clean

=== modified file 'python/setup.py'
--- a/python/setup.py	2007-12-07 10:40:58 +0000
+++ b/python/setup.py	2008-01-23 00:22:42 +0000
@@ -22,10 +22,127 @@
 
 from distutils.command.clean import clean
 from distutils.command.build import build
+from distutils.command.build_ext import build_ext
+from distutils.command.build_py import  build_py
 from setuptools import setup,Extension
-import os.path, os
+
+from types import ListType, TupleType
+
+import os.path, os, string
 import sys
 
+# distutils doesn't support a src_dir option for out-of-tree builds, 
+# so we're adding one here. 
+
+class ndb_build(build):
+
+  user_options = build.user_options
+  user_options.append( ('src-dir=', None,
+                        "directory holding the source [default: %s]" %
+                        os.curdir ) )
+
+  def initialize_options(self):
+    self.src_dir=None
+    return build.initialize_options(self)
+
+
+class ndb_build_py(build_py):
+
+  user_options = build_py.user_options
+  user_options.append( ('src-dir=', None,
+                        "directory holding the source [default: %s]" %
+                        os.curdir ) )
+
+  def initialize_options(self):
+    self.src_dir=None
+    return build_py.initialize_options(self)
+
+  def finalize_options(self):
+      self.set_undefined_options('build', ('src_dir', 'src_dir'))
+      if self.src_dir is None:
+          self.src_dir = os.curdir
+      return build_py.finalize_options(self)
+
+  # As opposed to all of the other methods, there's no good way to wrap this one
+  def get_package_dir (self, package):
+      """Return the directory, relative to the top of the source
+      distribution, where package 'package' should be found
+      (at least according to the 'package_dir' option, if any)."""
+
+      path = string.split(package, '.')
+
+      if not self.package_dir:
+          if path:
+              return os.path.join(self.src_dir,apply(os.path.join, path))
+          else:
+              return self.src_dir
+      else:
+          tail = []
+          while path:
+              try:
+                  pdir = self.package_dir[string.join(path, '.')]
+              except KeyError:
+                  tail.insert(0, path[-1])
+                  del path[-1]
+              else:
+                  tail.insert(0, pdir)
+                  return os.path.join(self.src_dir,apply(os.path.join, tail))
+          else:
+              # Oops, got all the way through 'path' without finding a
+              # match in package_dir.  If package_dir defines a directory
+              # for the root (nameless) package, then fallback on it;
+              # otherwise, we might as well have not consulted
+              # package_dir at all, as we just use the directory implied
+              # by 'tail' (which should be the same as the original value
+              # of 'path' at this point).
+              pdir = self.package_dir.get('')
+              if pdir is not None:
+                  tail.insert(0, pdir)
+
+              if tail:
+                  return os.path.join(self.src_dir,apply(os.path.join, tail))
+              else:
+                  return self.src_dir
+
+  def check_package (self, package, package_dir):
+
+      if package_dir != "" and not os.path.exists(package_dir):
+          os.makedirs(package_dir)
+      return build_py.check_package(self, package, package_dir)
+
+
+class ndb_build_ext(build_ext):
+
+  user_options = build_ext.user_options
+  user_options.append( ('src-dir=', None,
+                        "directory holding the source [default: %s]" %
+                        os.curdir ) )
+
+  def initialize_options(self):
+    self.src_dir=None
+    return build_ext.initialize_options(self)
+
+  def finalize_options(self):
+      self.set_undefined_options('build', ('src_dir', 'src_dir'))
+      if self.src_dir is None:
+          self.src_dir = os.curdir
+      return build_ext.finalize_options(self)
+
+  def build_extension(self, ext):
+
+      sources = ext.sources
+      if sources is None or type(sources) not in (ListType, TupleType):
+          raise DistutilsSetupError, \
+              ("in 'ext_modules' option (extension '%s'), " +
+               "'sources' must be present and must be " +
+               "a list of source filenames") % ext.name
+
+      new_sources = []
+      for source in sources: 
+          new_sources.append(os.path.join(self.src_dir,source))
+      ext.sources = new_sources
+      return build_ext.build_extension(self, ext)
+
 srcdir=os.environ.get("SRCDIR",".")
 top_srcdir=os.environ.get("TOP_SRCDIR","..")
 builddir=os.environ.get("BUILDDIR",".")
@@ -54,7 +171,11 @@
       platforms="linux",
       license="GPL",
       classifiers=filter(None, classifiers.splitlines()),
-
+      cmdclass = {
+        'build': ndb_build,
+        'build_ext': ndb_build_ext,
+        'build_py': ndb_build_py,
+        },
       ext_modules=[
                     Extension("mysql.cluster._mgmapi",
                               sources=["mgmapi.cpp"],

Thread
Rev 416: Stupid distutils. Added more methods and I still can't get make distcheck to work. 86ing distutils, but I thought I'd check this in in case w...Monty Taylor23 Jan