You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rh...@apache.org on 2010/02/15 18:23:24 UTC

svn commit: r910271 - /qpid/trunk/qpid/python/setup.py

Author: rhs
Date: Mon Feb 15 17:23:21 2010
New Revision: 910271

URL: http://svn.apache.org/viewvc?rev=910271&view=rev
Log:
backported package_data support to pre 2.4 python

Modified:
    qpid/trunk/qpid/python/setup.py

Modified: qpid/trunk/qpid/python/setup.py
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/python/setup.py?rev=910271&r1=910270&r2=910271&view=diff
==============================================================================
--- qpid/trunk/qpid/python/setup.py (original)
+++ qpid/trunk/qpid/python/setup.py Mon Feb 15 17:23:21 2010
@@ -25,6 +25,7 @@
 from distutils.command.install_lib import install_lib as _install_lib
 from distutils.dep_util import newer
 from distutils.dir_util import remove_tree
+from distutils.dist import Distribution
 from distutils.errors import DistutilsFileError, DistutilsOptionError
 from distutils import log
 from stat import ST_ATIME, ST_MTIME, ST_MODE, S_IMODE
@@ -159,11 +160,80 @@
         log.debug("%s doesn't exist -- can't clean it", self.build_doc)
     _clean.run(self)
 
+if MAJOR <= 2 and MINOR <= 3:
+  from glob import glob
+  from distutils.util import convert_path
+  class distclass(Distribution):
+
+    def __init__(self, *args, **kwargs):
+      self.package_data = None
+      Distribution.__init__(self, *args, **kwargs)
+else:
+  distclass = Distribution
+
 ann = re.compile(r"([ \t]*)@([_a-zA-Z][_a-zA-Z0-9]*)([ \t\n\r]+def[ \t]+)([_a-zA-Z][_a-zA-Z0-9]*)")
 line = re.compile(r"\n([ \t]*)[^ \t\n#]+")
 
 class build_py(preprocessor, _build_py):
 
+  if MAJOR <= 2 and MINOR <= 3:
+    def initialize_options(self):
+      _build_py.initialize_options(self)
+      self.package_data = None
+
+    def finalize_options(self):
+      _build_py.finalize_options(self)
+      self.package_data = self.distribution.package_data
+      self.data_files = self.get_data_files()
+
+    def get_data_files (self):
+      data = []
+      if not self.packages:
+        return data
+      for package in self.packages:
+        # Locate package source directory
+        src_dir = self.get_package_dir(package)
+
+        # Compute package build directory
+        build_dir = os.path.join(*([self.build_lib] + package.split('.')))
+
+        # Length of path to strip from found files
+        plen = 0
+        if src_dir:
+          plen = len(src_dir)+1
+
+        # Strip directory from globbed filenames
+        filenames = [file[plen:]
+                     for file in self.find_data_files(package, src_dir)]
+        data.append((package, src_dir, build_dir, filenames))
+      return data
+
+    def find_data_files (self, package, src_dir):
+      globs = (self.package_data.get('', [])
+               + self.package_data.get(package, []))
+      files = []
+      for pattern in globs:
+        # Each pattern has to be converted to a platform-specific path
+        filelist = glob(os.path.join(src_dir, convert_path(pattern)))
+        # Files that match more than one pattern are only added once
+        files.extend([fn for fn in filelist if fn not in files])
+      return files
+
+    def build_package_data (self):
+      lastdir = None
+      for package, src_dir, build_dir, filenames in self.data_files:
+        for filename in filenames:
+          target = os.path.join(build_dir, filename)
+          self.mkpath(os.path.dirname(target))
+          self.copy_file(os.path.join(src_dir, filename), target,
+                         preserve_mode=False)
+
+    def build_packages(self):
+      _build_py.build_packages(self)
+      self.build_package_data()
+
+  # end if MAJOR <= 2 and MINOR <= 3
+
   def backport(self, input):
     output = ""
     pos = 0
@@ -217,7 +287,7 @@
       if os.path.basename(of) == "amqp.0-10-qpid-errata.xml":
         tgt = "%s.ops.pcl" % of
         if self.force or newer(of, tgt):
-          log.info("preloading %s to %s" % (of, os.path.basename(tgt)))
+          log.info("caching %s to %s" % (of, os.path.basename(tgt)))
           if not self.dry_run:
             from qpid.ops import load_types
             load_types(of)
@@ -238,4 +308,5 @@
                 "build_py": build_py,
                 "build_doc": build_doc,
                 "clean": clean,
-                "install_lib": install_lib})
+                "install_lib": install_lib},
+      distclass=distclass)



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org