rant 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. data/COPYING +504 -0
  2. data/README +203 -0
  3. data/Rantfile +104 -0
  4. data/TODO +19 -0
  5. data/bin/rant +12 -0
  6. data/bin/rant-import +12 -0
  7. data/devel-notes +50 -0
  8. data/doc/configure.rdoc +40 -0
  9. data/doc/csharp.rdoc +74 -0
  10. data/doc/rant-import.rdoc +32 -0
  11. data/doc/rant.rdoc +24 -0
  12. data/doc/rantfile.rdoc +227 -0
  13. data/doc/rubyproject.rdoc +210 -0
  14. data/lib/rant.rb +9 -0
  15. data/lib/rant/cs_compiler.rb +334 -0
  16. data/lib/rant/import.rb +291 -0
  17. data/lib/rant/import/rubydoc.rb +125 -0
  18. data/lib/rant/import/rubypackage.rb +417 -0
  19. data/lib/rant/import/rubytest.rb +97 -0
  20. data/lib/rant/plugin/README +50 -0
  21. data/lib/rant/plugin/configure.rb +345 -0
  22. data/lib/rant/plugin/csharp.rb +275 -0
  23. data/lib/rant/plugin_methods.rb +41 -0
  24. data/lib/rant/rantenv.rb +217 -0
  25. data/lib/rant/rantfile.rb +664 -0
  26. data/lib/rant/rantlib.rb +1118 -0
  27. data/lib/rant/rantsys.rb +258 -0
  28. data/lib/rant/rantvar.rb +82 -0
  29. data/rantmethods.rb +79 -0
  30. data/run_import +7 -0
  31. data/run_rant +7 -0
  32. data/setup.rb +1360 -0
  33. data/test/Rantfile +2 -0
  34. data/test/plugin/configure/Rantfile +47 -0
  35. data/test/plugin/configure/test_configure.rb +58 -0
  36. data/test/plugin/csharp/Hello.cs +10 -0
  37. data/test/plugin/csharp/Rantfile +30 -0
  38. data/test/plugin/csharp/src/A.cs +8 -0
  39. data/test/plugin/csharp/src/B.cs +8 -0
  40. data/test/plugin/csharp/test_csharp.rb +99 -0
  41. data/test/project1/Rantfile +127 -0
  42. data/test/project1/test_project.rb +203 -0
  43. data/test/project2/buildfile +14 -0
  44. data/test/project2/rantfile.rb +20 -0
  45. data/test/project2/sub1/Rantfile +12 -0
  46. data/test/project2/test_project.rb +87 -0
  47. data/test/project_rb1/README +14 -0
  48. data/test/project_rb1/bin/wgrep +5 -0
  49. data/test/project_rb1/lib/wgrep.rb +56 -0
  50. data/test/project_rb1/rantfile.rb +30 -0
  51. data/test/project_rb1/test/tc_wgrep.rb +21 -0
  52. data/test/project_rb1/test/text +3 -0
  53. data/test/project_rb1/test_project_rb1.rb +153 -0
  54. data/test/test_env.rb +47 -0
  55. data/test/test_filetask.rb +57 -0
  56. data/test/test_lighttask.rb +49 -0
  57. data/test/test_metatask.rb +29 -0
  58. data/test/test_rant_interface.rb +65 -0
  59. data/test/test_sys.rb +61 -0
  60. data/test/test_task.rb +115 -0
  61. data/test/toplevel.rf +11 -0
  62. data/test/ts_all.rb +4 -0
  63. data/test/tutil.rb +95 -0
  64. metadata +133 -0
data/doc/csharp.rdoc ADDED
@@ -0,0 +1,74 @@
1
+
2
+ == Compiling C# sources
3
+
4
+ Support for C# is currently implemented as plugin. But expect that to
5
+ change in the near future. Also note that support for C# wasn't
6
+ heavily tested (but it works because I'm using it).
7
+
8
+ It is convinient to use the C# plugin in combination with the
9
+ Configure plugin. I'll show a short Rantfile first and explain it
10
+ afterwards.
11
+
12
+ conf = plugin :Configure do |conf|
13
+ desc "Configure build."
14
+ conf.task
15
+ desc "Interactive configure."
16
+ conf.task "ask-config", [:interact]
17
+ conf.init_modes = [:guess, :interact]
18
+ end
19
+
20
+ plugin :Csharp do |cs|
21
+ cs.config = conf
22
+ end
23
+
24
+ gen Assembly, "myprog.exe" do |t|
25
+ t.libs = %w(System.Drawing.dll System.Windows.Forms.dll)
26
+ t.sources = Dir["src/*.cs"]
27
+ t.resources = Dir["res/*.*"]
28
+ end
29
+
30
+ First we instantiate the Configure plugin and let it define two tasks
31
+ for us:
32
+ <tt>conf.task</tt>:: Creates a task with the name "configure" which
33
+ will first guess values and ask the user as
34
+ fallback if it can't guess the value.
35
+ <tt>conf.task "ask-config", [:interact]</tt>::
36
+ This task interactively asks the user for all values.
37
+ Afterwards we set the +init_modes+. Those decide what will be done on
38
+ a regular rant startup if the +config+ file doesn't exist. We tell it
39
+ to first guess configure values and to fall back to interactive mode
40
+ if necessary.
41
+
42
+ Then we instantiate the Csharp plugin and connect it with the
43
+ Configure plugin. As a result of this operation, the Csharp plugin
44
+ will define three configure _checks_:
45
+ 1. The command to invoke the C# compiler.
46
+ 2. If optimization should be turned on.
47
+ 3. If debug information should be generated.
48
+
49
+ And last but not least we let generate a task to compile our program
50
+ <tt>myprog.exe</tt>. The +Assembly+ generator takes the same argument
51
+ as a normal task, meaning you could also add prerequisites:
52
+ gen Assembly, "myprog.exe" => :pre do |t|
53
+ .
54
+ .
55
+ .
56
+ The +libs+ attribute is a list of libraries the assembly will be
57
+ linked against, the +sources+ attribute should be clear and the
58
+ +resources+ attribute is a list of resources to be embedded in the
59
+ assembly.
60
+
61
+ Now let's see what is actually done by rant when we feed it this
62
+ Rantfile. Because we have only one task defined, there is no need to
63
+ specify a task on the commandline:
64
+ % rant
65
+ cscc -o myprog.exe -Wall -O2 -l System.Drawing.dll -l System.Windows.Forms.dll -fresources=res/MyProg.legend.png src/MyProg.cs src/Util.cs
66
+ This was on a Linux system, on Windows you'll probably see a command
67
+ with csc.
68
+
69
+ == See also
70
+
71
+ Rant Overview::
72
+ README[link:files/README.html]
73
+ Writing an Rantfile::
74
+ doc/rantfile.rdoc[link:files/doc/rantfile_rdoc.html]
@@ -0,0 +1,32 @@
1
+
2
+ == The rant-import command
3
+
4
+ The rant-import command creates a monolithic rant script tailored to
5
+ the needs of your project and thus removes the dependency on an Rant
6
+ installation (but of course one person needs an Rant installation to
7
+ run rant-import).
8
+
9
+ Just run the command with the <tt>--help</tt> option to get a brief
10
+ help message:
11
+ % rant-import --help
12
+
13
+ Probably the easiest way to create your monolithic rant script is with
14
+ the <tt>--auto</tt> option:
15
+ % rant-import --auto ant
16
+ This will write a monolithic rant script to the file +ant+ in the
17
+ current directory. To determine which plugins and imports your project
18
+ is using, it performs step 2 of the rant command as described in
19
+ doc/rant.rdoc[link:files/doc/rant_rdoc.html], which means that it
20
+ loads the Rantfile in the current directory.
21
+
22
+ That one command should be enough, try it out:
23
+ % ruby ant
24
+ This script has the same behaviour as the rant command. Distribute it
25
+ with your project and nobody else but you needs an Rant installation.
26
+
27
+ == See also
28
+
29
+ Rant Overview::
30
+ README[link:files/README.html]
31
+ Writing an Rantfile::
32
+ doc/rantfile.rdoc[link:files/doc/rantfile_rdoc.html]
data/doc/rant.rdoc ADDED
@@ -0,0 +1,24 @@
1
+
2
+ == The *rant* program
3
+
4
+ For a short usage message and a list of options invoke rant with the
5
+ <tt>--help</tt> option:
6
+ % rant --help
7
+
8
+ When you invoke rant on the commandline it performs the following
9
+ steps (roughly):
10
+
11
+ 1. Process commandline options and arguments.
12
+ An option starts with two dashes or one for the single letter
13
+ equivalent. Arguments of the form <tt>VAR=VAL</tt> set environment
14
+ variables. All other arguments are names of tasks to be invoked.
15
+ 2. Load Rantfiles in working directory. Rantfiles with the following
16
+ names are recognized:
17
+ Rantfile
18
+ rantfile
19
+ Rantfile.rb
20
+ rantfile.rb
21
+ 3. Calculate task dependencies and invoke required tasks. If no task
22
+ was given on the commandline, a task called "default" will be
23
+ invoked. If the "default" task doesn't exist, the first task will
24
+ be invoked.
data/doc/rantfile.rdoc ADDED
@@ -0,0 +1,227 @@
1
+
2
+ == How to write an *Rantfile*
3
+
4
+ As already mentioned, an Rantfile is a Ruby script. Additionally, Rant
5
+ provides methods and classes which aid you in automating your work.
6
+
7
+ Centric to the processing done by Rant is the *task*. The Rantfile
8
+ defines tasks and their dependencies, Rant invokes the required tasks.
9
+
10
+ Also important is the <b>Rant application</b>. When the rant command
11
+ starts, it instantiates one Rant application which will read one or
12
+ more Rantfiles. The Rantfile communicates with the following list of
13
+ methods with the Rant application:
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+:: When given argument(s), runs an external program.
30
+ Otherwise you can call methods to interact with the OS
31
+ on it.
32
+ +source+:: Takes a filename as argument and causes Rant to read
33
+ it in as Rantfile.
34
+
35
+ === Defining a task
36
+
37
+ Just call the +task+ function and give it a task name as argument. The
38
+ task name may be a string or symbol:
39
+ task :taskname
40
+ That's it, your first task. Not very usefull, because it doesn't do
41
+ anything. To associate an action with the task, add a block:
42
+ task :mytask do
43
+ puts "Hello, mytask running."
44
+ end
45
+ Put these 3 lines of code into an Rantfile and run rant:
46
+ % rant mytask
47
+ Hello, mytask running.
48
+ Note: you could have ommited the mytask argument to rant because it is
49
+ the only task in the Rantfile.
50
+
51
+ You can add a block parameter which will be a reference to the created
52
+ task:
53
+ task :mytask do |t|
54
+ puts t.name
55
+ end
56
+ Running rant now:
57
+ % rant
58
+ mytask
59
+
60
+ Add prerequisites to create relations between tasks:
61
+ task :first => [:t1, :t2] do
62
+ puts t.name
63
+ end
64
+ task :t1 do |t|
65
+ puts t.name
66
+ end
67
+ task :t2 do |t|
68
+ puts t.name
69
+ end
70
+ In the definition of the "first" task we told Rant that it +depends+
71
+ on task "t1" and task "t2". "t1" and "t2" are called prerequisites for
72
+ "first". Try it out:
73
+ % rant first
74
+ t1
75
+ t2
76
+ first
77
+ % rant t1
78
+ t1
79
+ % rant t2
80
+ t2
81
+
82
+ === Defining a file task
83
+
84
+ You will notice that rant will run the actions for a normal task
85
+ always its name is given on the commandline or it is required by
86
+ another task. Often you want to create a file, e.g. a program by
87
+ invoking a compiler. In this case, the action needs only to be run if
88
+ the source files (prerequisites) have changed. Use a file task instead
89
+ of a normal task.
90
+
91
+ In this example we use the <tt>sys.touch</tt> method to test our file
92
+ task. (This method works the same as the Unix touch command: Update
93
+ the modification time of a file or create an empty file):
94
+ file "testfile" do |t|
95
+ sys.touch t.name
96
+ end
97
+ Now run rant:
98
+ % rant
99
+ touch testfile
100
+ This would have been the same with a normal task. But now run rant a
101
+ second time:
102
+ % rant
103
+ This time rant doesn't run the action, because "testfile" is up to
104
+ date. Of course you can add prerequisites the same way as for a normal
105
+ task. Additionally you can add filenames as prerequisites. Assuming
106
+ the files "a.o" and "b.o" are in the same directory as the Rantfile:
107
+ file "myprog" => %w(a.o b.o) do |t|
108
+ sys %w(cc -o), t.name, t.prerequisites
109
+ end
110
+ Running rant:
111
+ % rant
112
+ cc -o myprog a.o b.o
113
+ Running a second time:
114
+ % rant
115
+ Does nothing, myprog is up to date.
116
+ Don't be irritated by the <tt>%w()</tt> syntax. It creates a list of
117
+ strings. The following expressions are equivalent:
118
+ ["a", "b", "c"]
119
+ %w(a b c)
120
+
121
+ === Adding task descriptions
122
+
123
+ The +desc+ function lets you describe your tasks. A small example
124
+ Rantfile:
125
+ # Generate C source file ls.c with the xgen command.
126
+ file "ls.c" => %w(ls1.x ls2.x) do |t|
127
+ sys %w(xgen -o), t.name, t.prerequisites
128
+ end
129
+
130
+ desc "Build ls program."
131
+ file "ls" => "ls.c" do
132
+ sys "cc -o ls ls.c"
133
+ end
134
+
135
+ desc "Remove autogenerated files."
136
+ task :clean do
137
+ sys.rm_f %w(ls.c ls)
138
+ end
139
+ (Note that xgen is a hypothetical command ;)
140
+ The <tt>--tasks</tt> (or the short form, <tt>-T</tt>) option of rant
141
+ shows this descriptions:
142
+ % rant -T
143
+ rant ls # Build ls program.
144
+ rant clean # Remove autogenerated files.
145
+ Only the tasks which have a description are listed.
146
+
147
+ === The +sys+ function
148
+
149
+ After using the +sys+ function quite often in the examples, I should
150
+ explain it a little bit. The +sys+ function can be used in two ways:
151
+
152
+ The first form is with no arguments. It returns an object on which you
153
+ can invoke the methods of the +FileUtils+ module that comes with ruby.
154
+ Examples are:
155
+ sys.rm "file1", "file2", ... # remove files
156
+ sys.cp "src", "dest" # copy from "src" do "dest"
157
+ sys.mkdir "dir" # create directory "dir"
158
+ For a list of all available methods invoke ri:
159
+ % ri FileUtils
160
+ which will also show documentation for them.
161
+ Additionally you have the following methos which are not in the
162
+ FileUtils module:
163
+ sys.ruby "arg1", "arg2", ... # invoke the ruby interpreter
164
+ sys.safe_ln "src", "dest" # create a hardlink or fall back to
165
+ # copying
166
+ If you're tired of typing <tt>sys.</tt> all the time, you can include
167
+ the +Sys+ module in your Rantfile:
168
+ include Sys
169
+ task :clean do
170
+ rm_f "myprog"
171
+ end
172
+ Then you can invoke these methods without the <tt>sys</tt> function.
173
+
174
+ === Generators
175
+
176
+ The *gen* function takes a generator which usually creates one or more
177
+ tasks for you. Currently are two generators immediately available:
178
+ +Directory+:: Create directories.
179
+ +Task+:: Define custom task.
180
+
181
+ === The +Directory+ generator
182
+
183
+ An example usage of the +Directory+ generator would be the backup
184
+ example shown in the README file:
185
+ file "misc/backup/data" => %w(misc/backup data) do |t|
186
+ sys.cp "data", t.name
187
+ end
188
+
189
+ gen Directory, "misc/backup"
190
+ Now rant will create the directories "misc" and "backup" on demand.
191
+ Assuming "misc/backup" doesn't exist:
192
+ % rant
193
+ mkdir misc
194
+ mkdir misc/backup
195
+ cp data misc/backup/data
196
+
197
+ === The +Task+ generator
198
+
199
+ The +Task+ generator allows you to determine by hand when your task
200
+ action needs to be run:
201
+ desc "Install with setup.rb"
202
+ gen Task, :install do |t|
203
+ t.needed { !File.exist? "InstalledFiles" }
204
+ t.act do
205
+ sys.ruby "setup.rb"
206
+ end
207
+ end
208
+ The +act+ block of the "install" task will only be run if
209
+ "InstalledFiles" doesn't exist. Of course you can add prerequisites
210
+ like with any other task.
211
+
212
+ === Importing additional generators
213
+
214
+ The +import+ function lets you import additional generators.
215
+ Currently the following are coming with Rant:
216
+ +RubyTest+:: Run Test::Unit tests for your Ruby code.
217
+ +RubyDoc+:: Run RDoc.
218
+ +RubyPackage+:: Generate tar, zip and gem packages of your Ruby
219
+ application/library.
220
+ As these are all Ruby specific, please read the Ruby project howto.
221
+
222
+ == See also
223
+
224
+ Rant Overview::
225
+ README[link:files/README.html]
226
+ Ruby project howto::
227
+ doc/rubyproject.rdoc[link:files/doc/rubyproject_rdoc.html]
@@ -0,0 +1,210 @@
1
+
2
+ == Ruby project howto
3
+
4
+ This section is a brief howto for automating some common tasks like
5
+ running rdoc, unit tests and packaging.
6
+
7
+ We are assuming a project with the following directories and files:
8
+ Rantfile
9
+ README
10
+ bin/
11
+ wgrep
12
+ lib/
13
+ wgrep.rb
14
+ test/
15
+ tc_wgrep.rb
16
+ You can find this little project in test/project_rb1 directory of the
17
+ Rant package. You'll probably have more files in your project, but we
18
+ will try to write our Rantfile as generic as possible:
19
+
20
+ import %w(rubytest rubydoc rubypackage)
21
+
22
+ lib_files = Dir["lib/**/*.rb"]
23
+ dist_files = lib_files + %w(rantfile.rb README) + Dir["{test,bin}/*"]
24
+
25
+ desc "Run unit tests."
26
+ gen RubyTest do |t|
27
+ t.test_dir = "test"
28
+ t.pattern = "tc_*.rb"
29
+ end
30
+
31
+ desc "Generate html documentation."
32
+ gen RubyDoc do |t|
33
+ t.opts = %w(--title wgrep --main README README)
34
+ end
35
+
36
+ desc "Create packages."
37
+ gen RubyPackage, :wgrep do |t|
38
+ t.version = "1.0.0"
39
+ t.summary = "Simple grep program."
40
+ t.files = dist_files
41
+ t.bindir = "bin"
42
+ t.executable = "wgrep"
43
+ t.package_task
44
+ end
45
+
46
+ task :clean do
47
+ sys.rm_rf %w(doc pkg)
48
+ end
49
+
50
+ To verify how our tasks are named:
51
+ % rant -T
52
+ rant test # Run unit tests.
53
+ rant doc # Generate html documentation.
54
+ rant package # Create packages.
55
+
56
+ Let's examine the code by running the tasks:
57
+ % rant test
58
+ cd test
59
+ ruby -I /home/stefan/Ruby/lib/rant/test/project_rb1/lib -S testrb tc_wgrep.rb
60
+ Loaded suite tc_wgrep.rb
61
+ Started
62
+ .
63
+ Finished in 0.004588 seconds.
64
+
65
+ 1 tests, 2 assertions, 0 failures, 0 errors
66
+ cd -
67
+ The +RubyTest+ generator automatically added the +lib+ directory to
68
+ the LOAD_PATH for testing. Because we have set the +test_dir+ to
69
+ "test", it changes to the +test+ directory, evaluates the +pattern+ to
70
+ collect the testcases and then runs the _testrb_ command.
71
+
72
+ To format the documentation:
73
+ % rant doc
74
+
75
+ README:
76
+ wgrep.rb: mcc....
77
+ Generating HTML...
78
+
79
+ Files: 2
80
+ Classes: 2
81
+ Modules: 1
82
+ Methods: 4
83
+ Elapsed: 0.335s
84
+ All of this output originates from RDoc. The +RubyDoc+ generator gives
85
+ the +lib+ directory and additionally the +opts+ we have set to RDoc.
86
+
87
+ The most interesting task is the +package+ task:
88
+ % rant package
89
+ mkdir pkg
90
+ mkdir pkg/wgrep-1.0.0
91
+ mkdir -p pkg/wgrep-1.0.0/lib
92
+ mkdir -p pkg/wgrep-1.0.0/test
93
+ mkdir -p pkg/wgrep-1.0.0/bin
94
+ ln lib/wgrep.rb pkg/wgrep-1.0.0/lib/wgrep.rb
95
+ ln rantfile.rb pkg/wgrep-1.0.0/rantfile.rb
96
+ ln README pkg/wgrep-1.0.0/README
97
+ ln test/text pkg/wgrep-1.0.0/test/text
98
+ ln test/tc_wgrep.rb pkg/wgrep-1.0.0/test/tc_wgrep.rb
99
+ ln bin/wgrep pkg/wgrep-1.0.0/bin/wgrep
100
+ touch pkg/wgrep-1.0.0
101
+ cd pkg
102
+ tar zcf wgrep-1.0.0.tar.gz wgrep-1.0.0
103
+ cd -
104
+ cd pkg
105
+ zip -yqr wgrep-1.0.0.zip wgrep-1.0.0
106
+ cd -
107
+ Successfully built RubyGem
108
+ Name: wgrep
109
+ Version: 1.0.0
110
+ File: wgrep-1.0.0.gem
111
+ mv wgrep-1.0.0.gem pkg
112
+ This is what it does on my machine:
113
+ 1. Link all package files to the new folder <tt>pkg/wgrep-1.0.0</tt>.
114
+ 2. Create a tar.gz file in the +pkg+ directory with the tar command.
115
+ 3. Create a .zip file in the +pkg+ directory with the zip command.
116
+ 4. Create a RubyGem in +pkg+.
117
+ The .zip file will only be created if the +zip+ command is available.
118
+ The .tar.gz file will only be created if the +tar+ command is
119
+ available. And the RubyGem will only be created if RubyGems is
120
+ available on your system.
121
+
122
+ The gem specification also contains the RDoc options we have given to
123
+ the +RubyDoc+ generator and the +has_rdoc+ attribute is set to true.
124
+ No need to duplicate this information in our Rantfile.
125
+
126
+ === More about the RubyPackage generator
127
+
128
+ The argument given to the RubyPackage generator is used as package
129
+ name (here "wgrep") and may be a symbol or string:
130
+ gen RubyPackage, :wgrep do |t|
131
+
132
+ The line which actually creates the package task(s) is this one:
133
+ t.package_task
134
+ Optionally you may give it a task name as argument:
135
+ t.package_task :release
136
+ Now you can run rant with the argument "release" for packaging:
137
+ % rant release
138
+
139
+ If you want to change the package directory (which defaults to +pkg+)
140
+ you can set the +pkg_dir+ attribute:
141
+ t.pkg_dir = "packages"
142
+ t.package_task
143
+
144
+ Perhaps you want to specify explicetely what packages you want to
145
+ build. To accomplish this, each of the following methods listed takes
146
+ an optional task name as argument:
147
+ t.tar_task # create tar.gz archive, task name defaults to "tar"
148
+ t.zip_task # create zip archive, task name defaults to "zip"
149
+ t.gem_task # create gem, task name defaults to "gem"
150
+ An example would be:
151
+ desc "Create tar.gz package."
152
+ t.tar_task :archive
153
+ desc "Create RubyGem."
154
+ t.gem_task
155
+ # Not required: Creates a shortcut for the previously defined
156
+ # package tasks ("archive" and "gem")
157
+ desc "Create packages."
158
+ t.package_task
159
+
160
+ In our example we had only a few attributes for our package. Here are
161
+ following two lists with the available attributes.
162
+ * Attributes that take a single argument:
163
+ name
164
+ date
165
+ description
166
+ email
167
+ has_rdoc
168
+ homepage
169
+ platform
170
+ required_ruby_version
171
+ rubyforge_project
172
+ summary
173
+ version
174
+ * Attributes that take one or more values (if you give a single value
175
+ it will automatically be converted to a list):
176
+ author
177
+ bindir
178
+ executable
179
+ extension
180
+ files
181
+ rdoc_options
182
+ requires
183
+ test_files
184
+ test_suite
185
+ The attributes can also be set without the assignment operator:
186
+ t.executable "mybin"
187
+
188
+ Additionally to all this attributes you can explicitely set an
189
+ attribute for the gem specification by preceding it with +gem_+:
190
+ t.gem_autorequire = "myproject"
191
+
192
+ === More about the RubyDoc generator
193
+
194
+ If an argument is given to the RubyDoc generator, it will be used as
195
+ task name. The output directory for the html files defaults to +doc+.
196
+ To change this set the +dir+ attribute:
197
+ desc "Generate html documentation."
198
+ gen RubyDoc, :html do |t|
199
+ t.dir = "doc/html"
200
+ As rant invokes RDoc programmatically, no command is printed when the
201
+ task is run. If you want to see one, set the verbose attribute to
202
+ +true+:
203
+ t.verbose = true
204
+
205
+ == See also
206
+
207
+ Rant Overview::
208
+ README[link:files/README.html]
209
+ Writing an Rantfile::
210
+ doc/rantfile.rdoc[link:files/doc/rantfile_rdoc.html]