update debian copyright: tweak clscan and then manually fixup: revisit next release
[gnulib.git] / debian / clscan / clscan
index de47a6a..0e427e2 100755 (executable)
@@ -18,35 +18,50 @@ our $NEWFILES="$CLSCANDIR/new.txt";
 our $COPYRIGHTSTUB="$CLSCANDIR/copyright.in";
 
 my $gpl_boilerplate=<<"EOL";
-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 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ 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 3 of the License, or
+ (at your option) any later version.
+ .
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ .
+ You should have received a copy of the GNU General Public License
+ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 EOL
 
-my $lgpl_boilerplate=<<"EOL";
-This program is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published
-by the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-USA.
+my $lgpl2_boilerplate=<<"EOL";
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+ .
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ Library General Public License for more details.
+ .
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA.
+EOL
+
+my $lgpl3_boilerplate=<<"EOL";
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+ .
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ .
+ You should have received a copy of the GNU General Public License
+ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 EOL
 
 # license overrides as specified in modules/*
@@ -63,11 +78,15 @@ our $module_licenses = {
     },
     "LGPL" => {
        license => "LGPL",
-       license_text => $lgpl_boilerplate,
+       license_text => $lgpl3_boilerplate,
     },
     "LGPLv2+" => {
        license => "LGPL-2+",
-       license_text => $lgpl_boilerplate,
+       license_text => $lgpl2_boilerplate,
+    },
+    "LGPLv3+" => {
+       license => "LGPL-3+",
+       license_text => $lgpl3_boilerplate,
     },
     "unmodifiable license text" => {
        license => "other",
@@ -88,17 +107,20 @@ our @filenames=();
 our %overrides=();
 our $files={};
 our $new={};
+our @deleted_files=();
 
 # actions
 my $scan=0;
 my $merge=0;
+my $help=0;
 my $writecopyright=0;
 
 usage() unless(@ARGV);
-usage() unless GetOptions("scan|s" => \$scan,
+usage() unless GetOptions("scan|s"  => \$scan,
                          "merge|m" => \$merge,
                          "write|w" => \$writecopyright,
-                         "help|h" => sub { usage(); });
+                         "help|h"  => \$help);
+usage() if $help;
 
 load_cache();
 scan() if($scan);
@@ -106,7 +128,6 @@ merge() if($merge);
 write_copyright() if ($merge || $writecopyright);
 
 
-
 sub scan
 {
     get_filenames();
@@ -114,8 +135,8 @@ sub scan
     {
        scan_file($file);
     }
-    write_new();
     find_deleted();
+    write_new();
 }
 
 sub merge
@@ -152,6 +173,7 @@ sub write_copyright
     }
     my %refs=();
     my $refnum="00";
+    print COPYRIGHT license_trailer(sort keys(%$licenses));
     for my $license (sort keys(%$licenses))
     {
        for my $license_text (sort keys(%{$licenses->{$license}}))
@@ -168,12 +190,18 @@ sub write_copyright
                $licensestr .= " [REF$refnum]";
                $refs{$licensestr}=$license_text;
            }
+            else
+            {
+                if(!length($license)) {
+                    $licensestr="unknown";
+                }
+            }
            for my $copyright (sort keys(%{$licenses->{$license}->{$license_text}}))
            {
                next if(!length($license) && !length($copyright) && !length($license_text));
                my @filelist=sort @{$licenses->{$license}->{$license_text}->{$copyright}};
-               print COPYRIGHT "Files: ", join(', ', @filelist), "\n";
-               print COPYRIGHT "Copyright: $copyright\n" if length($copyright);
+               print COPYRIGHT "Files: ", join(' ', @filelist), "\n";
+               print COPYRIGHT "Copyright: ". (length($copyright) ? $copyright : "unknown" ) . "\n";
                print COPYRIGHT "License: $licensestr\n" if length($licensestr);
                print COPYRIGHT "\n";
            }
@@ -183,10 +211,10 @@ sub write_copyright
     {
        print COPYRIGHT "License: $ref\n";
        my @text=split(/\n/, $refs{$ref});
+        @text=map { ($_ eq "") ? "." : $_; } @text;
        print COPYRIGHT map { "    " . $_ . "\n" } @text;
        print COPYRIGHT "\n";
     }
-    print COPYRIGHT license_trailer(sort keys(%$licenses));
     close(COPYRIGHT);
 }
 
@@ -230,25 +258,26 @@ sub license_trailer
            }
        }
     }
-    my $text="\n";
+    my $text="  .\n";
     # if just one, use standard style
     if(keys(%types_found) == 1)
     {
        my ($file, $name)=each(%types_found);
-       $text .= "The complete text of the $name can be\n";
-       $text .= "found in /usr/share/common-licenses/$file\n";
+       $text .= "  The complete text of the $name can be\n";
+       $text .= "  found in /usr/share/common-licenses/$file\n";
     }
     else
     {
        # more than one, use table.
-       $text .= "The complete text of standard licenses referenced above\n";
-       $text .= "can be found in /usr/share/common-licenses/ as follows:\n\n";
+       $text .= "  The complete text of standard licenses referenced above\n";
+       $text .= "  can be found in /usr/share/common-licenses/ as follows:\n  .\n  ";
        $text .= sprintf("%-60s %s\n", "LICENSE", "FILE");
        for my $type (sort keys(%types_found))
        {
-           $text .= sprintf("%-60s %s\n", $license_data->{$type}, $type);
+           $text .= sprintf("  %-60s %s\n", $license_data->{$type}, $type);
        }
     }
+    $text .= "\n\n";
     return $text;
 }
 
@@ -324,15 +353,17 @@ sub filechanged
     {
        if(exists($files->{$filename}->{copyright}))
        {
-           $new->{$filename}->{copyright_old}=$files->{$filename}->{copyright};
+           $new->{$filename}->{copyright}=$files->{$filename}->{copyright};
+           $new->{$filename}->{copyright_guess}=$copyright_guess;
        }
        if(exists($files->{$filename}->{license}))
        {
-           $new->{$filename}->{license_old}=$files->{$filename}->{license};
+           $new->{$filename}->{license}=$files->{$filename}->{license};
+           $new->{$filename}->{license_guess}=$license_guess;
        }
        if(exists($files->{$filename}->{license_text}))
        {
-           $new->{$filename}->{license_text_old}=$files->{$filename}->{license_text};
+           $new->{$filename}->{license_text}=$files->{$filename}->{license_text};
        }
     }
 }
@@ -344,7 +375,7 @@ sub get_filenames
 
 sub wanted_files
 {
-    if(/^\.git/ || /^\.cvs/ || /^debian/ || /^modules$/)
+    if(/^\.git/ || /^\.cvs/ || /^debian/ || /^modules$/ || /^\.pc/)
     {
        $File::Find::prune=1;
     }
@@ -460,7 +491,6 @@ sub write_new
     unless(keys(%$new))
     {
        warn("$me: no new/changed files found\n");
-       return;
     }
     unless(open(NEW,">$NEWFILES"))
     {
@@ -471,19 +501,19 @@ sub write_new
        print NEW "File: $file\n";
        print NEW "Hash: ", $new->{$file}->{hash}, "\n";
        print NEW "Copyright: ", $new->{$file}->{copyright}, "\n";
-       print NEW "License: ", $new->{$file}->{license}, "\n";
-       print NEW "License_Text: \n";
-       if($new->{$file}->{license_old})
+       if($new->{$file}->{copyright_guess})
        {
-           print NEW "#License_old: ", $new->{$file}->{license_old}, "\n";
+           print NEW "#Copyright_guess: ", $new->{$file}->{copyright_guess}, "\n";
        }
-       if($new->{$file}->{copyright_old})
+       print NEW "License: ", $new->{$file}->{license}, "\n";
+       if($new->{$file}->{license_guess})
        {
-           print NEW "#Copyright_old: ", $new->{$file}->{copyright_old}, "\n";
+           print NEW "#License_guess: ", $new->{$file}->{license_guess}, "\n";
        }
-       if($new->{$file}->{licence_text_old})
+       if($new->{$file}->{license_text})
        {
-           print NEW "#License_text_old: ", $new->{$file}->{licence_text_old}, "\n";
+           my @text=split(/\n/, $new->{$file}->{license_text});
+           print NEW "\t" . join("\n\t", @text), "\n";
        }
        print NEW "#Header: \n";
        my @headerlines=split(/\n/, $new->{$file}->{header});
@@ -491,6 +521,10 @@ sub write_new
        print NEW join("\n", @headerlines);
        print NEW "\n\n";
     }
+    if(@deleted_files)
+    {
+       print NEW map { "Deleted: $_\n"; } @deleted_files;
+    }
     close NEW;
 }
 
@@ -552,6 +586,13 @@ sub merge_new
            $in_license_text=1;
            $license_text='';
        }
+       elsif(/^Deleted:\s*(.*)/)
+       {
+           if(exists($files->{$1}))
+           {
+               delete($files->{$1});
+           }
+       }
        else
        {
            warn("$me: $NEWFILES: line $line not recognized\n");
@@ -570,19 +611,18 @@ sub merge_new
 
 sub find_deleted
 {
-    my @deleted=();
     my %newnames = map { $_ => 1 } @filenames;
     for my $file (sort keys(%$files))
     {
        unless(exists($newnames{$file}))
        {
-           push(@deleted, $file);
+           push(@deleted_files, $file);
        }
     }
-    if(@deleted)
+    if(@deleted_files)
     {
        print "Removed files:\n";
-       print join("\n", @deleted),"\n";
+       print join("\n", @deleted_files),"\n";
     }
 }