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

js pushed a commit to branch master
in repository licensecheck.

commit 3ca583087fe8f4b356575330e53552e4c813813a
Author: Jonas Smedegaard <d...@jones.dk>
Date:   Sun Oct 9 19:51:43 2016 +0200

    Add license patterns bsd_2_clause bsd_3_clause bsd_4_clause, trait patterns 
clause_retention clause_reproduction clause_advertising clause_non_endorsement 
disclaimer, and group pattern bsd.
---
 lib/App/Licensecheck.pm             | 21 ++++-----
 lib/Regexp/Pattern/License.pm       | 86 +++++++++++++++++++++++++++++++++++++
 lib/Regexp/Pattern/License/Parts.pm | 63 ++++++++++++++++++++++++++-
 t/SPDX.t                            |  8 +++-
 t/SPDX/BSD-2-Clause.txt             |  9 ++++
 t/SPDX/BSD-3-Clause.txt             | 11 +++++
 t/SPDX/BSD-4-Clause.txt             | 14 ++++++
 t/license.t                         |  6 +--
 8 files changed, 200 insertions(+), 18 deletions(-)

diff --git a/lib/App/Licensecheck.pm b/lib/App/Licensecheck.pm
index 2c201c2..2d8a3c0 100755
--- a/lib/App/Licensecheck.pm
+++ b/lib/App/Licensecheck.pm
@@ -60,9 +60,6 @@ my %SPDX = (
        'Adobe-2006'           => 'Adobe',
        'APAFML'               => 'Adobe Postscript AFM',
        'Artistic or GPL'      => 'Perl',
-       'BSD-2-clause'         => 'BSD (2 clause)',
-       'BSD-3-clause'         => 'BSD (3 clause)',
-       'BSD-4-clause'         => 'BSD (4 clause)',
        'CC-BY-SA'             => 'CC by-sa',
        FSFAP                  => 'FSF All Permissive',
        FSFUL                  => 'FSF Unlimited',
@@ -643,22 +640,22 @@ sub parse_license
        # BSD
        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 ) {
-                               $gen_license->('BSD-4-clause');
+                       when ( /$L{re}{clause_advertising}/i ) {
+                               $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 ) {
-                               $gen_license->('BSD-3-clause');
+                       when ( /$L{re}{clause_non_endorsement}/i ) {
+                               $gen_license->('bsd_3_clause');
                        }
-                       when ( /Redistributions in binary form must reproduce 
the above copyright notice/i ) {
-                               $gen_license->('BSD-2-clause');
+                       when ( /$L{re}{clause_reproduction}/i ) {
+                               $gen_license->('bsd_2_clause');
                        }
                        default {
-                               $gen_license->('BSD');
+                               $gen_license->('bsd');
                        }
                }
        }
        elsif ( $licensetext =~ /licen[sc]ebsd(?:-(\d)-clause)?/i ) {
-               $gen_license->("BSD-$1-clause");
+               $gen_license->("bsd_${1}_clause");
        }
 
        # MPL
@@ -736,7 +733,7 @@ sub parse_license
                        $gen_license->( 'Apache', $1, $2, 'GPL', $3, $4 );
                }
                when ( /Apache(?: Software)? License(?:,? 
$ver_prefix_re($ver_re)( or(?: any)? (?:later|newer))?)?(?:(?: or)? [^ 
,]*?apache[^ ,]*| \([^(),]\))*,? or(?: the)? bsd(?:[ -](\d)-clause)?\b/i ) {
-                       $gen_license->( 'Apache', $1, $2, "BSD-$3-clause" );
+                       $gen_license->( 'Apache', $1, $2, "bsd_${3}_clause" );
                }
                when ( /Apache(?: Software)? License(?:,? 
$ver_prefix_re($ver_re)( or(?: any)? (?:later|newer))?)?(?:(?: or)? [^ 
,]*?apache[^ ,]*| \([^(),]\))*,? or $L{re}{mit_new}\b/i ) {
                        $gen_license->( 'Apache', $1, $2, 'mit_new', $3, $4 );
diff --git a/lib/Regexp/Pattern/License.pm b/lib/Regexp/Pattern/License.pm
index 1982a00..f6b3d9b 100644
--- a/lib/Regexp/Pattern/License.pm
+++ b/lib/Regexp/Pattern/License.pm
@@ -24,6 +24,12 @@ Patterns each covering a single license.
 
 =over
 
+=item * bsd_2_clause
+
+=item * bsd_3_clause
+
+=item * bsd_4_clause
+
 =item * curl
 
 =item * dsdp
@@ -58,6 +64,27 @@ while ( my ( $key, $val ) = each 
%Regexp::Pattern::License::Parts::RE ) {
 my $the = qr/(?:[Tt]he )/;
 
 our %RE = (
+       bsd_2_clause => {
+               name                  => 'BSD-2-Clause',
+               'name.alt.org.debian' => 'BSD-2-clause',
+               caption               => 'BSD (2 clause)',
+               tags                  => ['bsd'],
+               pat => qr/$P{repro_notice_cond_discl}\b[^a-zA-Z]+$P{discl}/,
+       },
+       bsd_3_clause => {
+               name                  => 'BSD-3-Clause',
+               'name.alt.org.debian' => 'BSD-3-clause',
+               caption               => 'BSD (3 clause)',
+               tags                  => ['bsd'],
+               pat => 
qr/$P{repro_notice_cond_discl}\b[^a-zA-Z]+$P{promo_no_author}/,
+       },
+       bsd_4_clause => {
+               name                  => 'BSD-4-Clause',
+               'name.alt.org.debian' => 'BSD-4-clause',
+               caption               => 'BSD (4 clause)',
+               tags                  => ['bsd'],
+               pat                   => qr/$P{ad_verbatim}/,
+       },
        curl => {
                tags => ['mit'],
                pat =>
@@ -129,18 +156,77 @@ END
        },
 );
 
+=head2 Licensing traits
+
+Patterns each covering a single trait occuring in licenses.
+
+=over
+
+=item * clause_retention
+
+=item * clause_reproduction
+
+=item * clause_advertising
+
+=item * clause_non_endorsement
+
+=item * disclaimer
+
+=back
+
+=cut
+
+$RE{'clause_retention'} = {
+       caption => 'retention clause',
+       tags    => ['trait'],
+       pat     => qr/$P{retain_notice_cond_discl}/,
+};
+
+$RE{'clause_reproduction'} = {
+       caption => 'reproduction clause',
+       tags    => ['trait'],
+       pat     => qr/$P{repro_notice_cond_discl}/,
+};
+
+$RE{'clause_advertising'} = {
+       caption => 'advertising clause',
+       tags    => ['trait'],
+       pat     => qr/$P{ad_verbatim}/,
+};
+
+$RE{'clause_non_endorsement'} = {
+       caption => 'non-endorsement clause',
+       tags    => ['trait'],
+       pat     => qr/$P{promo_no_author}/,
+};
+
+$RE{'disclaimer'} = {
+       tags => ['trait'],
+       pat  => qr/$P{discl}/,
+};
+
 =head2 Multiple licenses
 
 Patterns each covering multiple licenses.
 
 =over
 
+=item * bsd
+
 =item * mit
 
 =back
 
 =cut
 
+$RE{'bsd'} = {
+       name    => 'BSD~unspecified',
+       caption => 'BSD (unspecified)',
+       tags    => ['group'],
+       pat =>
+               
qr/$P{repro_notice_cond_discl}(?:(?:[^a-zA-Z]+$P{ad_verbatim}.*)?[^a-zA-Z]+$P{promo_no_author})?/,
+};
+
 $RE{'mit'} = {
        name    => 'MIT~unspecified',
        caption => 'MIT (unspecified)',
diff --git a/lib/Regexp/Pattern/License/Parts.pm 
b/lib/Regexp/Pattern/License/Parts.pm
index 51e4898..8e0f860 100644
--- a/lib/Regexp/Pattern/License/Parts.pm
+++ b/lib/Regexp/Pattern/License/Parts.pm
@@ -27,8 +27,22 @@ Patterns each covering a single part, e.g. a clause or a 
disclaimer phrase.
 
 =over
 
+=item * ad_verbatim
+
+=item * discl
+
 =item * permission_granted_without
 
+=item * permission_person_materials
+
+=item * permission_person_sw_doc
+
+=item * promo_no_author
+
+=item * repro_notice_cond_discl
+
+=item * retain_notice_cond_discl
+
 =item * use_sw_doc_any
 
 =back
@@ -43,9 +57,16 @@ my $to_use      = qr/to use, copy, modify, and distribute/;
 my $to_deal_sw  = qr/to deal in the Software without restriction/;
 my $to_deal_mat = qr/to deal in the Materials without restriction/;
 my $any_purpose = qr/for any purpose/;
+my $redist_src  = qr/Redistributions of source code/;
+my $redist_bin  = qr/Redistributions in binary form/;
+my $promote     = qr/endorse or promote products derived from this software/;
 
 # text
+my $notice       = qr/the above copyright notice/;
+my $cond         = qr/this list of conditions/;
+my $discl        = qr/the following disclaimer/;
 my $no_agreement = qr/without written agreement/;
+my $no_permit    = qr/without specific prior written permission/;
 
 # money
 my $no_charge = qr/free of charge/;
@@ -55,11 +76,29 @@ my $no_fees   = qr/without license or royalty fees/;
 # asset
 my $sw_doc      = qr/this software and its documentation/;
 my $sw_docfiles = qr/this software and associated documentation files/;
+my $doc         = qr/the documentation/;
+my $other_mat   = qr/other materials provided with the distribution/;
+my $ad_mat
+       = qr/All advertising materials mentioning features or use of this 
software/;
 
-# subject
+# agent
 my $to_person = qr/to any person obtaining a copy/;
+my $no_authors
+       = qr/Neither the (?:names? .*|authors?) nor the names of(?: 
(?:its|their|other|any))? contributors/;
 
 our %RE = (
+       ad_verbatim => {
+               caption => 'advertisement (verbatim)',
+               tags    => ['clause'],
+               pat =>
+                       qr/$ad_mat must display the following 
acknowledge?ment[^a-zA-Z]+This product includes software developed by/,
+       },
+       discl => {
+               caption => 'disclaimer',
+               tags    => ['component'],
+               pat     => qr/(?:CC0|Zero|0)/,
+               pat     => qr/THIS SOFTWARE IS PROVIDED/,
+       },
        discl_provide => {
                caption => 'disclaimer (provides)',
                tags    => ['disclaimer'],
@@ -107,11 +146,33 @@ our %RE = (
                pat =>
                        qr/$granted, $no_charge, $to_person of $sw_docfiles 
\(the "?Software"?\)/,
        },
+       promo_no_author => {
+               caption => 'no author in promos',
+               tags    => ['clause'],
+               pat =>
+                       qr/(?:$no_authors may|The name.*? (?:may|must) not) be 
used to $promote $no_permit/,
+       },
        provided_no_warranty => {
                caption => 'provided (no warranty)',
                tags    => ['clause'],
                pat     => qr/without express or implied warranty/,
        },
+       repro_notice_cond_discl => {
+               caption => 'reproduce in doc (notice, conditions, disclaimer)',
+               tags    => ['clause'],
+               pat =>
+                       qr/$redist_bin must reproduce $notice, $cond and $discl 
in $doc and\/or $other_mat/,
+       },
+       retain_notice_cond_discl => {
+               caption => 'retain in source (notice, conditions, disclaimer)',
+               tags    => ['clause'],
+               pat     => qr/$redist_src must retain $notice,? $cond and 
$discl/,
+       },
+       use_sw_doc_any => {
+               caption => 'usage (software and documentation, any purpose)',
+               tags    => ['clause'],
+               pat     => qr/$to_use $sw_doc $any_purpose/,
+       },
 );
 
 =encoding UTF-8
diff --git a/t/SPDX.t b/t/SPDX.t
index 7574a3b..db914b9 100644
--- a/t/SPDX.t
+++ b/t/SPDX.t
@@ -10,14 +10,18 @@ $app->deb_fmt(1);
 
 # TODO: make naming scheme configurable
 my %Debian2SPDX = (
-       'Expat' => 'MIT',
+       'BSD-2-clause' => 'BSD-2-Clause',
+       'BSD-3-clause' => 'BSD-3-Clause',
+       'BSD-4-clause' => 'BSD-4-Clause',
+       'Expat'        => 'MIT',
 );
 
 path("t/SPDX")->visit(
        sub {
                my ( $license, $copyright ) = $app->parse($_);
                is( $Debian2SPDX{$license} || $license, $_->basename('.txt'),
-                       "Corpus file $_" );
+                       "Corpus file $_"
+               );
        }
 );
 
diff --git a/t/SPDX/BSD-2-Clause.txt b/t/SPDX/BSD-2-Clause.txt
new file mode 100644
index 0000000..e9ab04d
--- /dev/null
+++ b/t/SPDX/BSD-2-Clause.txt
@@ -0,0 +1,9 @@
+Copyright (c) <<var;name=copyright;original= <year> <owner>;match=.+>> All 
rights reserved.
+
+Redistribution and use in source and binary forms, with or without 
modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this 
list of conditions and the following disclaimer. 
+
+2. Redistributions in binary form must reproduce the above copyright notice, 
this list of conditions and the following disclaimer in the documentation 
and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY <<var;name=copyrightHolderAsIs;original=THE 
COPYRIGHT HOLDERS AND CONTRIBUTORS;match=.+>> "AS IS" AND ANY EXPRESS OR 
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 
EVENT SHALL <<var;name=copyrightHolderLiability;original=THE COPYRIGHT HOLDER 
OR CONTRIBUTORS;match=.+>> BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMA [...]
\ No newline at end of file
diff --git a/t/SPDX/BSD-3-Clause.txt b/t/SPDX/BSD-3-Clause.txt
new file mode 100644
index 0000000..7b87a53
--- /dev/null
+++ b/t/SPDX/BSD-3-Clause.txt
@@ -0,0 +1,11 @@
+Copyright (c) <<var;name=copyright;original= <year> <owner>;match=.+>>. All 
rights reserved. 
+
+Redistribution and use in source and binary forms, with or without 
modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this 
list of conditions and the following disclaimer. 
+
+2. Redistributions in binary form must reproduce the above copyright notice, 
this list of conditions and the following disclaimer in the documentation 
and/or other materials provided with the distribution. 
+
+3. Neither the name of <<var;name=organizationClause3;original=the copyright 
holder;match=.+>> nor the names of its contributors may be used to endorse or 
promote products derived from this software without specific prior written 
permission.
+
+THIS SOFTWARE IS PROVIDED BY <<var;name=copyrightHolderAsIs;original=THE 
COPYRIGHT HOLDERS AND CONTRIBUTORS;match=.+>> "AS IS" AND ANY EXPRESS OR 
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 
EVENT SHALL <<var;name=copyrightHolderLiability;original=THE COPYRIGHT HOLDER 
OR CONTRIBUTORS;match=.+>> BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMA [...]
\ No newline at end of file
diff --git a/t/SPDX/BSD-4-Clause.txt b/t/SPDX/BSD-4-Clause.txt
new file mode 100644
index 0000000..5b124b6
--- /dev/null
+++ b/t/SPDX/BSD-4-Clause.txt
@@ -0,0 +1,14 @@
+Copyright (c) <<var;name=copyright;original=<year> <owner>;match=.+>>. All 
rights reserved. 
+
+Redistribution and use in source and binary forms, with or without 
modification, are permitted provided that the following conditions are met: 
+
+1. Redistributions of source code must retain the above copyright notice, this 
list of conditions and the following disclaimer. 
+
+2. Redistributions in binary form must reproduce the above copyright notice, 
this list of conditions and the following disclaimer in the documentation 
and/or other materials provided with the distribution. 
+
+3. All advertising materials mentioning features or use of this software must 
display the following acknowledgement: 
+This product includes software developed by the 
<<var;name=organizationClause3;original=the organization;match=.+>>. 
+
+4. Neither the name of <<var;name=organizationClause4;original=the copyright 
holder;match=.+>> nor the names of its contributors may be used to endorse or 
promote products derived from this software without specific prior written 
permission.
+
+THIS SOFTWARE IS PROVIDED BY <<var;name=copyrightHolderAsIs;original=COPYRIGHT 
HOLDER;match=.+>> "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT 
NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 
<<var;name=copyrightHolderLiability;original=COPYRIGHT HOLDER;match=.+>> BE 
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUR [...]
\ No newline at end of file
diff --git a/t/license.t b/t/license.t
index 1c919ed..ae7eb61 100644
--- a/t/license.t
+++ b/t/license.t
@@ -33,9 +33,9 @@ run_me(
                corpus  => [qw(artistic-2-0-modules.pm artistic-2-0.txt)]
        }
 );
-run_me( { license => 'Beerware',     corpus => 'beerware.cpp' } );
-run_me( { license => 'BSD',          corpus => 'bsd-1-clause-1.c' } );
-run_me( { license => 'BSD-2-clause', corpus => 'bsd.f' } );
+run_me( { license => 'Beerware',        corpus => 'beerware.cpp' } );
+run_me( { license => 'BSD~unspecified', corpus => 'bsd-1-clause-1.c' } );
+run_me( { license => 'BSD-2-clause',    corpus => 'bsd.f' } );
 run_me(
        {   license => 'BSD-3-clause',
                corpus  => [

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

_______________________________________________
Pkg-perl-cvs-commits mailing list
Pkg-perl-cvs-commits@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-perl-cvs-commits

Reply via email to