FYI: CMake was introduced by Erwin Janssen late 2016 for use on Windows where we also have two build systems, CMake and MSBuild. We test both in CI in Appveyor.
I think that the reason you seem to be talking across purposes above may partly be that it is somewhat unclear what the overall philosophy of the build system should be. Should it always try to build as much as possible, given what is installed in the system it runs on, and keep quiet (not fail) on the rest or should it fail when it cannot build something? There seems to be a mixture of these here. Which may also be fine if it’s clear what should be considered essential and cause failure if it cannot be built.
That said, during my work with the Dockerfiles, I would have much more preferred if it failed on everything it couldn’t build because then it would have been much easier to detect if something was missing. What I had to do then was to diff the log files from the (then) existing builds on John’s private runners with those from my Docker runs to see that the same things were built or not built (per platform ). I even made a small tool to do it for me. I still find this cumbersome when making changes to the Dockerfiles.
That said (again), I do realize that such a methodology would not serve end users well. They wouldn’t be able to build anything without errors if they couldn’t build everything. Which nicely leads up to the question you were discussing; should a missing ps2pdf fail the build or not and if so, in what stage? If I’m an end user, I would say No and if I’m a maintainer of Dockerfiles, I would say Yes, as early as possible.
We have to decide (or make it clear if it’s already decided) on the overall philosophy before going into details. If if there was a way (maybe there is) to have the end user way be the default and get the maintainer way as an option, that would be awesome.