Regarding "make"-systems [Was: Re: [dev] Build system: redo]

From: Ciprian Dorin Craciun <ciprian.craciun_AT_gmail.com>
Date: Fri, 10 Aug 2012 12:48:22 +0300

    (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 <garbeam_AT_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...)
Received on Fri Aug 10 2012 - 11:48:22 CEST

This archive was generated by hypermail 2.3.0 : Fri Aug 10 2012 - 12:00:06 CEST