waf build doesn't make some of the python stuff
Eric S. Raymond
esr at thyrsus.com
Fri Dec 30 15:40:16 UTC 2016
Hal Murray <hmurray at megapathdsl.net>:
> > I can't reproduce this. I saw it a few times when you first reported it,
> > pushed a fix, and haven't seen it since.
> Here is my recipe.
> git clone <your-local-copy> foo
> cd foo
> ./waf configure build
> cd ntpclients
> I get:
> [murray at hgm ntpclients]$ ./ntpq
> ntpq: can't find Python NTP library -- check PYTHONPATH.
> No module named control
> [murray at hgm ntpclients]$
> ./waf check says:
> [104/109] Processing /home/murray/ntpsec/foo/pylib/control.py:
> wafhelpers/pythonize-header include/ntp_control.h -> pylib/control.py
> [105/109] Processing /home/murray/ntpsec/foo/pylib/magic.py:
> wafhelpers/pythonize-header include/ntp.h -> pylib/magic.py
> [106/109] Processing /home/murray/ntpsec/foo/pylib/version.py,/home/murray/ntp
> sec/foo/wafhelpers/.autorevision-cache: VERSION wafhelpers/autorevision.sh ->
> pylib/version.py wafhelpers/.autorevision-cache
That was useful. I have just learned the following crucial thing:
It's not necessary to do ./waf check to get the missing stuff made. A second
./waf build will do it.
Knowing this reduces my confusion a lot. It explains why I couldn't
reproduce - I have a reflex that I do ./waf build on import failuree,
trained into me by having to do it every time I mod the Python sources
(I have to do this to get the new .pyc into the build directory where
the magic link will see it).
Also I was going nuts trying to figure out what could be special about
waf check. There just isn't any there there! So, the answer: waf check
isn't special, it's the side effect of forcing a second build that was
filling the hole.
I now have two conjectures to investigate:
1. This problem is due to some kind of undeclared order constraint in the recipe.
Or possibly a waf bug, though I think an undeclared order constraint is much more
2. I think it has something to do with waf distclean not cleaning completely.
If the things it doesn't remove are left in place, the bug does not manifest.
I also know an acceptable workaround for the point release. I'm going to
add a note to INSTALL that if you hit Python import problems ./waf build
will fix them, and promise that will be fixed in a future release. Then,
if I can't fix this in a couple of hours, I'll give Mark the all-clear
to ship anyway.
Still working on your other build problem, too.
The problem underlying both is that our waf recipe has grown over-complex
and needs to be simplified.
<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>
More information about the devel