[Haskell-cafe] Re: ANNOUNCE: Coadjute 0.0.1, generic build tool

Matti Niemenmaa matti.niemenmaa+news at iki.fi
Mon Jan 19 07:41:10 EST 2009

Brandon S. Allbery KF8NH wrote:
> On 2009 Jan 18, at 13:47, Matti Niemenmaa wrote:
>>  3. Coadjute keeps track of command line arguments (see docs for
>>     details): for me this is really a killer feature, I don't know of
>>     anything else which does this.
> It's been done many times before; it never seems to catch on.  My 
> personal favorite was Shape (http://user.cs.tu-berlin.de/~shape/) which 
> I used for a few local projects in the late 80s.  SCons is perhaps the 
> most popular tool in this class (and itself a Pythonization of the 
> original Perl Cons; maybe it's time for HCons?), followed by Apache's 
> Ant (I don't think that actually caches command lines or binaries 
> though), then Jam and successors.

Actually, you're right, and I misspoke: I know about SCons and didn't 
like it (see below for brief rant)—Coadjute is the only truly /generic/ 
build tool I knew of which does it.

The main thing I'll mention that turned me off SCons was that it tries 
to do too much stuff automatically: it's very much built around the idea 
that you just give it a filename and it figures out what to do. E.g. 
"foo.hs" and it detects what files it depends on, what Haskell compilers 
you've got, picks one (arbitrarily?), and compiles all the sources into 
a binary.

(On my Windows machine this meant fun delays of multiple seconds prior 
to every build, as it scanned all the directories in PATH for several 
binaries which it never found: looking for various C compilers while I 
haven't even specified C dependencies.)

I found it quite difficult (verbose and non-obvious) and probably 
against its philosophies to just say "here is foo.hs, it depends on 
foo.c, don't do anything else with them and just run the following 
command if foo.hs needs to be built."

To be completely honest I don't like the idea of SCons in itself: it 
seems to be something in between platform-specific tools like Cabal and 
generic ones like make or Coadjute. Maybe I'm just too dense, or maybe 
it's a documentation problem, but it's just not something I'd use for 
pretty much anything. (C/C++ don't really have tools geared specifically 
for them (CMake?) so that might be one case where I would.)

More information about the Haskell-Cafe mailing list