[ANN] Rant 0.3.6

Rant is a flexible build tool written entirely in Ruby,
similar to Rake.

== What's new in this release?

* Automatic cleanup of generated files
* Directed rules
* Constraining variables
* rant-import searches $LOAD_PATH
* Immediately build targets from Rantfiles

I'd appreciate suggestions about new features, names, etc.

== Installing Rant

You can install Rant as a RubyGem:
% gem install --remote rant

or download the package from RubyForge(http://rubyforge.org/frs/?group_id=615)
and install with install.rb:
% ruby install.rb

== More about Rant

The equivalent to a Makefile for make is the Rantfile. An
Rantfile is actually a valid Ruby script that is read by the
rant command.

Rant currently features:
* Defining custom tasks
* Automated packaging, testing and RDoc generation for Ruby
applications and libraries.
* Primitive support for compiling C# sources portably with csc, cscc
and mcs.
* Multiple buildfiles (e.g. one per directory).
* A configure plugin for easy environment and build-parameter
checking (but not like autoconf!) which saves data in a yaml file.
* The rant-import command creates a monolithic rant script,
so you don't depend on an rant installation anymore.

The following Rantfile solves the problem posted by Mark Probert.
Consider the following structure:
Rantfile
foo
src_a/
a_1.c
a_2.c
src_b/
b_1.c
b_2.c
obj/
a_1.o
a_2.o
b_1.o
b_2.o

The Rantfile could look like:

    import %w(directedrule autoclean)
    
    desc "Build foo."
    file :foo => "obj/libfoo.a" do |t|
        sys "cc -o #{t.name} #{t.source}"
    end
    
    gen Directory, "obj"
    
    ro = gen DirectedRule, "obj" => sys["src_*"], :o => :c do |t|
        rac.build "obj"
        sys "cc -c -o #{t.name} #{t.source}"
    end
    
    file "obj/libfoo.a" => ro.candidates do |t|
        sys "ar cr #{t.name} #{t.prerequisites.arglist}"
        sys "ranlib #{t.name}"
    end
    
    desc "Cleanup."
    gen AutoClean, :clean

Running rant:
    % rant --tasks
    rant foo # Build foo.
    rant clean # Cleanup.
    % rant
    mkdir obj
    cc -c -o obj/a_1.o src_a/a_1.c
    cc -c -o obj/a_2.o src_a/a_2.c
    cc -c -o obj/b_1.o src_b/b_1.c
    ar cr obj/libfoo.a obj/a_1.o obj/a_2.o obj/b_1.o
    ranlib obj/libfoo.a
    cc -o foo obj/libfoo.a
    % rant clean
    rm -rf obj
    rm -f foo

== Resources

Current docs:: http://make.rubyforge.org
Rubyforge page:: http://rubyforge.org/projects/make/

···

--
Stefan