rant 0.3.8 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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]