On Thu, Mar 19, 2015 at 11:13:52PM +0000, Krzysztof KosiĆski wrote:
Comments on the items so far:
- CMake
I would rather use Waf.
Yeah, we know. :-)
My goal was to have us get some hands on experience with CMake in practice, so we could make an informed decision down the road. But I'm hearing a lot of people voicing support for cmake so maybe this would be a good time to hash it out. Then we can do the actual transition at the hackfest.
To me, the key requirements are perhaps less technical:
* Is it widely known? Can we expect distros and businesses using Inkscape to already know it? How likely will new developers coming to the project already know it?
* Will mastery of it benefit the engineer for their work beyond our project? Will it be worthwhile for gsoc students to learn? Will we be able to use the skill in our own day jobs?
* Is it portable to a wide range of systems? At a minimum it should support Windows/OSX/Linux. Mobile (Android/iPhone/Tizen) portability would give us future flexibility.
CMake hits all the points. Automake is ok for the first two but not so much on the third. Waf might be ok on the third (I don't know), and debatable on the second, but definitely fails the first.
In chatting with others on the project, cmake seems to be everyone's general preference. I know kk is passionate for waf; anyone else?
I'd also like to hear if there's anyone who thinks we should *not* change from automake.
CMake has its own, sloppy scripting language; writing anything moderately complex in it is an exercise in frustration. By contrast, Waf scripts can leverage all the mighty power of Python.
I like how with cmake, I find myself naturally compartmentalizing tests, reusing other people's cmake recipes, and in general being a lot more organized in laying out my cmake logic.
Sure, python is a great scripting language, but one could argue if you need a full bore scripting language to build your software, you've got a more serious problem than choice of build systems...
Killer feature: since Waf stores a database of what was compiled, it support wildcards correctly. As in, when the set of files matched by a wildcard in the build script changes, it will automatically recompiles the correct files, without the need to modify build scripts. CMake cannot do this, because it just generates makefiles, and Make cannot support wildcards in this manner because it does not have any persistence beyond what is stored in the file system.
Other things we could easily do with Waf are:
- render test integration
- automatically updating the AUTHORS file and the authors tab in the
About dialog from Bazaar logs
- creating a completely standalone executable (using e.g. GResource to
store data files in the executable itself)
My suspicion is all those things could probably be done one way or another with any build system. ;-)
And by going with cmake, there's a good chance someone's already sorted out how to do it, and we can just reuse their work. ;-)
Bryce