The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

Created:      2000-01-28
Home page:    <>
Home page:    <>
Bug tracker:  <>
Maintainer:   Jonas Smedegaard (JONASS) <>

v3.3.9	2023-07-04

 [ Bug Fixes ]
 - fix: properly catch second decoding error, to try raw as fallback of
   both explicit and iso-8859-1 encoding (broken since v3.3.1)

 [ Test Suite ]
 - relax encoding tests to cover String::License v0.0.6
 - relax stderr for a few encoding tests
 - skip encoding tests on cygwin

 [ Other ]
 - log failure error before retry notice
 - use Feature::Compat::Class after core features, to support newer perl;
   thanks to Jitka Plesníková and Graham Knop (see RT#148507)

v3.3.8	2023-01-18

 [ Test Suite ]
 - skip test reading.t with too old String::Copyright

 [ Packaging ]
 - test-recommend String::Copyright 0.003009

v3.3.7	2023-01-17

 [ Packaging ]
 - test-require Test2::Tools::Command

v3.3.6	2023-01-16

 [ Packaging ]
 - really use String::License

v3.3.5	2023-01-15

 - externalize license resolving: use String::License
 - stop (directly) use re::engine::RE2 Array::IntSpan experimental
   Regexp::Pattern Regexp::Pattern::License File::BaseDir File::Basename
   Software::LicenseUtils YAML::XS Test::Without::Module
 - use Test2::Tools::Command (not Test::Command::Simple)

v3.3.4	2023-01-14

 [ Bug Fixes ]
 - use warnings, no longer done in Feature::Compat::Class since v0.05

 [ Test Suite ]
 - fix plan count to work on older perls

v3.3.3	2023-01-09

 [ Bug Fixes ]
 - avoid silence warnings on older (but not too old) perls

v3.3.2	2023-01-07

 [ Bug Fixes ]
 - avoid silence warnings on older perls

 [ Test Suite ]
 - rewrite fedora tests

v3.3.1	2023-01-03

 [ Bug Fixes ]
 - resolve naming schemes when listing licenses

 [ Documentation ]
 - extend copyright to include present year
 - improve synopsis

 [ Test Suite ]
 - add author tests to check SYNOPSIS
 - simplify and generalize tests slightly
 - tell Perl::Critic that Object::Pad implicitly enables strict and

 [ Packaging ]
 - tighten dependency on Pod::Usage to silence spurious 'used only once:
   possible typo' warning notably with perls older than 5.18
 - unset executable bit on module file in source

 [ Other ]
 - have module methods return lists, and print to STDOUT in main script
 - modernize class instantiations to use field and :param and ADJUST (not
   has and BUILD)
 - parse shortname schemes in main script, slightly simplifying modules
 - refactor to iterate files in main script
 - rename parameter shortname_scheme -> schemes, and validate
 - stop include path in log messages within method parse_license
 - use Feature::Compat::Class (not Object::Pad)
 - use Feature::Compat::Try (not Try::Tiny)
 - use Object::Pad 0.74

v3.3.0	2022-01-08

 [ Bug Fixes ]
 - catch decoding errors and retry as iso-8859-1 encoding
 - fix dumping of content tail

 [ Documentation ]
 - clarify option --tail
 - update TODOs, and reformat as CommonMark

 [ Test Suite ]
 - add tests reading only header and tail
 - check full contents of Software::License generated data
 - enable debug output for encoding tests
 - fix one devscripts TODO test
 - parse perl-generated Software::License data as utf8
 - refactor to directly use App::Licensecheck (i.e. drop local module
 - rewrite Software::License tests to check against library
 - rewrite devscripts tests to use library
 - separate script report tests from devscripts.t
 - use only SPDX shortnames (not also debian shortnames) for
   Software::License and SPDX tests, and list only deviating entries

 [ Other ]
 - Added: add options --quiet --debug --trace (and deprecate now no-op
   option --no-verbose)
 - Run perltidier (not perltidy) with tidyall
 - avoid given/when
 - call log->trace() (not log->tracef()) for simple strings
 - change option --skipped to use Log::Tiny (not core warn), and log as
   debug when not set
 - declare package version with package name, and move POD sections NAME
   VERSION SYNOPSIS DESCRIPTION closer to top of files
 - have $fh $license $copyrights as slots (not local variables)
 - improve resolving offset
 - logging: dump content as trace (not notice)
 - logging: log fatal errors using Log::Tiny
 - logging: log files processed as debug, with decoding details (not
   tersely as trace)
 - logging: warn about obsolete options using Log::Tiny (not using core
 - logging: warn tersely on file decoding failure, and list error message
   as debug (not all as notice)
 - merge method parse_lines() into parse_file(), and use $encoding slot
   (stop redefine as local variable)
 - pass around File object (not path, content and (currently unused) offset
   in content)
 - refactor to have slot $path in main class (not class File)
 - refactor to hold semi-cleaned content (not cleaned-for-license-parsing)
   in slot $content
 - refactor to merge local class File into main class
 - refactor to read and decode files in method content()
 - refactor to use Object::Pad (not Moo or MooX::Struct)
 - use named arguments for struct objects

v3.2.14	2021-11-22

 [ Bug Fixes ]
 - fix tests to use executable set in environment variable LICENSECHECK
   Paul Gevers++

v3.2.13	2021-10-11

 [ Bug Fixes ]
 - fix encoding tests flag as TODO tests using undecoded input:
   String::Copyright documented to accept only strings
   Adrian Bunk++

 [ Test Suite ]
 - tighten test to not fail with old String::Copyright

 [ Other ]
 - relax dependency on perl to v5.12, and explicitly 'use' it, to slightly
   simplify boilerplate
 - stop use version (unneeded with modern perl)
 - tighten runtime-dependency on Encode, to avoid 'Use of uninitialized
   value' on stderr

v3.2.12	2021-08-30

 [ Bug Fixes ]
 - use path-less shebang (not indirect env executable, and execute from
   blib subdir when available
   Slaven Rezić++

v3.2.11	2021-08-18

 [ Test Suite ]
 - skip *-no-RE2 tests unless installed Regexp::Pattern::License is recent
   enough to support it

v3.2.10	2021-08-18

 [ Documentation ]
 - improve POD markup of SYNOPSIS and a few code strings

 [ Test Suite ]
 - improve tests
 - test-require Test::Without::Module

 [ Packaging ]
 - relax to recommend (not depend on) module re::engine::RE2

v3.2.9	2021-08-16

 [ Packaging ]
 - stop use Sort::Key::Multi

 [ Other ]
 - strip xml tag <ref ...>, and extend to strip html tags <p> <br> with
   attributes (not only bare tags)

v3.2.8	2021-08-15

 - fix tests and silence warnings with Regexp::Pattern::License less than

v3.2.7	2021-08-14

 [ Bug Fixes ]
 - extend local lgpl dual-license pattern to not assume name patterns
   include trait published_by, required since Regexp::Pattern::License
 - stop treat : or :// as cruft
 - strip simple closing (not only opening) html tags as cruft

 [ Test Suite ]
 - add test for (not yet detected) BSD-3-clause~Refractions
 - simplify tests
 - stop skip author test apparently succeding nowadays
 - test-recommend Regexp::Pattern::License 3.9.0
 - update author tests to cover Regexp::Pattern::License v3.9.0

 [ Other ]
 - avoid hardcoding names of specific prefix traits
 - detect python_2 and (additional, standalone) cnri_python in same file
 - force atomic scan for mit_new, to avoid misdetecting ambiguous MIT X11
   grant as only x11
 - optimize: compile only patterns actually used

v3.2.6	2021-08-07

 [ Documentation ]
 - correct typo in SEE ALSO entry
 - extend copyright to include present year

 [ Test Suite ]
 - update author tests to cover Regexp::Pattern::License v3.8.0

 [ Packaging ]
 - tighten test-recommendation on Regexp::Pattern::License

 [ Other ]
 - optimixe: compile some internal regexes only once
 - postpone compiling regexes, to speedup response time for non-scanning
   command-line options

v3.2.5	2021-07-22

 [ Bug Fixes ]
 - fix shebang to use /usr/bin/env (don't hardcode /usr/bin/perl)
 - strip all trailing dash a.k.a. soft-wraps (not only first instance)

 [ Packaging ]
 - tighten test-recommendation on Regexp::Pattern::License

 [ Other ]
 - extend functions clean_cruft() clean_cruft_and_spaces() to strip html

v3.2.4	2021-07-17

 [ Test Suite ]
 - update testsuite to cover Regexp::Pattern::License v3.7.0

 [ Other ]
 - extend function clean_cruft_and_spaces() to strip trailing dash,
   assuming it is soft-wrap
 - refine resolving of license names to cover more variants

v3.2.3	2021-07-07

 [ Bug Fixes ]
 - fix option --copyright-delimiter (deb-machine output broken since

 [ Test Suite ]
 - rewrite encoding tests

 [ Other ]
 - stop use strictures (not sure why, but CPANTESTERS choke on it)

v3.2.2	2021-07-04

 [ Bug Fixes ]
 - fix ignore atomic discoveries in areas already detected stepwise as a
   license, grant, or exception
 - fix include leading licensed_under when tracking detected positions
 - fix resolve shortname not reusable in grant (e.g. SPDX using unversioned
   SISSL for SISSL-1.1)

 [ Documentation ]
 - fix describe option --shortname-scheme (not bogus option
   --shortname-schemes) in changelog entry for release v3.2
 - fix trace output to include string for stepwise or_later grant trait
 - mention in POD when each option was introduced

 [ Test Suite ]
 - add README to source, documenting origin of Fedora tests
 - add test for not yet recognized PS-or-PDF-font exception
 - tighten test requirement on Regexp::Pattern::License
 - update tests to cover Regexp::Pattern::License v3.6.0

 [ Packaging ]
 - relax runtime requirement on Regexp::Pattern::License
 - tighten .gitignore file

 [ Other ]
 - tighten internal trait objects to require file attribute

v3.2.1	2021-06-29

 [ Bug Fixes ]
 - fix option --deb-machine (broken since v3.2.0)

 [ Test Suite ]
 - fix include missing test files
 - stop use strictures in tests (unneeded with Tests2::V0)

v3.2.0	2021-06-22

 [ Bug Fixes ]
 - stepwise: fix omit version for singleversion objects
   Sandro Mani++
 - tighten custom BSD detection to avoid SSLeay false positive
 - use Getopt::Long and Pod::Usage (not Getopt::Long::Descriptive)
   David Bremner++

 [ Documentation ]
 - add pod section ENVIRONMENT (replacing and expanding section DEBUGGING)
 - colorize output of --help option, and auto-enable color more reliably
 - document that options --check and --ignore apply only when multiple
   PATHs are provided
 - improve markup of pod section OPTIONS
 - rephrase description for option --skipped
 - restore POD section OPTIONS (gone since v3.0.2)
 - split pod section OPTIONS into subsections
 - stop bogusly annotate v3.1.0 bugfix as security-related
 - update TODOs

 [ Test Suite ]
 - update author tests
 - update detection of SISSL since Regexp::Pattern::License v3.5.0
 - update to match capitalized name of Libtool exception, corrected since
   Regexp::Pattern::License v3.5.0

 [ Packaging ]
 - tighten to require more recent Regexp::Pattern::License

 [ Other ]
 - Added: add option --list-licenses
 - Added: add option --list-naming-schemes
 - Added: add option --shortname-scheme, replacing option --deb-fmt (kept
   for now, documented as deprecated)
 - logging: fix resolve identifier in trace of exception and flaw detection
 - resolve license patterns only when used, speeding up --help
 - use IO::Interactive

v3.1.1	2020-05-21

 [ Test Suite ]
 - drop tricky and superfluous exception test

v3.1.0	2020-05-21

 [ Bug Fixes ]
 - avoid uninitialized value in local Apache-and-BSD pattern
   Sandro Mani++

 [ Test Suite ]
 - check detection of generated file
 - check detection of incorrect FSF postal address
 - update author tests
 - update to reflect changed markup of flaws

 [ Packaging ]
 - fix test-require (not only runtime-require) strictures
 - tighten to require more recent Regexp::Pattern::License

 [ Other ]
 - Added: enclose flaws with square brackets (not parens, now used for
   details of some flaws) in legacy output
 - detect exceptions, tracked as objects
 - streamline and improve detection of generated file
 - streamline and improve detection of incorrect FSF postal address
 - track detected flaws as objects

v3.0.47	2020-05-17

 [ Bug Fixes ]
 - fix resolve SPDX keyword for *_or_later (broken in commit 1bcccbdv3.0.40
   released since  v3.0.40)
 - stepwise: fix detect leading version

 [ Documentation ]
 - add some TODOs

 [ Test Suite ]
 - adjust for normalized license names in legacy output
 - update author tests
 - update detection of EUPL since Regexp::Pattern::License v3.3.1
 - update test related to lgpl_* patterns covered since
   Regexp::Pattern::License v3.3.2

 [ Packaging ]
 - tighten to require more recent Regexp::Pattern::License

 [ Other ]
 - append extrainfo to final legacy license string (previously appended
   each license but only for custom match)
 - avoid misdetecting license caldera as license-group bsd
 - avoid misdetecting license python_2 as cnri_python
 - drop custom GPL fulltext resolving (unused since
   Regexp::Pattern::License 3.3.1)
 - drop obsolete custom patterns
 - improve log messages
 - optimize: include left-anchoring when pre-compile clean_comments regexes
 - quirk: avoid-step-wise for cua_opl_1
 - revert: avoid detecting grant for license group (broken)
 - skip custom LGPL grant resolving when (not only GPL-2 but also) LGPL-2
   or LGPL-2.1 fulltext detected (needed since Regexp::Pattern::License
 - stepwise: optimize: match name left-anchored
 - use usage patterns (i.e. *_only *_or_later)

v3.0.46	2020-03-13

 [ Bug Fixes ]
 - atomic: tighten grant patterns to include licensed_under prefix

 [ Documentation ]
 - relicense project as AGPL-3-or-newer; add Purism SPC as copyright holder
 - update git repository URL

 [ Test Suite ]
 - mark 3 flawed author tests as such
 - mark 4 bogusly versioned tests as such
 - update author test related to gpl_* patterns covered since
   Regexp::Pattern::License v3.3.0
 - update author test related to rare apache_2 pattern covered since
   Regexp::Pattern::License v3.3.0

 [ Packaging ]
 - require Regexp::Pattern::License 3.3.0

 [ Other ]
 - add FIXME comments where (mostly custom) patterns lack test coverage
 - atomic: consult coverage from stepwise scan to avoid duplicate match
 - atomic: explicitly (regardless of list @L_tidy) skip cc-by when
   cc_by_sa_3 is detected
 - avoid finalize in custom scan for GPL fulltext
 - avoid wildcard in local bsd pattern
 - detect vague grant for license group
 - extend clean_comments() to strip escaped newline
 - improve detection of GNU 'or-newer' usage grant version
 - improve logging and comments
 - logging: avoid undefined version for custom agpl grant detection
 - logging: generally resolve positions
 - logging: stepwise: log whole version string (not only number)
 - logging: stepwise: resolve positions
 - optimize: atomic: skip a few scans if grant already detected
 - optimize: track incomplete patterns (not subset of complete ones) -
   speed boost of %25!
 - optimize: use optimized regex with /g (apparently supported by
 - pre-compile left-anchored trait pattern version
 - scan for GNU 'or-newer' usage version before singleversion grant version
 - sort or'ed parts of expressions
 - stepwise: detect 'or-later' usage grant also as versioned grant
 - stepwise: detect prepended version
 - stepwise: explicitly (regardless of list @L_tidy) avoid gpl
 - stepwise: relax to use wider window for license name
 - stepwise: track start and end position, and a moving current position
   (not additional static ones)
 - stepwise: use named (not numbered) capture for version
 - track examined files
 - use both custom and atomic patterns (not only custom) for agpl fsful
   fsfullr gpl lgpl

v3.0.45	2020-02-21

 [ Bug Fixes ]
 - fix: try fallback encoding per-file (restore explicit encoding for
   subsequent file)
   Dominique Dumont++
 - sort positions numerically (not alphanumerically)

 [ Documentation ]
 - fix print encoding name (not Encode object ref) if encoding fails
 - use canonical encoding name iso-8859-1 (not latin-1)

 [ Test Suite ]
 - change namespace of local libraries to Test2::Licensecheck
 - support fixing or skipping with Test2::Licensecheck::ScanCode skipfiles

 [ Other ]
 - streamline detection of bsd licenses
 - update (improved but still failing) misdetection of SSLeay since
   Regexp::Pattern::License v3.2.0

v3.0.44	2020-02-10

 [ Test Suite ]
 - ensure local script is executable

v3.0.43	2020-02-10

 - now misses trove declarations for AGPL-3+

 [ Bug Fixes ]
 - adjust end position of located license name
 - resolve license fulltext last, to leave room for shadowing with
   -or-newer grant
 - tests: declare "use utf8" and "use feature 'unicode_strings'" in

 [ Documentation ]
 - update TODOs

 [ Test Suite ]
 - drop unused function is_licensed_like_scancode
 - tighten encode.t (still fails with non-UTF-8 locales)
 - update author tests related to ZPL since Regexp::Pattern::License
 - update tests
 - use List::SomeUtils (not List::MoreUtils)
 - use Test2::V0

 [ Packaging ]
 - relax to require strictures unversioned
 - require Encode::Locale Encode
 - require MooX::Struct
 - require Regexp::Pattern 0.2.12 and Regexp::Pattern::License 3.1.102
 - stop test-recommend List::MoreUtils
 - stop test-require UNIVERSAL::require (unused since v3.0.2)
 - test-require Test2::V0 (not Test::Builder::Module Test::Requires

 [ Other ]
 - avoid misdetecting CECILL-1.1 as GPL-1+ due to extending trait pattern
   licensed_under since Regexp::Pattern::License v3.1.102
 - consistently use strictures, unversioned
 - consult coverage of well-formed scan to avoid duplicate matches
 - improve detection of AGPL licenses
 - optimize detection of ZPL licenses
 - simplify avoiding license duplicates in expression by skipping grant of
   same id as already found fulltext
 - simplify flagging step-wise grants
 - stop resolve regexes licensed_under version_later (unused since v3.0.42)
 - tighten which regexes to generate
 - track detected licensing as objects
 - track step-wise traits as objects
 - track traits as objects

v3.0.42	2020-02-01

 - now fails to detect dual-licensing of CC-BY-SA-3.0 or LGPL-2 (test case:

 [ Bug Fixes ]
 - gracefully skip to next file on failure decoding a file (broken since
   Dominique Dumont++

 [ Test Suite ]
 - environment variable LICENSECHECK sets path to licensecheck (default:
   Gregor Hermann++
 - simplify tests Software-License.t devscripts.t encoding.t

 [ Packaging ]
 - test-require Test::Command::Simple (not Test::Script)

 [ Other ]
 - drop obsolete custom patterns
 - optimization: drop custom CC patterns
 - optimization: stop skip detection of GPL/LGPL fulltext

v3.0.41	2020-01-30

 [ Documentation ]
 - clarify comment about identifiers being DEP-5 or SPDX (not only SPDX)

 [ Test Suite ]
 - testsuite: update tests for Regexp::Pattern::License v3.1.101 (many
   improvements, few "regressions" especially related to dual-licensing due
   to previously accidentally matching by name only)

 [ Other ]
 - merge duplicate detections of same license
 - optimization: avoid accidentally flagging all objects for rescanning
   when checking if rescanning can be skipped :-/

v3.0.40	2020-01-28

 [ Bug Fixes ]
 - drop bogus small optimization.
 - resolve SPDX keyword for AFPL.
 - step-wise grant: capture non-versioned grant.
 - step-wise grant: skip type:group license names.
 - strip fortran comment also on otherwise empty line.

 [ Test Suite ]
 - update author tests for added Trove captions since
   Regexp::Pattern::License v3.1.100.
 - update author tests for improved trait licensed_under since
   Regexp::Pattern::License v3.1.100.

 [ Other ]
 - fix: step-wise grant: capture traits before mangling version.
 - improve custom-matching versioned apache grants.
 - improve logging.
 - optimization: step-wise grant: scan for name only directly after
 - step-wise grant: detect type:singleversion license names.
 - step-wise grants: track trait license_label (in addition to
 - step-wise grants: track trait license_label_trove (in addition to
   track_label licensed_under).
 - streamline detection of well-formed licenses.
 - tests: update author testsuite.
 - track identified areas of strings and skip further parsing; require
 - use nsort_by to sort matches; require List::SomeUtils (not List::Util).

v3.0.39	2020-01-04

 - Improve detection of CC licenses.
 - improve logging; stop require MooX::Role::Logger
 - optimize bsd detection (apparently case-insensitive match in unneeded)
 - use hash interface of Regexp::Pattern and RE2 regexes; require
   re:engine::RE2, and more recent Regexp::Pattern and

v3.0.38	2020-01-03

 - misdetects some GNU fulltext licenses as also maybe LGPL

 [ Bug Fixes ]
 - Add missing newline when no arguments
 - fix: detect creative commons dual-version-licensing (not misdetect as
   same version twice)
 - support non-utf8 locale

 [ Test Suite ]
 - Isolate and extend encoding tests.
 - adapt author testsuite for improved detection (and few minor
   regressions) since Regexp::Pattern::License v3.1.95
 - silence warnings in handling utf8 content

 [ Packaging ]
 - use more recent Regexp::Pattern::License

 [ Other ]
 - Add missing newline when no arguments
 - Improve detection of AFL licenses.
 - Improve detection of Boost licenses.
 - Improve detection of Cecill licenses.
 - Improve detection of WTFPL and WTFNMFPL licenses.
 - Move encoding loop from executable to library.
 - Streamline detection of well-formed grants.
 - Tighten and improve detection of Artistic licenses.
 - define local regexes in sub licensepatterns (not sub parse_license)
 - improve detection of apache licenses
 - pass file and position to function parse_license
 - support environment variable DEBUG; require modules Log::Any
   Log::Any::Adapter::Screen MooX::Role::Logger

v3.0.37	2019-06-12

 [ Documentation ]
 - Update TODOs.

 [ Test Suite ]
 - Adapt author testsuite for improved detection (and few minor egressions)
   since Regexp::Pattern::License v3.1.94.
 - Adapt testsuite to use recent Software::LicenseUtils (not slightly older
 - Fix handle missing ScanCode corpus..
 - Load Test::Builder only once per module..
 - Update testsuite: OSI license Artistic-1.0 really is Artistic-1.0-Perl.

 [ Other ]
 - Reuse previous name match.
 - Simplify conditionals: Replace given-when-continue with if.
 - Skip scan for CC grant unless name already detected.
 - Use more recent Regexp::Pattern::License.

v3.0.36	2018-04-05

 - Limit to compile only trait patterns actually used.
 - Match name alone, before recompiled custom regexes.
 - Simplify AGPL-related pattern slightly.
 - Sort license keys once.
 - Tighten apache pattern slightly.
 - Tighten gpl pattern.
 - Track matches in hash (not array).
 - Use Regexp::Pattern::License trait patterns any_of licensed_under
   or_at_option version version_numberstring.

v3.0.35	2018-03-30

 [ Bug Fixes ]
 - Fix tolerate alternative regexp compilers.

 [ Test Suite ]
 - Adapt testsuite for detecting uppercase GPL or LGPL post
   Regexp::Pattern::License v3.1.0.
 - Adapt testsuite for detection of FSFULLR post Regexp::Pattern::License
 - Adapt testsuite for improved detection since Regexp::Pattern::License
 - Adapt testsuite for renamed pattern kevlin-henney → Kevlin-Henney post
   Regexp::Pattern::License v3.1.0.
 - Adapt testsuite for renamed pattern khronos → Khronos post
   Regexp::Pattern::License v3.1.0.
 - Testsuite: Improve workarounds for license
 - Testsuite: Tolerate Aladdin License mis-categorized as unversioned by
   SPDX, as reflected post Regexp::Pattern::License v3.1.0.

 [ Other ]
 - Improve license patterns cecill_b cecill_c to detect more forms
   (previously misdetected as cecill).
 - Use Regexp::Pattern::License subject patterns.

v3.0.34	2018-03-29

 [ Bug Fixes ]
 - Fix support uncompiled patterns from Regexp::Pattern::License.
 - Fix tighten license key loop (skip eventual DefHash attributes).
 - Fix tighten version matching: Wrap in group when optional.
 - Fix word-based comment removal.

 [ Documentation ]
 - Extend TODO with more ideas.

 [ Test Suite ]
 - Demote ScanCode tests to maintainer tests.
 - Fix Software-License test to match license shortnames (not captions
   which are not fixed).
 - Relax devscripts test to match SPDX-style license captions as supported
   post Regexp::Patterns::License v3.1.0.
 - Testsuite speed boost: Parse skipfile once per set, not once per file in
   each set.
 - Testsuite: Add function license_like.
 - Testsuite: handle alternative name of license bdwgc → MIT~Boehm post
   Regexp::Pattern::License v3.1.0.

 [ Other ]
 - Generalize singleversion patterns.
 - Resolve license patterns as Debian → SPDX → generic (not just Debian →
   generic) to support less SPDX-centric names post
   Regexp::Pattern::License v3.1.0.
 - Simplify pattern tag resolving.
 - Slight speed boost: Use eq (not regexp) for simple comparisons.
 - Speed boost: Fix load regexp patterns once (not once or twice per file).
 - Use regexp patterns as-is (avoid recompiling).

v3.0.33	2018-02-15

 [ Test Suite ]
 - Extend testsuite to 2410 succeeding tests and 5313 TODOs (from 227 and 7
   TODOs), when ScanCode v2.1.1 test data is available below
   $ENV{XDG_DATA_DIRS} + tests/ScanCode/
 - Rewrite testsuite to use Test::Builder::Module (not Test::Roo).

v3.0.32	2018-02-09

 - Adapt testsuite to tolerate misdetecting MPL-1.0 as MPL: Regression
   caused by more generalized matching.

 [ Documentation ]
 - Add TODO file, with a bunch of ideas.
 - Improve POD: Add SEE ALSO section to commandline tool.

 [ Other ]
 - Adapt and extend testsuite to cover new license patterns supported by
   Regex::Patterns::License 3.1.0: bdwgc bdwgc-matlab gfdl lgpl-bdwgc.
 - Optimize slightly: Skip embedded or referenced licenses earlier.
 - Tighten regexes: Generalize and improve matching.
 - Use Regexp::Pattern.
 - Use Regexp::Pattern::License 3.1.0 tags.

v3.0.31	2017-08-16

 [ Documentation ]
 - Fix bogusly labelled changelog entry part of release 2.0.30 (didn't fix
   bare-named BSD licenses, but instead tightened a bunch of license

 [ Packaging ]
 - Stop ship Regexp::Pattern::License, now an independent distribution.

v3.0.30	2017-07-05

 [ Bug Fixes ]
 - Fix license pattern ms_pl to detect MS Public License (not non-free MS
   Permissive License).
 - Tighten license patterns afl agpl cdl gfdl gfdl_nivgpl lgpl llgpl mpl
   ms_pl ms_rl qpl sgi_b wtfpl mit to require descriptive prefix when only
   an abbreviation.
   Axel Beckert++

 [ Test Suite ]
 - Add OSI test (including only currently succeeding OSI licenses for now).

 [ Other ]
 - Added: Add license pattern artistic_2.
 - Improve license pattern agpl to skip english (not only french)
 - Improve license pattern epl to detect some forms of "or newer".
 - Improve license pattern epl.
 - clean_comments(): Relax to match varying amount of horizontal whitespace
   (not exactly one character) followed by any non-whitespace (not only a
   word character).
 - clean_comments(): Tighten to match and strip only horizontal whitespace
   (not newlines).

v3.0.29	2017-01-24

 - Drop gpl+aladdin combo license: Too exotic.

 [ Bug Fixes ]
 - Fix detect BSD licenses as bare name.
   Vasudev Kamath++
 - Fix don't choke on unspecificed BSD license.

 [ Documentation ]
 - Document Regexp::Pattern::License as a private module.

 [ Other ]
 - Added: Add license patterns ofl aladdin rpsl mit_cmu mit_cmu_warranty.
 - Improve license patterns ftl mit_feh mit_enna cube eurosym libpng zlib
 - Sort before enumerating ambiguously related combo licenses.
 - Streamline license parsing: Process loops of similar patterne.

v3.0.28	2016-11-25

 [ Bug Fixes ]
 - Fix detect dual licensing mit_new mit_old (and speed up partsing while
   at it).
 - Fix tighten detection of ISC license (was misdetecting curl).
 - Fix tighten detection of mit_new license (was misdetecting other MIT
 - Fix tighten license pattern curl (was misdetecting other MIT variants).

 [ Documentation ]
 - Extend license pattern dsdp with alternate fedora name PetSC.
 - Fix typo in changelog.
 - Tidy changelog: Improve distinction between newly added and
   added-to-patternlist entries.

 [ Other ]
 - Add license pattern ISC to Regexp::Pattern::License::Pattern.
 - Added: Add new license pattern icu.
 - Added: Add new license pattern mit_advertising.
 - Added: Add new license patterns mit_enna mit_feh.
 - Drop unused and too broad trait pattern disclaimer.
 - List license mit_new alternate fedora name Modern Style with sublicense.
 - Tidy Regexp::Pattern::License: Remove stray bogus regexp.
 - Tidy Regexp::Pattern::License::Pattern: Fix sort pattern list.
 - Tidy Regexp::Pattern::License::Pattern: Rename pattern
   provided_no_warranty → asis_expr_warranty.
 - Tidy Regexp::Pattern::License::Pattern: Rename pattern
   repro_notice_cond_discl → note_repro_notice_cond_discl.
 - Tidy Regexp::Pattern::License::Pattern: Rename pattern
   retain_notice_cond_discl → note_retain_notice_cond_discl.
 - Tidy Regexp::Pattern::License::Pattern: Rename pattern discl →
 - Tidy Regexp::Pattern::License::Pattern: Rename pattern discl_disclaim →
 - Tidy Regexp::Pattern::License::Pattern: Rename pattern discl_provide →
 - Tidy Regexp::Pattern::License::Pattern: Rename pattern name_no_ad →
 - Tidy Regexp::Pattern::License::Pattern: Rename pattern promo_no_author →
 - Tidy Regexp::Pattern::License::Pattern: Rename pattern retain_notice →
 - Tighten license pattern bsd-2-clause. Tidy
   Regexp::Pattern::License::Pattern: Rename pattern asis_sw_name →

v3.0.27	2016-11-23

 - Drop too exotic licensing phrase, and corresponding test case.

 [ Bug Fixes ]
 - Fix avoid detection of GPL/LGPL fulltext (rarely if ever used as grant).
 - Fix detect license FSFULLR (was misdetected as bogus FSFULR).
 - Fix detect license MPL-2.0 (was misdetected as MPL-2.0 or AGPL).
 - Fix detect licenses mit_old mit_unspecified (was misdetected as
 - Fix version identifier to use + only in machine-readable mode.

 [ Other ]
 - Add combo pattern perl to Regexp::Pattern::License.
 - Add license pattern afl to Regexp::Pattern::License.
 - Add license pattern agpl to Regexp::Pattern::License.
 - Add license pattern apache to Regexp::Pattern::License.
 - Add license pattern artistic to Regexp::Pattern::License.
 - Add license pattern beerware to Regexp::Pattern::License.
 - Add license pattern cc_by_sa to Regexp::Pattern::License.
 - Add license pattern ftl to Regexp::Pattern::License.
 - Add license pattern llgpl to Regexp::Pattern::License.
 - Add license pattern mpl to Regexp::Pattern::License.
 - Add license pattern ms_pl to Regexp::Pattern::License.
 - Add license pattern openssl to Regexp::Pattern::License.
 - Add license pattern public_domain to Regexp::Pattern::License.
 - Add license pattern python to Regexp::Pattern::License.
 - Add license pattern qpl to Regexp::Pattern::License.
 - Add license pattern sgi_b to Regexp::Pattern::License.
 - Add license pattern wtfpl to Regexp::Pattern::License.
 - Add license patterns adobe_2006 adobe_glyph apafml to
 - Add license patterns bsd_2_clause bsd_3_clause bsd_4_clause to
 - Add license patterns cddl cecill cecill_1 cecill_1_1 cecill_2 cecill_2_1
   cecill_b cecill_c epl to Regexp::Pattern::License.
 - Add license patterns fsfap fsful fsfullr to Regexp::Pattern::License.
 - Add license patterns gpl lgpl to Regexp::Pattern::License.
 - Add license patterns libpng zlib zlib_acknowledgement to
 - Add license patterns mit_new mit_new_materials mit_old mit_unspecified
   postgresql, and group pattern mit to Regexp::Pattern::License.
 - Add license patterns unicode_strict unicode_tou to
 - Added: Add new group pattern bsd.
 - Added: Add new group pattern gnu.
 - Added: Add new license pattern ms_rl.
 - Added: Add new license patterns cc_by cc_by_nc cc_by_nc_nd cc_by_nc_sa
   cc_by_nd cc_cc0 cc_sp.
 - Added: Add new license patterns cube eurosym.
 - Added: Add new license patterns curl dsdp mit_oldstyle
   mit_oldstyle_disclaimer mit_oldstyle_permission ntp ntp_disclaimer.
 - Added: Add new license patterns gfdl gfdl_niv.
 - Added: Add new trait pattern clause_advertising_always.
 - Added: Add new trait pattern license_prefix.
 - Added: Add new trait pattern license_version.
 - Added: Add new trait patterns clause_retention clause_reproduction
   clause_advertising clause_non_endorsement disclaimer.
 - Added: Add new trait patterns fsf_unlimited fsf_unlimited_retention.
 - Added: Add new trait patterns version_later version_later_paragraph
 - Added: Introduce new modules: Pattern::License Pattern::License::Parts.
 - Clean m4 dnl comment marker.
 - Drop no longer used internal license shortname list.
 - Emulate Regexp::Common -keep syntax to capture version number.
 - Improve detection of license GPL.
 - Improve license detections artistic perl.
 - Relax detection of license GPL.
 - Relax license pattern cc_by_ca.
 - Tidy code: Drop noop code.
 - Tighten regexes: Generalize abbreviated AGPL/LGPL/GPL matching.
 - Tighten regexes: Generalize and improve LGPL matching.
 - Use Regexp::Pattern::License for shortname resolving (with internal list
   as fallback until phased out).

v3.0.26	2016-09-22

 [ Bug Fixes ]
 - Fix exclude AGPL false positives.

 [ Other ]
 - Use generalized license string composition at more places.

v3.0.25	2016-09-21

 [ Bug Fixes ]
 - Fix avoid non-digit in version of license Artistic.
 - Fix delimit multiple licenses with "and/or" (not "or") when ambiguous.
 - Fix parse whole file for test info-at-eof.h (default length only
   approximates lines and is too short since String::Copyright 0.003003).

 [ Test Suite ]
 - Fix tighten runtime-requirement on PAth__Tiny for visit().
   Slaven Rezić++
 - Update testsuite to reflect Perl license detection.

 [ Other ]
 - Apply fallback marker "UNKNOWN" after (not during) license detection.
 - Detect license CC-BY-SA.
 - Detect licenses APAFML Adobe-Glyph Adobe-2006 Aladdin SIL FSFAP FSFUL
   FSFULLR JSON PostgreSQL Unicode-strict Unicode-TOU zlib-acknowledgement.
 - Enhance detection of Perl license.
 - Generalize license string composition.
 - Improve detection of license AGPL.
 - Improve detection of license Apache.
 - Improve non-version descriptor matching.
 - Improve version matching in license detections.
 - Tighten regexes: Generalize and improve version matching.
 - Tighten regexes: Simplify space matching (string already normalized).
 - Tighten regexes: Treat affero as alternative (not prefix) to GPL
   prefixes lesser and library.

v3.0.24	2016-09-03

 [ Bug Fixes ]
 - Fix apply options --check --ignore to full path (not basename).

v3.0.23	2016-09-01

 [ Bug Fixes ]
 - Fix skip parsing non-files (regression since v3.0.5).
 - Fix stop ignore options --check --ignore (regression since v3.0.5).

 [ Other ]
 - Use Path::Iterator::Rule.

v3.0.22	2016-08-21

 [ Bug Fixes ]
 - Fix have option --deb-machine imply option --deb-fmt.

 [ Other ]
 - Adjust SPDX-like shortnames to match Debian format.
 - Improve detection of GPL/LGPL/AGPL versions.
 - Stop merge differently cased owners.
 - Use List::Util and Sort::Key::Multi.
 - Use https protocol in deb-machine header.

v3.0.21	2016-08-20

 [ Bug Fixes ]
 - Really fix strip copyright sign unconditionally.

v3.0.20	2016-08-20

 [ Bug Fixes ]
 - Fix strip copyright sign unconditionally.
 - Fix strip trailing newline from copyrights.

v3.0.19	2016-08-19

 [ Bug Fixes ]
 - Fix strip copyright sign with option --deb-machine.

 [ Documentation ]
 - Mention in description of --deb-machine option that it implies

 [ Other ]
 - Add option --copyright-delimiter, including comma by default.
 - Handle missing year or owner with option --deb-machine.
 - Require well-formed years when splitting ownerlines with option

v3.0.18	2016-08-13

 [ Bug Fixes ]
 - Fix defaults for options --list-delimiter and --rfc822-delimiter (was
   one space too many).
 - Fix stop use obsolete undocumented String::Copyright blocks method.
 - Fix use NONE for no authors with option --deb-machine.

 [ Packaging ]
 - Tighten dependency on String::Copyright.

v3.0.17	2016-08-12

 - Fix avoid bogus "generated-file" as SPDX license.
 - Have option --deb-machine imply option --deb-fmt.

v3.0.16	2016-08-11

 - Add "Auto Generated" to the generated file detection.
   Paul Wise++

v3.0.15	2016-08-11

 [ Documentation ]
 - Mention in description of --lines option that it does optimistic search.

 [ Packaging ]
 - Tighten dependency on String::Copyright to versions supporting
   configurable threshold.

 [ Other ]
 - Do full search when parsing whole file.

v3.0.14	2016-08-01

 [ Test Suite ]
 - Flag test involving multi-line multi-statements as TODO (regression
   since moving to String::Copyright).

v3.0.13	2016-07-25

 [ Packaging ]
 - Fix tighten runtime-requirement on PAth__Tiny for visit().
   Stuart Prescott++

v3.0.12	2016-07-24

 [ Test Suite ]
 - Fix devscripts test to use curly quotes as metacharacters (not
   Paranthesis also used within, triggering warnings on some versiones of

v3.0.11	2016-07-24

 [ Packaging ]
 - Fix declare runtime-requirement on String::Copyright.

v3.0.10	2016-07-24

 - No longer detect multi-line multi-statement copyright strings (not yet
   suppported by String::Copyright).
 - Now misdetects some chatter as copyright statements (not yet suppported
   by String::Copyright).

 [ Test Suite ]
 - Relax devscripts test: Ignore trailing dot and "All rights reserved"

 [ Other ]
 - Use String::Copyright.

v3.0.9	2016-07-24

 [ Documentation ]
 - Drop old licensing header from devscripts test: Fully rewritten by now.
 - Fix decode "©" in --version option output (workaround for Pod::Constants
   not supporting UTF-8).
 - Fix some categorizations of old changelog entries.

 [ Test Suite ]
 - Rewrite devscripts test to match patterns (not exact strings), and
   handle varying output on encoding failure.

 [ Packaging ]
 - Drop superfluous test-requirement on strictures: Already declared as
 - Fix declare test-recommendation on Software::License (not too vague

 [ Other ]
 - Stop use Unicode features: We don't really do any complex Unicode, so
   let's try target older perl.
 - Update headers of module and tests: Strip hashbang; consistently use

v3.0.8	2016-07-24

 [ Bug Fixes ]
 - Avoid superfluous regex modifier /l.

 [ Packaging ]
 - Fix tighten test requirement for Test::Script to versions checking for

 [ Other ]
 - Add "Generated with" to the generated file detection.
   Paul Wise++
 - Pseudo-decode alternative representations for copyright sign and

v3.0.7	2016-07-20

 [ Test Suite ]
 - Bail out gracefully if Software::License fails to create some licenses.

 [ Packaging ]
 - Make Software::License test optional.

v3.0.6	2016-07-20

 [ Packaging ]
 - Fix require experimental (for switch feature).

 [ Other ]
 - Improve separation of copyright parsing from comment stripping and
   copyright serializing

v3.0.5	2016-07-19

 - Fix: Stop dereference symbolic links: non-intuitive and potentially
   dangerous (possibly introduced in error intended to enable recursion).
   Sandro Mani++

 [ Test Suite ]
 - Fix tighten rest-requirement on Software::License to versions supporting

 [ Other ]
 - Avoid type constraints and all but one coercion, for a 30% speedup in
   script initialization.
 - Move find routine to library.
 - Stop call system command find in script (uses Path::Tiny::visit
 - Tidy script to rename $file → $path and $files_count → $paths_count
   where not yet resolved as file.

v3.0.4	2016-07-18

 [ Test Suite ]
 - Drop non-working option "--installed" from script tests (leftover from
   Debian autopkgtest support).
 - Stop use Path::Tiny in test where unneeded.
 - Use Test::Script to ensure correct perl invokes script in tests.
   Slaven Rezić++

v3.0.3	2016-07-18

 [ Test Suite ]
 - Use Test::Roo and library calls (not script) for devscripts corpus
   license coverage tests.

 [ Packaging ]
 - Fix require strictures for tests.

v3.0.2	2016-07-16

 [ Test Suite ]
 - Add devscripts test tied to devscripts corpus, converted from earlier
   shunit2 script.
 - Rewrite Software-License test to stop rely on Debian fork of
   Software::License (see bug#828218).
 - Rewrite Software-License test to use Test::Command.

 [ Packaging ]
 - Run perlcritic with tidyall, and move tidyall test to xt dir.

 [ Other ]
 - Bump license to GPL-3+.
 - Resolve only regexes actually used.
 - Use Getopt::Long::Descriptive.
 - Use experimental given/when switch.

v3.0.1	2016-06-29

 [ Documentation ]
 - Add CPAN Request Tracker as alternative bug-database.
 - Add myself as current author, and claim copyright for recent changes.
 - Add pre-CPAN changelog entries.
 - Adjust copyright notice to mention initial committer (not later
 - Link to script from POD DESCRIPTION of library.

 [ Packaging ]
 - Tighten tidyall config to avoid cruft in bin dir.

v3.0.0	2016-06-27

 [ Bug Fixes ]
 - Fix tighten to use Getopt::Long 2.24: Needed for :config option.

 [ Documentation ]
 - Rewrite documentation of options, and --help putput.

 [ Packaging ]
 - Initial CPAN release (after being in Debian since 2007, and before that
   in KDE SDK since 2000).

 [ Other ]
 - Added: Add --deb-machine option for Debian "deb5" copyright file format.
 - Refactor codebase, with up to 400% speedup and reusable parts in a Moo
 - Removed: Drop support for reading configuration from files: Limited use,
   legacy filenames, and odd parsing by use of risky shell call.