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,
distutils.errors.DistutilsFileError: could not create 'build/temp.linux-sparc64-2.3': No such file or directory frigg:
/FEMesh/mesh$

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):

class CCompiler