]> granicus.if.org Git - python/commitdiff
Merged revisions 73689 via svnmerge from
authorTarek Ziadé <ziade.tarek@gmail.com>
Mon, 29 Jun 2009 16:46:14 +0000 (16:46 +0000)
committerTarek Ziadé <ziade.tarek@gmail.com>
Mon, 29 Jun 2009 16:46:14 +0000 (16:46 +0000)
svn+ssh://pythondev@svn.python.org/python/branches/py3k

................
  r73689 | tarek.ziade | 2009-06-29 18:19:22 +0200 (Mon, 29 Jun 2009) | 9 lines

  Merged revisions 73688 via svnmerge from
  svn+ssh://pythondev@svn.python.org/python/trunk

  ........
    r73688 | tarek.ziade | 2009-06-29 18:13:39 +0200 (Mon, 29 Jun 2009) | 1 line

    Fixed 6365: wrong inplace location for build_ext if the extension had dots
  ........
................

Lib/distutils/command/build_ext.py
Lib/distutils/tests/test_build_ext.py
Misc/NEWS

index 31e036bceb8df7d643299cb366c6966144f590c4..57a110b0d99e853a36056e512851f2e6ea48ec02 100644 (file)
@@ -630,16 +630,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)
index 4ea11a159d6fca3ea49f89b046b1d803c487efbc..fe6009b6175272443deb28f3bc8bb92e52511c2a 100644 (file)
@@ -339,10 +339,9 @@ class BuildExtTestCase(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(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):
index 7e4cd09b55cee7c94a717042eeb17b59ed845d32..59e913b05077e757502b7f9791399c4d807279a3 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -839,6 +839,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 #6287: Added the license field in Distutils documentation.
 
 - Issue #6263: Fixed syntax error in distutils.cygwincompiler.