2011/6/10 Jon Cruz <jon@...18...>:
Among the issues is that CMake is well established, while Waf is a bit newer and still getting going.
So is Autotools, but I think we all agree that it sucks badly.
CMake has a larger development team, while Waf is mainly a one-man project.
That's true but it's rather easy to get commit access. Actually I have commit access to Waf.
There is a much larger community for CMake of people who can lend a hand or help us with it in general.
Waf is simple enough that I figured it out all on my own, though I admit the depth of documentation not as good as CMake.
Waf was extending then replacing SCons. Many consider the architecture to be sub-optimal from that.
Waf is an entirely different architecture that addresses most of the shortcomings of SCons, in particular its performance on large builds is far better than SCons or Autotools.
Many people consider that Waf exposes an entire general purpose language to be a negative as opposed to a positive. (this point is probably open for discussion)
Sooner or later there will be a task that requires you to use some "general purpose" feature like arrays, and you will end up either calling an external program or adding a clumsy scripting language to the build system. CMake is the perfect example: its programming constructs are annoyingly weak and tedious to use. Providing full access to Python is the least evil way of solving this problem: we have many extensions written in Python, so there's no overhead involved in learning an extra language just for the build system like there is with Autotools and CMake, and all the features are there in case we ever need them.
Waf and it's proponents point out that CMake doesn't support "distclean" as a negative. CMake, on the other hand, points out that needing to have "distclean" to begin with is a negative.
"distclean" in Waf basically removes the build directory and the hidden wafpickle file, so it's only a shortcut.
CMake was picked up by Scribus among other related projects.
Waf was picked up by Ardour, Samba and JACK. http://code.google.com/p/waf/wiki/ProjectsUsingWaf
We have both key people from CMake and people from using projects such as Scribus volunteering to help us move to and maintain a CMake build. (Ongoing support of a system is probably a key factor)
The CMake system is festering in the trunk for a few years and nobody stepped up to bring it to feature parity with Autotools. Meanwhile I added several features not present in the Autotools system (such as support for separate debugging symbols for all platforms) working alone, with some occasional help from the maintainer.
CMake can create 'native' build results so that one can use Dev Studio on windows, XCode on Mac, etc.
Waf can also use the Microsoft compilers, Intel C++ Compiler, and XCode GCC, though it doesn't generate things such as Visual Studio workspaces.
And finally one of the biggest blockers is that the person in charge of Waf has stated that some changes we need will not be accepted into Waf. So if we do want to use it we will end up having to fork and maintain our own custom branch of the project. That in and of itself will be a large burden over even a short bit of time.
These changes appeared in Waf 1.6 as far as I can tell, in particular there is support for Python 2.x. Dropping support for Python 2.x in Waf 1.6 was my main beef with this project, but the maintainer reconsidered this idea.
I don't want to push this against everyone, but I have worked a bit with all relevant build systems (Autotools, CMake, Waf) and I think Waf is the easiest one to use, and also the least complex. Autotools is a convoluted mess that barely works and I doubt anyone understands it. CMake would be good if its scripting language wasn't so completely useless.
Regards, Krzysztof