Rewrite setup.py for smoother builds and more platforms

Administrator
2023-03-20T18:21:37Z

*Created by: danielballan*

Hi Mike,

I just got back from [SciPy 2014](https://conference.scipy.org/scipy2014/) in Austin, where a major theme was the python "build problem," the difficulty of installing packages with non-Python dependencies. Software developers from Microsoft, Enthought, and ContinuumIO were there all week helping us make progress. I spent the last two days in a room with people writing reliable recipes for building difficult packages. The community is generally rallying around conda's build recipes and binary installers, in conjunction with [binstar](https://binstar.org), as a solution. ([Hashdist](http://hashdist.github.io/) is also doing good work in this area.) I'd like to be able to `conda install ffmpeg` and `conda install av` on all three platforms. (I'm not a Windows user, but a lot of my scientific collaborators are.)

There were also many people doing imaging work -- the scikit-image lead devs were there -- and I promoted PyAV as the far-and-away best solution for getting video into Python. Scikit-image recently dropped their support for video because OpenCV is so problematic. I'd like to see scikit-image adopt PyAV as a dependency. Your approach is the right the one, and no one else has put in the work to do this right.

To get wider adoption, I think PyAV needs a more standard `setup.py`. This is my attempt to simplify it. Some notes:
- I am working off of v0.1 for simplicity. I can rebase on your `master` later.
- Did `pip install av` ever actually work? It has never worked for me. It seems like `make` was required. My revised `setup.py` does not need the `Makefile`. I'm envisioning that you might keep `Makefile` for all its testing capabilities, but that a basic install would never touch it.
- If the build encounters a problem like a missing library, I think it should raise informatively, not just print a message and continue. It was confusing to have builds finish "successfully" only to error on import because, say, `_core.so` wasn't built.
- This draft of a simpler `setup.py` does not handle `PYAV_HAVE...` headers. I'll need to add that, I know.

Sorry for the long-winded message. Are you receptive to this kind of change? I'm no build expert, but I think there is enough interest and support in the community to work toward a reliable cross-platform build.