Commit e00f4a87 authored by PJ Eby's avatar PJ Eby

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
parent 46eb9e65
# 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
)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment