To put my money where my mouth is, with @dstufft’s proposal for a
python-path key, I think setuptools would need the following:
requires = 
python-path = "."
build-backend = "selfhost"
It would also need to vendor
wheel (see below).
requires value is empty because it’s not possible to require
wheel without introducing a circular dependency in a case where only source is available. That’s also why setuptools needs to vendor wheel. However, setuptools would not need to ship the vendored wheel code in its own wheel - having the setuptools wheel depend on wheel would be fine. The
selfhost.py file would simply add the local copies of setuptools and wheel to
sys.path and redirect to the normal setuptools backend.
It would also be possible for the
build-backend to be
setuptools.build_meta, if the local copies of both setuptools and wheel are visible from
python-path. But personally, I think that having a
selfhost backend wrapper is a bit clearer.
I think this pattern would be fairly common for self-hosting backends - all dependencies would need to be vendored (or would need to be built with a different backend, although this introduces risk should they change their build process, as noted above) and the self-hosting would be done by a thin wrapper or directly calling the local copy of the code, as above.
If anyone can describe a simpler way of setuptools expressing its build under this proposal, or write up how it would be done under one of the other proposals on the table, then please do.