[Python-bugs-list] [ python-Bugs-818201 ] distutils: clean -b ignored; set_undefined_options doesn't

SourceForge.net noreply at sourceforge.net
Sun Oct 5 13:37:45 EDT 2003


Bugs item #818201, was opened at 2003-10-05 12:37
Message generated for change (Tracker Item Submitted) made by Item Submitter
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=818201&group_id=5470

Category: Distutils
Group: Python 2.3
Status: Open
Resolution: None
Priority: 5
Submitted By: Nicholas Riley (nriley)
Assigned to: Nobody/Anonymous (nobody)
Summary: distutils: clean -b ignored; set_undefined_options doesn't

Initial Comment:
I reported this on the distutils-sig list and didn't receive 

any response. I'd be happy to provide a patch, but I'm not 

sure which way to go.



<http://mail.python.org/pipermail/distutils-sig/2003-

September/003414.html>



Here's something that I think should work:



% python setup.py --help clean

[...]

Options for 'clean' command:

  --build-base (-b)  base build directory (default: 

'build.build-base')

% python setup.py clean -b ../builds

running clean



Nothing happens.  This works, however:



% python setup.py build -b ../builds clean

running build

running build_py

running build_ext

running config

gcc -E -I/Library/Frameworks/Python.framework/Versions/

2.3/include/python2.3 -o_configtest.i _configtest.c

removing: _configtest.c _configtest.i

running clean

removing '../builds/temp.darwin-6.8-Power_Macintosh-2.3' 

(and everything under it)



The logic to set build_temp from build_base (-b) is only 

present in the build command, not in the clean command.  

The code to set this option runs from 

clean.set_undefined_options.  But it's clean's build_base 

option which is set at the time, not build's, so it 

propagates an empty path.



The test command class I found posted to the distutils-sig 

mailing list has a workaround for the above problem, which 

looks like this:



    def finalize_options(self):

        build = self.distribution.get_command_obj('build')

        build_options = ('build_base', 'build_purelib', 

'build_platlib')

        for option in build_options:

            setattr(build, option, getattr(self, option))

        build.ensure_finalized()

        for option in build_options:

            setattr(self, option, getattr(build, option))



and doesn't call self.set_undefined_options at all, though 

the last three lines could be replaced by it.



There are several solutions I can think of:



- set_undefined_options should be changed to propagate 

set options to

  the source command object before calling 

src_cmd_obj.ensure_finalized.



- another method should be added to the cmd class, which 

does the above

  propagation then calls set_undefined_options.



- a workaround such as the one above should be placed in 

the

  distutils.command.clean.clean class.



Does this make sense?  Unless there's a huge compatibility 

issue, I'd favor the first option, but my experience with 

distutils is limited.

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=818201&group_id=5470



More information about the Python-bugs-list mailing list