Issue 7115: extension module builds fail when using paths in the extension name (original) (raw)

This change shows a regression (https://bugs.launchpad.net/bugs/449734), the setup.py file might not be correct, but it did work before this change (with plain distutils). Quoting from the report:

Set setup.py file looks like this: setup(name='update-manager', ... ext_modules=[Extension('UpdateManager/fdsend', ['UpdateManager/fdsend/fdsend.c'])], ...

With 2.6.4~rc1 the logs read: copying build/lib.linux-x86_64-2.6/fdsend.so -> /tmp/buildd/update-manager-0.126.1/debian/tmp/usr/lib/python2.6/dist-packages

With 2.6.3: copying build/lib.linux-x86_64-2.6/UpdateManager/fdsend.so -> /home/egon/devel/update-manager/checkout/build-area/update-manager-0.126.1/debian/tmp/usr/lib/python2.6/dist-packages/UpdateManager

So it looks like python is eating a prefix.

http://bugs.python.org/issue7064

is why this change was made.

Reading that, it was done because setuptools assumes that the method is always called with the full dotted name, when it was just being called with the last part of it.

However, update-manager isn't using a dotted module path anyway, it's passing a path.

http://docs.python.org/distutils/setupscript.html#extension-names-and-packages

shows that you would be expected to use

  ext_modules=[Extension('UpdateManager.fdsend',
                         ['UpdateManager/fdsend/fdsend.c'])],

(note . not / in the first line)