(I've changed the subject of the thread because I want to move the discussion in a more "general" direction not specific to one build system.)
On Sun, Jul 15, 2012 at 7:53 PM, Anselm R Garbe <garb...@gmail.com> wrote: > The holy make replacement is already there: > > http://man.suckless.org/9base/mk Starting from a minor side note about `mk` (at least the `plan9port` version, but I doubt the one from `9base` doesn't suffer the same problems): it doesn't cope nicely with large, especially generated, make files (i.e. after a few hundred rules)... (But when you want to use them as a "backend" for another generator (like for example `CMake` ore any other "suckless" or "bloatfull" system), you get in a heap of problems... See the thread below for a lengthy discussion...) http://thread.gmane.org/gmane.os.plan9.general/60495/focus=60518 Of course the main purpose of a "make"-like system (like GNU-make, BSD-make, Plan9-mk flavour, etc.) is to make the life easier for the developer to describe build rules, thus focusing more on the user and how "nice" / flexible the syntax is... Thus a general purpose "make" system is actually a single executable which plays multiple roles (although they could have been refactored out in separate tools): A) Configuration system -- although most software uses `autotools` and friends to do this, most "suckless" (and Plan9) tools use Make for configuration by including a `config.mk` (maybe generated or full of conditions). B) Domain specific language -- by allowing the users to provide abstract rules that succinctly describe the process. C) Dependency engine that takes care of the graph and checks the "stale" nodes that need to be "refreshed" (by rebuild). D) Execution engine that creates and monitors processes (maybe in parallel); As such -- if I get the "suckless" definition correctly (but see the P.S.) -- such a tool is far from the original intent because it does all sorts of things instead of doing exactly one correctly... Just for the record I didn't yet find a tool that solves exactly one of those concerns, but I did find `ninja` ( http://martine.github.com/ninja ) to come closer to my vision, by solving only (C) and (D), leaving (A) and (B) for frontends... (Although I would have loved to only solve (C) which is the hardest part, and leave the rest to other specific tools...) Ciprian. P.S.: Everytime I hear "suckless" (or "pythonic", or "the-java-way", or "the-unix-way", or "the-<<favorite tool / language>>-way"), it makes me thing of a dogmatic priest chanting his ritual... And most of the time I have the feeling that people use such a phrase when they can't provide a coherent argument, either for or against something, but they feel in their guts that they are right and thus they must be heard... (I hope nobody feels offended by this remark, and I didn't target anybody in particular. Moreover even myself fall sometimes into this trap...)