[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