[CMake-Promote] an anti-cmake rant

Brandon Van Every bvanevery at gmail.com
Tue Jan 15 20:35:58 EST 2008


On Jan 15, 2008 7:30 PM, Alexander Neundorf <a.neundorf-work at gmx.net> wrote:
> On Tuesday 15 January 2008, Brandon Van Every wrote:
> >
> > Is CMake becoming biased towards large projects,
> > and in danger of losing small guys that just want something simple
> > that works?
>
> Where do you see that ?
> add_executable(hello main.c) still works.

I don't think anyone cares about building trivial projects.  I just
see lots of homebrewed build tools by guys who think they have better
ideas about how to build small projects.  I can't see their work
scaling, and I don't think they're really dealing seriously with the
problems of large scale build systems.

> > I mean, I lost Chicken Scheme that way.
>
> Details ?

Ok, I suppose it's been long enough now that I feel free to tell my
version of the story.  It's probably not going to add up to any clear,
"Hmm, CMake needs to do X Y Z."  But "distaste for CMake" was
certainly an underlying problem.

In fairness, Chicken Scheme was a medium-sized project, about 70K
lines of code IIRC.  It didn't have lots of sprawling directory trees,
but it had a fairly intricate bootstrapping, being a compiler.  This
made the project's complexity on par with larger projects in some
respects.

I lost the project mainly because the Chicken Scheme author didn't
really want to deal with CMake.  He wasn't committed to providing
support for MSVC, it wasn't inherently valuable to him.  He tried to
do some assembly stuff, and you will recall giving him some help with
assembly capabilities in CVS.  He never took responsibility for the
fact that he chose to use CVS, and that CMake is an open source
project same as Chicken Scheme.  Rather, the minute he had to lift a
finger to actually do some serious work with CMake, he balked and
started complaining.  I got fed up with the complaining.  He wanted me
to do it all, forever, and that was never my intention.  Especially
when I wasn't "in the loop" about any need for assembly capabilities,
it's just something he ran off and did.

It was entirely a perceived problem; as I told him, there was nothing
stopping him from implementing everything with ADD_CUSTOM_COMMAND.
Previous to Chicken Scheme jettisoning the CMake build, Chicken was
*the* book on how to drive a programming language from
ADD_CUSTOM_COMMAND.  It wasn't for lack of working example code or
passing familiarity, that he chose to blow all this off.

It wasn't because I wrote a bad CMake system.  The whole thing was
well commented and I intended it to be used as a tutorial for other
CMake developers.  I refined that sucker over the course of a man
year.  Every system has a wart here and there, but it was a pretty
clean architecture and I would implement it almost exactly the same
way if I had to do it over again.

It was, simply, he perceived CMake to be a PITA and he didn't want to
deal with it.  He took Chicken Scheme back to handwritten makefiles,
dumping MSVC in the process.  He didn't think any build system was
worth bothering with, whether Automake, CMake, SCons, or whatever.

Maybe I shouldn't try to generalize this case.  He is, after all, a
Scheme developer and that means he has certain prejudices about what
is good or tolerable in a programming language, or a body of code.  "I
want to minimize this!" might be explanation enough.  On the other
hand, he always had a strong pragmatic streak.  Ergo his solution to
his pain.

Another problem is CMake started losing to Autoconf oriented packaging
technologies and source control integrations.  Someone did a Debian
packager, someone did Subversion integration.  I didn't have the
resources to keep up, to singlehandedly do all of that with CMake.
This was a Unix crowd with Unix skillsets.

Anyways, I forced a confrontation about it, because I was tired of
being held back by the perceived need to maintain the Autoconf build
indefinitely.  The CMake build had 6 months of real world field
testing.  It worked fine.  It had no more bugs per unit time than any
well-engineered open source project.  But I'd always be hearing these
ridiculous complaints / excuses that "CMake is buggy."  Heck, seemed
like every single open source project out there got that label, except
Chicken, which had far worse quality control than anything he chose to
criticize.

He was also obsessed with keeping everything around, in order to have
as much reach to weird systems as possible.  Except Windows of course.
 Not weird enough I guess. ;-)

I said I would no longer put up with it, that he was on his own.  And
that the value of my work would be shown by who chooses to pursue it.
I had a naive confidence that various people in the Chicken Scheme
community, who liked this build, really needed Windows support, and
saw how it was clearly better than the Autoconf build, would choose to
use it and keep it going.  After all, I had done the heavy lifting,
and anyone with a sincere desire to use CMake could easily do so.  I
had deliberately designed the system so that if I got hit by a truck,
I wouldn't be needed.

But being the author of Chicken Scheme trumps all of that.  No one was
so interested in CMake, as to stand up to him.  There were no regular
MSVC developers, I was it.  There was a regular Cygwin developer who
was definitely pro-CMake and did lots of good testing work, but of
course on Cygwin he always had the "out" of an Autoconf build.  I
think the reality is, none of these guys wanted to get their hands
dirty with build engineering any more than Chicken's author.

I learned an important political lesson from this.  If you're going to
work with people on a CMake build, make sure they are either (1) fully
committed to cross-platform development, i.e. they're ready and eager
to dump the old cruft, or (2) paying you well, so you don't have to
care what they do with it after your contract is over.


Cheers,
Brandon Van Every



More information about the CMake-Promote mailing list