= RAKE -- Ruby Make 

Supporting Rake version: 0.7.x

This package contains Rake, a simple ruby build program with
capabilities similar to make.

Rake has the following features:

* Rakefiles (rake's version of Makefiles) are completely defined in
  standard Ruby syntax.  No XML files to edit.  No quirky Makefile
  syntax to worry about (is that a tab or a space?)

* Users can specify tasks with prerequisites.

* Rake supports rule patterns to sythesize implicit tasks.

*  Flexible FileLists that act like arrays but know about manipulating
   file names and paths.

* A library of prepackaged tasks to make building rakefiles easier.


== Download

The latest version of rake can be found at

* http://rubyforge.org/project/showfiles.php?group_id=50

== Installation

=== Normal Installation

You can install rake with the following command.

  % ruby install.rb

from its distribution directory.

=== GEM Installation

Download and install  rake with the following.

   gem install --remote rake

=== Running the Rake Test Suite

If you wish to run the unit and functional tests that come with Rake:

* CD into the top project directory of rake.
* Type one of the following:

     rake                  # If you have a version of rake installed
     ruby -Ilib bin/rake   # If you do not have a version of rake installed.

== Online Resources

== Rake References

* Rake Documentation Home: http://docs.rubyrake.org
* Rake Project Page: http://rubyforge.org/projects/rake
* Rake API Documents: http://rake.rubyforge.org

== Presentations and Articles about Rake

* Jim Weirich's 2003 RubyConf presentation: http://onestepback.org/articles/buildingwithrake/
* Martin Fowler's article on Rake: http://martinfowler.com/articles/rake.html

=== Road Map

* If you want to see how to invoke rake to build your projects, read on.
* If you want to see the format of a Rakefile, see
  doc/rakefile.rdoc[http://rake.rubyforge.org/files/doc/rakefile_rdoc.html].
* If you want to see the original announcement of rake, see
  doc/rational.rdoc[http://rake.rubyforge.org/files/doc/rational_rdoc.html].
* If you want to see a glossary of terms, see
  doc/glossary.rdoc[http://rake.rubyforge.org/files/doc/glossary_rdoc.html].

== Simple Example

Once installed, you can run rake as follows ...

  % rake [options ...]  [VAR=VALUE ...]  [tasks...]

Type "rake --help" for an up-to-date option summary.

Invoking <tt>rake</tt> without any options or targets causes rake to
look for a rakefile and invoke the default task in that rakefile.

For example, given a simple rakefile like this ...

  task :default => [:test]

  task :test do
    ruby "test/unittest.rb"
  end

The command 

  $ rake

will invoke the +default+ task.  As +default+ satisfies its
prerequisites, the +test+ task will run the unit tests for the
package.

== Other Make Reinvisionings ...

Rake is a late entry in the make replacement field.  Here are links to
other projects with similar (and not so similar) goals.

* http://directory.fsf.org/bras.html -- Bras, one of earliest
  implementations of "make in a scripting language".
* http://www.a-a-p.org -- Make in Python
* http://www.aromatic.com/tools/jam.txt -- JAM, Java Automated Make
* http://ant.apache.org -- The Ant project
* http://ppt.perl.org/commands/make/index.html -- Make from the Perl
  Power Tools implementation.
* http://search.cpan.org/search?query=PerlBuildSystem -- The Perl Build System
* http://make.rubyforge.org -- Rant, another Ruby make tool.

== Credits

[<b>Ryan Dlugosz</b>] For the initial conversation that sparked Rake.

[<b>nobu.nokada@softhome.net</b>] For the initial patch for rule support.

[<b>Tilman Sauerbeck <tilman@code-monkey.de></b>] For the recursive rule patch.

== License

Rake is available under an MIT-style license.

:include: MIT-LICENSE

== Support

The Rake homepage is http://rake.rubyforge.org.  You can find the Rake
RubyForge page at http://rubyforge.org/projects/rake.

Feel free to submit commits or feature requests.  If you send a patch,
remember to update the corresponding unit tests.  If fact, I prefer
new feature to be submitted in the form of new unit tests.

For other information, feel free to ask on the ruby-talk mailing list
(which is mirrored to comp.lang.ruby) or contact
mailto:jim@weirichhouse.org.

----

= Usage

Rake is invoked from the command line using:

   % rake [<em>options</em> ...]  [<em>VAR</em>=<em>VALUE</em>]  [<em>targets</em> ...]

Options are:

[<tt><em>name</em>=<em>value</em></tt>]
    Set the environment variable <em>name</em> to <em>value</em>
    during the execution of the <b>rake</b> command.  You can access
    the value by using ENV['<em>name</em>'].

[<tt>--classic-namespace</tt> (-n)]
    Import the Task, FileTask, and FileCreateTask into the top-level
    scope to be compatible with older versions of Rake.  Alternatively
    you can include the line <code>require
    'rake/classic_namespace'</code> in your Rakefile to get the
    classic behavior.

[<tt>--dry-run</tt> (-n)]
    Do a dry run.  Print the tasks invoked and executed, but do not
    actually execute any of the actions.

[<tt>--help</tt>  (-H)]
    Display some help text and exit.

[<tt>--libdir</tt> _directory_  (-I)]
    Add _directory_ to the list of directories searched for require.

[<tt>--nosearch</tt>  (-N)]
    Do not search for a Rakefile in parent directories.

[<tt>--prereqs</tt>  (-P)]
    Display a list of all tasks and their immediate prerequisites.

[<tt>--quiet</tt> (-q)]
    Do not echo commands from FileUtils.

[<tt>--rakefile</tt> _filename_ (-f)]
    Use _filename_ as the name of the rakefile.  The default rakefile
    names are +rakefile+ and +Rakefile+ (with +rakefile+ taking
    precedence).  If the rakefile is not found in the current
    directory, +rake+ will search parent directories for a match.  The
    directory where the Rakefile is found will become the current
    directory for the actions executed in the Rakefile.

[<tt>--require</tt> _name_ (-r)]
    Require _name_ before executing the Rakefile.

[<tt>--tasks</tt> (-T)]
    Display a list of the major tasks and their comments.  Comments
    are defined using the "desc" command.

[<tt>--trace</tt> (-t)]
    Turn on invoke/execute tracing.  Also enable full backtrace on errors.

[<tt>--usage</tt> (-h)]
    Display a usage message and exit.

[<tt>--verbose</tt> (-v)]
    Echo the Sys commands to standard output.

[<tt>--version</tt> (-V)]
    Display the program version and exit.

In addition, any command line option of the form
<em>VAR</em>=<em>VALUE</em> will be added to the environment hash
<tt>ENV</tt> and may be tested in the Rakefile.

---

= Rakefile Format

See doc/rakefile.rdoc[http://rake.rubyforge.org/files/doc/rakefile_rdoc.html]
for details on the Rakefile format.

---

= Other stuff

Author::   Jim Weirich <jim@weirichhouse.org>
Requires:: Ruby 1.8.0 or later
License::  Copyright 2003, 2004 by Jim Weirich.
           Released under an MIT-style license.  See the LICENSE file
           included in the distribution.

== Warranty

This software is provided "as is" and without any express or
implied warranties, including, without limitation, the implied
warranties of merchantibility and fitness for a particular
purpose.
