After seriously diving into my pet Erlang project, I found myself clinging to Rake to do my builds. It was kind of unsatisfying though, especially once my builds became more complicated (hooray for code-generated parsers, leex/yecc). Why can we have Erlangs all the way down? Futhermore, OTP provides most of the build steps you’d wanna do to an Erlang project, like generating documentation, running tests, and of course compilation. However, there was no nice script to tie them all together, so I wrote Merlke, a native Erlang build tool. (The name is a bastardization of Make and Erl)
Initially I had Merlke require a build file (merlkefile.erl) but I noticed that the vast majority of Erlang projects followed the same file and directory name conventions, so I just provided reasonable defaults for Merlke, letting you override them if you want with a merlkefile.
You can run Merlke like this:
merlke test edoc
Which will execute the test task’s dependencies, the test task, the edoc task’s dependencies, and the edoc task, in that order. If a dependency has been run earlier, it won’t be run again. This is all basic dependency-based programming ala make/rake/ant etc.
Right now it’s just a static set of tasks defined, but I hope to be able to let you create your own tasks and dependencies. Also, the dialyzer and dist (release) tasks aren’t implemented yet. I’ll implement those once I figure out how they work. Patches welcome.