Quantcast
Channel: e-TOBI.net : Tag mono, everything about mono
Viewing all articles
Browse latest Browse all 5

Searching for the holy grail of build systems

$
0
0

For my new OpenSource project "altdotnet.org", which is about making OSS from the Microsoft .NET world available to Linux/Mono, I have to decide now, which build system to use. There's a bunch of build tools to be considered: NAnt, Autotools, CMake, SCons, Waf, Rant, Rake, Waf.

While NAnt is more or less the only tool, which may already be used by the original author in the Microsoft .NET world, it's not simply portable to Linux/Mono. Often NAnt is just used to simply run msbuild on the project files or solutions. But the msbuild counterpart on Mono isn't very actively maintained and doesn't support VisualStudio 2008 yet. Besides this NAnt is too much XML for my taste.

Autotools seems to be the preferred approach on Linux. A quick scan for *.dll's in the Debian project showed, that most of these packages use Autotools for building Mono libs and applications. When I asked someone from the Debian Mono packaging project, how to package something using Nant, he also advised me, to go with a plain Makefile and Autotools instead. Monodevelop can create the required Autotools files and takes cares of all the dirty details, so this is not so hard to get going. But I'm not a big Autotools fan. I love it as a user, when ./configure and make just work out of the box, but as a Maintainer I hate Autotools, because I never fully understood, how everything really works inside.

CMake and the Python based SCons offer an alternative to the Autotools. Both don't really come with any native support for C#/Mono, but can easily be used for this. CMake is used within the KDE bindings to build Mono libs and a quick search for Scons brought up at least two projects (Diva and DCSharp) using it for building Mono applications. So there is plenty of sample code available to getting started with. While CMake uses it's own macro language and SCons is plain Python, the learning curve for CMake is probably a little bit steeper. But while looking at the above mentioned samples, I could understand most of the CMake and SCons code out of the box, so this probably isn't much of an issue.

Waf is an SCons spin-off, but it isn't available on Debian yet and I couldn't find any projects targeting Mono, that use Waf.

The ruby based build tools Rant and Rake don't have any native support for building Mono applications as well. While Rant surely is a nice tool, it seems to suffer from a lack of support. Upstream development seems to be stalled. There hasn't been a single commit in over a year. The Rake development seems to be much more active, so I would probably prefer this. Besides this I've already used Rake for small C++ toy projects and of course for Ruby projects, so I'm kinda familiar with it. But there doesn't seem to be any projects (besides IronRuby) that decided to use Rake, so I would more or less have to build everything from ground up.

There are also other interesting build tools out there (like e.g. the Boo Build System, formerly known as "Boobs"), which I simply haven't considered, just because of their low popularity. As a Debian maintainer I prefer a "grown up" and well supported build system, which is already included in the Distribution and surely other distribution maintainers do so as well. So to make distribution packaging as easy as possible, I'll stick with one of the major build tools.

Currently CMake, SCons and Autotools are on the shortlist. If I haven't missed any cool "Off Broadway" tools, it will be one of these. I'll probably give CMake and SCons a try and then decide, if one of them works well enough for my needs to avoid Autotools.


Viewing all articles
Browse latest Browse all 5

Trending Articles