Issue 1030250: distutils' dry-run wants to create some real build dirs (original) (raw)
[forwarded from http://bugs.debian.org/270127]
When using the distutils to build a python extension module while using the dry-run option the build fails. It goes like this:
frigg:/FEMesh/mesh$ ./setup.py --dry-run build
running build
running build_py
creating build
creating build/lib.linux-sparc64-2.3
creating build/lib.linux-sparc64-2.3/Mesh
copying Mesh/init.py ->
build/lib.linux-sparc64-2.3/Mesh
creating build/lib.linux-sparc64-2.3/Mesh/Delaunay
copying Mesh/Delaunay/init.py ->
build/lib.linux-sparc64-2.3/Mesh/Delaunay
running build_ext
building 'Mesh.Delaunay._qhull' extension
creating build/temp.linux-sparc64-2.3
error: could not create 'build/temp.linux-sparc64-2.3':
No such file or directory
frigg:/FEMesh/mesh$
frigg:/FEMesh/mesh$ DISTUTILS_DEBUG=true ./setup.py
--dry-run build
Distribution.parse_config_files():
options (after parsing config files):
no commands known yet
options (after parsing command line):
option dict for 'build' command:
{}
running build
Distribution.get_command_obj(): creating 'build'
command object
running build_py
Distribution.get_command_obj(): creating 'build_py'
command object
creating build
creating build/lib.linux-sparc64-2.3
creating build/lib.linux-sparc64-2.3/Mesh
copying Mesh/init.py ->
build/lib.linux-sparc64-2.3/Mesh
creating build/lib.linux-sparc64-2.3/Mesh/Delaunay
copying Mesh/Delaunay/init.py ->
build/lib.linux-sparc64-2.3/Mesh/Delaunay
running build_ext
Distribution.get_command_obj(): creating 'build_ext'
command object
building 'Mesh.Delaunay._qhull' extension
creating build/temp.linux-sparc64-2.3
Traceback (most recent call last):
File "./setup.py", line 27, in ?
ext_modules=[module_qhull])
File "/usr/lib/python2.3/distutils/core.py", line
149, in setup
dist.run_commands()
File "/usr/lib/python2.3/distutils/dist.py", line
907, in run_commands
self.run_command(cmd)
File "/usr/lib/python2.3/distutils/dist.py", line
927, in run_command
cmd_obj.run()
File "/usr/lib/python2.3/distutils/command/build.py",
line 107, in run
self.run_command(cmd_name)
File "/usr/lib/python2.3/distutils/cmd.py", line 333,
in run_command
self.distribution.run_command(command)
File "/usr/lib/python2.3/distutils/dist.py", line
927, in run_command
cmd_obj.run()
File
"/usr/lib/python2.3/distutils/command/build_ext.py",
line 269, in run
self.build_extensions()
File
"/usr/lib/python2.3/distutils/command/build_ext.py",
line 395, in
build_extensions self.build_extension(ext)
File
"/usr/lib/python2.3/distutils/command/build_ext.py",
line 460, in
build_extension depends=ext.depends)
File "/usr/lib/python2.3/distutils/ccompiler.py",
line 691, in compile
depends, extra_postargs)
File "/usr/lib/python2.3/distutils/ccompiler.py",
line 417, in _setup_compile
self.mkpath(os.path.dirname(obj))
File "/usr/lib/python2.3/distutils/ccompiler.py",
line 1042, in mkpath
mkpath (name, mode, self.dry_run)
File "/usr/lib/python2.3/distutils/dir_util.py", line
79, in mkpath
raise DistutilsFileError, /FEMesh/mesh$
distutils.errors.DistutilsFileError: could not create
'build/temp.linux-sparc64-2.3': No such file or directory
frigg:
frigg:/FEMesh/mesh$ mkdir build
frigg:/FEMesh/mesh$
frigg:/FEMesh/mesh$ ./setup.py --dry-run build
running build
running build_py
creating build/lib.linux-sparc64-2.3
creating build/lib.linux-sparc64-2.3/Mesh
copying Mesh/init.py ->
build/lib.linux-sparc64-2.3/Mesh
creating build/lib.linux-sparc64-2.3/Mesh/Delaunay
copying Mesh/Delaunay/init.py ->
build/lib.linux-sparc64-2.3/Mesh/Delaunay
running build_ext
building 'Mesh.Delaunay._qhull' extension
creating build/temp.linux-sparc64-2.3
creating build/temp.linux-sparc64-2.3/Mesh
creating build/temp.linux-sparc64-2.3/Mesh/Delaunay
gcc -pthread -fno-strict-aliasing -DNDEBUG -g -O3 -Wall
-Wstrict-prototypes -fPIC -DMAJOR_VERSION=0
-DMINOR_VERSION=1
-I/usr/include/python2.3 -c Mesh/Delaunay/_qhullmodule.c -o
build/temp.linux-sparc64-2.3/Mesh/Delaunay/_qhullmodule.o
gcc -pthread -shared
build/temp.linux-sparc64-2.3/Mesh/Delaunay/_qhullmodule.o
-o
build/lib.linux-sparc64-2.3/Mesh/Delaunay/_qhull.so
frigg:/FEMesh/mesh$
frigg:~/FEMesh/mesh$ ls -R build/ build/: temp.linux-sparc64-2.3
build/temp.linux-sparc64-2.3: Mesh
build/temp.linux-sparc64-2.3/Mesh: Delaunay
build/temp.linux-sparc64-2.3/Mesh/Delaunay:
frigg:/FEMesh/mesh$ rm -rf build/
frigg:/FEMesh/mesh$
This should show it all.
Cheers Floris
The third parameter to mkpath() is 'verbose', not 'dry_run'! Correction is trivial:
Index: Lib/distutils/ccompiler.py
--- Lib/distutils/ccompiler.py (revision 67068) +++ Lib/distutils/ccompiler.py (working copy) @@ -1041,7 +1041,7 @@ return move_file (src, dst, dry_run=self.dry_run)
def mkpath (self, name, mode=0777):
mkpath (name, mode, self.dry_run)
mkpath (name, mode, dry_run=self.dry_run)