tasks/nuweb.rake in nio-0.2.3 vs tasks/nuweb.rake in nio-0.2.4

- old
+ new

@@ -1,39 +1,69 @@ # nuweb build tasks namespace :nuweb do + NUWEB_PRODUCTS = [] + NUWEB_SOURCES = Dir['source/**/*.w'] + + NUWEB_SOURCES.each do |input_fn| + products = [] + File.open(input_fn) do |input| + meta = '@' + input.each_line do |line| + if /^\s*%#{meta}r(.)%/.match(line) + meta = $1 + elsif /^\s*[^#{meta}]?#{meta}(?:o|O)\s*(\S.*)\s*$/.match(line) + products << $1 + end + end + end + NUWEB_PRODUCTS.concat products + products.each do |product| + file product => [input_fn] do |t| + puts "nuweb -t #{input_fn}" + puts `nuweb -t #{input_fn}` + touch product + end + end + end + + %w{lib test}.each do |dir| + sources = Dir["source/#{dir}/**/*"] + NUWEB_SOURCES.concat sources + NUWEB_PRODUCTS.concat sources.map{|s| s.sub("source/#{dir}/","#{dir}/")} + rule(/\A#{dir}\/.*/ =>[proc{|tn| tn.sub(/\A#{dir}\//, "source/#{dir}/") }]) do |t| + if t.source + if File.directory?(t.source) + cp_r t.source, t.name + else + cp t.source, t.name + end + end + end + end + 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] + task :tangle => NUWEB_PRODUCTS + [:test] # 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 + clean_exts = ['*.tex','*.dvi','*.log','*.aux','*.out'] + clobber_exts = [] + generated_dirs = ['lib', 'test', 'source/pdf'] - clean_exts = ['*.tex','*.dvi','*.log','*.aux','*.out','*.ws'] - clobber_dirs = ['lib', 'source/pdf', 'test'] - clobber_exceptions = ['test/data.yaml', 'test/test_helper.rb'] - desc "Remove all nuweb generated files" - task :clobber=>[:clean] do |t| - clobber_dirs.map{|dir| Dir["#{dir}/**/*"]}.flatten.each do |fn| + task :clobber=>['^clobber'] do |t| + generated_dirs.map{|dir| Dir["#{dir}/**/*"]}.flatten.each do |fn| rm fn unless File.directory?(fn) end end - desc "Clean up nuweb temporary files" + desc "Clean up nuweb weave 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 + rm_r clean_exts.collect{|x| Dir.glob('source/*'+x)+Dir.glob('source/pdf/*'+x)}.flatten end desc "Generate nuweb source code documentation" task :weave => ['source/pdf'] + Dir['source/*.w'].collect{|fn| fn.gsub(/\.w/,'.pdf').gsub('source/','source/pdf/')} @@ -73,26 +103,18 @@ 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 - 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" + pdf_files = Dir['source/**/*.w'].map{|fn| File.join 'source','pdf',File.basename(fn,'.w')+'.pdf'} + p.package_files.include *pdf_files end end Rake::PackageTask.new('nio-source', Nio::VERSION::STRING) do |p| @@ -111,15 +133,13 @@ p.package_files.include "tasks/**/*" end end -task :clobber=>'nuweb:clobber' +task :clobber=>'nuweb:clean' task :clean=>'nuweb:clean' -Rake::Task['gem:package'].enhance ['nuweb:tangle'] -Rake::Task['gem:release'].clear_prerequisites.enhance ['gem'] # remove clobber prerequisite +gem_package_prerequisites = Rake::Task['gem:package'].prerequisites.dup +Rake::Task['gem:package'].clear_prerequisites.enhance ['nuweb:tangle']+gem_package_prerequisites 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