luislavena-rake 0.8.3.99

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 (104) hide show
  1. data/CHANGES +422 -0
  2. data/MIT-LICENSE +21 -0
  3. data/README +196 -0
  4. data/Rakefile +416 -0
  5. data/TODO +20 -0
  6. data/bin/rake +31 -0
  7. data/doc/command_line_usage.rdoc +102 -0
  8. data/doc/example/Rakefile1 +38 -0
  9. data/doc/example/Rakefile2 +35 -0
  10. data/doc/example/a.c +6 -0
  11. data/doc/example/b.c +6 -0
  12. data/doc/example/main.c +11 -0
  13. data/doc/glossary.rdoc +51 -0
  14. data/doc/jamis.rb +591 -0
  15. data/doc/proto_rake.rdoc +127 -0
  16. data/doc/rake.1.gz +0 -0
  17. data/doc/rakefile.rdoc +534 -0
  18. data/doc/rational.rdoc +151 -0
  19. data/doc/release_notes/rake-0.4.14.rdoc +23 -0
  20. data/doc/release_notes/rake-0.4.15.rdoc +35 -0
  21. data/doc/release_notes/rake-0.5.0.rdoc +53 -0
  22. data/doc/release_notes/rake-0.5.3.rdoc +78 -0
  23. data/doc/release_notes/rake-0.5.4.rdoc +46 -0
  24. data/doc/release_notes/rake-0.6.0.rdoc +141 -0
  25. data/doc/release_notes/rake-0.7.0.rdoc +119 -0
  26. data/doc/release_notes/rake-0.7.1.rdoc +59 -0
  27. data/doc/release_notes/rake-0.7.2.rdoc +121 -0
  28. data/doc/release_notes/rake-0.7.3.rdoc +47 -0
  29. data/doc/release_notes/rake-0.8.0.rdoc +114 -0
  30. data/doc/release_notes/rake-0.8.2.rdoc +165 -0
  31. data/doc/release_notes/rake-0.8.3.rdoc +112 -0
  32. data/doc/release_notes/rake-0.8.4.rdoc +125 -0
  33. data/install.rb +88 -0
  34. data/lib/rake.rb +2478 -0
  35. data/lib/rake/classic_namespace.rb +8 -0
  36. data/lib/rake/clean.rb +33 -0
  37. data/lib/rake/contrib/compositepublisher.rb +24 -0
  38. data/lib/rake/contrib/ftptools.rb +153 -0
  39. data/lib/rake/contrib/publisher.rb +75 -0
  40. data/lib/rake/contrib/rubyforgepublisher.rb +18 -0
  41. data/lib/rake/contrib/sshpublisher.rb +47 -0
  42. data/lib/rake/contrib/sys.rb +209 -0
  43. data/lib/rake/gempackagetask.rb +97 -0
  44. data/lib/rake/loaders/makefile.rb +42 -0
  45. data/lib/rake/packagetask.rb +184 -0
  46. data/lib/rake/rake_test_loader.rb +5 -0
  47. data/lib/rake/rdoctask.rb +209 -0
  48. data/lib/rake/ruby182_test_unit_fix.rb +23 -0
  49. data/lib/rake/runtest.rb +23 -0
  50. data/lib/rake/tasklib.rb +23 -0
  51. data/lib/rake/testtask.rb +161 -0
  52. data/lib/rake/win32.rb +57 -0
  53. data/test/capture_stdout.rb +26 -0
  54. data/test/check_expansion.rb +5 -0
  55. data/test/contrib/test_sys.rb +47 -0
  56. data/test/data/chains/Rakefile +15 -0
  57. data/test/data/default/Rakefile +19 -0
  58. data/test/data/dryrun/Rakefile +22 -0
  59. data/test/data/file_creation_task/Rakefile +33 -0
  60. data/test/data/imports/Rakefile +19 -0
  61. data/test/data/imports/deps.mf +1 -0
  62. data/test/data/multidesc/Rakefile +17 -0
  63. data/test/data/namespace/Rakefile +57 -0
  64. data/test/data/rakelib/test1.rb +3 -0
  65. data/test/data/rbext/rakefile.rb +3 -0
  66. data/test/data/sample.mf +14 -0
  67. data/test/data/statusreturn/Rakefile +8 -0
  68. data/test/data/unittest/Rakefile +1 -0
  69. data/test/filecreation.rb +32 -0
  70. data/test/functional.rb +15 -0
  71. data/test/in_environment.rb +30 -0
  72. data/test/rake_test_setup.rb +24 -0
  73. data/test/reqfile.rb +3 -0
  74. data/test/reqfile2.rb +3 -0
  75. data/test/session_functional.rb +339 -0
  76. data/test/shellcommand.rb +3 -0
  77. data/test/test_application.rb +713 -0
  78. data/test/test_clean.rb +14 -0
  79. data/test/test_definitions.rb +85 -0
  80. data/test/test_earlytime.rb +35 -0
  81. data/test/test_extension.rb +63 -0
  82. data/test/test_file_creation_task.rb +62 -0
  83. data/test/test_file_task.rb +143 -0
  84. data/test/test_filelist.rb +620 -0
  85. data/test/test_fileutils.rb +266 -0
  86. data/test/test_ftp.rb +59 -0
  87. data/test/test_invocation_chain.rb +81 -0
  88. data/test/test_makefile_loader.rb +26 -0
  89. data/test/test_multitask.rb +45 -0
  90. data/test/test_namespace.rb +55 -0
  91. data/test/test_package_task.rb +118 -0
  92. data/test/test_pathmap.rb +210 -0
  93. data/test/test_rake.rb +41 -0
  94. data/test/test_rdoc_task.rb +88 -0
  95. data/test/test_require.rb +35 -0
  96. data/test/test_rules.rb +349 -0
  97. data/test/test_task_arguments.rb +89 -0
  98. data/test/test_task_manager.rb +173 -0
  99. data/test/test_tasklib.rb +12 -0
  100. data/test/test_tasks.rb +374 -0
  101. data/test/test_test_task.rb +77 -0
  102. data/test/test_top_level_functions.rb +86 -0
  103. data/test/test_win32.rb +72 -0
  104. metadata +186 -0
@@ -0,0 +1,165 @@
1
+ = Rake 0.8.2 Released
2
+
3
+ Rake version 0.8.2 is a new release of rake that includes a number of
4
+ new features and numerous bug fixes.
5
+
6
+ == Changes
7
+
8
+ === New Features in Version 0.8.2
9
+
10
+ * Switched from getoptlong to optparse (patches supplied by Edwin
11
+ Pratomo).
12
+
13
+ * The -T option will now attempt to dynamically sense the size of the
14
+ terminal. The -T output will only self-truncate if the output is a
15
+ tty. However, if RAKE_COLUMNS is explicitly set, it will be honored
16
+ in any case. (Patch provided by Gavin Stark).
17
+
18
+ * The following public methods have been added to rake task objects:
19
+
20
+ * task.clear -- Clear both the prerequisites and actions of the
21
+ target rake task.
22
+ * task.clear_prerequisites -- Clear all the existing prerequisites
23
+ from the target rake task.
24
+ * task.clear_actions -- Clear all the existing actions from the
25
+ target rake task.
26
+ * task.reenable -- Re-enable a task, allowing its actions to be
27
+ executed again if the task is invoked.
28
+
29
+ * Changed RDoc test task to have no default template. This makes it
30
+ easier for the tempate to pick up the template from the environment.
31
+
32
+ * Default values for task arguments can easily be specified with the
33
+ :with_defaults method. (Idea for default argument merging supplied
34
+ by (Adam Q. Salter)
35
+
36
+ === Bug Fixes in Version 0.8.2
37
+
38
+ * Fixed bug in package task so that it will include the subdir
39
+ directory in the package for testing. (Bug found by Adam Majer)
40
+
41
+ * Fixed filename dependency order bug in test_inspect_pending and
42
+ test_to_s_pending. (Bug found by Adam Majer)
43
+
44
+ * Fixed check for file utils options to make them immune to the
45
+ symbol/string differences. (Patch supplied by Edwin Pratomo)
46
+
47
+ * Fixed bug with rules involving multiple source, where only the first
48
+ dependency of a rule has any effect (Patch supplied by Emanuel
49
+ Inderm�hle)
50
+
51
+ * FileList#clone and FileList#dup have better sematics w.r.t. taint
52
+ and freeze.
53
+
54
+ * Changed from using Mutex to Monitor. Evidently Mutex causes thread
55
+ join errors when Ruby is compiled with -disable-pthreads. (Patch
56
+ supplied by Ittay Dror)
57
+
58
+ * Fixed bug in makefile parser that had problems with extra spaces in
59
+ file task names. (Patch supplied by Ittay Dror)
60
+
61
+ == Other changes in Version 0.8.2
62
+
63
+ * Added ENV var to rake's own Rakefile to prevent OS X from including
64
+ extended attribute junk in the rake package tar file. (Bug found by
65
+ Adam Majer)
66
+
67
+ * Added a performance patch for reading large makefile dependency
68
+ files. (Patch supplied by Ittay Dror)
69
+
70
+ == What is Rake
71
+
72
+ Rake is a build tool similar to the make program in many ways. But
73
+ instead of cryptic make recipes, Rake uses standard Ruby code to
74
+ declare tasks and dependencies. You have the full power of a modern
75
+ scripting language built right into your build tool.
76
+
77
+ == Availability
78
+
79
+ The easiest way to get and install rake is via RubyGems ...
80
+
81
+ gem install rake (you may need root/admin privileges)
82
+
83
+ Otherwise, you can get it from the more traditional places:
84
+
85
+ Home Page:: http://rake.rubyforge.org/
86
+ Download:: http://rubyforge.org/project/showfiles.php?group_id=50
87
+
88
+ == Task Argument Examples
89
+
90
+ Prior to version 0.8.0, rake was only able to handle command line
91
+ arguments of the form NAME=VALUE that were passed into Rake via the
92
+ ENV hash. Many folks had asked for some kind of simple command line
93
+ arguments, perhaps using "--" to separate regular task names from
94
+ argument values on the command line. The problem is that there was no
95
+ easy way to associate positional arguments on the command line with
96
+ different tasks. Suppose both tasks :a and :b expect a command line
97
+ argument: does the first value go with :a? What if :b is run first?
98
+ Should it then get the first command line argument.
99
+
100
+ Rake 0.8.0 solves this problem by explicitly passing values directly
101
+ to the tasks that need them. For example, if I had a release task
102
+ that required a version number, I could say:
103
+
104
+ rake release[0.8.2]
105
+
106
+ And the string "0.8.2" will be passed to the :release task. Multiple
107
+ arguments can be passed by separating them with a comma, for example:
108
+
109
+ rake name[john,doe]
110
+
111
+ Just a few words of caution. The rake task name and its arguments
112
+ need to be a single command line argument to rake. This generally
113
+ means no spaces. If spaces are needed, then the entire rake +
114
+ argument string should be quoted. Something like this:
115
+
116
+ rake "name[billy bob, smith]"
117
+
118
+ (Quoting rules vary between operating systems and shells, so make sure
119
+ you consult the proper docs for your OS/shell).
120
+
121
+ === Tasks that Expect Parameters
122
+
123
+ Parameters are only given to tasks that are setup to expect them. In
124
+ order to handle named parameters, the task declaration syntax for
125
+ tasks has been extended slightly.
126
+
127
+ For example, a task that needs a first name and last name might be
128
+ declared as:
129
+
130
+ task :name, :first_name, :last_name
131
+
132
+ The first argument is still the name of the task (:name in this case).
133
+ The next to argumements are the names of the parameters expected by
134
+ :name (:first_name and :last_name in the example).
135
+
136
+ To access the values of the paramters, the block defining the task
137
+ behaviour can now accept a second parameter:
138
+
139
+ task :name, :first_name, :last_name do |t, args|
140
+ puts "First name is #{args.first_name}"
141
+ puts "Last name is #{args.last_name}"
142
+ end
143
+
144
+ The first argument of the block "t" is always bound to the current
145
+ task object. The second argument "args" is an open-struct like object
146
+ that allows access to the task arguments. Extra command line
147
+ arguments to a task are ignored. Missing command line arguments are
148
+ given the nil value.
149
+
150
+ == Thanks
151
+
152
+ As usual, it was input from users that drove a alot of these changes. The
153
+ following people either contributed patches, made suggestions or made
154
+ otherwise helpful comments. Thanks to ...
155
+
156
+ * Edwin Pratomo
157
+ * Gavin Stark
158
+ * Adam Q. Salter
159
+ * Adam Majer
160
+ * Emanuel Inderm�hle
161
+ * Ittay Dror
162
+ * Bheeshmar Redheendran (for spending an afternoon with me debugging
163
+ windows issues)
164
+
165
+ -- Jim Weirich
@@ -0,0 +1,112 @@
1
+ = Rake 0.8.3 Released
2
+
3
+ Rake version 0.8.3 is a bug-fix release of rake.
4
+
5
+ == Changes
6
+
7
+ === Bug Fixes in Version 0.8.3
8
+
9
+ * Enhanced the system directory detection in windows. We now check
10
+ HOMEDRIVE/HOMEPATH and USERPROFILE if APPDATA isn't found. (Patch
11
+ supplied by James Tucker). Rake no long aborts if it can't find the
12
+ directory.
13
+
14
+ * Added fix to handle ruby installations in directories with spaces in
15
+ their name.
16
+
17
+ == What is Rake
18
+
19
+ Rake is a build tool similar to the make program in many ways. But
20
+ instead of cryptic make recipes, Rake uses standard Ruby code to
21
+ declare tasks and dependencies. You have the full power of a modern
22
+ scripting language built right into your build tool.
23
+
24
+ == Availability
25
+
26
+ The easiest way to get and install rake is via RubyGems ...
27
+
28
+ gem install rake (you may need root/admin privileges)
29
+
30
+ Otherwise, you can get it from the more traditional places:
31
+
32
+ Home Page:: http://rake.rubyforge.org/
33
+ Download:: http://rubyforge.org/project/showfiles.php?group_id=50
34
+
35
+ == Task Argument Examples
36
+
37
+ Prior to version 0.8.0, rake was only able to handle command line
38
+ arguments of the form NAME=VALUE that were passed into Rake via the
39
+ ENV hash. Many folks had asked for some kind of simple command line
40
+ arguments, perhaps using "--" to separate regular task names from
41
+ argument values on the command line. The problem is that there was no
42
+ easy way to associate positional arguments on the command line with
43
+ different tasks. Suppose both tasks :a and :b expect a command line
44
+ argument: does the first value go with :a? What if :b is run first?
45
+ Should it then get the first command line argument.
46
+
47
+ Rake 0.8.0 solves this problem by explicitly passing values directly
48
+ to the tasks that need them. For example, if I had a release task
49
+ that required a version number, I could say:
50
+
51
+ rake release[0.8.3]
52
+
53
+ And the string "0.8.3" will be passed to the :release task. Multiple
54
+ arguments can be passed by separating them with a comma, for example:
55
+
56
+ rake name[john,doe]
57
+
58
+ Just a few words of caution. The rake task name and its arguments
59
+ need to be a single command line argument to rake. This generally
60
+ means no spaces. If spaces are needed, then the entire rake +
61
+ argument string should be quoted. Something like this:
62
+
63
+ rake "name[billy bob, smith]"
64
+
65
+ (Quoting rules vary between operating systems and shells, so make sure
66
+ you consult the proper docs for your OS/shell).
67
+
68
+ === Tasks that Expect Parameters
69
+
70
+ Parameters are only given to tasks that are setup to expect them. In
71
+ order to handle named parameters, the task declaration syntax for
72
+ tasks has been extended slightly.
73
+
74
+ For example, a task that needs a first name and last name might be
75
+ declared as:
76
+
77
+ task :name, :first_name, :last_name
78
+
79
+ The first argument is still the name of the task (:name in this case).
80
+ The next to argumements are the names of the parameters expected by
81
+ :name (:first_name and :last_name in the example).
82
+
83
+ To access the values of the paramters, the block defining the task
84
+ behaviour can now accept a second parameter:
85
+
86
+ task :name, :first_name, :last_name do |t, args|
87
+ puts "First name is #{args.first_name}"
88
+ puts "Last name is #{args.last_name}"
89
+ end
90
+
91
+ The first argument of the block "t" is always bound to the current
92
+ task object. The second argument "args" is an open-struct like object
93
+ that allows access to the task arguments. Extra command line
94
+ arguments to a task are ignored. Missing command line arguments are
95
+ given the nil value.
96
+
97
+ == Thanks
98
+
99
+ As usual, it was input from users that drove a alot of these changes. The
100
+ following people either contributed patches, made suggestions or made
101
+ otherwise helpful comments. Thanks to ...
102
+
103
+ * Edwin Pratomo
104
+ * Gavin Stark
105
+ * Adam Q. Salter
106
+ * Adam Majer
107
+ * Emanuel Inderm�hle
108
+ * Ittay Dror
109
+ * Bheeshmar Redheendran (for spending an afternoon with me debugging
110
+ windows issues)
111
+
112
+ -- Jim Weirich
@@ -0,0 +1,125 @@
1
+ = Rake 0.8.4 Released
2
+
3
+ Rake version 0.8.4 is a bug-fix release of rake.
4
+
5
+ == Changes
6
+
7
+ === New Features / Enhancements in Version 0.8.4
8
+
9
+ * Case is preserved on rakefile names. (patch from James
10
+ M. Lawrence/quix)
11
+
12
+ * Windows system dir search order is now: HOME, HOMEDRIVE + HOMEPATH,
13
+ APPDATA, USERPROFILE (patch from Luis Lavena)
14
+
15
+ * MingGW is now recognized as a windows platform. (patch from Luis
16
+ Lavena)
17
+
18
+ === Bug Fixes in Version 0.8.4
19
+
20
+ * Fixed stray ARGV option problem that was interfering with
21
+ Test::Unit::Runner. (patch from Pivotal Labs)
22
+
23
+ === Infrastructure Improvements in Version 0.8.4
24
+
25
+ * Numerous fixes to the windows test suite (patch from Luis Lavena).
26
+
27
+ * Improved Rakefile case insensitivity testing (patch from Luis
28
+ Lavena).
29
+
30
+ * Better support for windows paths in the test task (patch from Simon
31
+ Chiang/bahuvrihi)
32
+
33
+ == What is Rake
34
+
35
+ Rake is a build tool similar to the make program in many ways. But
36
+ instead of cryptic make recipes, Rake uses standard Ruby code to
37
+ declare tasks and dependencies. You have the full power of a modern
38
+ scripting language built right into your build tool.
39
+
40
+ == Availability
41
+
42
+ The easiest way to get and install rake is via RubyGems ...
43
+
44
+ gem install rake (you may need root/admin privileges)
45
+
46
+ Otherwise, you can get it from the more traditional places:
47
+
48
+ Home Page:: http://rake.rubyforge.org/
49
+ Download:: http://rubyforge.org/project/showfiles.php?group_id=50
50
+ GitHub:: git://github.com/jimweirich/rake.git
51
+
52
+ == Task Argument Examples
53
+
54
+ Prior to version 0.8.0, rake was only able to handle command line
55
+ arguments of the form NAME=VALUE that were passed into Rake via the
56
+ ENV hash. Many folks had asked for some kind of simple command line
57
+ arguments, perhaps using "--" to separate regular task names from
58
+ argument values on the command line. The problem is that there was no
59
+ easy way to associate positional arguments on the command line with
60
+ different tasks. Suppose both tasks :a and :b expect a command line
61
+ argument: does the first value go with :a? What if :b is run first?
62
+ Should it then get the first command line argument.
63
+
64
+ Rake 0.8.0 solves this problem by explicitly passing values directly
65
+ to the tasks that need them. For example, if I had a release task
66
+ that required a version number, I could say:
67
+
68
+ rake release[0.8.4]
69
+
70
+ And the string "0.8.4" will be passed to the :release task. Multiple
71
+ arguments can be passed by separating them with a comma, for example:
72
+
73
+ rake name[john,doe]
74
+
75
+ Just a few words of caution. The rake task name and its arguments
76
+ need to be a single command line argument to rake. This generally
77
+ means no spaces. If spaces are needed, then the entire rake +
78
+ argument string should be quoted. Something like this:
79
+
80
+ rake "name[billy bob, smith]"
81
+
82
+ (Quoting rules vary between operating systems and shells, so make sure
83
+ you consult the proper docs for your OS/shell).
84
+
85
+ === Tasks that Expect Parameters
86
+
87
+ Parameters are only given to tasks that are setup to expect them. In
88
+ order to handle named parameters, the task declaration syntax for
89
+ tasks has been extended slightly.
90
+
91
+ For example, a task that needs a first name and last name might be
92
+ declared as:
93
+
94
+ task :name, :first_name, :last_name
95
+
96
+ The first argument is still the name of the task (:name in this case).
97
+ The next to argumements are the names of the parameters expected by
98
+ :name (:first_name and :last_name in the example).
99
+
100
+ To access the values of the paramters, the block defining the task
101
+ behaviour can now accept a second parameter:
102
+
103
+ task :name, :first_name, :last_name do |t, args|
104
+ puts "First name is #{args.first_name}"
105
+ puts "Last name is #{args.last_name}"
106
+ end
107
+
108
+ The first argument of the block "t" is always bound to the current
109
+ task object. The second argument "args" is an open-struct like object
110
+ that allows access to the task arguments. Extra command line
111
+ arguments to a task are ignored. Missing command line arguments are
112
+ given the nil value.
113
+
114
+ == Thanks
115
+
116
+ As usual, it was input from users that drove a alot of these changes. The
117
+ following people either contributed patches, made suggestions or made
118
+ otherwise helpful comments. Thanks to ...
119
+
120
+ * James M. Lawrence/quix
121
+ * Luis Lavena
122
+ * Pivotal Labs
123
+ * Simon Chiang/bahuvrihi
124
+
125
+ -- Jim Weirich
data/install.rb ADDED
@@ -0,0 +1,88 @@
1
+ require 'rbconfig'
2
+ require 'find'
3
+ require 'ftools'
4
+
5
+ include Config
6
+
7
+ $ruby = CONFIG['ruby_install_name']
8
+
9
+ ##
10
+ # Install a binary file. We patch in on the way through to
11
+ # insert a #! line. If this is a Unix install, we name
12
+ # the command (for example) 'rake' and let the shebang line
13
+ # handle running it. Under windows, we add a '.rb' extension
14
+ # and let file associations to their stuff
15
+ #
16
+
17
+ def installBIN(from, opfile)
18
+
19
+ tmp_dir = nil
20
+ for t in [".", "/tmp", "c:/temp", $bindir]
21
+ stat = File.stat(t) rescue next
22
+ if stat.directory? and stat.writable?
23
+ tmp_dir = t
24
+ break
25
+ end
26
+ end
27
+
28
+ fail "Cannot find a temporary directory" unless tmp_dir
29
+ tmp_file = File.join(tmp_dir, "_tmp")
30
+
31
+ File.open(from) do |ip|
32
+ File.open(tmp_file, "w") do |op|
33
+ ruby = File.join($realbindir, $ruby)
34
+ op.puts "#!#{ruby} -w"
35
+ op.write ip.read
36
+ end
37
+ end
38
+
39
+ opfile += ".rb" if CONFIG["target_os"] =~ /mswin/i
40
+ File::install(tmp_file, File.join($bindir, opfile), 0755, true)
41
+ File::unlink(tmp_file)
42
+ end
43
+
44
+ $sitedir = CONFIG["sitelibdir"]
45
+ unless $sitedir
46
+ version = CONFIG["MAJOR"]+"."+CONFIG["MINOR"]
47
+ $libdir = File.join(CONFIG["libdir"], "ruby", version)
48
+ $sitedir = $:.find {|x| x =~ /site_ruby/}
49
+ if !$sitedir
50
+ $sitedir = File.join($libdir, "site_ruby")
51
+ elsif $sitedir !~ Regexp.quote(version)
52
+ $sitedir = File.join($sitedir, version)
53
+ end
54
+ end
55
+
56
+ $bindir = CONFIG["bindir"]
57
+
58
+ $realbindir = $bindir
59
+
60
+ bindir = CONFIG["bindir"]
61
+ if (destdir = ENV['DESTDIR'])
62
+ $bindir = destdir + $bindir
63
+ $sitedir = destdir + $sitedir
64
+
65
+ File::makedirs($bindir)
66
+ File::makedirs($sitedir)
67
+ end
68
+
69
+ rake_dest = File.join($sitedir, "rake")
70
+ File::makedirs(rake_dest, true)
71
+ File::chmod(0755, rake_dest)
72
+
73
+ # The library files
74
+
75
+ files = Dir.chdir('lib') { Dir['**/*.rb'] }
76
+
77
+ for fn in files
78
+ fn_dir = File.dirname(fn)
79
+ target_dir = File.join($sitedir, fn_dir)
80
+ if ! File.exist?(target_dir)
81
+ File.makedirs(target_dir)
82
+ end
83
+ File::install(File.join('lib', fn), File.join($sitedir, fn), 0644, true)
84
+ end
85
+
86
+ # and the executable
87
+
88
+ installBIN("bin/rake", "rake")