rant 0.4.4 → 0.4.6
Sign up to get free protection for your applications and to get access to all the features.
- data/NEWS +38 -0
- data/README +4 -2
- data/Rantfile +50 -12
- data/doc/examples/c_cpp/c++/problem_1_1/another_test.cpp +6 -0
- data/doc/examples/c_cpp/c++/problem_1_1/another_test.h +5 -0
- data/doc/examples/c_cpp/c++/problem_1_1/main.cpp +12 -0
- data/doc/examples/c_cpp/c++/problem_1_1/test.cpp +6 -0
- data/doc/examples/c_cpp/c++/problem_1_1/test.h +5 -0
- data/doc/examples/c_cpp/c++/template.rf +15 -0
- data/doc/examples/c_cpp/c/problem_1_1/another_test.c +6 -0
- data/doc/examples/c_cpp/c/problem_1_1/another_test.h +7 -0
- data/doc/examples/c_cpp/c/problem_1_1/main.c +12 -0
- data/doc/examples/c_cpp/c/problem_1_1/test.c +6 -0
- data/doc/examples/c_cpp/c/problem_1_1/test.h +7 -0
- data/doc/examples/c_cpp/c/template.rf +15 -0
- data/doc/examples/c_cpp/root.rant +46 -0
- data/doc/homepage/index.html +115 -0
- data/doc/homepage/rant_home.css +98 -0
- data/doc/rant.1 +129 -0
- data/doc/rant.rdoc +5 -6
- data/doc/rantfile.rdoc +55 -32
- data/doc/subdirs.rdoc +147 -0
- data/lib/rant.rb +47 -49
- data/lib/rant/coregen.rb +20 -20
- data/lib/rant/import.rb +63 -11
- data/lib/rant/import/archive.rb +47 -15
- data/lib/rant/import/archive/tgz.rb +1 -1
- data/lib/rant/import/autoclean.rb +28 -26
- data/lib/rant/import/c/dependencies.rb +1 -1
- data/lib/rant/import/directedrule.rb +1 -4
- data/lib/rant/import/metadata.rb +30 -7
- data/lib/rant/import/nodes/default.rb +67 -13
- data/lib/rant/import/rubypackage.rb +1 -1
- data/lib/rant/import/rubytest.rb +25 -19
- data/lib/rant/import/signedfile.rb +14 -8
- data/lib/rant/import/sys/more.rb +22 -0
- data/lib/rant/import/sys/tgz.rb +43 -0
- data/lib/rant/import/sys/zip.rb +42 -0
- data/lib/rant/node.rb +19 -13
- data/lib/rant/plugin/configure.rb +1 -1
- data/lib/rant/progress.rb +33 -0
- data/lib/rant/rantenv.rb +7 -7
- data/lib/rant/rantlib.rb +246 -256
- data/lib/rant/rantsys.rb +61 -22
- data/lib/rant/rantvar.rb +7 -9
- data/misc/TODO +18 -0
- data/misc/devel-notes +4 -1
- data/test/Rantfile +17 -3
- data/test/deprecated/README +6 -0
- data/test/deprecated/test_0_4_8.rb +41 -0
- data/test/deprecated/test_0_5_2.rb +33 -0
- data/test/import/md5/root.rant +9 -0
- data/test/import/md5/test_md5.rb +45 -0
- data/test/import/metadata/Rantfile +2 -2
- data/test/import/metadata/test_metadata.rb +2 -2
- data/test/import/package/test_package.rb +40 -1
- data/test/import/signedfile/sub1/Rantfile +1 -1
- data/test/import/sys/data/pkg.tgz +0 -0
- data/test/import/sys/data/pkg.zip +0 -0
- data/test/import/sys/data/pkg/bin/test +0 -0
- data/test/import/sys/data/pkg/bin/test.o +0 -0
- data/test/import/sys/data/pkg/test.c +6 -0
- data/test/import/sys/data/pkg/test.h +7 -0
- data/test/import/sys/data/pkg2.zip +0 -0
- data/test/import/sys/test_tgz.rb +38 -0
- data/test/import/sys/test_zip.rb +68 -0
- data/test/import/sys/tgz.rf +6 -0
- data/test/import/sys/zip.rf +15 -0
- data/test/project2/{rantfile.rb → root.rant} +0 -0
- data/test/project2/test_project.rb +3 -8
- data/test/project_rb1/{rantfile.rb → rantfile} +1 -1
- data/test/project_rb1/test_project_rb1.rb +3 -5
- data/test/rant-import/test_rant-import.rb +22 -10
- data/test/subdirs/sub1/Rantfile +1 -1
- data/test/subdirs/sub2/{rantfile.rb → rantfile} +0 -0
- data/test/subdirs/sub2/sub/rantfile +1 -1
- data/test/subdirs2/root.rant +36 -0
- data/test/subdirs2/sub00/sub.rant +8 -0
- data/test/subdirs2/sub1/sub.rant +13 -0
- data/test/subdirs2/test_subdirs2.rb +239 -0
- data/test/test_examples.rb +91 -0
- data/test/test_filetask.rb +51 -11
- data/test/test_rant_interface.rb +24 -0
- data/test/test_rantfile_api.rb +54 -2
- data/test/test_sourcenode.rb +30 -0
- data/test/test_sys.rb +143 -15
- data/test/test_task.rb +16 -22
- data/test/tutil.rb +22 -38
- metadata +67 -9
data/NEWS
CHANGED
@@ -1,6 +1,44 @@
|
|
1
1
|
|
2
2
|
= Rant NEWS
|
3
3
|
|
4
|
+
== Rant 0.4.6
|
5
|
+
|
6
|
+
Incompatible changes:
|
7
|
+
* *Important*: The notation <tt>"#foo"</tt> to reference a task
|
8
|
+
defined in the project's root directory changed to <tt>"@foo"</tt>.
|
9
|
+
* Previous Rant versions loaded both, +Rantfile+ and
|
10
|
+
<tt>Rantfile.rb</tt>, if present. This version will only load one of
|
11
|
+
them (preferably +Rantfile+).
|
12
|
+
* +RubyTest+ tasks no longer honour TESTOPTS variable.
|
13
|
+
|
14
|
+
Deprecated:
|
15
|
+
* The filenames <tt>Rantfile.rb</tt> and <tt>rantfile.rb</tt> are
|
16
|
+
deprecated for rantfiles and won't be recognized by future Rant
|
17
|
+
versions. Use +Rantfile+, +rantfile+ or <tt>root.rant</tt> instead.
|
18
|
+
|
19
|
+
Fixes and minor improvements:
|
20
|
+
* Fix an issue where a file was unnecessary rebuilt when rant was
|
21
|
+
started from different directories, the file task was created from a
|
22
|
+
rule and md5 signatures were used.
|
23
|
+
* Concise output from Package::Tgz and Package::Zip tasks.
|
24
|
+
* A manpage will be installed on Linux/Unix systems by the install.rb
|
25
|
+
script.
|
26
|
+
* A fix for a FileUtils::Verbose bug in Ruby 1.8.3 which affects some
|
27
|
+
<tt>sys</tt> methods.
|
28
|
+
|
29
|
+
New features:
|
30
|
+
* The --cd-parent (-c) option to search for an Rantfile in parent
|
31
|
+
directories.
|
32
|
+
* The --look-up (-u) option to search for the root Rantfile in parent
|
33
|
+
directories.
|
34
|
+
* Recognition of rantfiles with the names <tt>root.rant</tt> and
|
35
|
+
<tt>sub.rant</tt>, where a <tt>sub.rant</tt> file is meant for a
|
36
|
+
project subdirectory and is treated special.
|
37
|
+
Read doc/subdirs.rdoc[link:files/doc/subdirs_rdoc.html]
|
38
|
+
* The +sys+ and <tt>sys.ruby</tt> methods take an optional block for
|
39
|
+
custom process exit status handling (per default, Rant aborts if a
|
40
|
+
subprocess started with +sys+ exits with another status than 0).
|
41
|
+
|
4
42
|
== Rant 0.4.4
|
5
43
|
|
6
44
|
Besides internal changes, this release is backwards compatible to
|
data/README
CHANGED
@@ -41,7 +41,7 @@ Running rant in the directory of this file:
|
|
41
41
|
will ensure that the "data" file in the "backup" directory is up to
|
42
42
|
date.
|
43
43
|
|
44
|
-
This document was written for version 0.4.
|
44
|
+
This document was written for version 0.4.6 of Rant. Most things
|
45
45
|
described here will work for older/newer versions of Rant, but look at
|
46
46
|
the README file in the Rant distribution you've installed for exact
|
47
47
|
documentation of your Rant version.
|
@@ -81,6 +81,8 @@ Using MD5 checksums instead of file modification times::
|
|
81
81
|
read doc/md5.rdoc[link:files/doc/md5_rdoc.html]
|
82
82
|
Compiling C/C++::
|
83
83
|
read doc/c.rdoc[link:files/doc/c_rdoc.html]
|
84
|
+
Buildfiles in subdirectories::
|
85
|
+
read doc/subdirs.rdoc[link:files/doc/subdirs_rdoc.html]
|
84
86
|
Using the Configure plugin::
|
85
87
|
read doc/configure.rdoc[link:files/doc/configure_rdoc.html]
|
86
88
|
Compiling C#::
|
@@ -212,7 +214,7 @@ Rant was tested on:
|
|
212
214
|
Linux 1.8.0
|
213
215
|
1.8.1
|
214
216
|
1.8.2
|
215
|
-
1.8.3
|
217
|
+
1.8.3
|
216
218
|
1.9
|
217
219
|
MacOS X 1.8.2
|
218
220
|
Windows XP 1.8.2 (OneClick Installer)
|
data/Rantfile
CHANGED
@@ -2,20 +2,24 @@
|
|
2
2
|
# Rantfile for Rant :)
|
3
3
|
|
4
4
|
import "md5"
|
5
|
-
import %w(rubytest rubydoc rubypackage autoclean win32/rubycmdwrapper)
|
5
|
+
import %w(rubytest rubydoc rubypackage autoclean win32/rubycmdwrapper sys/more)
|
6
6
|
|
7
7
|
task :default => :test
|
8
8
|
|
9
9
|
dist_files = sys["{bin,lib,test,doc,misc}/**/*"]
|
10
10
|
dist_files.shun("html", "coverage")
|
11
11
|
dist_files += sys["*"].no_dir.exclude("InstalledFiles", "Session.vim")
|
12
|
+
dist_files.exclude("bench-*")
|
13
|
+
hp_files = sys["doc/homepage/*"]
|
14
|
+
extra_rdoc_files = sys["**/README", "NEWS", "doc/**/*.rdoc"]
|
15
|
+
extra_rdoc_files.no_dir("pkg").no_dir("test")
|
12
16
|
|
13
17
|
# remove when compiler stuff is getting useful...
|
14
18
|
dist_files.exclude "lib/rant/compiler*", "lib/rant/import/c/program.rb"
|
15
19
|
|
16
20
|
rdoc_opts = %w(-S -c UTF-8 --title Rant --main README)
|
17
21
|
|
18
|
-
gen RubyPackage, "rant" do |t|
|
22
|
+
gen RubyPackage, "rant#{var :pkg_ext}" do |t|
|
19
23
|
t.version = `#{Env::RUBY} run_rant --version`.split[1]
|
20
24
|
t.summary = "Rant is a Ruby based build tool."
|
21
25
|
t.files = dist_files
|
@@ -25,7 +29,7 @@ gen RubyPackage, "rant" do |t|
|
|
25
29
|
t.email = "langstefan@gmx.at"
|
26
30
|
t.rubyforge_project = "make"
|
27
31
|
t.homepage = "http://make.rubyforge.org"
|
28
|
-
t.gem_extra_rdoc_files =
|
32
|
+
t.gem_extra_rdoc_files = extra_rdoc_files
|
29
33
|
t.gem_rdoc_options = rdoc_opts
|
30
34
|
desc "Create packages for distribution."
|
31
35
|
t.package_task
|
@@ -35,11 +39,35 @@ desc "Generate documentation."
|
|
35
39
|
gen RubyDoc do |g|
|
36
40
|
g.verbose = true
|
37
41
|
g.dir = "doc/html"
|
38
|
-
g.files.concat
|
39
|
-
g.files.concat sys["doc/**/*.rdoc"]
|
42
|
+
g.files.concat extra_rdoc_files
|
40
43
|
g.opts = rdoc_opts + %w(-T doc/jamis.rb)
|
41
44
|
end
|
42
45
|
|
46
|
+
html_index = "doc/html/index.html"
|
47
|
+
api_index = html_index.sub("index", "api")
|
48
|
+
|
49
|
+
enhance "doc/html/index.html" do
|
50
|
+
sys.rm_f api_index # remove old RDoc index page
|
51
|
+
make "hp2doc"
|
52
|
+
end
|
53
|
+
|
54
|
+
task "hp2doc" do
|
55
|
+
if test(?f, html_index) && !test(?f, api_index)
|
56
|
+
sys.mv html_index, api_index
|
57
|
+
end
|
58
|
+
sys.cp hp_files, "doc/html"
|
59
|
+
end
|
60
|
+
|
61
|
+
desc "Publish html docs on make.rubyfore.org.",
|
62
|
+
"Note: scp will prompt for rubyforge password."
|
63
|
+
task "publish-docs" => :doc do
|
64
|
+
sys "scp -r doc/html/* langi@rubyforge.org:/var/www/gforge-projects/make/"
|
65
|
+
end
|
66
|
+
|
67
|
+
task "publish-hp" do
|
68
|
+
sys "scp -r doc/homepage/* langi@rubyforge.org:/var/www/gforge-projects/make/"
|
69
|
+
end
|
70
|
+
|
43
71
|
desc "Run basic tests."
|
44
72
|
gen RubyTest do |g|
|
45
73
|
g.libs << "test"
|
@@ -74,7 +102,7 @@ desc "Run all tests and generate coverage with rcov."
|
|
74
102
|
task :cov do
|
75
103
|
lp = File.expand_path "lib"
|
76
104
|
sys.cd "test" do
|
77
|
-
sys %W(rcov -xtutil.rb
|
105
|
+
sys %W(rcov -xtutil.rb,ts_*,tc_*,test_* -I#{lp} ts_all.rb)
|
78
106
|
end
|
79
107
|
end
|
80
108
|
|
@@ -120,12 +148,6 @@ var[:clean].include %w(
|
|
120
148
|
InstalledFiles .config bench-rant bench-depsearch test/coverage
|
121
149
|
)
|
122
150
|
|
123
|
-
desc "Publish html docs on make.rubyfore.org.",
|
124
|
-
"Note: scp will prompt for rubyforge password."
|
125
|
-
task "publish-docs" => :doc do
|
126
|
-
sys "scp -r doc/html/* langi@rubyforge.org:/var/www/gforge-projects/make/"
|
127
|
-
end
|
128
|
-
|
129
151
|
# Just for quick visual testing of rant...
|
130
152
|
task :please_fail do |t|
|
131
153
|
sys "mix_nix_gibts"
|
@@ -145,10 +167,26 @@ end
|
|
145
167
|
desc "Install Rant."
|
146
168
|
task :install do
|
147
169
|
sys.ruby "setup.rb"
|
170
|
+
# try to install man page
|
171
|
+
man_path = ENV["MANPATH"]
|
172
|
+
if man_path
|
173
|
+
puts "trying to install rant(1) manpage..."
|
174
|
+
require 'rbconfig'
|
175
|
+
prefix = Config::CONFIG["prefix"]
|
176
|
+
dirs = sys.split_path man_path
|
177
|
+
man_dir = dirs.find{|d| d == "#{prefix}/man" } || dirs.first
|
178
|
+
sys.install "doc/rant.1", "#{man_dir}/man1", :mode => 0644 if man_dir
|
179
|
+
end
|
148
180
|
end
|
149
181
|
|
150
182
|
if Env.on_windows?
|
151
183
|
enhance :install => (gen Win32::RubyCmdWrapper, sys["bin/*"])
|
152
184
|
end
|
153
185
|
|
186
|
+
task "svn-clean" do
|
187
|
+
`svn stat`.split(/\n/).each { |line|
|
188
|
+
sys.clean line[7..-1] if line[0] == ??
|
189
|
+
}
|
190
|
+
end
|
191
|
+
|
154
192
|
# vim:ft=ruby
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# Autogenerated. Do not modify!
|
2
|
+
# Create additional tasks and make other modifications in custom.rf.
|
3
|
+
|
4
|
+
task :run => "test" do
|
5
|
+
sys "./test"
|
6
|
+
end
|
7
|
+
|
8
|
+
gen C::Dependencies
|
9
|
+
gen Action do source "c_dependencies" end
|
10
|
+
|
11
|
+
file "test" => sys["*.cpp"].sub_ext("o") do |t|
|
12
|
+
sys "g++ -o #{t.name} #{t.prerequisites}"
|
13
|
+
end
|
14
|
+
|
15
|
+
source "custom.rf" if File.exist? "custom.rf"
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# Autogenerated. Do not modify!
|
2
|
+
# Create additional tasks and make other modifications in custom.rf.
|
3
|
+
|
4
|
+
task :run => "test" do
|
5
|
+
sys "./test"
|
6
|
+
end
|
7
|
+
|
8
|
+
gen C::Dependencies
|
9
|
+
gen Action do source "c_dependencies" end
|
10
|
+
|
11
|
+
file "test" => sys["*.c"].sub_ext("o") do |t|
|
12
|
+
sys "gcc -o #{t.name} #{t.prerequisites}"
|
13
|
+
end
|
14
|
+
|
15
|
+
source "custom.rf" if File.exist? "custom.rf"
|
@@ -0,0 +1,46 @@
|
|
1
|
+
|
2
|
+
import "md5"
|
3
|
+
import "autoclean", "package/tgz", "c/dependencies"
|
4
|
+
|
5
|
+
cpp_dirs = sys["c++/problem_*"]
|
6
|
+
c_dirs = sys["c/problem_*"]
|
7
|
+
all_dirs = cpp_dirs + c_dirs
|
8
|
+
|
9
|
+
cpp_rf_template = "c++/template.rf"
|
10
|
+
c_rf_template = "c/template.rf"
|
11
|
+
|
12
|
+
desc "Run all C and C++ tests."
|
13
|
+
task :run => all_dirs.map{ |f| "#{f}/run" }
|
14
|
+
desc "Build all."
|
15
|
+
task :build => all_dirs.map{ |f| "#{f}/test" }
|
16
|
+
|
17
|
+
desc "Remove all autogenerated files."
|
18
|
+
gen AutoClean
|
19
|
+
|
20
|
+
gen Rule, '.o' => '.cpp' do |t|
|
21
|
+
sys "g++ -c -o #{t.name} #{t.source}"
|
22
|
+
end
|
23
|
+
|
24
|
+
gen Rule, '.o' => '.c' do |t|
|
25
|
+
sys "gcc -c -o #{t.name} #{t.source}"
|
26
|
+
end
|
27
|
+
|
28
|
+
desc "Create source package."
|
29
|
+
gen Package::Tgz, "pkg/c_cpp",
|
30
|
+
:files => sys["root.rant", "**/*.{c,cpp,h,rf}"]
|
31
|
+
|
32
|
+
gen Action do
|
33
|
+
cpp_dirs.each { |dir|
|
34
|
+
make "#{dir}/sub.rant" => cpp_rf_template do |t|
|
35
|
+
sys.cp t.source, t.name
|
36
|
+
end
|
37
|
+
}
|
38
|
+
c_dirs.each { |dir|
|
39
|
+
make "#{dir}/sub.rant" => c_rf_template do |t|
|
40
|
+
sys.cp t.source, t.name
|
41
|
+
end
|
42
|
+
}
|
43
|
+
subdirs cpp_dirs, c_dirs
|
44
|
+
end
|
45
|
+
|
46
|
+
# vim:ft=ruby
|
@@ -0,0 +1,115 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
3
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
4
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
5
|
+
|
6
|
+
<!--
|
7
|
+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
|
8
|
+
"http://www.w3.org/TR/html4/strict.dtd">
|
9
|
+
|
10
|
+
<html>
|
11
|
+
-->
|
12
|
+
<head>
|
13
|
+
<title>Rant</title>
|
14
|
+
<style type="text/css" media="screen">@import "rant_home.css";</style>
|
15
|
+
</head>
|
16
|
+
|
17
|
+
<body>
|
18
|
+
|
19
|
+
<div class="content">
|
20
|
+
<h1>Rant - Flexible, Ruby based make</h1>
|
21
|
+
<p>
|
22
|
+
Similar to make, the rant commandline tool reads a file called
|
23
|
+
Rantfile, which contains task definitions. Unlike make, however, an
|
24
|
+
Rantfile is just a valid script written in the Ruby programming
|
25
|
+
language. Since Ruby comes with many useful libraries and is
|
26
|
+
portable across many different operating systems, it's very easy to
|
27
|
+
write portable Rantfiles.
|
28
|
+
</p>
|
29
|
+
<h2>Striking features:</h2>
|
30
|
+
<ul>
|
31
|
+
<li>Defining custom tasks.</li>
|
32
|
+
<li>Automated packaging, testing and RDoc generation for Ruby
|
33
|
+
applications and libraries.</li>
|
34
|
+
<li>Creation of a monolithic script tailored to the needs of a
|
35
|
+
specific project which can be used instead of an Rant
|
36
|
+
installation - users don't need to install Rant.</li>
|
37
|
+
<li>Creating gzipped tar and zip archives -- without installing
|
38
|
+
additional software.
|
39
|
+
</li>
|
40
|
+
<li>Optional recognition of file changes based on MD5
|
41
|
+
checksums instead of file modification times.
|
42
|
+
</li>
|
43
|
+
<li>Primitive support for compiling C# sources with csc, cscc
|
44
|
+
and mcs.</li>
|
45
|
+
<li>Dependency checking for C/C++ source files (integrated
|
46
|
+
makedepend replacement).</li>
|
47
|
+
</ul>
|
48
|
+
</div>
|
49
|
+
|
50
|
+
<div class="content">
|
51
|
+
<h2>Getting started</h2>
|
52
|
+
<dl>
|
53
|
+
<dt>1. Install Ruby</dt>
|
54
|
+
<dd>
|
55
|
+
Issue the command: <tt>% ruby --version</tt> <br/>
|
56
|
+
which prints the Ruby version number you've installed. If it
|
57
|
+
isn't equal or higher to 1.8.0, get a newer version from the <a
|
58
|
+
href="http://www.ruby-lang.org/en/">Ruby homepage</a> or
|
59
|
+
the <a href="http://rubyforge.org/projects/rubyinstaller/">One-Click Installer for Windows</a>.
|
60
|
+
</dd>
|
61
|
+
<dt>2. Install Rant</dt>
|
62
|
+
<dd>
|
63
|
+
Issue the command: <tt>% gem install --remote rant</tt><br/>
|
64
|
+
which should download and install Rant. If you don't have the
|
65
|
+
gem command, download the package from <a
|
66
|
+
href="http://rubyforge.org/frs/?group_id=615">RubyForge</a>,
|
67
|
+
unpack it and run <tt>% ruby install.rb</tt>.
|
68
|
+
</dd>
|
69
|
+
<dt>3. Read the <strong>documentation</strong></dt>
|
70
|
+
<dd>If you want to start with the basics, continue <a
|
71
|
+
href="files/doc/rantfile_rdoc.html">here</a>.
|
72
|
+
</dd>
|
73
|
+
<dd>If you want to get an overview, continue <a
|
74
|
+
href="files/README.html">here</a>.
|
75
|
+
</dd>
|
76
|
+
</dl>
|
77
|
+
</div>
|
78
|
+
|
79
|
+
<div id="navAlpha">
|
80
|
+
<h2>Links</h2>
|
81
|
+
<p>
|
82
|
+
<a href="files/NEWS.html">ChangeLog</a><br/>
|
83
|
+
<a href="api.html">API docs</a><br/>
|
84
|
+
<a href="http://rubyforge.org/projects/make/">Project page</a><br/>
|
85
|
+
<a title="Subscribe to mailing list"
|
86
|
+
href="http://rubyforge.org/mailman/listinfo/make-cafe">Mailing list</a><br/>
|
87
|
+
<a title="Browse mailing list archives"
|
88
|
+
href="http://rubyforge.org/pipermail/make-cafe/">List archives</a><br/>
|
89
|
+
<a
|
90
|
+
href="http://rubyforge.org/tracker/?func=add&group_id=615&atid=2428">Report a bug</a><br/>
|
91
|
+
</p>
|
92
|
+
</div>
|
93
|
+
|
94
|
+
<div id="navBeta">
|
95
|
+
<h2>Documentation</h2>
|
96
|
+
<a href="files/README.html">User Manual</a><br/>
|
97
|
+
<hr/>
|
98
|
+
<h2>Updating</h2>
|
99
|
+
<p>
|
100
|
+
Always read the <a href="files/NEWS.html">ChangeLog</a>
|
101
|
+
before installing a newer version of Rant. It describes
|
102
|
+
non-backwards compatible changes and new features.
|
103
|
+
</p>
|
104
|
+
</div>
|
105
|
+
|
106
|
+
<p>
|
107
|
+
<a href="http://validator.w3.org/check?uri=referer"><img
|
108
|
+
src="http://www.w3.org/Icons/valid-xhtml10"
|
109
|
+
alt="Valid XHTML 1.0!" height="31" width="88" /></a>
|
110
|
+
</p>
|
111
|
+
|
112
|
+
<!-- BlueRobot was here. -->
|
113
|
+
|
114
|
+
</body>
|
115
|
+
</html>
|