[licensecheck] 11/112: Generalize license string composition.

Jonas Smedegaard dr at jones.dk
Fri Nov 25 22:01:43 UTC 2016


This is an automated email from the git hooks/post-receive script.

js pushed a commit to branch master
in repository licensecheck.

commit 551b151a12a9989cdee4ec5916ee64de03fb6224
Author: Jonas Smedegaard <dr at jones.dk>
Date:   Wed Sep 21 21:12:32 2016 +0200

    Generalize license string composition.
---
 lib/App/Licensecheck.pm | 152 ++++++++++++++++++++++++------------------------
 1 file changed, 75 insertions(+), 77 deletions(-)

diff --git a/lib/App/Licensecheck.pm b/lib/App/Licensecheck.pm
index 966ad86..99d8ecc 100755
--- a/lib/App/Licensecheck.pm
+++ b/lib/App/Licensecheck.pm
@@ -53,6 +53,22 @@ See the script for casual usage.
 
 =cut
 
+# legacy descriptive names different from SPDX shortnames
+my %SPDX = (
+	'Artistic or GPL' => 'Perl',
+	'BSD-2-clause'    => 'BSD (2 clause)',
+	'BSD-3-clause'    => 'BSD (3 clause)',
+	'BSD-4-clause'    => 'BSD (4 clause)',
+	FTL               => 'Freetype',
+	Expat             => 'MIT/X11 (BSD like)',
+	Libpng            => 'libpng',
+	'MS-PL'           => 'Ms-PL',
+	'public-domain'   => 'Public domain',
+	'Python'          => 'PSF',
+	'SGI-B'           => 'SGI Free Software License B',
+	Zlib              => 'zlib/libpng',
+);
+
 my $ver_prefix_re = qr/(?:version |v\.? ?)?/i;
 my $ver_re        = qr/\d(?:\.\d+)*/;
 
@@ -377,6 +393,26 @@ sub parse_license
 		push @ret, $spdx_extra if $spdx_extra;
 		return @ret;
 	};
+	my $gen_license = sub {
+		my ( $id, $v, $later, $id2, $v2, $later2 ) = @_;
+		my @spdx;
+		my $desc = $SPDX{$id} || $id;
+		$v .= '+' if ($later);
+		push @spdx, $v ? "$id-$v" : $id if ($id);
+		my $desc2;
+		$desc2 = $SPDX{$id2} || $id2 if ($id2);
+		$v2 .= '+' if ($later2);
+		push @spdx, $v2 ? "$id2-$v2" : "$id2" if ($id2);
+		my $legacy = join(
+			' ',
+			$desc,
+			( $v     ? "(v$v)"     : () ),
+			( $desc2 ? "or $desc2" : () ),
+			( $v2    ? "(v$v2)"    : () ),
+		);
+		push @spdx_license, join( ' or ', @spdx );
+		$license = join( ' ', ( $SPDX{$legacy} || $legacy ), $license );
+	};
 
 	#<<<  do not let perltidy touch this (keep long regex on one line)
 
@@ -442,8 +478,7 @@ sub parse_license
 		}
 		# For Perl modules handled by Dist::Zilla
 		when ( /this is free software,? licensed under:? (?:the )?(?:GNU (?:Library |Lesser )General Public License|LGPL),? $ver_prefix_re($ver_re)/i ) {
-			$license = "LGPL (v$1) $license";
-			push @spdx_license, "LGPL-$1";
+			$gen_license->( 'LGPL', $1 );
 		}
 	}
 
@@ -479,43 +514,37 @@ sub parse_license
 	# LLGPL
 	given ($licensetext) {
 		when ( /the rights to distribute and use this software as governed by the terms of the Lisp Lesser General Public License|\bLLGPL\b/ ) {
-			$license = "LLGPL $license";
-			push @spdx_license, 'LLGPL';
+			$gen_license->('LLGPL');
 		}
 	}
 
 	# QPL
 	given ($licensetext) {
 		when ( /This file is part of the .*Qt GUI Toolkit. This file may be distributed under the terms of the Q Public License as defined/ ) {
-			$license = "QPL (part of Qt) $license";
+			$gen_license->('QPL');
 		}
 		when ( /may (be distributed|redistribute it) under the terms of the Q Public License/ ) {
-			$license = "QPL $license";
-			push @spdx_license, 'QPL';
+			$gen_license->('QPL');
 		}
 	}
 
 	# MIT
 	given ($licensetext) {
 		when ( /opensource\.org\/licenses\/mit-license\.php/ ) {
-			$license = "MIT/X11 (BSD like) $license";
-			push @spdx_license, 'Expat';
+			$gen_license->('Expat');
 		}
 		when ( /Permission is hereby granted, free of charge, to any person obtaining a copy of this software and(\/or)? associated documentation files \(the (Software|Materials)\), to deal in the (Software|Materials)/ ) {
-			$license = "MIT/X11 (BSD like) $license";
-			push @spdx_license, 'Expat';
+			$gen_license->('Expat');
 		}
 		when ( /Permission is hereby granted, without written agreement and without license or royalty fees, to use, copy, modify, and distribute this software and its documentation for any purpose/ ) {
-			$license = "MIT/X11 (BSD like) $license";
-			push @spdx_license, 'Expat';
+			$gen_license->('Expat');
 		}
 	}
 
 	# ISC
 	given ($licensetext) {
 		when ( /Permission to use, copy, modify, and(\/or)? distribute this software for any purpose with or without fee is hereby granted, provided.*copyright notice.*permission notice.*all copies/ ) {
-		$license = "ISC $license";
-			push @spdx_license, 'ISC';
+			$gen_license->('ISC');
 		}
 	}
 
@@ -523,43 +552,35 @@ sub parse_license
 	if ( $licensetext =~ /THIS SOFTWARE IS PROVIDED .*AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY/ ) {
 		given ($licensetext) {
 			when ( /All advertising materials mentioning features or use of this software must display the following acknowledge?ment.*This product includes software developed by/i ) {
-				$license = "BSD (4 clause) $license";
-				push @spdx_license, 'BSD-4-clause';
+				$gen_license->('BSD-4-clause');
 			}
 			when ( /(The name(?:\(s\))? .*? may not|Neither the (names? .*?|authors?) nor the names of( (its|their|other|any))? contributors may) be used to endorse or promote products derived from this software/i ) {
-				$license = "BSD (3 clause) $license";
-				push @spdx_license, 'BSD-3-clause';
+				$gen_license->('BSD-3-clause');
 			}
 			when ( /Redistributions in binary form must reproduce the above copyright notice/i ) {
-				$license = "BSD (2 clause) $license";
-				push @spdx_license, 'BSD-2-clause';
+				$gen_license->('BSD-2-clause');
 			}
 			default {
-				$license = "BSD $license";
-				push @spdx_license, 'BSD';
+				$gen_license->('BSD');
 			}
 		}
 	}
 	elsif ( $licensetext =~ /licen[sc]ebsd(?:-(\d)-clause)?/i ) {
 		if ($1) {
-			$license = "BSD ($1 clause) $license";
-			push @spdx_license, "BSD-$1-clause";
+			$gen_license->("BSD-$1-clause");
 		}
 		else {
-			$license = "BSD $license";
-			push @spdx_license, "BSD";
+			$gen_license->('BSD');
 		}
 	}
 
 	# MPL
 	given ($licensetext) {
 		when ( /Mozilla Public License,? $ver_prefix_re($ver_re)/ ) {
-			$license = "MPL (v$1) $license";
-			push @spdx_license, "MPL-$1";
+			$gen_license->( 'MPL', $1 );
 		}
 		when ( /Mozilla Public License,? \($ver_prefix_re($ver_re)\)/ ) {
-			$license = "MPL (v$1) $license";
-			push @spdx_license, "MPL-$1";
+			$gen_license->( 'MPL', $1 );
 		}
 	}
 
@@ -568,82 +589,71 @@ sub parse_license
 		# either *begins* with "The Artistic license v2.0" (hopefully the actual license)
 		# or some license grant,
 		when ( /(?:^ ?|(?:This is free software, licensed|Released|be used|use and modify this (?:module|software)) under (?:the terms of )?)[Tt]he Artistic License v?($ver_re)/ ) {
-			$license = "Artistic (v$1) $license";
-			push @spdx_license, "Artistic-$1";
+			$gen_license->( 'Artistic', $1 );
 		}
 	}
 	given ($licensetext) {
 		when ( /is free software under the Artistic [Ll]icense/ ) {
-			$license = "Artistic $license";
-			push @spdx_license, 'Artistic';
+			$gen_license->('Artistic');
 		}
 	}
 
 	# Artistic or GPL
 	given ($licensetext) {
 		when ( /This (program )?is free software; you can redistribute it and\/or modify it under the same terms as (the )?Perl( ?5)? (programming |language |system )*itself/ ) {
-			$license = "Perl $license";
-			push @spdx_license, 'Artistic or GPL';
+			$gen_license->('Artistic', 0, 0, 'GPL');
 		}
 	}
 
 	# Apache
 	given ($licensetext) {
 		when ( /under the Apache License,? $ver_prefix_re($ver_re)/ ) {
-			$license = "Apache (v$1) $license";
-			push @spdx_license, "Apache-$1";
+			$gen_license->( 'Apache', $1 );
 		}
 	}
 
 	# Beerware
 	given ($licensetext) {
 		when ( /(THE BEER-WARE LICENSE)/i ) {
-			$license = "Beerware $license";
-			push @spdx_license, 'Beerware';
+			$gen_license->('Beerware');
 		}
 	}
 
 	# FTL
 	given ($licensetext) {
 		when ( /distributed under the terms of the FreeType project/i )	{
-			$license = "FreeType $license";
-			push @spdx_license, 'FTL';
+			$gen_license->('FTL');
 		}
 	}
 
 	# PHP
 	given ($licensetext) {
 		when ( /This source file is subject to version ($ver_re) of the PHP license/ ) {
-			$license = "PHP (v$1) $license";
-			push @spdx_license, "PHP-$1";
+			$gen_license->( 'PHP', $1 );
 		}
 	}
 
 	# CECILL
 	given ($licensetext) {
 		when ( /under the terms of the CeCILL-([^ ]+) / ) {
-			$license = "CeCILL-$1 $license";
-			push @spdx_license, "CECILL-$1";
+			$gen_license->( 'CeCILL', $1 );
 		}
 		when ( /under the terms of the CeCILL / ) {
-			$license = "CeCILL $license";
-			push @spdx_license, 'CECILL';
+			$gen_license->('CeCILL');
 		}
 	}
 
 	# SGI-B
 	given ($licensetext) {
 		when ( /under the SGI Free Software License B/ ) {
-			$license = "SGI Free Software License B $license";
-			push @spdx_license, 'SGI-B';
+			$gen_license->('SGI-B');
 		}
 	}
 
 	# public-domain
 	given ($licensetext) {
 		when ( /is in the public domain/i ) {
-			$license = "Public domain $license";
-			push @spdx_license, 'public-domain';    # not listed by SPDX
+			$gen_license->('public-domain');
 		}
 	}
 
@@ -658,80 +668,68 @@ sub parse_license
 	# MS-PL
 	given ($licensetext) {
 		when ( /Microsoft Permissive License \(Ms-PL\)/ ) {
-			$license = "Ms-PL $license";
-			push @spdx_license, 'MS-PL';
+			$gen_license->('MS-PL');
 		}
 	}
 
 	# AFL
 	given ($licensetext) {
 		when ( /Licensed under the Academic Free License $ver_prefix_re($ver_re)/ ) {
-			$license = $1 ? "AFL-$1" : "AFL";
-			push @spdx_license, 'AFL' . ( $1 ? "-$1" : '' );
+			$gen_license->( 'AFL', $1 );
 		}
 	}
 
 	# EPL
 	given ($licensetext) {
 		when ( /This program and the accompanying materials are made available under the terms of the Eclipse Public License $ver_prefix_re($ver_re)/ ) {
-			$license = $1 ? "EPL-$1" : "EPL";
-			push @spdx_license, 'EPL' . ( $1 ? "-$1" : '' );
+			$gen_license->( 'EPL', $1 );
 		}
 	}
 
 	# BSL
 	given ($licensetext) {
 		when ( /Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license \(the Software\)/ ) {
-			$license = "BSL " . ( $1 ? "(v$2) " : '' ) . $license;
-			push @spdx_license, 'BSL' . ( $1 ? "-$2" : '' );
+			$gen_license->('BSL');
 		}
 		when ( /Boost Software License([ ,-]+ $ver_prefix_re($ver_re)?(\.))/i ) {
-			$license = "BSL " . ( $1 ? "(v$2) " : '' ) . $license;
-			push @spdx_license, 'BSL' . ( $1 ? "-$2" : '' );
+			$gen_license->( 'BSL', $1, $2 );
 		}
 	}
 
 	# Python
 	given ($licensetext) {
 		when ( /PYTHON SOFTWARE FOUNDATION LICENSE(,? $ver_prefix_re($ver_re))/i ) {
-			$license = "PSF " . ( $1 ? "(v$2) " : '' ) . $license;
-			push @spdx_license, 'Python' . ( $1 ? "-$2" : '' );
+			$gen_license->( 'Python', $1, $2 );
 		}
 	}
 
 	# Zlib/Libpng
 	given ($licensetext) {
 		when ( /The origin of this software must not be misrepresented.*Altered source versions must be plainly marked as such.*This notice may not be removed or altered from any source distribution/ ) {
-			$license = "zlib/libpng $license";
-			push @spdx_license, 'Zlib';
+			$gen_license->('Zlib');
 		}
 		when ( /see copyright notice in zlib\.h/ ) {
-			$license = "zlib/libpng $license";
-			push @spdx_license, 'Zlib';
+			$gen_license->('Zlib');
 		}
 		when ( /This code is released under the libpng license/ ) {
-			$license = "libpng $license";
-			push @spdx_license, 'Libpng';
+			$gen_license->('Libpng');
 		}
 	}
 
 	# WTFPL
 	given ($licensetext) {
 		when ( /Do What The Fuck You Want To Public License,? $ver_prefix_re($ver_re)/i ) {
-			$license = "WTFPL (v$1) $license";
-			push @spdx_license, "WTFPL-$1";
+			$gen_license->( 'WTFPL', $1 );
 		}
 	}
 	given ($licensetext) {
 		when ( /Do what The Fuck You Want To Public License/i ) {
-			$license = "WTFPL $license";
-			push @spdx_license, "WTFPL";
+			$gen_license->('WTFPL');
 		}
 	}
 	given ($licensetext) {
 		when ( /(License WTFPL|Under (the|a) WTFPL)/i ) {
-			$license = "WTFPL $license";
-			push @spdx_license, "WTFPL";
+			$gen_license->('WTFPL');
 		}
 	}
 	#>>>

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/licensecheck.git



More information about the Pkg-perl-cvs-commits mailing list