COFFEE is an experiment in using CMake (http://www.cmake.org/) to build Tcl and Tcl extensions.
The project goals are:
- To develop a working prototype build chain for Tcl on WIN32 that can demonstrate equivalent or superior capabilities to the existing Nmake/MSVC or Autotools options for that platform, while being simpler to maintain.
- To develop a working prototype build chain for Tcl extensions (in particular STUBS-enabled extensions) on WIN32 and other platforms that can replace TEA (http://www.tcl.tk/doc/tea/) as a simple approach to supporting extensions on multiple platforms.
This project has arisen from:
- The many missing or out-of-date build files for WIN32 in many Tcl-related sources, especially extensions. Many Tcl extensions receive little active maintenance and even when fixes or updates are submitted it can take a long time for them to appear in the source tree.
- A tendancy for developers not based on Windows to encourage use of the GNU toolchain on WIN32 (cygwin/msys), and to treat the native compilers (including Microsoft's free MSVC8+ compilers) as second-class citizens.
- Keeping the MSVC Nmake/dsp support for TEA-based extensions up-to-date requires a fair amount of work, and out-of-date build files often prevent extensions from being built with the latest compilers (MSVC8+).
- Cases in point: it took several months for Nmake build problems in Threads
and SampleExtension to be fixed for MSVC8 support during the Tcl 8.5 alpha
and beta cycles, even after bugs and patches were submitted.
Useful extensions like memchan and trf lack MSVC dsp files; trf follows TEA on *nix but not on WIN32 and lacks MSVC8+ support (plus uses hard-coded paths in the Nmake file).
- In short, Windows-based developers will often encounter extensions that do
not build on their system without some modification to the build file(s).
Time is wasted learning to support the build chain rather than working in
a familiar and productive environment (like the MSVC IDE).
This is an obstacle for WIN32 development and support of Tcl and Tcl extensions.