<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7652.24">
<TITLE>RE: [CMake] improve the CMake language?</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/plain format -->
<P><FONT SIZE=2>Tcl is a nice language for implementing declarative commands. It can be easily built on about every platform out there, and the language rules are well known. It is small, and very easy to compile a standalone Tcl based interpreter with the CMake commands built in. The user would not need to have any language installed, you could package the source with CMake or make it part of the cmake binary you distribute. It is freely distributable and has a BSD license.<BR>
<BR>
add_library(foo SHARED foo.cxx)<BR>
<BR>
could become<BR>
add_library {foo SHARED foo.cxx}<BR>
<BR>
or even<BR>
add_library -name foo -type SHARED foo.cxx<BR>
<BR>
Please see:<BR>
<A HREF="http://en.wikipedia.org/wiki/Tcl">http://en.wikipedia.org/wiki/Tcl</A><BR>
<BR>
for a description of this language. It would be very easy to implement a macro as a procedure.<BR>
<BR>
<BR>
I would be happy to participate in any effort to port the cmake commands to a Tcl interpreter. Please let me know if you are interested.<BR>
<BR>
Regards,<BR>
<BR>
Juan<BR>
<BR>
<BR>
<BR>
-----Original Message-----<BR>
From: cmake-bounces+juan.sanchez=amd.com@cmake.org on behalf of Bill Hoffman<BR>
Sent: Thu 11/1/2007 8:03 PM<BR>
To: Brandon Van Every<BR>
Cc: cmake@cmake.org<BR>
Subject: Re: [CMake] improve the CMake language?<BR>
<BR>
Brandon Van Every wrote:<BR>
<BR>
> My concern is that if the status quo is maintained, CMake script will<BR>
> always be ugly to program with. This will put it at a disadvantage<BR>
> compared to build systems written in Python, Ruby, or Perl. I'm not<BR>
> just talking about SCons and so forth. I'm talking about a shop<BR>
> deciding, hey, screw this off-the-shelf stuff, we'll write our own<BR>
> custom build system in our favorite scripting language. It happens in<BR>
> the game industry all the time.<BR>
><BR>
> Your thoughts?<BR>
><BR>
><BR>
<BR>
CMake is a build system. In an ideal world, the language would be<BR>
purely declarative. Basically, you would describe things you want to<BR>
build, and CMake would build them. In practice, this is too<BR>
restrictive, and a small amount of programming makes things easier. I<BR>
never wanted CMake to replace perl, ruby, python or any other language.<BR>
I wanted CMake to not depend on another language being installed. CMake<BR>
only depends on a C++ compiler being around, so CMake can be built.<BR>
Since CMake was developed for ITK (a c++ toolkit), I was adding no<BR>
additional restrictions to the build process. The scripting stuff<BR>
actually came out of a desire to automate the testing system without the<BR>
use of tcl as was required in earlier version of Dart. I am sure the<BR>
CMake language will be tweaked here and there, but if you have a big<BR>
programming job that has nothing to do with building software, then<BR>
CMake is the wrong choice.<BR>
<BR>
So, I think that if something is hard to build because of the CMake<BR>
language, then we should fix it. People should use CMake because it is<BR>
really easy to build complex things with, and not because it has a great<BR>
language. The hard stuff should be done in C++ commands.<BR>
<BR>
For example, this small line of CMake code:<BR>
<BR>
add_library(foo SHARED foo.cxx)<BR>
<BR>
does some very complicated stuff as it builds shared libraries on many<BR>
platforms, and different IDE's. And most of that is not done with the<BR>
CMake language, it is done with the more powerful C++ language. BTW, I<BR>
hope this does not become a long discussion, but I am sure it will...<BR>
<BR>
<BR>
-Bill<BR>
<BR>
_______________________________________________<BR>
CMake mailing list<BR>
CMake@cmake.org<BR>
<A HREF="http://www.cmake.org/mailman/listinfo/cmake">http://www.cmake.org/mailman/listinfo/cmake</A><BR>
<BR>
<BR>
<BR>
</FONT>
</P>
</BODY>
</HTML>