summaryrefslogtreecommitdiff
path: root/scripts/unify.pl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/unify.pl')
-rw-r--r--scripts/unify.pl161
1 files changed, 161 insertions, 0 deletions
diff --git a/scripts/unify.pl b/scripts/unify.pl
new file mode 100644
index 0000000..f518fbb
--- /dev/null
+++ b/scripts/unify.pl
@@ -0,0 +1,161 @@
+#!/usr/bin/perl
+
+# first pass, unify names of licenses and remove duplicates.
+
+# we trick regarding gpl related licenses so they are "clustered" together..
+#
+# replace GPL with __GPL
+# replace exception in the text with ___exception
+
+use strict;
+
+my %equiv = (
+ "boostV1Ref" => "boostV1",
+ "X11" => "X11mit",
+ "X11Festival" => "X11mit",
+ "X11mitNoSellNoDocDocBSDvar" => "X11mit",
+ "X11mitwithoutSell" => 'X11mit',
+ "X11mitBSDvar" => "X11mit",
+ "X11mitwithoutSellCMUVariant" => "X11mit",
+ "X11mitwithoutSellCMUVariant" => "X11mit",
+ "X11mitwithoutSellandNoDocumentationRequi" => "X11mit",
+ "MITvar3" => "X11mit",
+ "MITvar2" => "X11mit",
+ "MIT" => "X11mit",
+ "ZLIBref" => "ZLIB",
+ "BSD3NoWarranty" => "BSD3",
+ "BSD2EndorseInsteadOfBinary" => "BSD2",
+ "BSD2var2" => "BSD2",
+ "LesserGPLv2" => "LibraryGPLv2",
+ "LesserGPLv2+" => "LibraryGPLv2+",
+ "orLGPLVer2.1" => "LesserGPLVer2.1",
+ "postgresqlRef" => "postgresql",
+ );
+
+while (<>) {
+ chomp;
+ my @f = split(/;/);
+ # first remove duplicates
+
+ my $l = $f[1];
+
+ # do a simple rewriting of this exception which is an incomplete license
+
+ $l =~ s/^Exception$/UNKNOWN/;
+
+ my @l = split(/,/,$l);
+ my %lics = %{{ map { $_ => 1 } @l }};
+
+ %lics = Do_Equivalent(%lics);
+ %lics = Remove_Redundant(%lics);
+ %lics = Do_Exceptions(%lics);
+
+ my @out = sort keys %lics;
+
+ my $t = join(',', @out);
+ if ($t eq "") {
+ $t = "UNKNOWN";
+ }
+ print $f[0], ";$t\n";
+}
+
+sub Do_Exceptions
+{
+ my (%lics) = @_;
+
+ if ($lics{'digiaQTExceptionNoticeVer1.1'} ne '' and $lics{'Qt'}) {
+ delete $lics{'digiaQTExceptionNoticeVer1.1'};
+ delete $lics{'Qt'};
+ $lics{'Qt-qtExcep'} = 'Qt-qtExcep';
+ }
+ if ($lics{'BisonException'} ne "" and $lics{"GPLv3+"} ne "") {
+ delete $lics{'BisonException'};
+ delete $lics{"GPLv3+"};
+ $lics{'GPLv3+-bisonExcep'} = 'GPLv3+-bisonExcep';
+ }
+ if ($lics{'BisonException'} ne "" and $lics{"GPLv2+"} ne "") {
+ delete $lics{'BisonException'};
+ delete $lics{"GPLv2+"};
+ $lics{'GPLv2+-bisonExcep'} = 'GPLv2+-bisonExcep';
+ }
+ if ($lics{'BisonException'} ne "" and $lics{"GPLv2"} ne "") {
+ delete $lics{'BisonException'};
+ delete $lics{"GPLv2"};
+ $lics{'GPLv2-bisonExcep'} = 'GPLv2-bisonExcep';
+ }
+ if ($lics{'ClassPathException'} ne "" and $lics{"GPLv2"} ne "") {
+ delete $lics{'ClassPathException'};
+ delete $lics{"GPLv2"};
+ $lics{"GPLv2-classPathExcep"} = "GPLv2-classPathExcep";
+ }
+ if ($lics{'CDDLorGPLv2'} ne "" and $lics{"ClassPathExceptionGPLv2"} ne "") {
+ delete $lics{'CDDLorGPLv2'};
+ delete $lics{"ClassPathExceptionGPLv2"};
+ $lics{'CDDLorGPLv2-classPathExcep'} = 'CDDLorGPLv2-classPathExcep';
+ }
+ if ($lics{'LinkException'} ne "" and $lics{"GPLv3+"} ne "") {
+ delete $lics{'LinkException'};
+ delete $lics{"GPLv3+"};
+ $lics{'GPLv3+-linkExcep'} = 'GPLv3+-linkExcep';
+ }
+ if ($lics{'LinkException'} ne "" and $lics{"GPLv2+"} ne "") {
+ delete $lics{'LinkException'};
+ delete $lics{"GPLv2+"};
+ $lics{'GPLv2+-linkExcep'} = 'GPLv2+-linkExcep';
+ }
+ if ($lics{'LinkException'} ne "" and $lics{"GPLv3"} ne "") {
+ delete $lics{'LinkException'};
+ delete $lics{"GPLv3"};
+ $lics{'GPLv3-linkExcep'} = 'GPLv3-linkExcep';
+ }
+ if ($lics{'LinkException'} ne "" and $lics{"GPLv2"} ne "") {
+ delete $lics{'LinkException'};
+ delete $lics{"GPLv2"};
+ $lics{'GPLv2-linkExcep'} = 'GPLv2-linkExcep';
+ }
+
+ return %lics;
+
+}
+
+sub Remove_Redundant
+{
+ my (%lics) = @_;
+
+ if ($lics{"GPLnoVersion"} ne "" and $lics{"GPLv2"} . $lics{"GPLv2+"} .$lics{"GPLv3"} . $lics{"GPLv3+"} ne "") {
+ delete $lics{"GPLnoVersion"};
+ }
+ if ($lics{"GPLv2+"} ne "" and $lics{"GPLv3+"} ne "") {
+ delete $lics{"GPLv2+"};
+ }
+ if ($lics{'MPL1_1andLGPLv2_1'} ne "" and $lics{"MPLv1_1"} ne "") {
+ delete $lics{"MPLv1_1"};
+ }
+
+
+ return %lics;
+
+}
+
+sub Do_Equivalent
+{
+ my (%lics) = @_;
+ my %outA;
+
+ # then normalize licenses
+ foreach my $a (keys %lics) {
+ next if $a eq "SeeFile";
+ if ($equiv{$a} ne "") {
+ $outA{$equiv{$a}} = $equiv{$a};
+ } else {
+ $outA{$a} = $a;
+ }
+ }
+ return %outA;
+
+}
+
+
+sub uniq {
+ return keys %{{ map { $_ => 1 } @_ }};
+}