[Python-Dev] distutils 'depends' management
Matteo Bertini
matteo at naufraghi.net
Mon Feb 6 10:35:55 CET 2012
On Fri, Feb 3, 2012 at 5:52 PM, Éric Araujo <merwok at netwok.org> wrote:
> Hi Matteo,
>
> Now setup.py will rebuild all every time, this is because the policy of
>> newer_group in build_extension is to consider 'newer' any missing file.
>>
>
> Here you certainly mean “older”.
>
No, and this is the problem: newer_group(depends, ext_path, 'newer'))
if (some dep is newer than the target): rebuild
> [...] Can someone suggest me the reason of this choice
>>
>
> distutils’ notion of dependencies directly comes from make. A missing
> (not existing) target is perfectly normal: it’s usually a generated file
> that make needs to create (i.e. compile from source files). In this
> world, you want to (re-)compile when the target is older than the
> sources, or when the target is missing.
>
Here is a simple Makefile that has the behavior I was expecting from
distutils too:
$ cat Makefile
all: missing.dep
echo "Done!"
$ make
make: *** No rule to make target `missing.dep', needed by `all'. Stop.
So here your extension module is a target that needs to be created, and
> when distutils does not find a file with the name you give in depends, it
> just thinks it’s another thing that will be generated.
>
So, if I understand correctly, starting today a better name could be
'generates' instead of 'depends'?
This model is inherently prone to typos; I’m not sure how we can improve
> it to let people catch possible typos.
>
Yes, perhaps the name of the list and the explanation in the docs are both
a bit confusing:
http://docs.python.org/distutils/apiref.html#distutils.ccompiler.CCompiler.compile
*depends*, if given, is a list of filenames that all targets depend on. If
> a source file is older than any file in depends, then the source file will
> be recompiled.
Can this be a better explanation? "If a source file is older than any file
in depends {+or if some depend is missing+}"
Cheers
--
Matteo Bertini
http://www.slug.it/naufraghi
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20120206/c0d37653/attachment.html>
More information about the Python-Dev
mailing list