python / cpython

The Python programming language
https://www.python.org
Other
63.35k stars 30.34k forks source link

make clean is not enough for out-of-source builds #110704

Open antocuni opened 1 year ago

antocuni commented 1 year ago

Bug report

Bug description:

  1. First, do a regular in-tree build:

    cpython $ ./configure && make
  2. Then, try to make an out-of-tree build:

    cpython $ mkdir debug
    cpython $ cd debug
    cpython/debug $ ../configure --with-pydebug && make
    [...]
    Error: The source directory (..) is not clean
    Building Python out of the source tree (in /home/antocuni/pypy/misc/cpython/debug) requires a clean source tree (/home/antocuni/pypy/misc/cpython/debug/..)
    Try to run: make -C ".." clean
  3. Now, if you try to run a top-level make clean as suggested, it's not enough:

    cpytohn/debug $ make -C ".." clean
    [...]
    cpython/debug $ make
    Error: The source directory (..) is not clean
    Building Python out of the source tree (in /home/antocuni/pypy/misc/cpython/debug) requires a clean source tree (/home/antocuni/pypy/misc/cpython/debug/..)
    Try to run: make -C ".." clean

(I also tried to cd .. && make clean). The problem seems to be that check-clean-src checks for the presence of the ./python binary, which is not removed by make clean: https://github.com/python/cpython/blob/982f1b7d6dc2f13b9607ce092e36e32972e3702c/debug/Makefile#L773-L785

If I remove it manually, the out-of-tree make works as expected

CPython versions tested on:

CPython main branch

Operating systems tested on:

Linux

Linked PRs

SnoopJ commented 11 months ago

I just had this problem while trying to run the WASI build using the script introduced by #112473, running make distclean resolved the problem.

Seems to me that the check target should recommend distclean instead of clean for the reasons you've identified.

brettcannon commented 9 months ago

Do note I put the cleanup under distclean because it was easiest. If someone is motivated enough they could potentially get it moved.

SnoopJ commented 9 months ago

Do note I put the cleanup under distclean because it was easiest. If someone is motivated enough they could potentially get it moved.

I opened #112610 because I think having a more helpful suggestion would probably be enough to resolve confusion for the case I ran into (i.e. hinting the user towards the alternate target they need). I don't know if it would be better to move this cleanup to another target, but the suggestion text is an easy change.