rant 0.4.4 → 0.4.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. data/NEWS +38 -0
  2. data/README +4 -2
  3. data/Rantfile +50 -12
  4. data/doc/examples/c_cpp/c++/problem_1_1/another_test.cpp +6 -0
  5. data/doc/examples/c_cpp/c++/problem_1_1/another_test.h +5 -0
  6. data/doc/examples/c_cpp/c++/problem_1_1/main.cpp +12 -0
  7. data/doc/examples/c_cpp/c++/problem_1_1/test.cpp +6 -0
  8. data/doc/examples/c_cpp/c++/problem_1_1/test.h +5 -0
  9. data/doc/examples/c_cpp/c++/template.rf +15 -0
  10. data/doc/examples/c_cpp/c/problem_1_1/another_test.c +6 -0
  11. data/doc/examples/c_cpp/c/problem_1_1/another_test.h +7 -0
  12. data/doc/examples/c_cpp/c/problem_1_1/main.c +12 -0
  13. data/doc/examples/c_cpp/c/problem_1_1/test.c +6 -0
  14. data/doc/examples/c_cpp/c/problem_1_1/test.h +7 -0
  15. data/doc/examples/c_cpp/c/template.rf +15 -0
  16. data/doc/examples/c_cpp/root.rant +46 -0
  17. data/doc/homepage/index.html +115 -0
  18. data/doc/homepage/rant_home.css +98 -0
  19. data/doc/rant.1 +129 -0
  20. data/doc/rant.rdoc +5 -6
  21. data/doc/rantfile.rdoc +55 -32
  22. data/doc/subdirs.rdoc +147 -0
  23. data/lib/rant.rb +47 -49
  24. data/lib/rant/coregen.rb +20 -20
  25. data/lib/rant/import.rb +63 -11
  26. data/lib/rant/import/archive.rb +47 -15
  27. data/lib/rant/import/archive/tgz.rb +1 -1
  28. data/lib/rant/import/autoclean.rb +28 -26
  29. data/lib/rant/import/c/dependencies.rb +1 -1
  30. data/lib/rant/import/directedrule.rb +1 -4
  31. data/lib/rant/import/metadata.rb +30 -7
  32. data/lib/rant/import/nodes/default.rb +67 -13
  33. data/lib/rant/import/rubypackage.rb +1 -1
  34. data/lib/rant/import/rubytest.rb +25 -19
  35. data/lib/rant/import/signedfile.rb +14 -8
  36. data/lib/rant/import/sys/more.rb +22 -0
  37. data/lib/rant/import/sys/tgz.rb +43 -0
  38. data/lib/rant/import/sys/zip.rb +42 -0
  39. data/lib/rant/node.rb +19 -13
  40. data/lib/rant/plugin/configure.rb +1 -1
  41. data/lib/rant/progress.rb +33 -0
  42. data/lib/rant/rantenv.rb +7 -7
  43. data/lib/rant/rantlib.rb +246 -256
  44. data/lib/rant/rantsys.rb +61 -22
  45. data/lib/rant/rantvar.rb +7 -9
  46. data/misc/TODO +18 -0
  47. data/misc/devel-notes +4 -1
  48. data/test/Rantfile +17 -3
  49. data/test/deprecated/README +6 -0
  50. data/test/deprecated/test_0_4_8.rb +41 -0
  51. data/test/deprecated/test_0_5_2.rb +33 -0
  52. data/test/import/md5/root.rant +9 -0
  53. data/test/import/md5/test_md5.rb +45 -0
  54. data/test/import/metadata/Rantfile +2 -2
  55. data/test/import/metadata/test_metadata.rb +2 -2
  56. data/test/import/package/test_package.rb +40 -1
  57. data/test/import/signedfile/sub1/Rantfile +1 -1
  58. data/test/import/sys/data/pkg.tgz +0 -0
  59. data/test/import/sys/data/pkg.zip +0 -0
  60. data/test/import/sys/data/pkg/bin/test +0 -0
  61. data/test/import/sys/data/pkg/bin/test.o +0 -0
  62. data/test/import/sys/data/pkg/test.c +6 -0
  63. data/test/import/sys/data/pkg/test.h +7 -0
  64. data/test/import/sys/data/pkg2.zip +0 -0
  65. data/test/import/sys/test_tgz.rb +38 -0
  66. data/test/import/sys/test_zip.rb +68 -0
  67. data/test/import/sys/tgz.rf +6 -0
  68. data/test/import/sys/zip.rf +15 -0
  69. data/test/project2/{rantfile.rb → root.rant} +0 -0
  70. data/test/project2/test_project.rb +3 -8
  71. data/test/project_rb1/{rantfile.rb → rantfile} +1 -1
  72. data/test/project_rb1/test_project_rb1.rb +3 -5
  73. data/test/rant-import/test_rant-import.rb +22 -10
  74. data/test/subdirs/sub1/Rantfile +1 -1
  75. data/test/subdirs/sub2/{rantfile.rb → rantfile} +0 -0
  76. data/test/subdirs/sub2/sub/rantfile +1 -1
  77. data/test/subdirs2/root.rant +36 -0
  78. data/test/subdirs2/sub00/sub.rant +8 -0
  79. data/test/subdirs2/sub1/sub.rant +13 -0
  80. data/test/subdirs2/test_subdirs2.rb +239 -0
  81. data/test/test_examples.rb +91 -0
  82. data/test/test_filetask.rb +51 -11
  83. data/test/test_rant_interface.rb +24 -0
  84. data/test/test_rantfile_api.rb +54 -2
  85. data/test/test_sourcenode.rb +30 -0
  86. data/test/test_sys.rb +143 -15
  87. data/test/test_task.rb +16 -22
  88. data/test/tutil.rb +22 -38
  89. metadata +67 -9
@@ -0,0 +1,98 @@
1
+ body {
2
+ color:#333;
3
+ background-color:white;
4
+ /* background-color:gray; */
5
+ margin:20px;
6
+ padding:0px;
7
+ font:12px verdana, arial, helvetica, sans-serif;
8
+ }
9
+ h1 {
10
+ margin:0px 0px 15px 0px;
11
+ padding:0px;
12
+ font-size:28px;
13
+ font-weight:900;
14
+ color:#ccc;
15
+ }
16
+ h2 {
17
+ font:bold 14px/15px verdana, arial, helvetica, sans-serif;
18
+ margin:0px 0px 5px 0px;
19
+ padding:0px;
20
+ }
21
+ h3 {
22
+ font:bold 12px/14px verdana, arial, helvetica, sans-serif;
23
+ margin:0px 0px 5px 0px;
24
+ padding:0px;
25
+ }
26
+ p {
27
+ font:12px/20px verdana, arial, helvetica, sans-serif;
28
+ margin:0px 0px 16px 0px;
29
+ padding:0px;
30
+ }
31
+ .Content>p {margin:0px;}
32
+ .Content>p+p {text-indent:30px;}
33
+
34
+ a {
35
+ color:#09c;
36
+ font-size:12px;
37
+ font-family:verdana, arial, helvetica, sans-serif;
38
+ font-weight:600;
39
+ text-decoration:none;
40
+ }
41
+ a:link {color:#09c;}
42
+ a:visited {color:#07a;}
43
+ a:hover {background-color:#eee;}
44
+
45
+
46
+ /* All the content boxes belong to the content class. */
47
+ .content {
48
+ position:relative; /* Position is declared "relative" to gain control of stacking order (z-index). */
49
+ width:auto;
50
+ min-width:120px;
51
+ margin:0px 210px 20px 170px;
52
+ border:1px solid black;
53
+ background-color:white;
54
+ padding:10px;
55
+ z-index:3; /* This allows the content to overlap the right menu in narrow windows in good browsers. */
56
+ }
57
+
58
+ #navAlpha {
59
+ position:absolute;
60
+ /* width:150px; */
61
+ top:20px;
62
+ left:20px;
63
+ border:1px dashed black;
64
+ background-color:#eee;
65
+ padding:10px;
66
+ z-index:2;
67
+
68
+ /* Here is the ugly brilliant hack that protects IE5/Win from its own stupidity.
69
+ Thanks to Tantek Celik for the hack and to Eric Costello for publicizing it.
70
+ IE5/Win incorrectly parses the "\"}"" value, prematurely closing the style
71
+ declaration. The incorrect IE5/Win value is above, while the correct value is
72
+ below. See http://glish.com/css/hacks.asp for details. */
73
+ voice-family: "\"}\"";
74
+ voice-family:inherit;
75
+ /* width:128px; */
76
+ }
77
+ /* I've heard this called the "be nice to Opera 5" rule. Basically, it feeds correct
78
+ length values to user agents that exhibit the parsing error exploited above yet get
79
+ the CSS box model right and understand the CSS2 parent-child selector. ALWAYS include
80
+ a "be nice to Opera 5" rule every time you use the Tantek Celik hack (above). */
81
+ body>#navAlpha {width:128px;}
82
+
83
+ #navBeta {
84
+ position:absolute;
85
+ width:190px;
86
+ top:20px;
87
+ right:20px;
88
+ border:1px dashed black;
89
+ background-color:#eee;
90
+ padding:10px;
91
+ z-index:1;
92
+ /* Again, the ugly brilliant hack. */
93
+ voice-family: "\"}\"";
94
+ voice-family:inherit;
95
+ width:168px;
96
+ }
97
+ /* Again, "be nice to Opera 5". */
98
+ body>#navBeta {width:168px;}
data/doc/rant.1 ADDED
@@ -0,0 +1,129 @@
1
+ .\" rant.1 - rant manpage
2
+ .\" Date of last change to this manpage.
3
+ .TH RANT 1 "September 17, 2005"
4
+ .SH NAME
5
+ rant \- A flexible and portable build tool.
6
+ .SH SYNOPSIS
7
+ .B rant
8
+ .RI [OPTION]\ ...\ [TARGET]\ ...
9
+ .br
10
+ .SH DESCRIPTION
11
+ .B Striking features
12
+
13
+ * Defining custom tasks.
14
+
15
+ * Automated packaging, testing and RDoc generation for Ruby
16
+ applications and libraries.
17
+
18
+ * Creation of a monolithic script tailored to the needs of a specific
19
+ project which can be used instead of an Rant installation - users
20
+ don't need to install Rant.
21
+
22
+ * Creating gzipped tar and zip archives -- without installing
23
+ additional software.
24
+
25
+ * Optional recognition of file changes based on MD5 checksums instead
26
+ of file modification times.
27
+
28
+ * Dependency checking for C/C++ source files (integrated makedepend
29
+ replacement).
30
+
31
+ * Primitive support for compiling C# sources with csc, cscc and mcs.
32
+
33
+ .B Startup
34
+
35
+ On startup, rant will look for a file called
36
+ .IR Rantfile
37
+ ,
38
+ .IR rantfile
39
+ or
40
+ .IR root.rant
41
+ which contains the build specification (which in fact is valid Ruby
42
+ code). After reading the Rantfile(s), rant will execute the following
43
+ tasks:
44
+
45
+ .B If at least one target was given on the commandline:
46
+
47
+ rant will execute all tasks necessary to build all targets given on
48
+ the commandline.
49
+
50
+ .B else:
51
+
52
+ rant tries to build the target called "default". If no task with this
53
+ name exists, rant invokes the first defined task.
54
+
55
+ If you want to know which task(s) will be invoked when no target is
56
+ given on the commandline, run rant with the
57
+ .IR -T
58
+ option. Example:
59
+
60
+ $ rant -T
61
+ .br
62
+ rant # => test
63
+ .br
64
+ rant package # Create packages for distribution.
65
+ .br
66
+ rant doc # Generate documentation.
67
+ .br
68
+ rant publish-docs # Publish html docs on make.rubyfore.org.
69
+ .br
70
+ # Note: scp will prompt for rubyforge password.
71
+ .br
72
+ rant test # Run basic tests.
73
+
74
+ The
75
+ .B first line
76
+ always shows the target that will be built if no target argument is
77
+ given. In this case, it would be the
78
+ .RI test
79
+ target.
80
+
81
+ .PP
82
+ .SH OPTIONS
83
+ .TP
84
+ --help -h
85
+ Print a help message and exit.
86
+ .TP
87
+ --version -V
88
+ Print version of Rant and exit.
89
+ .TP
90
+ --verbose -v
91
+ Print more messages to stderr.
92
+ .TP
93
+ --quiet -q
94
+ Don't print commands.
95
+ .TP
96
+ --err-commands
97
+ Print failed commands and their exit status.
98
+ .TP
99
+ --directory DIRECTORY -C DIRECTORY
100
+ Run rant in DIRECTORY.
101
+ .TP
102
+ --cd-parent -c
103
+ With this option, Rant starts to search for an Rantfile in the
104
+ current working directory as usual, but if it doesn't find one,
105
+ it changes to the parent directory and looks there for an
106
+ Rantfile. This is repeated until an Rantfile is found or the
107
+ working directory is the root directory of the filesystem.
108
+ .TP
109
+ --look-up -u
110
+ Look in parent directories for root Rantfile.
111
+ .TP
112
+ --rantfile RANTFILE -f RANTFILE
113
+ Process RANTFILE instead of standard rantfiles.
114
+ Multiple files may be specified by repeating this option.
115
+ .TP
116
+ --force-run TARGET -a TARGET
117
+ Force rebuild of TARGET and all dependencies.
118
+ .TP
119
+ --tasks -T
120
+ Show a list of all described tasks and exit.
121
+
122
+ .SH AUTHOR
123
+ rant was developed by Stefan Lang <langstefan@gmx.at>
124
+ .SH COPYRIGHT
125
+ Copyright (C) 2005 Stefan Lang <langstefan@gmx.at>
126
+ .SH SEE ALSO
127
+ For extensive documentation visit the Rant homepage
128
+ .IR http://make.ruby-co.de
129
+ .\" vim:ft=nroff
data/doc/rant.rdoc CHANGED
@@ -17,7 +17,7 @@ run rant with the <tt>--tasks</tt> (short form: <tt>-T</tt>) option:
17
17
  rant cov # Run all tests and generate coverage with rcov.
18
18
  rant clean # Remove autogenerated files.
19
19
  rant publish-docs # Publish html docs on RubyForge.
20
- # Note: scp will prompt for rubyforge password.
20
+ # Note: scp will prompt for rubyforge password.
21
21
  This lists the "public" tasks for the project. The first line always
22
22
  tells you the task(s) that will be invoked when no argument is given
23
23
  to rant, in the above example, this would be the +test+ task.
@@ -30,12 +30,11 @@ steps (roughly):
30
30
  equivalent. Arguments of the form <tt>VAR=VAL</tt> set variables
31
31
  available in the Rantfile(s). All other arguments are names of
32
32
  tasks to be invoked.
33
- 2. Load Rantfiles in working directory. Rantfiles with the following
33
+ 2. Load Rantfile in working directory. Rantfiles with the following
34
34
  names are recognized:
35
- Rantfile
36
- rantfile
37
- Rantfile.rb
38
- rantfile.rb
35
+ Rantfile
36
+ rantfile
37
+ root.rant
39
38
  3. Calculate task dependencies and invoke required tasks. If no task
40
39
  was given on the commandline, a task called "default" will be
41
40
  invoked. If the "default" task doesn't exist, the first task will
data/doc/rantfile.rdoc CHANGED
@@ -12,30 +12,26 @@ starts, it instantiates one Rant application which will read one or
12
12
  more Rantfiles. The Rantfile communicates with the following list of
13
13
  methods with the Rant application:
14
14
 
15
- +task+:: Defines a task with prerequisites and an action.
16
- +file+:: A special form of task which creates one file.
17
- +desc+:: Describes the next defined task. A task with
18
- description is considered a "public" task.
19
- +gen+:: Takes a _generator_ object as first argument which
20
- usually creates one or more tasks. An example would be
21
- the +RubyPackage+ generator which produces tasks for
22
- packaging.
23
- +import+:: Imports additional code which usually provides
24
- additional generators. Example: to use the
25
- +RubyPackage+ generator you have to <tt>import
26
- "rubypackage"</tt> first.
27
- +plugin+:: Instantiate a plugin. Example: <tt>plugin
28
- :Configure</tt> instantiates the Configure plugin.
29
- +sys+:: Run external commands or call portable file system
30
- manipulation methods (copy files, unlink files,
31
- install, ...).
32
- +source+:: Takes a filename as argument and causes Rant to read
33
- it in as Rantfile.
34
- +subdirs+:: Takes a list of subdirectories in which Rant should
35
- look for Rantfiles.
36
- +var+:: Provides access to variables accessible in Rantfiles
37
- and from the commandline.
38
- +rac+:: The "Rant compiler" which is compiling the Rantfiles.
15
+ +task+:: Defines a task with prerequisites and an action.
16
+ +file+:: A special form of task which creates one file.
17
+ +desc+:: Describes the next defined task. A task with
18
+ description is considered a "public" task.
19
+ +gen+:: Takes a _generator_ object as first argument which
20
+ usually creates one or more tasks. An example would be
21
+ the +RubyPackage+ generator which produces tasks for
22
+ packaging.
23
+ +import+:: Imports additional code which usually provides
24
+ additional generators. Example: to use the
25
+ +RubyPackage+ generator you have to <tt>import
26
+ "rubypackage"</tt> first.
27
+ +sys+:: Run external commands or do usual file system
28
+ operations (copy files, unlink files, install, ...).
29
+ +source+:: Takes a filename as argument and causes Rant to read
30
+ it in as Rantfile.
31
+ +subdirs+:: Takes a list of subdirectories in which Rant should
32
+ look for Rantfiles.
33
+ +var+:: Provides access to variables accessible in Rantfiles
34
+ and from the commandline.
39
35
  +make+:: Immediately build a target.
40
36
 
41
37
  === Defining a task
@@ -150,15 +146,16 @@ shows this descriptions:
150
146
  rant clean # Remove autogenerated files.
151
147
  Only the tasks which have a description are listed.
152
148
 
153
- === The +sys+ function
149
+ === The +sys+ command
154
150
 
155
- After using the +sys+ function quite often in the examples, I should
156
- explain it a little bit. The +sys+ function can be used in three ways:
151
+ After using the +sys+ command quite often in the examples, I should
152
+ explain it a little bit. The +sys+ command can be used in three ways:
157
153
 
158
154
  1. <b>File system operations</b>
159
155
 
160
- The first form is with no arguments. It returns an object on which you
161
- can invoke the methods of the +FileUtils+ module that comes with ruby.
156
+ The first form is with no arguments. It returns an object on which
157
+ you can invoke the methods of the +FileUtils+ module that comes
158
+ with ruby.
162
159
  Examples are:
163
160
  sys.rm "file1", "file2", ... # remove files
164
161
  sys.cp "src", "dest" # copy from "src" do "dest"
@@ -174,7 +171,7 @@ explain it a little bit. The +sys+ function can be used in three ways:
174
171
 
175
172
  2. <b>Running external commands</b>
176
173
 
177
- Invoke the +sys+ function with a string as argument to run a shell:
174
+ Invoke the +sys+ command with a string as argument to run a shell:
178
175
  sys "echo *.c"
179
176
  will print a list of C files to stdout.
180
177
 
@@ -183,6 +180,28 @@ explain it a little bit. The +sys+ function can be used in three ways:
183
180
  sys "echo", "*.c"
184
181
  will print "*.c" to stdout.
185
182
 
183
+ When the external program returns with an exit code other than 0,
184
+ Rant will abort with an error message. Sometimes this is not
185
+ desirable. E.g. the +diff+, which compares two files, returns 0 if
186
+ the files are equal, 1 if have differences and something else if an
187
+ error occurs. Rant allows you to handle/ignore the exit code of a
188
+ program yourself. Example:
189
+
190
+ task :diff do |t|
191
+ sys "diff -u a/util.c b/util.c > util.diff" do |ps|
192
+ # ps is an instance of Process::Status
193
+ case ps.exitstatus
194
+ when 0:
195
+ puts "a/util.c and b/util.c are equal"
196
+ when 1:
197
+ puts "a/util.c and b/util.c are not equal"
198
+ else
199
+ t.fail "diff error"
200
+ end
201
+ end
202
+ end
203
+
204
+
186
205
  3. <b>Selecting files</b>
187
206
 
188
207
  To select files with the help of glob patterns use +sys+ with the
@@ -401,11 +420,15 @@ Rantfile. Simply put a +subdirs+ command into the src/Rantfile. Rant
401
420
  integrates well into your file system :)
402
421
 
403
422
  If you want to refer to a task in the main Rantfile from a subdir
404
- Rantfile, put a # in front of the task name:
405
- task "a" => "#b"
423
+ Rantfile, put a <tt>@</tt> in front of the task name:
424
+ task "a" => "@b"
406
425
  But note that this Rantfile won't work as a standalone buildfile,
407
426
  because it refers to a main Rantfile.
408
427
 
428
+ For further documentation about managing build files in project
429
+ subdirectories, read
430
+ doc/subdirs.rdoc[link:files/doc/subdirs_rdoc.html].
431
+
409
432
  == See also
410
433
 
411
434
  Advanced Rantfiles::
data/doc/subdirs.rdoc ADDED
@@ -0,0 +1,147 @@
1
+
2
+ == Buildfiles in subdirectories
3
+
4
+ When a software project grows, it is often desired to split the build
5
+ file up and create multiple buildfiles, e.g. one per directory. Rant
6
+ has support for this case built in (unlike make). Part of this support
7
+ is the +subdirs+ command which is described in
8
+ doc/rantfile.rdoc[link:files/doc/rantfile_rdoc.html]. This section
9
+ will describe one possible technique.
10
+
11
+ First, a project needs to have a so called "root Rantfile". This file
12
+ lives in the top directory of the project and is called +Rantfile+ or
13
+ <tt>root.rant</tt>. Each subdirectory which needs specialized tasks,
14
+ has a buildfile called <tt>sub.rant</tt>.
15
+
16
+ A simple example would be a Ruby project where the test task(s) are
17
+ defined in a seperate buildfile in the +test+ directory. The
18
+ directory structure could look like:
19
+
20
+ rubyproject/
21
+ README
22
+ root.rant
23
+ bin/
24
+ ... some scripts
25
+ lib/
26
+ ... ruby library scripts
27
+ test/
28
+ sub.rant
29
+ tc_reader.rb
30
+ tc_writer.rb
31
+ tc_filter.rb
32
+ tc_metautils.rb
33
+
34
+ The project has one <tt>root.rant</tt> file and any number of
35
+ <tt>sub.rant</tt> files (in this case only one). In root.rant we
36
+ define tasks for packaging, installation, cleanup, etc. and in the
37
+ test/sub.rant file we define tasks that run unit tests.
38
+
39
+ <tt>root.rant</tt> could look like:
40
+
41
+ import "md5" # use MD5 checksums instead of timestamps, optional
42
+ import "rubypackage", "rubydoc", "autoclean"
43
+
44
+ # reference the "all" task defined in test/sub.rant
45
+ task :default => "test/all"
46
+
47
+ desc "Create package for distribution."
48
+ gen RubyPackage, "foo" do |t|
49
+ t.version = "1.0.1"
50
+ t.summary = "Foo is a ruby library and program for ..."
51
+ t.files = sys["bin/*", "lib/**/*.rb", "test/tc_*.rb", "**/*.rant"].shun("pkg")
52
+ t.package_task
53
+ end
54
+
55
+ desc "Generate HTML docs."
56
+ gen RubyDoc
57
+
58
+ desc "Remove generated files and directories."
59
+ gen AutoClean, :clobber
60
+
61
+ # read test/sub.rant
62
+ subdirs "test"
63
+
64
+ and <tt>test/sub.rant</tt> contains:
65
+
66
+ desc "Run all unit tests."
67
+ task :all do
68
+ sys "testrb", sys["tc_*.rb"]
69
+ end
70
+
71
+ desc "Run IO related unit tests."
72
+ task :io do
73
+ sys "testrb tc_reader.rb tc_writer.rb"
74
+ end
75
+
76
+ desc "Test internals."
77
+ task :internals do
78
+ sys "testrb tc_filter.rb tc_metautils.rb"
79
+ end
80
+
81
+ Now we run from the shell:
82
+
83
+ First let rant list all public tasks:
84
+
85
+ <rubyproject> $ rant -T
86
+ rant # => test/all
87
+ rant package # Create package for distribution.
88
+ rant doc # Generate HTML docs.
89
+ rant clobber # Remove generated files and directories.
90
+ rant test/all # Run all unit tests.
91
+ rant test/io # Run IO related unit tests.
92
+ rant test/internals # Test internals.
93
+
94
+ We see that if we run rant without arguments, it will run the test/all
95
+ task.
96
+
97
+ Change to the test directory:
98
+
99
+ <rubyproject> $ cd test
100
+ <test> $ rant -T
101
+ (root is /home/stefan/Ruby/misc/rant/rbtest, in test)
102
+ rant all # Run all unit tests.
103
+ rant io # Run IO related unit tests.
104
+ rant internals # Test internals.
105
+ rant @package # Create package for distribution.
106
+ rant @doc # Generate HTML docs.
107
+ rant @clobber # Remove generated files and directories.
108
+
109
+ If rant is started from a directory with a sub.rant file, it searches
110
+ upwards in the directory tree until it finds a file called +Rantfile+
111
+ or <tt>root.rant</tt>. This file will be read first, the directory
112
+ which contains this file is viewed as the projects root directory.
113
+ Then it ensures that the sub.rant file in the current directory is
114
+ read and starts operating. Task names given on the commandline are
115
+ interpreted relative to the current directory. Tasks defined in other
116
+ directories can be referenced by prepending them with an <tt>@</tt>
117
+ character.
118
+
119
+ To run the IO related tests from the test directory we type:
120
+
121
+ <test> $ rant io
122
+ (root is /home/stefan/Ruby/misc/rant/rbtest, in test)
123
+ testrb tc_reader.rb tc_writer.rb
124
+ ... output of testrb ...
125
+
126
+ To run the clobber task from the test directory:
127
+
128
+ <test> $ rant @clobber
129
+ (root is /home/stefan/Ruby/misc/rant/rbtest, in test)
130
+ (in /home/stefan/Ruby/misc/rant/rbtest)
131
+ rm -f ...
132
+ ... more output ...
133
+
134
+ == See also
135
+
136
+ Rantfile basics::
137
+ doc/rantfile.rdoc[link:files/doc/rantfile_rdoc.html]
138
+ Advanced Rantfiles::
139
+ doc/advanced.rdoc[link:files/doc/advanced_rdoc.html]
140
+ Support for C/C++::
141
+ doc/c.rdoc[link:files/doc/c_rdoc.html]
142
+ Packaging::
143
+ doc/package.rdoc[link:files/doc/package_rdoc.html]
144
+ Ruby project howto::
145
+ doc/rubyproject.rdoc[link:files/doc/rubyproject_rdoc.html]
146
+ Rant Overview::
147
+ README[link:files/README.html]