rake 10.3.2 → 10.4.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rake might be problematic. Click here for more details.

Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.rdoc +3 -3
  3. data/History.rdoc +24 -0
  4. data/Manifest.txt +5 -1
  5. data/README.rdoc +5 -2
  6. data/Rakefile +2 -2
  7. data/doc/rake.1 +141 -0
  8. data/lib/rake.rb +2 -1
  9. data/lib/rake/application.rb +8 -2
  10. data/lib/rake/backtrace.rb +1 -1
  11. data/lib/rake/cloneable.rb +1 -1
  12. data/lib/rake/contrib/sshpublisher.rb +4 -4
  13. data/lib/rake/cpu_counter.rb +23 -7
  14. data/lib/rake/dsl_definition.rb +2 -1
  15. data/lib/rake/ext/module.rb +1 -0
  16. data/lib/rake/ext/pathname.rb +25 -0
  17. data/lib/rake/ext/string.rb +1 -1
  18. data/lib/rake/ext/time.rb +3 -2
  19. data/lib/rake/file_list.rb +18 -4
  20. data/lib/rake/file_task.rb +2 -2
  21. data/lib/rake/file_utils.rb +16 -4
  22. data/lib/rake/invocation_chain.rb +1 -1
  23. data/lib/rake/late_time.rb +17 -0
  24. data/lib/rake/packagetask.rb +3 -6
  25. data/lib/rake/task_manager.rb +2 -2
  26. data/test/helper.rb +5 -2
  27. data/test/support/rakefile_definitions.rb +1 -1
  28. data/test/support/ruby_runner.rb +6 -5
  29. data/test/test_rake_application.rb +14 -12
  30. data/test/test_rake_backtrace.rb +1 -1
  31. data/test/test_rake_clean.rb +7 -1
  32. data/test/test_rake_cpu_counter.rb +46 -28
  33. data/test/test_rake_definitions.rb +5 -0
  34. data/test/test_rake_directory_task.rb +13 -0
  35. data/test/test_rake_file_list.rb +28 -0
  36. data/test/test_rake_file_task.rb +19 -8
  37. data/test/test_rake_late_time.rb +18 -0
  38. data/test/test_rake_multi_task.rb +6 -0
  39. data/test/test_rake_pathname_extensions.rb +15 -0
  40. data/test/test_rake_task.rb +2 -1
  41. data/test/test_rake_task_argument_parsing.rb +10 -0
  42. data/test/test_rake_task_with_arguments.rb +1 -0
  43. data/test/test_rake_test_task.rb +1 -1
  44. data/test/test_rake_thread_pool.rb +4 -1
  45. metadata +17 -32
  46. checksums.yaml.gz.sig +0 -2
  47. data.tar.gz.sig +0 -0
  48. data/doc/rake.1.gz +0 -0
  49. metadata.gz.sig +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0caac57ec31c4e81580a89a857cea98ade615eef
4
- data.tar.gz: e505354568b86ee4850b446e7f938dd8ea3872e1
3
+ metadata.gz: 7519244fd33678e658a64ae54dfc582789c088c6
4
+ data.tar.gz: 263a0d41c6235b43888c2a09a49704aa9ed2ea44
5
5
  SHA512:
6
- metadata.gz: 86d3dc72939bd00ad29b791495cbbab200b4ba996237d2644384d7fa10c8dd9c761389eee573ff6767996266818cb0bb4f39096ad043610dea017cc0f9c1435e
7
- data.tar.gz: 0d54d81c43e9d6de2c5d685bebde241f22d5c0e87d0dc45f7dd725bf61a95e86cfca9903195aba4a8a8617c53d50c09d9a56a0c1f44e34e0ee5b7df6ebde0895
6
+ metadata.gz: d83b852433be66d494050b6be1311d1f007048327e00ef27e4cbd3c96e25f0f5dee397388012791ec4c25d7aac41193da20b734abef3149bdbdbfe5f3f578a83
7
+ data.tar.gz: a52455043eb2744a1a78ba0a60a1856b0b306eafadcc1c0f2c9d62842a5f876c10975349a1182773f60358b385915124bee893659f6435550b6993eb44301440
@@ -1,9 +1,9 @@
1
1
  = Source Repository
2
2
 
3
3
  Rake is currently hosted at github. The github web page is
4
- http://github.com/jimweirich/rake . The public git clone URL is
4
+ http://github.com/ruby/rake . The public git clone URL is
5
5
 
6
- git://github.com/jimweirich/rake.git
6
+ git://github.com/ruby/rake.git
7
7
 
8
8
  = Running the Rake Test Suite
9
9
 
@@ -30,5 +30,5 @@ addressed your issue.
30
30
  When submitting pull requests please check the rake Travis-CI page for test
31
31
  failures:
32
32
 
33
- https://travis-ci.org/jimweirich/rake
33
+ https://travis-ci.org/ruby/rake
34
34
 
@@ -1,3 +1,27 @@
1
+ === 10.4.0
2
+
3
+ Enhancements:
4
+
5
+ * Upgraded to minitest 5. Pull request #292 by Teo Ljungberg.
6
+ * Added support for Pathname in rake tasks. Pull request #271 by Randy
7
+ Coulman.
8
+ * Rake now ignores falsy dependencies which allows for easier programmatic
9
+ creation of tasks. Pull request #273 by Manav.
10
+ * Rake no longer edits ARGV. This allows you to re-exec rake from a rake
11
+ task. Issue #277 by Matt Palmer.
12
+ * Etc.nprocessors is used for counting the number of CPUs.
13
+
14
+ Bug fixes:
15
+
16
+ * Updated rake manpage. Issue #283 by Nathan Long, pull request #291 by
17
+ skittleys.
18
+ * Add Rake::LATE to allow rebuilding of files that depend on deleted files.
19
+ Bug #286, pull request #287 by David Grayson.
20
+ * Fix relinking of files when repackaging. Bug #276 by Muenze.
21
+ * Fixed some typos. Pull request #280 by Jed Northridge.
22
+ * Try counting CPUs via cpuinfo if host_os was not matched. Pull request
23
+ #282 by Edouard B.
24
+
1
25
  === 10.3.2 / 2014-05-15
2
26
 
3
27
  Bug fixes:
@@ -17,7 +17,7 @@ doc/example/main.c
17
17
  doc/glossary.rdoc
18
18
  doc/jamis.rb
19
19
  doc/proto_rake.rdoc
20
- doc/rake.1.gz
20
+ doc/rake.1
21
21
  doc/rakefile.rdoc
22
22
  doc/rational.rdoc
23
23
  doc/release_notes/rake-0.4.14.rdoc
@@ -69,6 +69,7 @@ lib/rake/dsl_definition.rb
69
69
  lib/rake/early_time.rb
70
70
  lib/rake/ext/core.rb
71
71
  lib/rake/ext/module.rb
72
+ lib/rake/ext/pathname.rb
72
73
  lib/rake/ext/string.rb
73
74
  lib/rake/ext/time.rb
74
75
  lib/rake/file_creation_task.rb
@@ -79,6 +80,7 @@ lib/rake/file_utils_ext.rb
79
80
  lib/rake/gempackagetask.rb
80
81
  lib/rake/invocation_chain.rb
81
82
  lib/rake/invocation_exception_mixin.rb
83
+ lib/rake/late_time.rb
82
84
  lib/rake/linked_list.rb
83
85
  lib/rake/loaders/makefile.rb
84
86
  lib/rake/multi_task.rb
@@ -133,6 +135,7 @@ test/test_rake_file_utils.rb
133
135
  test/test_rake_ftp_file.rb
134
136
  test/test_rake_functional.rb
135
137
  test/test_rake_invocation_chain.rb
138
+ test/test_rake_late_time.rb
136
139
  test/test_rake_linked_list.rb
137
140
  test/test_rake_makefile_loader.rb
138
141
  test/test_rake_multi_task.rb
@@ -141,6 +144,7 @@ test/test_rake_package_task.rb
141
144
  test/test_rake_path_map.rb
142
145
  test/test_rake_path_map_explode.rb
143
146
  test/test_rake_path_map_partial.rb
147
+ test/test_rake_pathname_extensions.rb
144
148
  test/test_rake_pseudo_status.rb
145
149
  test/test_rake_rake_test_loader.rb
146
150
  test/test_rake_reduce_compat.rb
@@ -1,7 +1,7 @@
1
1
  = RAKE -- Ruby Make
2
2
 
3
- home :: https://github.com/jimweirich/rake
4
- bugs :: https://github.com/jimweirich/rake/issues
3
+ home :: https://github.com/ruby/rake
4
+ bugs :: https://github.com/ruby/rake/issues
5
5
  docs :: http://docs.seattlerb.org/rake
6
6
 
7
7
  == Description
@@ -86,6 +86,9 @@ Type "rake --help" for all available options.
86
86
  2. {Rake File Lists}[http://devblog.avdi.org/2014/04/22/rake-part-2-file-lists/]
87
87
  3. {Rake Rules}[http://devblog.avdi.org/2014/04/23/rake-part-3-rules/]
88
88
  4. {Rake Pathmap}[http://devblog.avdi.org/2014/04/24/rake-part-4-pathmap/]
89
+ 5. {File Operations}[http://devblog.avdi.org/2014/04/25/rake-part-5-file-operations/]
90
+ 6. {Clean and Clobber}[http://devblog.avdi.org/2014/04/28/rake-part-6-clean-and-clobber/]
91
+ 7. {MultiTask}[http://devblog.avdi.org/2014/04/29/rake-part-7-multitask/]
89
92
  * Jim Weirich's 2003 RubyConf presentation:
90
93
  http://onestepback.org/articles/buildingwithrake/
91
94
  * Martin Fowler's article on Rake: http://martinfowler.com/articles/rake.html
data/Rakefile CHANGED
@@ -28,7 +28,7 @@ hoe = Hoe.spec 'rake' do
28
28
  require_ruby_version '>= 1.8.7'
29
29
  require_rubygems_version '>= 1.3.2'
30
30
 
31
- dependency 'minitest', '~> 4.0', :developer
31
+ dependency 'minitest', '~> 5.0', :developer
32
32
 
33
33
  license "MIT"
34
34
 
@@ -54,7 +54,7 @@ hoe = Hoe.spec 'rake' do
54
54
  ]
55
55
  end
56
56
 
57
- hoe.test_prelude = 'gem "minitest", "~> 4.0"'
57
+ hoe.test_prelude = 'gem "minitest", "~> 5.0"'
58
58
 
59
59
  # Use custom rdoc task due to existence of doc directory
60
60
 
@@ -0,0 +1,141 @@
1
+ .\" Hey, EMACS: -*- nroff -*-
2
+ .\" First parameter, NAME, should be all caps
3
+ .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
4
+ .\" other parameters are allowed: see man(7), man(1)
5
+ .TH RAKE 1 "August 27, 2014" "rake 10.3.2" "Rake User Commands"
6
+ .\" Please adjust this date whenever revising the manpage.
7
+ .\"
8
+ .\" Some roff macros, for reference:
9
+ .\" .nh disable hyphenation
10
+ .\" .hy enable hyphenation
11
+ .\" .ad l left justify
12
+ .\" .ad b justify to both left and right margins
13
+ .\" .nf disable filling
14
+ .\" .fi enable filling
15
+ .\" .br insert line break
16
+ .\" .sp <n> insert n+1 empty lines
17
+ .\" for manpage-specific macros, see man(7)
18
+ .SH NAME
19
+ rake \- a make-like build utility for Ruby
20
+ .SH SYNOPSIS
21
+ \fBrake\fR [\fI\-f rakefile\fR] {\fIOPTIONS\fR} \fITARGETS...\fR
22
+ .br
23
+ .SH DESCRIPTION
24
+ .B rake
25
+ is a make-like build utility for Ruby. Tasks and dependencies are specified in
26
+ standard Ruby syntax.
27
+ .SH OPTIONS
28
+ .TP
29
+ \fB\-m\fR, \fB\-\-multitask\fR
30
+ Treat all tasks as multitasks.
31
+ .TP
32
+ \fB\-B\fR, \fB\-\-build\-all\fR
33
+ Build all prerequisites, including those which are up\-to\-date.
34
+
35
+ .TP
36
+ \fB\-j\fR, \fB\-\-jobs\fR [\fINUMBER\fR]
37
+ Specifies the maximum number of tasks to execute in parallel (default is number of CPU cores + 4).
38
+
39
+ .SS Modules
40
+ .TP
41
+ \fB\-I\fR, \fB\-\-libdir\fR \fILIBDIR\fR
42
+ Include \fILIBDIR\fR in the search path for required modules.
43
+ .TP
44
+ \fB\-r\fR, \fB\-\-require\fR \fIMODULE\fR
45
+ Require \fIMODULE\fR before executing rakefile.
46
+
47
+ .SS Rakefile location
48
+ .TP
49
+ \fB\-f\fR, \fB\-\-rakefile\fR [\fIFILENAME\fR]
50
+ Use \fIFILENAME\fR as the rakefile to search for.
51
+ .TP
52
+ \fB\-N\fR, \fB\-\-no\-search\fR, \fB\-\-nosearch\fR
53
+ Do not search parent directories for the Rakefile.
54
+ .TP
55
+ \fB\-G\fR, \fB\-\-no\-system\fR, \fB\-\-nosystem\fR
56
+ Use standard project Rakefile search paths, ignore system wide rakefiles.
57
+ .TP
58
+ \fB\-R\fR, \fB\-\-rakelibdir\fR \fIRAKELIBDIR\fR
59
+ Auto\-import any .rake files in \fIRAKELIBDIR\fR (default is 'rakelib')
60
+ .HP
61
+ \fB\-\-rakelib\fR
62
+ .TP
63
+ \fB\-g\fR, \fB\-\-system\fR
64
+ Using system wide (global) rakefiles (usually '\fI~/.rake/*.rake\fR').
65
+
66
+ .SS Debugging
67
+ .TP
68
+ \fB\-\-backtrace\fR=\fI\,[OUT]\/\fR
69
+ Enable full backtrace. \fIOUT\fR can be stderr (default) or stdout.
70
+ .TP
71
+ \fB\-t\fR, \fB\-\-trace\fR=\fI\,[OUT]\/\fR
72
+ Turn on invoke/execute tracing, enable full backtrace. \fIOUT\fR can be stderr (default) or stdout.
73
+ .TP
74
+ \fB\-\-suppress\-backtrace\fR \fIPATTERN\fR
75
+ Suppress backtrace lines matching regexp \fIPATTERN\fR. Ignored if \fI\-\-trace\fR is on.
76
+ .TP
77
+ \fB\-\-rules\fR
78
+ Trace the rules resolution.
79
+
80
+ .TP
81
+ \fB\-n\fR, \fB\-\-dry\-run\fR
82
+ Do a dry run without executing actions.
83
+ .TP
84
+ \fB\-T\fR, \fB\-\-tasks\fR [\fIPATTERN\fR]
85
+ Display the tasks (matching optional \fIPATTERN\fR) with descriptions, then exit.
86
+ .TP
87
+ \fB\-D\fR, \fB\-\-describe\fR [\fIPATTERN\fR]
88
+ Describe the tasks (matching optional \fIPATTERN\fR), then exit.
89
+ .TP
90
+ \fB\-W\fR, \fB\-\-where\fR [\fIPATTERN\fR]
91
+ Describe the tasks (matching optional \fIPATTERN\fR), then exit.
92
+ .TP
93
+ \fB\-P\fR, \fB\-\-prereqs\fR
94
+ Display the tasks and dependencies, then exit.
95
+
96
+ .TP
97
+ \fB\-e\fR, \fB\-\-execute\fR \fICODE\fR
98
+ Execute some Ruby code and exit.
99
+ .TP
100
+ \fB\-p\fR, \fB\-\-execute\-print\fR \fICODE\fR
101
+ Execute some Ruby code, print the result, then exit.
102
+ .TP
103
+ \fB\-E\fR, \fB\-\-execute\-continue\fR \fICODE\fR
104
+ Execute some Ruby code, then continue with normal task processing.
105
+
106
+ .SS Information
107
+ .TP
108
+ \fB\-v\fR, \fB\-\-verbose\fR
109
+ Log message to standard output.
110
+ .TP
111
+ \fB\-q\fR, \fB\-\-quiet\fR
112
+ Do not log messages to standard output.
113
+ .TP
114
+ \fB\-s\fR, \fB\-\-silent\fR
115
+ Like \fB\-\-quiet\fR, but also suppresses the 'in directory' announcement.
116
+ .TP
117
+ \fB\-X\fR, \fB\-\-no\-deprecation\-warnings\fR
118
+ Disable the deprecation warnings.
119
+ .TP
120
+ \fB\-\-comments\fR
121
+ Show commented tasks only
122
+ .TP
123
+ \fB\-A\fR, \fB\-\-all\fR
124
+ Show all tasks, even uncommented ones (in combination with \fB\-T\fR or \fB\-D\fR)
125
+ .TP
126
+ \fB\-\-job\-stats\fR [\fILEVEL\fR]
127
+ Display job statistics. \fILEVEL=history\fR displays a complete job list
128
+ .TP
129
+ \fB\-V\fR, \fB\-\-version\fR
130
+ Display the program version.
131
+ .TP
132
+ \fB\-h\fR, \fB\-H\fR, \fB\-\-help\fR
133
+ Display a help message.
134
+
135
+ .SH SEE ALSO
136
+ The complete documentation for \fBrake\fR has been installed at \fI/usr/share/doc/rake-doc/html/index.html\fR. It is also available online at \fIhttp://docs.seattlerb.org/rake\fR.
137
+ .SH AUTHOR
138
+ .B rake
139
+ was written by Jim Weirich <jim@weirichhouse.org>
140
+ .PP
141
+ This manual was created by Caitlin Matos <caitlin.matos@zoho.com> for the Debian project (but may be used by others). It was inspired by the manual by Jani Monoses <jani@iv.ro> for the Ubuntu project.
@@ -21,7 +21,7 @@
21
21
  #++
22
22
 
23
23
  module Rake
24
- VERSION = '10.3.2'
24
+ VERSION = '10.4.0'
25
25
  end
26
26
 
27
27
  require 'rake/version'
@@ -63,6 +63,7 @@ require 'rake/file_utils_ext'
63
63
  require 'rake/file_list'
64
64
  require 'rake/default_loader'
65
65
  require 'rake/early_time'
66
+ require 'rake/late_time'
66
67
  require 'rake/name_space'
67
68
  require 'rake/task_manager'
68
69
  require 'rake/application'
@@ -20,6 +20,9 @@ module Rake
20
20
  include TaskManager
21
21
  include TraceOutput
22
22
 
23
+ # The command-line arguments rake is using (defaults to ARGV)
24
+ attr_reader :argv # :nodoc:
25
+
23
26
  # The name of the application (typically 'rake')
24
27
  attr_reader :name
25
28
 
@@ -45,6 +48,7 @@ module Rake
45
48
  # Initialize a Rake::Application object.
46
49
  def initialize
47
50
  super
51
+ @argv = ARGV.dup
48
52
  @name = 'rake'
49
53
  @rakefiles = DEFAULT_RAKEFILES.dup
50
54
  @rakefile = nil
@@ -73,6 +77,8 @@ module Rake
73
77
  # call +top_level+ to run your top level tasks.
74
78
  def run
75
79
  standard_exception_handling do
80
+ @argv = argv
81
+
76
82
  init
77
83
  load_rakefile
78
84
  top_level
@@ -633,7 +639,7 @@ module Rake
633
639
 
634
640
  standard_rake_options.each { |args| opts.on(*args) }
635
641
  opts.environment('RAKEOPT')
636
- end.parse!
642
+ end.parse! @argv
637
643
  end
638
644
 
639
645
  # Similar to the regular Ruby +require+ command, but will check
@@ -729,7 +735,7 @@ module Rake
729
735
  # Environmental assignments are processed at this time as well.
730
736
  def collect_command_line_tasks # :nodoc:
731
737
  @top_level_tasks = []
732
- ARGV.each do |arg|
738
+ @argv.each do |arg|
733
739
  if arg =~ /^(\w+)=(.*)$/m
734
740
  ENV[$1] = $2
735
741
  else
@@ -1,6 +1,6 @@
1
1
  module Rake
2
2
  module Backtrace # :nodoc: all
3
- SYS_KEYS = RbConfig::CONFIG.keys.grep(/(prefix|libdir)/)
3
+ SYS_KEYS = RbConfig::CONFIG.keys.grep(/(?:[a-z]prefix|libdir)\z/)
4
4
  SYS_PATHS = RbConfig::CONFIG.values_at(*SYS_KEYS).uniq +
5
5
  [ File.join(File.dirname(__FILE__), "..") ]
6
6
 
@@ -3,7 +3,7 @@ module Rake
3
3
  # Mixin for creating easily cloned objects.
4
4
 
5
5
  module Cloneable # :nodoc:
6
- # The hook that invoked by 'clone' and 'dup' methods.
6
+ # The hook that is invoked by 'clone' and 'dup' methods.
7
7
  def initialize_copy(source)
8
8
  super
9
9
  source.instance_variables.each do |var|
@@ -20,7 +20,7 @@ module Rake
20
20
  # Uploads the files
21
21
 
22
22
  def upload
23
- sh %{scp -rq #{@local_dir}/* #{@host}:#{@remote_dir}}
23
+ sh "scp", "-rq", "#{@local_dir}/*", "#{@host}:#{@remote_dir}"
24
24
  end
25
25
  end
26
26
 
@@ -30,8 +30,8 @@ module Rake
30
30
  # Uploads the files after removing the existing remote directory.
31
31
 
32
32
  def upload
33
- sh %{ssh #{@host} rm -rf #{@remote_dir}} rescue nil
34
- sh %{ssh #{@host} mkdir #{@remote_dir}}
33
+ sh "ssh", @host, "rm", "-rf", @remote_dir rescue nil
34
+ sh "ssh", @host, "mkdir", @remote_dir
35
35
  super
36
36
  end
37
37
  end
@@ -54,7 +54,7 @@ module Rake
54
54
 
55
55
  def upload
56
56
  @files.each do |fn|
57
- sh %{scp -q #{@local_dir}/#{fn} #{@host}:#{@remote_dir}}
57
+ sh "scp", "-q", "#{@local_dir}/#{fn}", "#{@host}:#{@remote_dir}"
58
58
  end
59
59
  end
60
60
  end
@@ -1,8 +1,3 @@
1
- require 'rbconfig'
2
-
3
- # TODO: replace with IO.popen using array-style arguments in Rake 11
4
- require 'open3'
5
-
6
1
  module Rake
7
2
 
8
3
  # Based on a script at:
@@ -18,6 +13,26 @@ module Rake
18
13
  default
19
14
  end
20
15
 
16
+ begin
17
+ require 'etc'
18
+ rescue LoadError
19
+ else
20
+ if Etc.respond_to?(:nprocessors)
21
+ def count
22
+ return Etc.nprocessors
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+
29
+ unless Rake::CpuCounter.method_defined?(:count)
30
+ Rake::CpuCounter.class_eval <<-'end;', __FILE__, __LINE__+1
31
+ require 'rbconfig'
32
+
33
+ # TODO: replace with IO.popen using array-style arguments in Rake 11
34
+ require 'open3'
35
+
21
36
  def count
22
37
  if defined?(Java::Java)
23
38
  count_via_java_runtime
@@ -38,7 +53,8 @@ module Rake
38
53
  count_via_win32 ||
39
54
  count_via_sysctl ||
40
55
  count_via_hwprefs_thread_count ||
41
- count_via_hwprefs_cpu_count
56
+ count_via_hwprefs_cpu_count ||
57
+ count_via_cpuinfo
42
58
  end
43
59
  end
44
60
  end
@@ -105,5 +121,5 @@ module Rake
105
121
  out.eof? ? nil : command
106
122
  end
107
123
  end
108
- end
124
+ end;
109
125
  end
@@ -98,6 +98,7 @@ module Rake
98
98
  def directory(*args, &block) # :doc:
99
99
  result = file_create(*args, &block)
100
100
  dir, _ = *Rake.application.resolve_args(args)
101
+ dir = Rake.from_pathname(dir)
101
102
  Rake.each_dir_parent(dir) do |d|
102
103
  file_create d do |t|
103
104
  mkdir_p t.name unless File.exist?(t.name)
@@ -150,7 +151,7 @@ module Rake
150
151
  #
151
152
  # Example:
152
153
  # rule '.o' => '.c' do |t|
153
- # sh %{cc -o #{t.name} #{t.source}}
154
+ # sh 'cc', '-o', t.name, t.source
154
155
  # end
155
156
  #
156
157
  def rule(*args, &block) # :doc: