diff options
author | psyc://loupsycedyglgamf.onion/~lynX <ircs://psyced.org/youbroketheinternet> | 2018-06-06 06:20:55 +0000 |
---|---|---|
committer | psyc://loupsycedyglgamf.onion/~lynX <ircs://psyced.org/youbroketheinternet> | 2018-06-06 06:20:55 +0000 |
commit | bc2853bf5de404afdcb6774eb287f31977b3c76a (patch) | |
tree | 13eea14286dd7b688eb3d2ca9e6abc2df4c9ee0b /contrib/scripts/afferify | |
parent | be9319fee506932c3d7f731f62884e8bd96431c5 (diff) |
for posterity: the script that caught all kinds of funny license formatting
Diffstat (limited to 'contrib/scripts/afferify')
-rwxr-xr-x | contrib/scripts/afferify | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/contrib/scripts/afferify b/contrib/scripts/afferify new file mode 100755 index 0000000000..188b66c640 --- /dev/null +++ b/contrib/scripts/afferify @@ -0,0 +1,95 @@ +#!/usr/bin/perl +# Catch all in-source GPL2/3 license declarations and convert +# them to AGPL. +# +# You expected this to be using diff & patch? Well, the source +# files have all sorts of different commenting and indentation +# styles, not speaking of typos and failed uses of search and +# replace, that an attempt in using the patch(1) tool would fail +# miserably. This script instead is based on my rgrep from 1998. +# Keeping it here as it may be useful to other projects under- +# going the same pains. It is forbidden to use this script to +# convert AGPL code back to less strict licensing. Haha, just +# kidding. +# +# -symlynX + +use File::Find; +$|=1; +# Recurse into current or given directories +find(\&wanted, $#ARGV >= 0 ? @ARGV : '.'); +print STDERR "\n"; +exit; + + +sub wanted { + my $name = $File::Find::name; + ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime) + = lstat; + return $File::Find::prune = 1 if /^(CVS|\.git|\.svn)$/; + # Nicer if you 'make distclean' first + return if /\.(o|pdf)$/i; + return if -d _ or -l _; + return if /afferify/; # Don't apply this to itself ;) + # No.. i didn't do it.. just being careful ;) ;) +# return unless -T _; # We don't have binaries in the repo, do we? + + # We need the default variable '$_' for more important duties. + my $f = $_; + + if (sysopen(I, $f, O_RDONLY)) { + $_ = &slurp(*I); + close I; + # Debugging: What's inside the file we just read? +# print STDERR '> ', $_; + + # Good idea to have the text start with "GNUnet" rather than "This program" + if ( s#GNUnet is free software; you can redistribute it and/or modify it under the#GNUnet is free software: you can redistribute it and/or modify it# ) { + # Whoever had the idea of reformatting the GPL license text... + print STDERR "\nTrying wide style on $name\t"; + + # Most important thing to know in order to be able + # to read perl code: if regexps appear without any + # context, it means they are applied to the default + # variable being '$_'. + return unless s#terms of the GNU General Public License as published by the Free Software#under the terms of the GNU General Public License as published#; + return unless s#^(\W*\s+)Foundation; either version \d, or \(at your option\) any later version\.#\1by the Free Software Foundation, either version 3 of the License,\n\1or (at your option) any later version.#m; + return unless s#GNUnet is distributed in the hope that it will be useful, but WITHOUT ANY#GNUnet is distributed in the hope that it will be useful, but#; + return unless s#WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR#WITHOUT ANY WARRANTY; without even the implied warranty of#; + return unless s#^(\W*\s+)A PARTICULAR PURPOSE. See the GNU General Public License for more details.#\1MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n\1Affero General Public License for more details.#m; + return unless s#^\W*\n\W*\s+You should have received a copy of the GNU General Public License along with\n\W*\s+GNUnet. see the file COPYING\. If not, .* see\s*\W*\s+<http://www.gnu.org/licenses/>\n##m; + } else { + # If this string is not in the file, leave it alone. + return unless s#GNUnet is free software; you can redistribute it and/or modify#GNUnet is free software: you can redistribute it and/or modify it#; + print STDERR "\nTrying regular style on $name\t"; + + # Patterns are designed to also match some typos and substitutions. + return unless s#it under the terms of the GNU General Public Lice\w+ as published#under the terms of the GNU General Public License as published#; + return unless s#by the Free Software Foundation; either version \d, or \(at your#by the Free Software Foundation, either version 3 of the License,#; + return unless s#option\) any later version\.#or (at your option) any later version.#; + return unless s#General Public Lice\w+ for more details\.#Affero General Public License for more details.#; + return unless s#^\W*\n\W*\s+You should have received a copy of the GNU General Public Lice\w+\n\W*\s+along with GNUnet. see the file COPYING\. If not, write to the\n\W*\s+Free Software Foundation, Inc\., (51 Franklin Street, Fifth Floor|59 Tem ?ple Place - Suite 330),\n\W*\s+Boston, MA 0211\d-130\d, USA\.\n##m; + } + print STDERR "OK"; + + # We directly overwrite the original file in the + # assumption that we're in a healthy revertible git. + open(O, '>', $f) or die "Cannot overwrite $f"; + # Imagine, I could have left out $_ here... ;) + print O $_; + close O; + } else { + die "Cannot access $name"; + } +} + +# Reads a file from a stream into a variable all at once: +sub slurp { + # Perl sure gets clunky here + local(*IN) = @_; + local($save) = $/; + undef $/; + local($data) = <IN>; + $/ = $save; + return $data; +} |