rant 0.3.8 → 0.4.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 (55) hide show
  1. data/NEWS +19 -0
  2. data/README +51 -24
  3. data/Rantfile +7 -8
  4. data/doc/advanced.rdoc +3 -1
  5. data/doc/package.rdoc +280 -0
  6. data/doc/rantfile.rdoc +9 -19
  7. data/doc/rubyproject.rdoc +24 -16
  8. data/lib/rant/archive/minitar.rb +983 -0
  9. data/lib/rant/archive/rubyzip/ioextras.rb +122 -0
  10. data/lib/rant/archive/rubyzip/stdrubyext.rb +114 -0
  11. data/lib/rant/archive/rubyzip/tempfile_bugfixed.rb +195 -0
  12. data/lib/rant/archive/rubyzip.rb +1575 -0
  13. data/lib/rant/import/archive/tgz.rb +49 -0
  14. data/lib/rant/import/archive/zip.rb +67 -0
  15. data/lib/rant/import/archive.rb +312 -0
  16. data/lib/rant/import/autoclean.rb +2 -2
  17. data/lib/rant/import/c/dependencies.rb +3 -3
  18. data/lib/rant/import/clean.rb +1 -1
  19. data/lib/rant/import/directedrule.rb +1 -1
  20. data/lib/rant/import/package/tgz.rb +35 -0
  21. data/lib/rant/import/package/zip.rb +36 -0
  22. data/lib/rant/import/rubydoc.rb +1 -1
  23. data/lib/rant/import/rubypackage.rb +19 -77
  24. data/lib/rant/import/rubytest.rb +1 -1
  25. data/lib/rant/import/subfile.rb +28 -14
  26. data/lib/rant/import/win32/rubycmdwrapper.rb +1 -1
  27. data/lib/rant/import.rb +36 -16
  28. data/lib/rant/plugin/csharp.rb +1 -1
  29. data/lib/rant/rantenv.rb +2 -13
  30. data/lib/rant/rantfile.rb +11 -11
  31. data/lib/rant/rantlib.rb +7 -3
  32. data/lib/rant/rantsys.rb +53 -2
  33. data/lib/rant/rantvar.rb +62 -1
  34. data/misc/TODO +41 -0
  35. data/{devel-notes → misc/devel-notes} +6 -0
  36. data/misc/mt.rb +3 -0
  37. data/misc/t.rb +18 -0
  38. data/test/import/c/dependencies/test_c_dependencies.rb +18 -0
  39. data/test/import/package/MANIFEST +4 -0
  40. data/test/import/package/Rantfile +49 -0
  41. data/test/import/package/deep/sub/sub/f1 +1 -0
  42. data/test/import/package/sub/f1 +1 -0
  43. data/test/import/package/sub2/f1 +1 -0
  44. data/test/import/package/test_package.rb +425 -0
  45. data/test/import/subfile/Rantfile +8 -0
  46. data/test/import/subfile/test_subfile.rb +12 -0
  47. data/test/project_rb1/rantfile.rb +3 -4
  48. data/test/project_rb1/test_project_rb1.rb +16 -40
  49. data/test/rant-import/test_rant-import.rb +3 -3
  50. data/test/test_filelist.rb +39 -2
  51. data/test/tutil.rb +89 -3
  52. metadata +35 -6
  53. data/TODO +0 -21
  54. data/lib/rant/import/package.rb +0 -258
  55. /data/{rantmethods.rb → misc/rantmethods.rb} +0 -0
data/NEWS CHANGED
@@ -1,6 +1,25 @@
1
1
 
2
2
  = Rant NEWS
3
3
 
4
+ == Rant 0.4.0
5
+
6
+ Unless you extended Rant with a custom generator, you can upgrade from
7
+ 0.3.8 without changing any dependent code.
8
+
9
+ Incompatible changes:
10
+ * _Internal_: A generator has to respond to +rant_gen+ instead of
11
+ +rant_generate+.
12
+
13
+ New features:
14
+ * Creating zip and gzipped tar archives on all supported platforms
15
+ without installing extra software. Seamless integration with
16
+ rant-import.
17
+ Read doc/package.rdoc[link:files/doc/package_rdoc.html].
18
+ * The standard RubyPackage tasks create zip and gzipped tar archives
19
+ (and optional gem packages) on all platforms, including Windows,
20
+ now.
21
+ * rant-import recognizes the new directives +uncomment+ and +remove+.
22
+
4
23
  == Rant 0.3.8
5
24
 
6
25
  This version should be fully backwards compatible to 0.3.6.
data/README CHANGED
@@ -12,13 +12,15 @@ Rant currently features:
12
12
  * Defining custom tasks
13
13
  * Automated packaging, testing and RDoc generation for Ruby
14
14
  applications and libraries.
15
+ * The <em>rant-import</em> command creates a monolithic rant script,
16
+ so you don't depend on an rant installation anymore.
17
+ * Creating gzipped tar and zip archives -- without installing
18
+ additional software.
15
19
  * Primitive support for compiling C# sources portably with csc, cscc
16
20
  and mcs.
17
21
  * Dependency checking for C/C++ source files.
18
22
  * A _configure_ plugin for easy environment and build-parameter
19
23
  checking (but not like autoconf!) which saves data in a yaml file.
20
- * The <em>rant-import</em> command creates a monolithic rant script,
21
- so you don't depend on an rant installation anymore.
22
24
 
23
25
  As programmers usually want to see code, here is a short and very
24
26
  basic example of rant usage:
@@ -37,7 +39,7 @@ Running rant in the directory of this file:
37
39
  will ensure that the "data" file in the "backup" directory is up to
38
40
  date.
39
41
 
40
- This document was written for version 0.3.8 of Rant. Most things
42
+ This document was written for version 0.4.0 of Rant. Most things
41
43
  described here will work for older/newer versions of Rant, but look at
42
44
  the README file in the Rant distribution you've installed for exact
43
45
  documentation of your Rant version.
@@ -70,6 +72,8 @@ Independent from Rant? The <tt>rant-import</tt> command::
70
72
  read doc/rant-import.rdoc[link:files/doc/rant-import_rdoc.html]
71
73
  Advanced Rantfiles::
72
74
  read doc/advanced.rdoc[link:files/doc/advanced_rdoc.html]
75
+ Packaging (creating zip/tgz archives)::
76
+ read doc/package.rdoc[link:files/doc/package_rdoc.html]
73
77
  Compiling C/C++::
74
78
  read doc/c.rdoc[link:files/doc/c_rdoc.html]
75
79
  Using the Configure plugin::
@@ -148,38 +152,38 @@ The file COPYING[link:../../COPYING] in the Rant package contains a
148
152
  copy of the LGPL. Of course your Rantfiles don't need to be licenced
149
153
  under the terms of the LGPL.
150
154
 
151
- == Other info
152
-
153
- Rant was started in February 2005. It has been written and is
154
- maintained by Stefan Lang (mailto:langstefan@gmx.at).
155
+ ---
155
156
 
156
- === Why did you write another build tool?
157
+ The file <tt>lib/rant/archive/minitar.rb</tt> is Copyright 2004
158
+ Mauricio Julio Fernandez Pradier and Austin Ziegler. It is licensed
159
+ under the GNU General Public Licence or Ruby's licence.
157
160
 
158
- Because I wasn't satisfied by any other build tool. Before I started
159
- Rant, I had to write a program in C#. The program had to run under
160
- Windows, but I wanted to develop under Linux. Also I decided to write
161
- the documentation in Docbook.
161
+ The file <tt>lib/rant/archive/rubyzip.rb</tt> and the files in the
162
+ <tt>lib/rant/archive/rubyzip</tt> directory were written by Thomas
163
+ Sondergaard. They are distributed under the same license as ruby. See
164
+ http://www.ruby-lang.org/en/LICENSE.txt.
162
165
 
163
- So there where quite a few problems arising:
164
- * I had to compile with cscc on Linux.
165
- * compile with csc on Windows.
166
- * automate PDF and HTML generation from Docbook
166
+ == Other info
167
167
 
168
- _Nant_ would have been ok to compile the C# sources. But it isn't
169
- suited for more general tasks as clueing togheter other programs
170
- (needed for Docbook processing).
168
+ Rant was started in February 2005. It has been written and is
169
+ maintained by Stefan Lang (mailto:langstefan@gmx.at).
171
170
 
172
- Then I tried to use _Rake_ and it was the other way round. I liked the
173
- basic concept and syntax of Rake and of course I could have written
174
- code for Rake (e.g. with a so called _Tasklib_) to support portable C#
175
- compilation. But it was a bit quirky and because I like to work with
176
- Ruby, I decided to write my own build tool.
171
+ === Credits
177
172
 
178
173
  Rant has taken the basic syntax of a _task_ and some other concepts
179
174
  from Rake.
180
175
  So thanks to Jim Weirich, the author of
181
176
  Rake[http://rubyforge.org/projects/rake].
182
177
 
178
+ Rant comes with parts of archive-tar-minitar to create (gzipped) tar
179
+ archives on platforms where no +tar+ command is available.
180
+ archive-tar-minitar is developed by Mauricio Julio Fernandez Pradier
181
+ and Austin Ziegler.
182
+
183
+ Rant comes with parts of rubyzip to create zip archives on platforms
184
+ where no +zip+ command is available. rubyzip is developed by Thomas
185
+ Sondergaard.
186
+
183
187
  === Goals of Rant
184
188
 
185
189
  * Most important is to be a very *flexible* build tool. This currently
@@ -212,3 +216,26 @@ know...
212
216
 
213
217
  If you encounter problems with Rant on any platform (with Ruby 1.8.1
214
218
  or higher) please write a bugreport!
219
+
220
+ === Why did you write another build tool?
221
+
222
+ Because I wasn't satisfied by any other build tool. Before I started
223
+ Rant, I had to write a program in C#. The program had to run under
224
+ Windows, but I wanted to develop under Linux. Also I decided to write
225
+ the documentation in Docbook.
226
+
227
+ So there where quite a few problems arising:
228
+ * I had to compile with cscc on Linux.
229
+ * compile with csc on Windows.
230
+ * automate PDF and HTML generation from Docbook
231
+
232
+ _Nant_ would have been ok to compile the C# sources. But it isn't
233
+ suited for more general tasks as clueing togheter other programs
234
+ (needed for Docbook processing).
235
+
236
+ Then I tried to use _Rake_ and it was the other way round. I liked the
237
+ basic concept and syntax of Rake and of course I could have written
238
+ code for Rake (e.g. with a so called _Tasklib_) to support portable C#
239
+ compilation. But it was a bit quirky and because I like to work with
240
+ Ruby, I decided to write my own build tool.
241
+
data/Rantfile CHANGED
@@ -5,10 +5,9 @@ import %w(rubytest rubydoc rubypackage autoclean win32/rubycmdwrapper)
5
5
 
6
6
  task :default => :test
7
7
 
8
- lib_files = sys["lib/**/*.rb"]
9
- dist_files = sys["{bin,lib,test,doc}/**/*"].shun("html", "coverage") +
10
- sys["*"].no_dir.exclude("InstalledFiles", "Session.vim")
11
- bin_files = sys["bin/*"]
8
+ dist_files = sys["{bin,lib,test,doc,misc}/**/*"]
9
+ dist_files.shun("html", "coverage")
10
+ dist_files += sys["*"].no_dir.exclude("InstalledFiles", "Session.vim")
12
11
  rdoc_opts = %w(-S -c UTF-8 --title Rant --main README)
13
12
 
14
13
  gen RubyPackage, "rant" do |t|
@@ -103,7 +102,6 @@ gen RubyTest, :tall do |g|
103
102
  g.libs << "test"
104
103
  g.test_files = sys["test/**/test_*.rb"]
105
104
  end
106
- task :testall => %w(test testp1 testp2 testrb1 testplugins)
107
105
 
108
106
  desc "Remove autogenerated files."
109
107
  gen AutoClean, :clean
@@ -126,10 +124,11 @@ task "to-win" => :package do
126
124
  win_dir = "/mnt/data_fat/stefan/Ruby"
127
125
  Dir["pkg/*"].each { |f|
128
126
  target = File.join(win_dir, File.basename(f))
129
- (file target => f do |t|
127
+ file target => f do |t|
130
128
  sys.rm_rf target if test(?e, target)
131
129
  sys.cp_r f, t.name
132
- end).invoke
130
+ end
131
+ rac.make target
133
132
  }
134
133
  end
135
134
 
@@ -142,4 +141,4 @@ if Env.on_windows?
142
141
  enhance :install => (gen Win32::RubyCmdWrapper, sys["bin/*"])
143
142
  end
144
143
 
145
- # vim:ft=ruby:
144
+ # vim:ft=ruby
data/doc/advanced.rdoc CHANGED
@@ -101,7 +101,7 @@ Use the +Clean+ generator in your Rantfiles:
101
101
  === Let Rant cleanup for you
102
102
 
103
103
  Use the +AutoClean+ generator which will remove all files generated by
104
- any filetask (include those created by rules):
104
+ any filetask (including those created by rules):
105
105
 
106
106
  import "autoclean"
107
107
 
@@ -285,5 +285,7 @@ Rantfile basics::
285
285
  doc/rantfile.rdoc[link:files/doc/rantfile_rdoc.html]
286
286
  Support for C/C++::
287
287
  doc/c.rdoc[link:files/doc/c_rdoc.html]
288
+ Packaging::
289
+ doc/package.rdoc[link:files/doc/package_rdoc.html]
288
290
  Rant Overview::
289
291
  README[link:files/README.html]
data/doc/package.rdoc ADDED
@@ -0,0 +1,280 @@
1
+
2
+ == Packaging
3
+
4
+ Usually you want to create some archive file(s) to distribute your
5
+ software. Rant supports creation of zip and gzipped tar archives. The
6
+ good news is that you don't have to install any extra software because
7
+ Rant integrates parts of Mauricio Julio Fernandez Pradier and Austin
8
+ Ziegler's archive-tar-minitar and Thomas Sondergaard's rubyzip.
9
+
10
+ Rant provides two techniques, which will be described in the following
11
+ sections.
12
+
13
+ === The Package::* generators
14
+
15
+ The Package namespace provides two generators, namely
16
+ <tt>Package::Tgz</tt> and <tt>Package::Zip</tt>. Let's look at some
17
+ examples to create gzipped tar archives:
18
+
19
+ Put this into your Rantfile:
20
+
21
+ import "package/tgz"
22
+ gen Package::Tgz, "foo", :files => sys["{bin,lib,test}/**/*"]
23
+
24
+ This creates a file task called <tt>foo.tgz</tt>. If you run it with
25
+
26
+ % rant foo.tgz
27
+
28
+ rant will create a directory called <tt>foo</tt>, link all selected
29
+ files (in this case all files under bin/, lib/, test/ and all their
30
+ subdirectories, recursively) to foo/ and then create the archive
31
+ <tt>foo.tgz</tt> from the <tt>foo</tt> directory. This means that the
32
+ archive contains exactly one toplevel directory (<tt>foo</tt>) which
33
+ in turn contains the selected files. Most Open Source software is
34
+ packaged up this way. Also usual is to add a version number to the
35
+ package name:
36
+
37
+ import "package/tgz"
38
+ gen Package::Tgz, "foo", :version => "1.0.1", :files => sys["{bin,lib,test}/**/*"]
39
+
40
+ Now the created file task (and thus the archive file) is called
41
+ <tt>foo-1.0.1.tgz</tt>, and the toplevel directory in the archive is
42
+ called <tt>foo-1.0.1</tt>.
43
+
44
+ TAKE CARE:: If the directory <tt>foo</tt> or whatever the name
45
+ of the package is, exists, it will be removed if
46
+ you invoke the package task!
47
+
48
+ To avoid such clashes, you can tell Rant to place the package in a
49
+ subdirectory, e.g. <tt>pkg</tt>:
50
+
51
+ import "package/tgz"
52
+ gen Package::Tgz, "pkg/foo", :version => "1.0.1", :files => sys["{bin,lib,test}/**/*"]
53
+
54
+ Now the task is called <tt>pkg/foo-1.0.1.tgz</tt>. Rant automatically
55
+ creates the pkg/ directory when required. Behind the scenes, Rant
56
+ defines a <tt>Directory</tt> task for the pkg/ directory.
57
+
58
+ === Cleaning up with AutoClean
59
+
60
+ The AutoClean generator knows which files/directories have been
61
+ created by our packaging tasks. Just put this lines into the Rantfile:
62
+
63
+ import "package/tgz", "autoclean"
64
+
65
+ gen Package::Tgz, "pkg/foo", :version => "1.0.1", :files => sys["{bin,lib,test}/**/*"]
66
+
67
+ gen AutoClean
68
+
69
+ If you invoke rant with <tt>autoclean</tt> as argument now:
70
+ % rant autoclean
71
+ it will recursively remove the +pkg+ and the <tt>foo-1.0.1</tt>
72
+ directories. This could be a problem if you have source files (or
73
+ other precious files) in the pkg/ directory. In this case change the
74
+ syntax to:
75
+
76
+ import "package/tgz", "autoclean"
77
+
78
+ gen Package::Tgz, "pkg", "foo", :version => "1.0.1", :files => sys["{bin,lib,test}/**/*"]
79
+
80
+ gen AutoClean
81
+
82
+ The file name for the package is still <tt>pkg/foo-1.0.1.tgz</tt> like
83
+ in the previous example, but now rant assumes that the +pkg+ directory
84
+ belongs to your source base and doesn't create a Directory task for
85
+ it. If you invoke the +autoclean+ task now, it won't remove the +pkg+
86
+ directory, just the <tt>pkg/foo-1.0.1.tgz</tt> archive and the
87
+ <tt>pkg/foo-1.0.1</tt> directory.
88
+
89
+ <b>If you intend to use AutoClean, you should definitely read
90
+ doc/advanced.rdoc[link:files/doc/advanced_rdoc.html].</b>
91
+
92
+ === Writing a MANIFEST
93
+
94
+ Rant can automatically write a +MANIFEST+ file where it lists all
95
+ files which come into the package. Just give the <tt>:manifest</tt>
96
+ flag:
97
+
98
+ import "package/tgz"
99
+ gen Package::Tgz, "pkg/foo", :manifest,
100
+ :version => "1.0.1",
101
+ :files => sys["{bin,lib,test}/**/*"]
102
+
103
+ Now Rant will write/update a file called +MANIFEST+ whenever the
104
+ package task (<tt>pkg/foo-1.0.1.tgz</tt>) is invoked. +MANIFEST+ will
105
+ then contain a list of all files (each path on a separate line, as
106
+ usual). Of course the +MANIFEST+ file will also be in the archive.
107
+
108
+ You can use another name instead of +MANIFEST+. In the following
109
+ example we use +contents+:
110
+
111
+ import "package/tgz"
112
+ gen Package::Tgz, "pkg/foo",
113
+ :manifest => "contents",
114
+ :version => "1.0.1",
115
+ :files => sys["{bin,lib,test}/**/*"]
116
+
117
+ === Reading a MANIFEST
118
+
119
+ If you manually maintain a MANIFEST file with all files which belong
120
+ to your software package, you can tell Rant to read it:
121
+
122
+ import "package/tgz"
123
+ gen Package::Tgz, "pkg/foo", :manifest, :version => "1.0.1"
124
+
125
+ Because we didn't specify the list of files to package with the
126
+ <tt>:files</tt> option, but gave the <tt>:manifest</tt> flag, Rant
127
+ will read the list of files to package from a file called +MANIFEST+.
128
+
129
+ === Giving a non-standard file extension
130
+
131
+ If you want another file extension than the default <tt>.tgz</tt> or
132
+ <tt>.zip</tt> you can specify it with the <tt>:extension</tt> option:
133
+
134
+ import "package/tgz"
135
+ gen Package::Tgz, "pkg/foo", :manifest,
136
+ :version => "1.0.1",
137
+ :extension => ".tar.gz"
138
+
139
+ === Creating zip packages
140
+
141
+ To create a zip package, use exactly the same syntax and options as
142
+ for tgz packages. Just <tt>import "package/zip"</tt> and use the
143
+ <tt>Pakage::Zip</tt> generator:
144
+
145
+ import "package/zip"
146
+ gen Package::Zip, "foo", :files => sys["{bin,lib,test}/**/*"]
147
+
148
+ This has the same effect as our first example, with the only
149
+ difference that a <tt>foo.zip</tt> archive will be created. As already
150
+ mentioned, you can give the same options and flags as to the
151
+ <tt>Package::Tgz</tt> generator and or course you can use both in the
152
+ same Rantfile:
153
+
154
+ import "package/zip", "package/tgz"
155
+ gen Package::Zip, "foo", :files => sys["{bin,lib,test}/**/*"]
156
+ gen Package::Tgz, "foo", :files => sys["{bin,lib,test}/**/*"]
157
+
158
+ === The Archive::* generators
159
+
160
+ Like the <tt>Package::</tt> namespace, the <tt>Archive::</tt>
161
+ namespace also provides two generators, namely <tt>Archive::Tgz</tt>
162
+ and <tt>Archive::Zip</tt>. They require the same syntax and recognize
163
+ the same options. So what's the difference? The <tt>Archive::*</tt>
164
+ generators don't move the selected files into a toplevel directory.
165
+ Let's look at an example:
166
+
167
+ import "archive/tgz", "package/tgz"
168
+ gen Package::Tgz, "foo", :files => sys["{bin,lib,test}/**/*"]
169
+ gen Archive::Tgz, "bar", :files => sys["{bin,lib,test}/**/*"]
170
+
171
+ This creates a file task <tt>foo.tgz</tt> and a file task
172
+ <tt>bar.tgz</tt>. The difference is, that <tt>foo.tgz</tt> contains a
173
+ toplevel directory +foo+ which in turn contains the +bin+, +lib+ and
174
+ +test+ directories, but <tt>bar.tgz</tt> directly contains the +bin+,
175
+ +lib+ and +test+ directories:
176
+
177
+ Created with <tt>Package::Tgz</tt>:
178
+ foo.tgz
179
+ foo/
180
+ bin/
181
+ .
182
+ .
183
+ lib/
184
+ .
185
+ .
186
+ test/
187
+ .
188
+ .
189
+
190
+ Created with <tt>Archive::Tgz</tt>:
191
+ bar.tgz
192
+ bin/
193
+ .
194
+ .
195
+ lib/
196
+ .
197
+ .
198
+ test/
199
+
200
+ Of course the same difference is between the <tt>Package::Zip</tt> and
201
+ <tt>Archive::Zip</tt> generators.
202
+
203
+ === Creating a shortcut, dependencies
204
+
205
+ Imagine you have a package task which creates a tgz package and a task
206
+ which should upload the package to a server. This means that the
207
+ upload task depends on the package task. You could do this like in the
208
+ following Rantfile:
209
+
210
+ import "package/tgz"
211
+
212
+ gen Package::Tgz, "pkg", "foo", :version => "1.0.1", :files => sys["{bin,lib,test}/**/*"]
213
+
214
+ task :upload => "pkg/foo-1.0.1.tgz" do |t|
215
+ sys "<some command to upload the archive file>"
216
+ end
217
+
218
+ That's not very convinient and it's tedious to always update the
219
+ dependency when you change the version number. But the package
220
+ generator returns an object with information about the created package
221
+ tasks:
222
+
223
+ import "package/tgz"
224
+
225
+ pkg =
226
+ gen Package::Tgz, "pkg", "foo", :version => "1.0.1", :files => sys["{bin,lib,test}/**/*"]
227
+
228
+ task :upload => pkg.path do |t|
229
+ sys "<some command to upload the archive file>"
230
+ end
231
+
232
+ Here we assign this object to the +pkg+ variable. The
233
+ <tt>pkg.path</tt> method returns the path to our tgz archive.
234
+
235
+ Another handy use case is to create a shortcut:
236
+
237
+ import "package/tgz"
238
+
239
+ pkg =
240
+ gen Package::Tgz, "pkg", "foo", :version => "1.0.1", :files => sys["{bin,lib,test}/**/*"]
241
+
242
+ desc "Create package for distribution."
243
+ task :package => pkg.path
244
+
245
+ Now you can invoke the package task from the commandline:
246
+
247
+ % rant -T
248
+ rant package # Create package for distribution.
249
+ % rant package
250
+ <messages about tgz creation>
251
+
252
+
253
+ === Some random notes
254
+
255
+ * Symbolic links are always dereferenced, i.e. the file/directory the
256
+ link points to will be in the archive, not the symbolic link. Rant
257
+ will probably provide an option to store the symbolic links in the
258
+ future.
259
+ * Directories are not included recursively:
260
+ gen Package::Tgz, "foo", :files => sys["lib"]
261
+ Assuming +lib+ is a directory, <tt>foo.tgz</tt> will contain only
262
+ the empty directory <tt>foo/lib</tt>, no matter how many
263
+ files/subdirectories +lib+ contains. If you want to package +lib+
264
+ with all subdirectories and files it contains, use the following
265
+ pattern:
266
+ gen Package::Tgz, "foo", :files => sys["lib/**/*"]
267
+ * Consider the directory where all files are linked to by the
268
+ Package::* generators as byproducts and don't rely on their
269
+ creation.
270
+
271
+ == See also
272
+
273
+ Rantfile basics::
274
+ doc/rantfile.rdoc[link:files/doc/rantfile_rdoc.html]
275
+ Advanced Rantfiles::
276
+ doc/advanced.rdoc[link:files/doc/advanced_rdoc.html]
277
+ Support for C/C++::
278
+ doc/c.rdoc[link:files/doc/c_rdoc.html]
279
+ Rant Overview::
280
+ README[link:files/README.html]
data/doc/rantfile.rdoc CHANGED
@@ -170,20 +170,6 @@ explain it a little bit. The +sys+ function can be used in three ways:
170
170
  sys.ruby "arg1", "arg2", ... # invoke the ruby interpreter
171
171
  sys.safe_ln "src", "dest" # create a hardlink or fall back to
172
172
  # copying
173
- If you're tired of typing <tt>sys.</tt> all the time, you can include
174
- the Rant::Sys module in your Rantfile (though it is not recommended
175
- to do this):
176
- include Rant::Sys
177
- task :clean do
178
- rm_f "myprog"
179
- end
180
- Then you can invoke these methods without the <tt>sys</tt> function.
181
- Note:: You are highly encouraged to not <tt>include Rant::Sys</tt>
182
- into your Rantfile as this introduces many methods in the
183
- global namespace, which can cause name clashes with other
184
- libraries. Of course if you have just some tasks to remove
185
- backup files in your home directory and do not use other Ruby
186
- libraries in your Rantfile, it is no problem.
187
173
 
188
174
  2. <b>Running external commands</b>
189
175
 
@@ -206,8 +192,8 @@ Note:: You are highly encouraged to not <tt>include Rant::Sys</tt>
206
192
  read the ri docs to get an overview:
207
193
  ri Dir::glob
208
194
 
209
- From now on we'll call <tt>sys[...]</tt> the <it>glob
210
- operator</it>.
195
+ From now on we'll call <tt>sys[...]</tt> the <em>glob
196
+ operator</em>.
211
197
 
212
198
  You can give more patterns:
213
199
  c_files = sys["**/*.h", "**/*.c"]
@@ -215,7 +201,7 @@ Note:: You are highly encouraged to not <tt>include Rant::Sys</tt>
215
201
  directory and all subdirectories.
216
202
 
217
203
  The object returned by the glob operator _behaves_ like a list of
218
- string, so it is possible to pass it to methods expecting an array.
204
+ strings, so it is possible to pass it to methods expecting an array.
219
205
  If you're getting errors or experience strange behaviour convert
220
206
  the list explicetely to an array:
221
207
  sys.touch c_files.to_a
@@ -423,7 +409,11 @@ because it refers to a main Rantfile.
423
409
 
424
410
  Advanced Rantfiles::
425
411
  doc/advanced.rdoc[link:files/doc/advanced_rdoc.html]
426
- Rant Overview::
427
- README[link:files/README.html]
412
+ Support for C/C++::
413
+ doc/c.rdoc[link:files/doc/c_rdoc.html]
414
+ Packaging::
415
+ doc/package.rdoc[link:files/doc/package_rdoc.html]
428
416
  Ruby project howto::
429
417
  doc/rubyproject.rdoc[link:files/doc/rubyproject_rdoc.html]
418
+ Rant Overview::
419
+ README[link:files/README.html]
data/doc/rubyproject.rdoc CHANGED
@@ -17,10 +17,10 @@ You can find this little project in test/project_rb1 directory of the
17
17
  Rant package. You'll probably have more files in your project, but we
18
18
  will try to write our Rantfile as generic as possible:
19
19
 
20
- import %w(rubytest rubydoc rubypackage)
20
+ import %w(rubytest rubydoc rubypackage clean)
21
21
 
22
- lib_files = Dir["lib/**/*.rb"]
23
- dist_files = lib_files + %w(rantfile.rb README) + Dir["{test,bin}/*"]
22
+ lib_files = sys["lib/**/*.rb"]
23
+ dist_files = lib_files + %w(rantfile.rb README) + sys["{test,bin}/*"]
24
24
 
25
25
  desc "Run unit tests."
26
26
  gen RubyTest do |t|
@@ -34,7 +34,7 @@ will try to write our Rantfile as generic as possible:
34
34
  end
35
35
 
36
36
  desc "Create packages."
37
- gen RubyPackage, :wgrep do |t|
37
+ gen RubyPackage, "wgrep" do |t|
38
38
  t.version = "1.0.0"
39
39
  t.summary = "Simple grep program."
40
40
  t.files = dist_files
@@ -43,15 +43,16 @@ will try to write our Rantfile as generic as possible:
43
43
  t.package_task
44
44
  end
45
45
 
46
- task :clean do
47
- sys.rm_rf %w(doc pkg)
48
- end
46
+ desc "Remove autogenerated and backup files."
47
+ gen Clean
48
+ var[:clean].include "doc", "pkg", "*~"
49
49
 
50
50
  To verify how our tasks are named:
51
51
  % rant -T
52
52
  rant test # Run unit tests.
53
53
  rant doc # Generate html documentation.
54
54
  rant package # Create packages.
55
+ rant clean # Remove autogenerated and backup files.
55
56
 
56
57
  Let's examine the code by running the tasks:
57
58
  % rant test
@@ -109,25 +110,30 @@ The most interesting task is the +package+ task:
109
110
  Version: 1.0.0
110
111
  File: wgrep-1.0.0.gem
111
112
  mv wgrep-1.0.0.gem pkg
112
- This is what it does on my machine:
113
+ This is what it does:
113
114
  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.
115
+ 2. Create a tar.gz file in the +pkg+ directory.
116
+ 3. Create a .zip file in the +pkg+ directory.
116
117
  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.
118
+ The RubyGem will only be created if RubyGems is available on your
119
+ system.
121
120
 
122
121
  The gem specification also contains the RDoc options we have given to
123
122
  the +RubyDoc+ generator and the +has_rdoc+ attribute is set to true.
124
123
  No need to duplicate this information in our Rantfile.
125
124
 
125
+ And if we want to remove all autogenerated files (and backup files) we
126
+ run the +clean+ task:
127
+ % rant clean
128
+ rm -rf doc
129
+ rm -rf pkg
130
+ rm -f README~
131
+
126
132
  === More about the RubyPackage generator
127
133
 
128
134
  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|
135
+ name (here "wgrep"):
136
+ gen RubyPackage, "wgrep" do |t|
131
137
 
132
138
  The line which actually creates the package task(s) is this one:
133
139
  t.package_task
@@ -234,3 +240,5 @@ Rant Overview::
234
240
  README[link:files/README.html]
235
241
  Writing an Rantfile::
236
242
  doc/rantfile.rdoc[link:files/doc/rantfile_rdoc.html]
243
+ Advanced Rantfiles::
244
+ doc/advanced.rdoc[link:files/doc/advanced_rdoc.html]