Coadjute is a generic build tool, intended as an easier to use and more portable replacement for make (Wikipedia article). It’s not tailored toward any particular language, and is not meant to replace tools which target a specific environment.
Coadjute is mainly a Haskell library. I intend to eventually provide a binary in the style of xmonad, but I haven’t got that far yet.
Some more advert-y descriptions, straight from the .cabal file:
Portability is striven towards in two ways:
You don’t have to deal with the idiosyncrasies of many make implementations (well, people don’t, but they call their GNU Make files makefiles instead of GNUmakefiles, which causes misunderstandings).
You have Haskell at your disposal, and are encouraged to use that whenever possible instead of system-specific binaries like the POSIX commands we all know and love.
With support for:
- Parallel task performing.
- Advanced out-of-dateness detection:
- Choice between timestamps and hashes.
- Keeping track of what arguments have been passed.
- Haskell!
Obtaining
Assuming you have the cabal-install tool installed and working, the easiest way to obtain Coadjute is with the cabal install Coadjute command.
Otherwise, you can download the source from Hackage, where you can also browse the documentation.
As a last resort, the source package for the latest version, 0.1.1, is also available here:
A changelog is also available for your reading pleasure:
Dependencies
The full list of dependencies, as listed in the .cabal file, is as follows:
base >= 4 && < 4.4array >= 0.1 && < 0.4bytestring >= 0.9 && < 0.10containers >= 0.2 && < 0.5directory >= 1.0 && < 1.2filepath >= 1.1 && < 1.3mtl >= 1.1 && < 2.1old-time >= 1.0 && < 1.1pretty >= 1.0.1 && < 1.1bytestring-csv >= 0.1.2 && < 0.2fgl >= 5.4 && < 5.5pureMD5 >= 0.2.4 && < 2.2safe >= 0.2 && < 0.4utf8-string >= 0.3 && < 0.4
While many of these can be found in any reasonably up-to-date Haskell distribution, some are only available on Hackage or via cabal-install.
History
The project started in January 2008; my oldest “file created” timestamp points to 2008–01–12. I had been using SCons to build my website until then, but got frustrated for a couple of reasons I won’t go into here right now. I decided that it might be fun and useful to build a make-replacement tool of my own; having seen Linus Torvalds’ Google Tech Talk on Git recently I was amused with the idea of writing “something better than anything out there in two weeks”. I also wanted to learn out how dependency resolving and make-like tools in particular work.
The name Coadjute was chosen due to Googleability and the meaning of the word “coadjutor”. I like 8.3 filenames (Wikipedia article) which is why the name of choice for the Coadjute equivalent of makefiles is /not/ Coadjutor.hs but rather Adjutant.hs.
In any case, procrastination won, unsurprisingly enough, and it took over half a year (and still, after over a year, isn’t really done). But I staunchly maintain that it /could/ have been done within two weeks, had I worked for at least 8 hours a day.
(And of course, it’s quite debatable whether it’s “better than anything out there”—but it solves my problem, and hopefully is useful for somebody else as well.)
Anyway, I’ve been using Coadjute to build this website (details of the build process over at About if you’re interested) since 2008–07–19; around a month later I decided it worked relatively well, and cleaned it up a bit and put it in a Mercurial repository. Until October 18 I spent time every now and then fixing bugs, optimizing, and cleaning up the code. On that day I released Glob and began working on an as-yet unreleased library with the secondary goal of getting more speed out of Coadjute. October 19 ended with the last commit in my project history for a few months to come: removing .hgignore after converting the repository to Git.
On 2009–01–17 I decided I’d been taking too long and I might as well get this load off my chest and release Coadjute as version 0.0.1 with “experimental” stability. I’ve never been much of a “release early” kind of guy (although I do believe in “release often”), so this was rather unprecedented.
I started work a bit late in the evening and thus the release was delayed until 2009–01–18 (UTC +0300), but here we are! Amazing.