I go on about this every so often, and a while back posted to my blog about it. I was reminded about it again by a recent article on JoelOnSoftware. I want a tool to build everything for me - installers and all. This tool should be completely automated, and should probably be able to make me a cup of coffee as part of a build - if I wanted it to.
More importantly, this tool must not be batch files or anything too make-like. In the past couple of days, I've evaluated these: scons, tmake, make, ant, nant, FinalBuilder, cons and jam.
Here are my thoughts:
Tmake, SCons, make, cons and jam are all very focused on doing the build bit right (some more than others) and I'm sure they do this well. Unfortunately, most have syntax that is too complicated for casual users, and don't deal too well with the less build-centric tasks such as retrieving code from a source repository, or zipping the build result up. Therefore, I went looking for better stuff.
Ant: Fantastic. So much work has gone into this it's incredible. Unfortunately 1: It's written in Java. Unfortunately 2: This means that everything is java-centric. There is very little support for doing anything non java-related, and this makes it unusable (IMHO) for anything but a java project.
Nant: Hmmm... I want to say fantastic, but I'm left short. I wrote a build script, and it did everything I wanted. It checked my source out of source control, built the project, moved some files around and built the installer. The only problem is it looked a bit like this:
<exec program="cvs...
<exec program="msdev...
<exec program="issc...
Now, I don't know if it's my imagination, but this looks a bit like a glorified batch file to me. Nant just doesn't have the multitude of excellent tasks that ant has, leaving it sorely lacking in the functionality department. Don't get me wrong, I didn't exactly expect it to have a task for building an Inno Setup installer, but CVS should surely be a no-brainer feature. Nant itself is available from CVS! Also, there are some tasks not normally bundled with Nant in the NantContrib project, but these don't even seem to have a nice download page (or any web page for that matter) with the tasks in compiled form.
Also, Nant is too .NET and VS.NET focussed. This could be a fantastic tool if only it diversified away from its .NET roots a bit. Also, offering simple tasks like ones to build .sln or .dsw files would make many build scripts a lot simpler. A task to enable/disable the Platform SDK for those of us building old VC6 projects? Things like this would make it an indispensable tool. I've not given up on Nant yet, but it's only a matter of time if I don't find developing the tasks myself simple enough... I've begun writing a simple VersionInfo updating task - that's right, one which doesn't just update an Assembly Info thingy. Gotta love us old-fashioned (non .NET) windows developers.
FinalBuilder: Lovely product developed in Delphi, which wins it a special place in my heart. It's very fully featured offering lots of exciting capabilities (although I thought that it could possibly fall a bit short in building and dep-checking complicated C++ projects without VS project files). It even has Inno Setup support. However, FinalBuilder is $300 and therefore is not suitable for my open-source software needs.
So to summarise, I didn't find anything that did what I wanted. What I picked was Nant - for now. If I manage to create some productive tasks, then maybe me and Nant will survive fine. Otherwise, I'll be off looking again.
Posted by Simon at January 30, 2003 11:37 PMHi, I'm the SCons project lead, and turned up this page on a search. Thanks for taking a look at SCons and mentioning it here.
I thought you might want to know that, since this entry was written, SCons has added the ability to retrieve code from various types of source code managements systems, and also supports zipping or tarring things very nicely. In fact, because a directory in SCons is an object with dependent children (its contents), just like a file is, you can actually make the .tar or .zip file dependent on the directories that you're going to pack up, and everything gets updated correctly before the archive is created.
If you think Python syntax is too complicated for casual users, sorry, I can't help you there; SCons config files are still Python scripts... :-)
Regardless, if you ever have any more specific feedback about SCons, I'd love to hear from you. Thanks again!
Posted by Steven Knight at May 23, 2003 2:10 AM