tasks/nuweb.rake in nio-0.2.2 vs tasks/nuweb.rake in nio-0.2.3
- old
+ new
@@ -1,69 +1,125 @@
# nuweb build tasks
+namespace :nuweb do
-desc "Generate Ruby code"
-task :tangle => Dir['source/*.w'].collect{|fn| fn.gsub /\.w/,'.ws'}+Dir['source/lib/**/*.rb'].collect{|fn| fn.gsub('source/lib/','lib/')}+[:test]
+ desc "Generate Ruby code from nuweb source"
+ task :tangle => Dir['source/*.w'].collect{|fn| fn.gsub /\.w/,'.ws'}+
+ Dir['source/lib/**/*.rb'].collect{|fn| fn.gsub('source/lib/','lib/')}+
+ Dir['source/test/**/*'].collect{|fn| fn.gsub('source/test/','test/')}+
+ [:test]
-# directory 'lib'
-# directory 'lib/nio'
-# directory 'source/pdf'
+ # directory 'lib'
+ # directory 'lib/nio'
+ # directory 'source/pdf'
-rule '.ws' => ['.w'] do |t|
- puts "build dir: #{Dir.pwd}"
- puts "nuweb -t #{t.source}"
- puts `nuweb -t #{t.source}`
- File.open(t.name,'w'){|f| f.puts "sentinel"}
-end
+ rule '.ws' => ['.w'] do |t|
+ puts "build dir: #{Dir.pwd}"
+ puts "nuweb -t #{t.source}"
+ puts `nuweb -t #{t.source}`
+ File.open(t.name,'w'){|f| f.puts "sentinel"}
+ end
-clean_exts = ['*.tex','*.dvi','*.log','*.aux','*.out','*.ws']
+ clean_exts = ['*.tex','*.dvi','*.log','*.aux','*.out','*.ws']
+ clobber_dirs = ['lib', 'source/pdf', 'test']
+ clobber_exceptions = ['test/data.yaml', 'test/test_helper.rb']
-desc "clean up files"
-task :clean_nuweb do |t| # to do: integrate in hoe clean
- rm_r clean_exts.collect{|x| Dir.glob('*'+x)+Dir.glob('source/*'+x)+Dir.glob('source/pdf/*'+x)}.flatten
-end
+ desc "Remove all nuweb generated files"
+ task :clobber=>[:clean] do |t|
+ clobber_dirs.map{|dir| Dir["#{dir}/**/*"]}.flatten.each do |fn|
+ rm fn unless File.directory?(fn)
+ end
+ end
-desc "Generate source code (nuweb) documentation"
-task :weave => ['source/pdf'] + Dir['source/*.w'].collect{|fn| fn.gsub(/\.w/,'.pdf').gsub('source/','source/pdf/')}
+ desc "Clean up nuweb temporary files"
+ task :clean do |t|
+ rm_r clean_exts.collect{|x| Dir.glob('*'+x)+Dir.glob('source/*'+x)+Dir.glob('source/pdf/*'+x)}.flatten
+ end
-def rem_ext(fn, ext)
- ext = File.extname(fn) unless fn
- File.join(File.dirname(fn),File.basename(fn,ext))
-end
+ desc "Generate nuweb source code documentation"
+ task :weave => ['source/pdf'] + Dir['source/*.w'].collect{|fn| fn.gsub(/\.w/,'.pdf').gsub('source/','source/pdf/')}
-def sub_dir(dir, fn)
- d,n = File.split(fn)
- File.join(d,File.join(dir,n))
-end
+ def rem_ext(fn, ext)
+ ext = File.extname(fn) unless fn
+ File.join(File.dirname(fn),File.basename(fn,ext))
+ end
-def rep_dir(dir, fn)
- File.join(dir, File.basename(fn))
-end
+ def sub_dir(dir, fn)
+ d,n = File.split(fn)
+ File.join(d,File.join(dir,n))
+ end
-#note that if latex is run from the base directory and the file is in a subdirectory (source)
-# .aux/.out/.log files are created in the subdirectory and won't be found by the second
-# pass of latex;
-def w_to_pdf(s)
- fn = rem_ext(s,'.w')
- puts "dir: #{File.dirname(fn)}"
- doc_dir = File.dirname(fn)!='.' ? './pdf' : '../source/pdf'
- cd(File.dirname(fn)) do
- fn = File.basename(fn)
- 2.times do
- puts "nuweb -o -l #{fn}.w"
- puts `nuweb -o -l #{fn}.w`
- puts "latex -halt-on-error #{fn}.tex"
- puts `latex -halt-on-error #{fn}.tex`
- puts "dvipdfm -o #{rep_dir(doc_dir,fn)}.pdf #{fn}.dvi"
- puts `dvipdfm -o #{rep_dir(doc_dir,fn)}.pdf #{fn}.dvi`
+ def rep_dir(dir, fn)
+ File.join(dir, File.basename(fn))
+ end
+
+ #note that if latex is run from the base directory and the file is in a subdirectory (source)
+ # .aux/.out/.log files are created in the subdirectory and won't be found by the second
+ # pass of latex;
+ def w_to_pdf(s)
+ fn = rem_ext(s,'.w')
+ puts "dir: #{File.dirname(fn)}"
+ doc_dir = File.dirname(fn)!='.' ? './pdf' : '../source/pdf'
+ cd(File.dirname(fn)) do
+ fn = File.basename(fn)
+ 2.times do
+ puts "nuweb -o -l #{fn}.w"
+ puts `nuweb -o -l #{fn}.w`
+ puts "latex -halt-on-error #{fn}.tex"
+ puts `latex -halt-on-error #{fn}.tex`
+ puts "dvipdfm -o #{rep_dir(doc_dir,fn)}.pdf #{fn}.dvi"
+ puts `dvipdfm -o #{rep_dir(doc_dir,fn)}.pdf #{fn}.dvi`
+ end
end
end
-end
-rule '.pdf' => [proc{|tn| File.join('source',File.basename(tn,'.pdf')+'.w')}] do |t|
- w_to_pdf t.source
-end
+ rule '.pdf' => [proc{|tn| File.join('source',File.basename(tn,'.pdf')+'.w')}] do |t|
+ w_to_pdf t.source
+ end
-rule /\Alib\/.*\.rb/ =>[proc{|tn| tn.sub(/\Alib\//, 'source/lib/') }] do |t|
- cp t.source, t.name if t.source
+ rule /\Alib\/.*\.rb/ =>[proc{|tn| tn.sub(/\Alib\//, 'source/lib/') }] do |t|
+ cp t.source, t.name if t.source
+ end
+
+ rule /\Atest\/.*/ =>[proc{|tn| tn.sub(/\Atest\//, 'source/test/') }] do |t|
+ cp t.source, t.name if t.source
+ end
+
+ namespace :docs do
+
+ task :package=>['nuweb:weave']
+ Rake::PackageTask.new('nio-source-pdf', Nio::VERSION::STRING) do |p|
+ # generate same formats as for the gem contents
+ p.need_tar = PROJ.gem.need_tar
+ p.need_zip = PROJ.gem.need_zip
+ p.package_files.include "source/pdf/**/*.pdf"
+ end
+
+ end
+
+ Rake::PackageTask.new('nio-source', Nio::VERSION::STRING) do |p|
+ # generate same formats as for the gem contents
+ p.need_tar = PROJ.gem.need_tar
+ p.need_zip = PROJ.gem.need_zip
+ # to generate the strict source we could require the clobber task and then
+ # pack everything left... but we will just define what to pack
+ p.package_files.include "source/**/*.txt"
+ p.package_files.include "source/helpers/**/*"
+ p.package_files.include "source/lib/**/*"
+ p.package_files.include "source/test/**/*"
+ p.package_files.include "source/**/*.w"
+ p.package_files.exclude "source/pdf/**/*"
+ p.package_files.include 'History.txt', 'License.txt', 'Manifest.txt', 'Rakefile', 'README.txt', 'setup.rb'
+ p.package_files.include "tasks/**/*"
+ end
+
end
+task :clobber=>'nuweb:clobber'
+task :clean=>'nuweb:clean'
+Rake::Task['gem:package'].enhance ['nuweb:tangle']
+Rake::Task['gem:release'].clear_prerequisites.enhance ['gem'] # remove clobber prerequisite
+
+desc 'Generate code and documentation from nuweb sources'
+task :nuweb => ['nuweb:tangle', 'nuweb:weave']
+
+STDERR.puts "TTT #{Rake::Task['gem:package'].prerequisites.inspect}"
\ No newline at end of file