On 2012/12/07 10:37 AM, Jos Decoster wrote:
On Fri, Dec 7, 2012 at 9:23 AM, Harald Oehlmann <harald.oehlmann@elmicron.de> wrote:

How does the CMAKE build work ?
Should we pass from nmake to cmake ?

If Tcl would build on all platforms with cmake, I'd agree to let the nmake build go. Otherwise cmake would be yet another build method.
I'd really like to convince you that CMake should replace NMake for Windows only (thus not 'another').

A cross-platform cmake build by comparison would be 'another' build method to maintain, because I can't see everyone agreeing to drop autoconf.

I've looked at the work that Clifford Yapp has done on a cross-platform CMake build (http://www.tclcommunityassociation.org/wub/proceedings/Proceedings-2011/CliffordYapp/tcltk_cmake_paper.pdf) and it's really good, but it tries to shoehorn the Windows build into a Unix model, and in doing so it reproduces a bunch of the complexity and problems of the current (autoconf + NMake) approach.

The build - and particularly the install - needs of Windows are different from *nix.  You _can_ support both in one build system, but when you do you end up complicating the *nix build and getting an un-Windowsy result on Windows.  You also end up with frequent breaks of the Windows build when developers on a *nix platform make non-trivial updates to the build files (and that's a problem in Tcl where there are relatively few developers building on Windows).

The main reason why I started work on a CMake build was to be able to build Tcl extensions.  Tcl went through about a four-year period of chronic build failures on Windows (from 2007 to 2011 I could not once check out HEAD/trunk from Tcl, Tk, Itcl, Thread and get a successful build+install using NMake), and many other extensions had woefully out of date NMake support (or none at all).  I'm no stranger to NMake, but getting an extension building and installing with it is not a task for the faint of heart. Even maintaining an NMake build over time is tricky.

I wanted something that I could easily use to get extensions building, and that would be easy for a non-Windows developer to set up (with a high chance of success).  That is why Coffee (my CMake builds) focuses on _really simply_ CMakefiles and targets Windows only.  The CMakefile feels more like a config.in than a Makefile.in.  You can't achieve that level of simplicity in a cross-platform build.

TL;DR: replace NMake with CMake, then we have the same number of supported build methods, but the build is easier to maintain on Windows and supports more compliers.