zynaddsubfx

ZynAddSubFX open source synthesizer
Log | Files | Refs | Submodules | LICENSE

commit bba523c43d583b67facd8fec2d76750300e84328
parent d0381883709247cb86d854c97291cc1dd96da3c9
Author: fundamental <mark.d.mccurry@gmail.com>
Date:   Fri,  4 Mar 2016 11:37:11 -0500

Add Semi-Automated Copyright Checking/Fixing Tool

Diffstat:
Adoc/copyright-fixer.rb | 160+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 160 insertions(+), 0 deletions(-)

diff --git a/doc/copyright-fixer.rb b/doc/copyright-fixer.rb @@ -0,0 +1,160 @@ +require "open3" + +base = ARGV[0] +Dir.chdir base +all_files = Dir.glob('**/*').select {|f| File.file?(f)} +src_files = all_files.select {|f| f.match(/\.(cpp|H|h|C)$/)} +zyn_files = src_files.select {|f| f.match(/^src/)} + +def add_license(fname) + puts "Please Enter a description for #{fname}:" + short = fname.match(/.*\/(.*)/)[1] + + desc = $stdin.gets.strip + str = %{/* + ZynAddSubFX - a software synthesizer + + #{short} - #{desc} + Copyright (C) 2016 Mark McCurry + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. +*/} + + Open3.popen3("ed -p: #{fname}") do |stdin, stdout, stderr| + stdin.puts "H" + stdin.puts "0a" + stdin.puts str + stdin.puts "." + stdin.puts "w" + stdin.puts "q" + puts stdout.gets + end +end + +def update_license(fname, first, last) + str = %{ This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. +*/} + Open3.popen3("ed -p: #{fname}") do |stdin, stdout, stderr| + stdin.puts "H" + stdin.puts "#{first},#{last}c" + stdin.puts str + stdin.puts "." + stdin.puts "w" + stdin.puts "q" + puts stdout.gets + end +end + +tmp = 5000 +zyn_files.sort.each do |fname| + if tmp > 0 + tmp -= 1 + else + exit + end + + if(fname.match(/jack_osc/) || fname.match(/NSM/)) + next + end + + f = File.open(fname, "r") + line = 0 + puts + puts "Info: Processing '#{fname}'" + + #Check for Copyright Header + first = f.gets + line += 1 + + if(!first.match /\/\*/) + puts "Error: No Copyright Header Found" + f.close + add_license(fname) + next + end + + #Program Title + ln = f.gets + line += 1 + + if(!ln.match /ZynAddSubFX - a software synthesizer/) + puts "Warning: Unexpected Program Name" + end + + #Empty + ln = f.gets + line += 1 + + if(!ln.match /^$/) + puts "Warning: Broken Formatting" + end + + #File Description + ln = f.gets + line += 1 + if(!ln.match /(.*) - (.*)/) + puts "Warning: Invalid Description" + end + + #Copyright Section + copying = true + while copying + ln = f.gets + line += 1 + if(ln.match(/^ .*/)) + next + end + if(ln.match(/^$/)|| ln.match(/Author/)) + break + end + if(!(ln.match(/Copyright \(C\) ([0-9]*)-([0-9]*) (.*)/) || + ln.match(/Copyright \(C\) ([0-9]*) (.*)/))) + puts "Warning: Invalid Copyright Field" + puts " <#{ln}>" + end + end + + + #Out-Of-Date Author Section + if(ln.match /Author/) + while true + ln = f.gets + line += 1 + if(ln.match(/^$/)) + break + end + end + end + + #Completely Standard Copyright Stuff + ln = f.gets + line += 1 + if(ln.match /This program is free software/) + puts "Info: GPL Found..." + initial_line = line + while(!ln.match(/\*\//)) + ln = f.gets + line += 1 + if(ln.downcase.match(/version 2/)) + puts ln + end + end + final_line = line + f.close + update_license(fname, initial_line, final_line) + puts "Info: GPL Lines #{initial_line} #{final_line} total #{final_line-initial_line}" + next + else + puts "Error: Invalid Copyright Header" + puts " Line = <#{ln}>" + puts `head #{fname}` + end +end +#zyn_files = src_files.select +#puts Dir.glob('**/*').select { |f| !!(File.file?(f) && f.match(/\.(cpp|H|h|C)$/))}