>> Ant is different. Instead of a model where it is extended with shell based >commands, it is >> extended using Java classes. Instead of writing shell commands, the >configuration files >> are XML based calling out a target tree where various tasks get executed. >Each task is run >> by an object which implements a particular Task interface.
Ant is really Java centric, as well as somewhat verbose due to it's XMLness, if i remember correctly from my brief look at it. I'm going to propose something (once I have time to write it up properly[1]) that might look something like this: [pardon the imaginary filenames] use PerlBuild; my @o = Obj( "perl.c", "string.c", "george.c", [ OPTIMIZE => 'MAX', DEFINE => [qw(USEDEVEL THREADS ITHREADS)]]); my $so = SharedLib( "libperl", @o, [ SOVERSION => "6.0.0" ]); InstallFile("/usr/lib/$so", $so ); ... Platform specific defaults would be set somewhere in the build objects, or in platform classes. The values in the DEFINE example above would be replaced by something based on some arrgument, the user wouldn't have to edit the PerlBuildFile, of course. That's the general idea. Things are built out of objects which talk to each other, to build a full description of what to make. Once you have that description, the easy part begins (really), which is getting the proper order and then executing the commands.[2] If anyone else is interested in working on the front end, (with this kind of interface or not) I've got a backend pretty much ready to go.[3] -R [4] Footnotes: [1] Unless this gets shot down now :) [2] This objecty syntax may seem weird to people used to Make, but a few weeks of research at $day_job found that it was very hard to cleanly express cross platform things in a clean Make-like syntax. Make does lots of things really well, but dealing with platform specific things in a clean manner isn't one of them. [3] The current state is that it parses make-like files, does some simple variable substitutions, and thats it. Not based on any pre-existing perl make-code. Oh yes, on unix, it supports a simple parallel building. (i.e. -j) [4] Abusing footnote-mode, and not totally sold that we can't "make make" work for us. (Or a subset of it.)