summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTarek Ziadé <ziade.tarek@gmail.com>2009-06-29 16:13:39 (GMT)
committerTarek Ziadé <ziade.tarek@gmail.com>2009-06-29 16:13:39 (GMT)
commit3fbcc60eb859b00f4310e028da0ba6edba35f7c8 (patch)
tree6c5e572d2d25899c28ee53e8249d5b9fcc47e123
parent5c3dd9a1ee959d7e85e9b1ab541687dba8f7d095 (diff)
downloadcpython-3fbcc60eb859b00f4310e028da0ba6edba35f7c8.zip
cpython-3fbcc60eb859b00f4310e028da0ba6edba35f7c8.tar.gz
cpython-3fbcc60eb859b00f4310e028da0ba6edba35f7c8.tar.bz2
Fixed 6365: wrong inplace location for build_ext if the extension had dots
-rw-r--r--Lib/distutils/command/build_ext.py8
-rw-r--r--Lib/distutils/tests/test_build_ext.py18
-rw-r--r--Misc/NEWS3
3 files changed, 22 insertions, 7 deletions
diff --git a/Lib/distutils/command/build_ext.py b/Lib/distutils/command/build_ext.py
index 293c214..c2c1bf1 100644
--- a/Lib/distutils/command/build_ext.py
+++ b/Lib/distutils/command/build_ext.py
@@ -643,16 +643,16 @@ class build_ext (Command):
(inplace option).
"""
fullname = self.get_ext_fullname(ext_name)
- filename = self.get_ext_filename(fullname)
+ modpath = fullname.split('.')
+ package = '.'.join(modpath[0:-1])
+ base = modpath[-1]
+ filename = self.get_ext_filename(base)
if not self.inplace:
# no further work needed
return os.path.join(self.build_lib, filename)
# the inplace option requires to find the package directory
# using the build_py command
- modpath = fullname.split('.')
- package = '.'.join(modpath[0:-1])
- base = modpath[-1]
build_py = self.get_finalized_command('build_py')
package_dir = os.path.abspath(build_py.get_package_dir(package))
return os.path.join(package_dir, filename)
diff --git a/Lib/distutils/tests/test_build_ext.py b/Lib/distutils/tests/test_build_ext.py
index 12b8581..5f28b79 100644
--- a/Lib/distutils/tests/test_build_ext.py
+++ b/Lib/distutils/tests/test_build_ext.py
@@ -339,10 +339,9 @@ class BuildExtTestCase(support.TempdirManager,
# inplace = 0, cmd.package = 'bar'
cmd.package = 'bar'
path = cmd.get_ext_fullpath('foo')
- # checking that the last directory is bar
+ # checking that the last directory is the build_dir
path = os.path.split(path)[0]
- lastdir = os.path.split(path)[-1]
- self.assertEquals(lastdir, cmd.package)
+ self.assertEquals(path, cmd.build_lib)
# inplace = 1, cmd.package = 'bar'
cmd.inplace = 1
@@ -358,6 +357,19 @@ class BuildExtTestCase(support.TempdirManager,
lastdir = os.path.split(path)[-1]
self.assertEquals(lastdir, cmd.package)
+ def test_build_ext_inplace(self):
+ etree_c = os.path.join(self.tmp_dir, 'lxml.etree.c')
+ etree_ext = Extension('lxml.etree', [etree_c])
+ dist = Distribution({'name': 'lxml', 'ext_modules': [etree_ext]})
+ cmd = build_ext(dist)
+ cmd.inplace = 1
+ cmd.distribution.package_dir = {'': 'src'}
+ cmd.distribution.packages = ['lxml', 'lxml.html']
+ curdir = os.getcwd()
+ wanted = os.path.join(curdir, 'src', 'lxml', 'etree.so')
+ path = cmd.get_ext_fullpath('lxml.etree')
+ self.assertEquals(wanted, path)
+
def test_suite():
src = _get_source_filename()
if not os.path.exists(src):
diff --git a/Misc/NEWS b/Misc/NEWS
index 752cd32..30e2217 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -337,6 +337,9 @@ Core and Builtins
Library
-------
+- Issue #6365: Distutils build_ext inplace mode was copying the compiled
+ extension in a subdirectory if the extension name had dots.
+
- Issue #6344: Fixed a crash of mmap.read() when passed a negative argument.
- Issue #5230: pydoc would report no documentation found if a module generated