From e00f4a87ad767db9ff358ffc773365d5929345fa Mon Sep 17 00:00:00 2001 From: PJ Eby Date: Sun, 21 Aug 2005 22:59:57 +0000 Subject: 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.) --HG-- branch : setuptools extra : convert_revision : svn%3A6015fed2-1504-0410-9fe1-9d1591cc4771/sandbox/trunk/setuptools%4041214 --- setuptools/command/build_ext.py | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) (limited to 'setuptools/command/build_ext.py') diff --git a/setuptools/command/build_ext.py b/setuptools/command/build_ext.py index 35a9e63e..a2f2db09 100644 --- a/setuptools/command/build_ext.py +++ b/setuptools/command/build_ext.py @@ -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 + ) + -- cgit v1.2.3