rant 0.3.0 → 0.3.2
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.
- data/NEWS +21 -0
- data/README +8 -0
- data/Rantfile +30 -16
- data/TODO +3 -4
- data/devel-notes +16 -0
- data/doc/csharp.rdoc +2 -3
- data/doc/examples/myprog/README +2 -0
- data/doc/examples/myprog/Rantfile +13 -0
- data/doc/examples/myprog/src/Rantfile +15 -0
- data/doc/examples/myprog/src/lib.c +6 -0
- data/doc/examples/myprog/src/lib.h +4 -0
- data/doc/examples/myprog/src/main.c +7 -0
- data/doc/rantfile.rdoc +108 -3
- data/lib/rant/cs_compiler.rb +6 -4
- data/lib/rant/import.rb +13 -0
- data/lib/rant/import/rubypackage.rb +43 -20
- data/lib/rant/plugin/configure.rb +21 -7
- data/lib/rant/plugin/csharp.rb +8 -9
- data/lib/rant/rantenv.rb +3 -0
- data/lib/rant/rantfile.rb +66 -33
- data/lib/rant/rantlib.rb +133 -27
- data/lib/rant/rantsys.rb +197 -42
- data/rantmethods.rb +46 -0
- data/setup.rb +18 -4
- data/test/plugin/configure/Rantfile +0 -6
- data/test/plugin/configure/test_configure.rb +2 -2
- data/test/plugin/csharp/test_csharp.rb +7 -2
- data/test/plugin/rantfile +45 -0
- data/test/plugin/test_conf_csharp.rb +53 -0
- data/test/project1/Rantfile +4 -0
- data/test/project1/test_project.rb +33 -8
- data/test/project2/buildfile +3 -3
- data/test/project2/sub1/Rantfile +3 -3
- data/test/project2/test_project.rb +6 -4
- data/test/project_rb1/test_project_rb1.rb +2 -2
- data/test/standalone.rf +10 -0
- data/test/subdirs/Rantfile +26 -0
- data/test/subdirs/sub1/Rantfile +15 -0
- data/test/subdirs/sub2/rantfile.rb +14 -0
- data/test/subdirs/sub2/sub/rantfile +15 -0
- data/test/subdirs/test_subdirs.rb +96 -0
- data/test/test_env.rb +3 -3
- data/test/test_filelist.rb +143 -0
- data/test/test_lighttask.rb +21 -0
- data/test/test_metatask.rb +1 -1
- data/test/test_rant_interface.rb +5 -5
- data/test/test_sys.rb +7 -1
- data/test/test_task.rb +25 -0
- data/test/toplevel.rf +0 -1
- data/test/tutil.rb +26 -1
- metadata +39 -14
data/NEWS
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
|
2
|
+
= Rant NEWS
|
3
|
+
|
4
|
+
== Rant 0.3.2
|
5
|
+
|
6
|
+
This version should be fully backwards compatible to 0.3.0.
|
7
|
+
|
8
|
+
New features:
|
9
|
+
* Support splitting your buildfiles up and placing them into multiple
|
10
|
+
directories with the +subdirs+ command. Please read
|
11
|
+
doc/rantfile.rdoc[link:files/doc/rantfile_rdoc.html] for usage.
|
12
|
+
This is especially usefull for bigger projects.
|
13
|
+
|
14
|
+
== Rant 0.3.0
|
15
|
+
|
16
|
+
First release of Rant on RubyForge.
|
17
|
+
|
18
|
+
== See also
|
19
|
+
|
20
|
+
Rant Overview::
|
21
|
+
README[link:files/README.html]
|
data/README
CHANGED
@@ -36,6 +36,11 @@ Running rant in the directory of this file:
|
|
36
36
|
will ensure that the "data" file in the "backup" directory is up to
|
37
37
|
date.
|
38
38
|
|
39
|
+
This document was written for version 0.3.2 of Rant. Most things
|
40
|
+
described here will work for older/newer versions of Rant, but look at
|
41
|
+
the README file in the Rant distribution you've installed for exact
|
42
|
+
documentation for your Rant version.
|
43
|
+
|
39
44
|
== Support
|
40
45
|
|
41
46
|
The newest version of this document can be found at
|
@@ -66,6 +71,9 @@ Using the Configure plugin::
|
|
66
71
|
read doc/configure.rdoc[link:files/doc/configure_rdoc.html]
|
67
72
|
Compiling C#::
|
68
73
|
read doc/csharp.rdoc[link:files/doc/csharp_rdoc.html]
|
74
|
+
Upgrading::
|
75
|
+
read the NEWS[link:files/NEWS.html] for new features, not
|
76
|
+
backwards compatible changes and other issues.
|
69
77
|
|
70
78
|
== Installation
|
71
79
|
|
data/Rantfile
CHANGED
@@ -1,16 +1,13 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
1
|
|
3
2
|
# Rantfile for Rant :)
|
4
3
|
|
5
|
-
require 'rant'
|
6
|
-
|
7
4
|
import %w(rubytest rubydoc rubypackage)
|
8
5
|
|
9
6
|
task :default => :test
|
10
7
|
|
11
8
|
lib_files = FileList["lib/**/*.rb"]
|
12
|
-
dist_files = FileList["{bin,lib,test,doc}/**/*"].
|
13
|
-
FileList["*"].no_dir.
|
9
|
+
dist_files = FileList["{bin,lib,test,doc}/**/*"].shun("html", "coverage") +
|
10
|
+
FileList["*"].no_dir.exclude("InstalledFiles", "Session.vim")
|
14
11
|
|
15
12
|
gen RubyPackage, "rant" do |t|
|
16
13
|
t.version = `#{Env::RUBY} run_rant --version`.split[1]
|
@@ -20,8 +17,8 @@ gen RubyPackage, "rant" do |t|
|
|
20
17
|
t.executable %w(rant rant-import)
|
21
18
|
t.author = "Stefan Lang"
|
22
19
|
t.email = "langstefan@gmx.at"
|
23
|
-
t.
|
24
|
-
t.gem_extra_rdoc_files = FileList["**/README"].no_dir("pkg").no_dir("test") + FileList["doc/**/*.rdoc"]
|
20
|
+
t.rubyforge_project = "make"
|
21
|
+
t.gem_extra_rdoc_files = FileList["**/README", "NEWS"].no_dir("pkg").no_dir("test") + FileList["doc/**/*.rdoc"]
|
25
22
|
t.homepage = "http://make.rubyforge.org"
|
26
23
|
desc "Create packages for distribution."
|
27
24
|
t.package_task
|
@@ -30,7 +27,7 @@ end
|
|
30
27
|
desc "Generate documentation."
|
31
28
|
gen RubyDoc do |g|
|
32
29
|
g.dir = "doc/html"
|
33
|
-
g.files.concat FileList["**/README"].no_dir("pkg").no_dir("test")
|
30
|
+
g.files.concat FileList["NEWS", "**/README"].no_dir("pkg").no_dir("test")
|
34
31
|
g.files.concat FileList["doc/**/*.rdoc"]
|
35
32
|
g.opts = %w(-S -c UTF-8 --title Rant --main README)
|
36
33
|
end
|
@@ -41,15 +38,13 @@ gen RubyTest do |g|
|
|
41
38
|
g.pattern = 'test_*.rb'
|
42
39
|
end
|
43
40
|
|
44
|
-
desc "Run first test-project."
|
45
|
-
"Warning: writes to disc."
|
41
|
+
desc "Run first test-project."
|
46
42
|
gen RubyTest, :testp1 do |g|
|
47
43
|
g.libs << "test"
|
48
44
|
g.test_files = ["test/project1/test_project.rb"]
|
49
45
|
end
|
50
46
|
|
51
|
-
desc "Run second test project."
|
52
|
-
"Warning: writes to disc"
|
47
|
+
desc "Run second test project."
|
53
48
|
gen RubyTest, :testp2 do |g|
|
54
49
|
g.libs << "test"
|
55
50
|
g.test_files = ["test/project2/test_project.rb"]
|
@@ -75,6 +70,12 @@ task :cov do
|
|
75
70
|
end
|
76
71
|
end
|
77
72
|
|
73
|
+
desc "Test project with subdirs."
|
74
|
+
gen RubyTest, :tsubdirs do |t|
|
75
|
+
t.libs << "test"
|
76
|
+
t.test_files = FileList["test/subdirs/test_*.rb"]
|
77
|
+
end
|
78
|
+
|
78
79
|
desc "Run all tests."
|
79
80
|
gen RubyTest, :tall do |g|
|
80
81
|
g.libs << "test"
|
@@ -88,17 +89,30 @@ task :clean do
|
|
88
89
|
sys.rm_rf %w(doc/html pkg test/coverage)
|
89
90
|
end
|
90
91
|
|
92
|
+
desc "Publish html docs on make.rubyfore.org.",
|
93
|
+
"Note: scp will prompt for rubyforge password."
|
94
|
+
task "publish-docs" => :doc do
|
95
|
+
sys "scp -r doc/html/* langi@rubyforge.org:/var/www/gforge-projects/make/"
|
96
|
+
end
|
97
|
+
|
91
98
|
# Just for quick visual testing of rant...
|
92
99
|
task :please_fail do |t|
|
93
100
|
sys "mix_nix_gibts"
|
94
101
|
end
|
95
102
|
|
103
|
+
task "to-win" => :package do
|
104
|
+
win_dir = "/mnt/data_fat/stefan/Ruby"
|
105
|
+
Dir["pkg/*"].each { |f|
|
106
|
+
target = File.join(win_dir, File.basename(f))
|
107
|
+
sys.rm_rf target if test(?e, target)
|
108
|
+
sys.cp_r f, target
|
109
|
+
}
|
110
|
+
end
|
111
|
+
|
96
112
|
# for quich rant testing
|
97
113
|
#plugin :Configure
|
98
114
|
|
99
115
|
# mainly for rant testing
|
100
|
-
source 'rantmethods.rb'
|
116
|
+
#source 'rantmethods.rb'
|
101
117
|
|
102
|
-
|
103
|
-
Rant.run
|
104
|
-
end
|
118
|
+
# vim:ft=ruby:
|
data/TODO
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
|
2
2
|
= TODO
|
3
3
|
|
4
|
+
== Packaging
|
5
|
+
Try minitar if tar is not available.
|
6
|
+
|
4
7
|
== C# plugin
|
5
8
|
Define the method +assembly+ for building a file with the C# compiler?
|
6
9
|
Done.
|
@@ -10,10 +13,6 @@ Done.
|
|
10
13
|
Add a 'distclean' task that removes all files and directories
|
11
14
|
generatet by any file task.
|
12
15
|
|
13
|
-
RDoc task.
|
14
|
-
|
15
|
-
Gem task (+ one that interactively creates a gemspec).
|
16
|
-
|
17
16
|
== Java plugin
|
18
17
|
|
19
18
|
At least for the 1.0.0 release.
|
data/devel-notes
CHANGED
@@ -47,4 +47,20 @@ The unit tests contain many assertions of the form
|
|
47
47
|
which are wrong, because the first argument should be the expected
|
48
48
|
result!
|
49
49
|
|
50
|
+
== <tt>FileList < Array</tt> problems
|
51
|
+
There arise some severe problems. E.g. the Array#flatten method:
|
52
|
+
[FileList["*.rb"]].flatten
|
53
|
+
The +flatten+ method doesn't call *any* method of our FileList but
|
54
|
+
it recognizes that it is an Array and copies the elements directly.
|
55
|
+
So there is *no* way to resolve the glob pattern and there will never
|
56
|
+
any Ruby file be selected!
|
57
|
+
|
58
|
+
== Subdirectories
|
59
|
+
Rant would have to check and eventually +cd+ before doing one of the
|
60
|
+
following:
|
61
|
+
* Loading an Rantfile (even through +source+).
|
62
|
+
* Worker#invoke
|
63
|
+
* Worker#needed?
|
64
|
+
* RantApp#run before returning.
|
65
|
+
|
50
66
|
# vim:tw=70:
|
data/doc/csharp.rdoc
CHANGED
@@ -59,9 +59,8 @@ linked against, the +sources+ attribute should be clear and the
|
|
59
59
|
assembly.
|
60
60
|
|
61
61
|
Now let's see what is actually done by rant when we feed it this
|
62
|
-
Rantfile.
|
63
|
-
|
64
|
-
% rant
|
62
|
+
Rantfile. We tell rant to build <tt>myprog.exe</tt>:
|
63
|
+
% rant myprog.exe
|
65
64
|
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
65
|
This was on a Linux system, on Windows you'll probably see a command
|
67
66
|
with csc.
|
@@ -0,0 +1,13 @@
|
|
1
|
+
desc "Build myprog."
|
2
|
+
file "myprog" => "src/myprog" do
|
3
|
+
sys.cp "src/myprog", "myprog"
|
4
|
+
end
|
5
|
+
|
6
|
+
desc "Remove compiler products."
|
7
|
+
task :clean => "src/clean" do
|
8
|
+
sys.rm_f "myprog"
|
9
|
+
end
|
10
|
+
|
11
|
+
# Tell Rant to look in src for an Rantfile,
|
12
|
+
# we could list more directories here.
|
13
|
+
subdirs "src"
|
@@ -0,0 +1,15 @@
|
|
1
|
+
file "lib.o" => %w(lib.c lib.h) do
|
2
|
+
sys "cc -c -o lib.o lib.c"
|
3
|
+
end
|
4
|
+
|
5
|
+
file "main.o" => "main.c" do
|
6
|
+
sys "cc -c -o main.o main.c"
|
7
|
+
end
|
8
|
+
|
9
|
+
file "myprog" => %w(lib.o main.o) do
|
10
|
+
sys "cc -o myprog main.o lib.o"
|
11
|
+
end
|
12
|
+
|
13
|
+
task :clean do
|
14
|
+
sys.rm_f Dir["*.o"] + %w(myprog)
|
15
|
+
end
|
data/doc/rantfile.rdoc
CHANGED
@@ -31,6 +31,8 @@ methods with the Rant application:
|
|
31
31
|
on it.
|
32
32
|
+source+:: Takes a filename as argument and causes Rant to read
|
33
33
|
it in as Rantfile.
|
34
|
+
+subdirs+:: Takes a list of subdirectories in which Rant should
|
35
|
+
look for Rantfiles.
|
34
36
|
|
35
37
|
=== Defining a task
|
36
38
|
|
@@ -42,7 +44,7 @@ anything. To associate an action with the task, add a block:
|
|
42
44
|
task :mytask do
|
43
45
|
puts "Hello, mytask running."
|
44
46
|
end
|
45
|
-
Put these 3 lines of code into
|
47
|
+
Put these 3 lines of code into a file called +Rantfile+ and run rant:
|
46
48
|
% rant mytask
|
47
49
|
Hello, mytask running.
|
48
50
|
Note: you could have ommited the mytask argument to rant because it is
|
@@ -67,7 +69,7 @@ Add prerequisites to create relations between tasks:
|
|
67
69
|
task :t2 do |t|
|
68
70
|
puts t.name
|
69
71
|
end
|
70
|
-
In the definition of the "first" task we told Rant that it
|
72
|
+
In the definition of the "first" task we told Rant that it _depends_
|
71
73
|
on task "t1" and task "t2". "t1" and "t2" are called prerequisites for
|
72
74
|
"first". Try it out:
|
73
75
|
% rant first
|
@@ -164,12 +166,19 @@ FileUtils module:
|
|
164
166
|
sys.safe_ln "src", "dest" # create a hardlink or fall back to
|
165
167
|
# copying
|
166
168
|
If you're tired of typing <tt>sys.</tt> all the time, you can include
|
167
|
-
the +Sys+ module in your Rantfile
|
169
|
+
the +Sys+ module in your Rantfile (though it is not recommended to do
|
170
|
+
this):
|
168
171
|
include Sys
|
169
172
|
task :clean do
|
170
173
|
rm_f "myprog"
|
171
174
|
end
|
172
175
|
Then you can invoke these methods without the <tt>sys</tt> function.
|
176
|
+
Note:: You are highly encouraged to not <tt>include Sys</tt> into
|
177
|
+
your Rantfile as this introduces many methods in the global
|
178
|
+
namespace, which can cause name clashes with other libraries.
|
179
|
+
Of course if you have just some tasks to remove backup files
|
180
|
+
in your home directory and do not use other Ruby libraries in
|
181
|
+
your Rantfile, it is no problem.
|
173
182
|
|
174
183
|
=== Generators
|
175
184
|
|
@@ -219,6 +228,102 @@ Currently the following are coming with Rant:
|
|
219
228
|
application/library.
|
220
229
|
As these are all Ruby specific, please read the Ruby project howto.
|
221
230
|
|
231
|
+
=== The +subdirs+ command
|
232
|
+
|
233
|
+
The +subdirs+ command allows you to give Rant a list of subdirectories
|
234
|
+
(relative to the Rantfile) where it should look for additional
|
235
|
+
Rantfiles. The tasks defined in those subdirectories can be referenced
|
236
|
+
from your main Rantfile and vice versa.
|
237
|
+
|
238
|
+
A small example: We are assuming the following files:
|
239
|
+
myprog/
|
240
|
+
Rantfile # the main Rantfile
|
241
|
+
README
|
242
|
+
src/
|
243
|
+
Rantfile
|
244
|
+
main.c
|
245
|
+
lib.c
|
246
|
+
lib.h
|
247
|
+
Then the main Rantfile could look like:
|
248
|
+
desc "Build myprog."
|
249
|
+
file "myprog" => "src/myprog" do
|
250
|
+
sys.cp "src/myprog", "myprog"
|
251
|
+
end
|
252
|
+
|
253
|
+
desc "Remove compiler products."
|
254
|
+
task :clean => "src/clean" do
|
255
|
+
sys.rm_f "myprog"
|
256
|
+
end
|
257
|
+
|
258
|
+
# Tell Rant to look in src for an Rantfile,
|
259
|
+
# we could list more directories here.
|
260
|
+
subdirs "src"
|
261
|
+
And src/Rantfile:
|
262
|
+
file "lib.o" => %w(lib.c lib.h) do
|
263
|
+
sys "cc -c -o lib.o lib.c"
|
264
|
+
end
|
265
|
+
|
266
|
+
file "main.o" => "main.c" do
|
267
|
+
sys "cc -c -o main.o main.c"
|
268
|
+
end
|
269
|
+
|
270
|
+
file "myprog" => %w(lib.o main.o) do
|
271
|
+
sys "cc -o myprog main.o lib.o"
|
272
|
+
end
|
273
|
+
|
274
|
+
task :clean do
|
275
|
+
sys.rm_f Dir["*.o"] + %w(myprog)
|
276
|
+
end
|
277
|
+
Note that we refer to the task in subdirectory simply by prepending
|
278
|
+
the directory name and a slash to the task name.
|
279
|
+
file "myprog" => "src/myprog" do
|
280
|
+
This tells Rant that the "myprog" task depends on the "myprog" task
|
281
|
+
defined in the Rantfile in the "src" directory. The same goes for the
|
282
|
+
"clean" task.
|
283
|
+
|
284
|
+
Let's examine what Rant thinks about our build specification:
|
285
|
+
myprog % rant -T
|
286
|
+
rant myprog # Build myprog.
|
287
|
+
rant clean # Remove compiler products.
|
288
|
+
Since the "myprog" task is the first in our Rantfile, we don't need to
|
289
|
+
specify a task to build myprog:
|
290
|
+
myprog % rant
|
291
|
+
cc -c -o lib.o lib.c
|
292
|
+
cc -c -o main.o main.c
|
293
|
+
cc -o myprog main.o lib.o
|
294
|
+
cp src/myprog myprog
|
295
|
+
And to save disk space, remove generated files:
|
296
|
+
myprog % rant clean
|
297
|
+
rm -f lib.o main.o myprog
|
298
|
+
rm -f myprog
|
299
|
+
The nice thing about our buildfiles is, that we can use the
|
300
|
+
src/Rantfile independent from our main Rantfile. Consider you are
|
301
|
+
working on <tt>lib.c</tt> and only want to check that it compiles
|
302
|
+
correctly.
|
303
|
+
You can specify the task explicitely:
|
304
|
+
myprog % rant src/lib.o
|
305
|
+
cc -c -o lib.o lib.c
|
306
|
+
But if you are working a long time only in the src/ directory it is
|
307
|
+
convinient to do:
|
308
|
+
myprog % cd src
|
309
|
+
myprog/src % rant lib.o
|
310
|
+
cc -c -o lib.o lib.c
|
311
|
+
To clean only the src directory:
|
312
|
+
myprog/src % rant clean
|
313
|
+
rm -f lib.o main.o myprog
|
314
|
+
You can find this example project in the doc/examples/myprog directory
|
315
|
+
of the Rant distribution.
|
316
|
+
|
317
|
+
Of course you can also have a subdirectory in src/ containing an
|
318
|
+
Rantfile. Simply put a +subdirs+ command into the src/Rantfile. Rant
|
319
|
+
integrates well into your file system :)
|
320
|
+
|
321
|
+
If you want to refer to a task in the main Rantfile from a subdir
|
322
|
+
Rantfile, put a # in front of the task name:
|
323
|
+
task "a" => "#b"
|
324
|
+
But note that this Rantfile won't work as a standalone buildfile,
|
325
|
+
because it refers to a main Rantfile.
|
326
|
+
|
222
327
|
== See also
|
223
328
|
|
224
329
|
Rant Overview::
|
data/lib/rant/cs_compiler.rb
CHANGED
@@ -6,7 +6,7 @@ module Rant
|
|
6
6
|
# interface to a C# Compiler.
|
7
7
|
class CsCompiler
|
8
8
|
|
9
|
-
LIB_SYSTEM_XML
|
9
|
+
LIB_SYSTEM_XML = "System.Xml.dll"
|
10
10
|
LIB_SYSTEM_DRAWING = "System.Drawing.dll"
|
11
11
|
LIB_SYSTEM_FORMS = "System.Windows.Forms.dll"
|
12
12
|
|
@@ -123,12 +123,12 @@ module Rant
|
|
123
123
|
@entry = nil
|
124
124
|
@optimize = true
|
125
125
|
@warnings = true
|
126
|
-
@csc = nil
|
127
126
|
@csc_bin = nil
|
128
127
|
end
|
129
128
|
|
130
129
|
# Command to invoke compiler.
|
131
130
|
def csc
|
131
|
+
#puts "#@csc_bin, #@csc_name"
|
132
132
|
@csc_bin || @csc_name
|
133
133
|
end
|
134
134
|
|
@@ -136,9 +136,10 @@ module Rant
|
|
136
136
|
# +cc_bin+, this also tries to determine which interface to
|
137
137
|
# use for this compiler. Finally it sets +cc_bin+.
|
138
138
|
def csc=(cmd)
|
139
|
-
|
139
|
+
@csc_bin = cmd.dup
|
140
|
+
name = self.class.cs_compiler_name(@csc_bin)
|
140
141
|
@csc_name = name if name
|
141
|
-
|
142
|
+
#puts "csc=() setting csc_bin to " + @csc_bin
|
142
143
|
end
|
143
144
|
|
144
145
|
def csc_name= new_name
|
@@ -167,6 +168,7 @@ module Rant
|
|
167
168
|
# This generates the compilation command
|
168
169
|
# for cscc.
|
169
170
|
cc_cmd = csc.dup
|
171
|
+
#puts "creating exe command for #{cc_cmd}"
|
170
172
|
cc_cmd << " -e#{entry}" if entry
|
171
173
|
cc_cmd << cc_cmd_args
|
172
174
|
cc_cmd
|