[Python-checkins] python/nondist/sandbox/setuptools/setuptools/command build_ext.py, 1.2, 1.3

pje@users.sourceforge.net pje at users.sourceforge.net
Mon Aug 22 01:00:08 CEST 2005


Update of /cvsroot/python/python/nondist/sandbox/setuptools/setuptools/command
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19257/setuptools/command

Modified Files:
	build_ext.py 
Log Message:
Make "build_ext --inplace" work sanely w/multiple Python versions and
platforms, by ensuring that the in-place extensions are the right ones for
the currently-running Python, even if they are newer than their sources.
(This, like so many other setuptools fixes and enhancements, should
probably be backported into the distutils as well, although it would have
to be implemented a bit differently.)


Index: build_ext.py
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/setuptools/setuptools/command/build_ext.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- build_ext.py	5 Apr 2004 19:54:44 -0000	1.2
+++ build_ext.py	21 Aug 2005 22:59:57 -0000	1.3
@@ -1,6 +1,41 @@
 # Attempt to use Pyrex for building extensions, if available
 
 try:
-    from Pyrex.Distutils.build_ext import build_ext
+    from Pyrex.Distutils.build_ext import build_ext as _build_ext
 except ImportError:
-    from distutils.command.build_ext import build_ext
+    from distutils.command.build_ext import build_ext as _build_ext
+
+import os
+from distutils.file_util import copy_file
+
+class build_ext(_build_ext):
+    
+    def run(self):
+        """Build extensions in build directory, then copy if --inplace"""
+        old_inplace, self.inplace = self.inplace, 0
+        _build_ext.run(self)
+        self.inplace = old_inplace
+        if old_inplace:
+            self.copy_extensions_to_source()
+
+    def copy_extensions_to_source(self):
+        build_py = self.get_finalized_command('build_py')
+        for ext in self.extensions:
+            fullname = ext.name
+            modpath = fullname.split('.')
+            package = '.'.join(modpath[:-1])
+            base = modpath[-1]
+            package_dir = build_py.get_package_dir(package)
+            dest_filename = os.path.join(package_dir,
+                                        self.get_ext_filename(base))
+            src_filename = os.path.join(self.build_lib,
+                                        self.get_ext_filename(fullname))
+
+            # Always copy, even if source is older than destination, to ensure
+            # that the right extensions for the current Python/platform are
+            # used.
+            copy_file(
+                src_filename, dest_filename, verbose=self.verbose,
+                dry_run=self.dry_run
+            )
+



More information about the Python-checkins mailing list