This is an attempt to architect a high-level build.py script in cibuildwheel that all the platforms follow - with then a set of abstract classes/protocols that serve as the platform abstraction layer.
This is clearly an incomplete thought, but there's enough here that persuades me that this isn't a great approach.
- The 'step' abstraction isn't needed on mac/windows, but should we include logging steps for that? We should on linux, but that means that the linux platform is using logger.log as well as the build script. seems like it's getting messy. (Though, that might not be so bad...)
- my head starts to swirl when considering who's in control of the environment on each of these. It feels like I have to split my attention between 3 places - the step adds stuff to the env, the python environment, the build script... that's true in reality currently, but maybe it seems clearer there.
- there's gonna be some messy stuff around the project copy in/wheels copy out steps. the lazy thing to do here would be to copy in to a temp env on mac/windows anyway to match what linux is doing. but that means another copy, and people with big projects don't like that much! (and people that use SCM-based versioning)