
== Rule recursion

Since Rant 0.4.9, rules created with gen Rule no longer
recurse. This means, that when looking for the Rule's source(s), this
specific rule itself is ignored. This prevents infinite recursion.

Consider:

    gen Rule, "o" => ".foo" do something end

Say we call make "bo".

Rant pre 0.4.9 behaviour:

The rule matches anything ending in "o". Since "bo" ends in "o", the
rule matches and searches for the source "b.foo". No task is defined
for "b.foo", but again our only rule matches and thus searches for the
source "b.fo.foo". Now we have our infinite recursion.

Rant 0.4.9 and later behaviour:

The only rule matches and searches for the source "b.foo". When a rule
searches for a source, the rule itself is excluded. No infinite
recursion.

== Rant::Env.find_bin...
... should honour PATHEXT on windows.

== Task alias
Since +alias+ is a Ruby keyword, we could use +nick+ to create task
alises.
Other choices: short, cut, name, label, syn, synonym, ident, term,
    shortcut, abbreviation, link

== Here docs
Don't use here documents in the Rant sources, imports and plugins.
They'll get messed up by the rant-import command.

== More notes on rant-import
rant-import removes all lines matching /^\s*#/ per default. Remember
that, I was already bitten by that one in multiline regex!
(FileList#mk_all_rx)

== Running RDoc programmatically
require 'rdoc/rdoc'
rdoc = RDoc::RDoc.new
begin
    rdoc.document(%w(like args from commandline))
rescue RDoc::RDocError
    $stderr.puts "Error when running rdoc: " + $!.message
end

== Changing the behaviour of Rant from Rantfiles
Perhaps a method named like `behave' would be appropriate to to
set options of the Rant application.

== Subdirectories
Allow the use of `#' at the start of a pathname to tell rant that
it should be interpreted relative to the project's root directory.

== Directory structure of +lib/+
+lib/+ contains only two entries:
[rant.rb]      Used to require rantlib and include +Rant+ for small
	       build scripts.
[rant/]	       All files matching /^rant\w+\.rb$/ are considered
	       as Rant core. Others contain utilities, helper classes,
	       Generators and similar.
[rant/plugin]  Each file ending in .rb in this directory is
               considered to load support for one Rant plugin.

== Performance
With version 0.2.6, the big performance problem with task lookup
(caused very slow dependency resolving) is fixed.
The next performance improvement should target Rantfile reading,
especially task creation.

== RubyPackage generator
Currently, the package task(s) generated by RubyPackage doesn't
recognize (and repackage) when files/directories are removed (from the
sources).

== Unit tests
The unit tests contain many assertions of the form
  assert_equal(Rant.run(...), 0)
which are wrong, because the first argument should be the expected
result!

== FileList < Array problems
There arise some severe problems. E.g. the Array#flatten method:
    [FileList["*.rb"]].flatten
The +flatten+ method doesn't call *any* method of our FileList but
it recognizes that it is an Array and copies the elements directly.
So there is *no* way to resolve the glob pattern and there will never
any Ruby file be selected!

== Subdirectories
Rant would have to check and eventually +cd+ before doing one of the
following:
* Loading an Rantfile (even through +source+).
* Worker#invoke
* Worker#needed?
* RantApp#run before returning.

== RantContext#rantapp rename
Rename +rantapp+ to +rac+.
Done.

== Circular dependencies
Before Rant detected circular dependencies, we silently removed a task
dependency on itself. Should we remove this mechanism now?

== Testing
Files/directories created during tests match the glob *.t*
so don't give names matching this pattern to regular files, as they
would soon be deleted!

== Compiling C
make uses the env. variables CC and CFLAGS.

# vim:tw=70:
