blob: 3140998144b7f61af49f5d310a865b6912ec11ea [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// COMMON PATTERNS
const String kIndent = r'^((?:[-;@#<!.\\"/* ]*(?:REM[-;@#<!.\\"/* ]*)?[-;@#<!.\"/*]+)?)( *)';
final RegExp stripDecorations = new RegExp(
r'^((?:(?:[-;@#<!.\\"/* ]*(?:REM[-;@#<!.\\"/* ]*)?[-;@#<!.\"/*]+)?)(?:(?: |\t)*))(.*?)[ */]*$',
multiLine: true,
caseSensitive: false
);
final RegExp newlinePattern = new RegExp(r'\r\n?');
final RegExp beginLicenseBlock = new RegExp(
r'^([#;/* ]*) (?:\*\*\*\*\* BEGIN LICENSE BLOCK \*\*\*\*\*[ */]*'
r'|@APPLE_LICENSE_HEADER_START@)$'
);
final RegExp endLicenseBlock = new RegExp(
r'^([#;/* ]*) (?:\*\*\*\*\* END LICENSE BLOCK \*\*\*\*\*[ */]*'
r'|@APPLE_LICENSE_HEADER_END@)$'
);
final RegExp nonSpace = new RegExp('[^ ]');
final RegExp trailingComma = new RegExp(r',[ */]*$');
final RegExp trailingColon = new RegExp(r':(?: |\*|/|\n|=|-)*$');
final RegExp copyrightMentionPattern = new RegExp(r'©| \(c\) (?!{)|copy\s*right\b|copy\s*left', caseSensitive: false);
final RegExp licenseMentionPattern = new RegExp(r'license|warrant[iy]', caseSensitive: false);
final RegExp copyrightMentionOkPattern = new RegExp(
// if a (multiline) block matches this, we ignore it even if it matches copyrightMentionPattern/licenseMentionPattern
r'(?:These are covered by the following copyright:'
r'|^((?:[-;#<!.\\"/* ]*(?:REM[-;#<!.\\"/* ]*)?[-;#<!.\"/*]+)?)((?: |\t)*)COPYRIGHT: *\r?\n'
r'|copyright.*\\n"' // clearly part of a string
r'|\$YEAR' // clearly part of a template string
r'|LICENSE BLOCK' // MPL license block header/footer
r'|2117.+COPYRIGHT' // probably U+2117 mention...
r'|// The copyright below was added in 2009, but I see no record'
r'|This ICU code derived from:'
r'|the contents of which are also included in zip.h' // seen in minizip's unzip.c, but the upshot of the crazy license situation there is that we don't have to do anything
r'|hold font names, copyright info, notices, etc' // seen in a comment in freetype's src/include/ftsnames.h
r'|' // the following is from android_tools/ndk/sources/cxx-stl/gnu-libstdc++/4.9/include/ext/pb_ds/detail/splay_tree_/splay_tree_.hpp
r'^ \* This implementation uses an idea from the SGI STL \(using a @a header node\n'
r'^ \* which is needed for efficient iteration\)\. Following is the SGI STL\n'
r'^ \* copyright\.\n'
r')',
caseSensitive: false, multiLine: true);
final RegExp halfCopyrightPattern = new RegExp(r'^(?:Copyright(?: \(c\))? [-0-9, ]+(?: by)?|Written [0-9]+)[ */]*$', caseSensitive: false);
final RegExp authorPattern = new RegExp(r'Copyright .+(The .+ Authors)\. +All rights reserved\.', caseSensitive: false);
// copyright blocks start with the first line matching this
final List<RegExp> copyrightStatementLeadingPatterns = <RegExp>[
new RegExp(r'^ *(?:Portions(?: are)? )?Copyright .+$', caseSensitive: false),
new RegExp(r'^.*All rights? reserved\.$', caseSensitive: false),
new RegExp(r'^ *\(C\) .+$', caseSensitive: false),
new RegExp(r'^:copyright: .+$', caseSensitive: false),
new RegExp(r'[-_a-zA-Z0-9()]+ function provided freely by .+'),
new RegExp(r'^.+ optimized code \(C\) COPYRIGHT .+$', caseSensitive: false),
new RegExp(r'©'),
// TODO(ianh): I wish there was a way around including the next few lines so many times in the output:
new RegExp(r"^This file (?:is|was) part of the Independent JPEG Group's software[:.]$"),
new RegExp(r'^It was modified by The libjpeg-turbo Project to include only code$'),
new RegExp(r'^relevant to libjpeg-turbo\.$'),
new RegExp(r'^It was modified by The libjpeg-turbo Project to include only code relevant$'),
new RegExp(r'^to libjpeg-turbo\.$'),
new RegExp(r'^It was modified by The libjpeg-turbo Project to include only code and$'),
new RegExp(r'^information relevant to libjpeg-turbo\.$'),
];
// copyright blocks end with the last line that matches this, rest is considered license
final List<RegExp> copyrightStatementPatterns = <RegExp>[
new RegExp(r'^ *(?:Portions(?: created by the Initial Developer)?(?: are)? )?Copyright .+$', caseSensitive: false),
new RegExp(r'^\(Version [-0-9.:, ]+ Copyright .+\)$', caseSensitive: false),
new RegExp(r'^.*(?:All )?rights? reserved\.$', caseSensitive: false),
new RegExp(r'^ *\(C\) .+$', caseSensitive: false),
new RegExp(r'^:copyright: .+$', caseSensitive: false),
new RegExp(r'^ *[0-9][0-9][0-9][0-9].+ [<(].+@.+[)>]$'),
new RegExp(r'^ [^ ].* [<(].+@.+[)>]$'), // that's exactly the number of spaces to line up with the X if "Copyright (c) 2011 X" is on the previous line
new RegExp(r'^ *and .+$', caseSensitive: false),
new RegExp(r'^ *others\.?$', caseSensitive: false),
new RegExp(r'^for more details\.$', caseSensitive: false),
new RegExp(r'^ *For more info read ([^ ]+)$', caseSensitive: false),
new RegExp(r'^(?:Google )?Author\(?s?\)?: .+', caseSensitive: false),
new RegExp(r'^Written by .+', caseSensitive: false),
new RegExp(r'^Based on$', caseSensitive: false),
new RegExp(r"^based on (?:code in )?['`][^'`]+['`]$", caseSensitive: false),
new RegExp(r"^Based on .+, written by .+, [0-9]+\.$", caseSensitive: false),
new RegExp(r'^(?:Based on the )?x86 SIMD extension for IJG JPEG library(?: - version [0-9.]+|,)?$'),
new RegExp(r'^This software originally derived from .+\.$'),
new RegExp(r'^Derived from .+, which was$'),
new RegExp(r'^ *This is part of .+, a .+ library\.$'),
new RegExp(r'^This file is part of [^ ]+\.$'),
new RegExp(r'^(?:Modification )?[Dd]eveloped [-0-9]+ by .+\.$', caseSensitive: false),
new RegExp(r'^Modified .+[:.]$', caseSensitive: false),
new RegExp(r'^(?:[^ ]+ )?Modifications:$', caseSensitive: false),
new RegExp(r'^ *Modifications for', caseSensitive: false),
new RegExp(r'^ *Modifications of', caseSensitive: false),
new RegExp(r'^Last changed in .+$', caseSensitive: false),
new RegExp(r'[-_a-zA-Z0-9()]+ function provided freely by .+'), // TODO(ianh): file a bug on analyzer about what happens if you omit this comma
new RegExp(r'^.+ optimized code \(C\) COPYRIGHT .+$', caseSensitive: false),
new RegExp(r'^\(Royal Institute of Technology, Stockholm, Sweden\)\.$'),
new RegExp(r'^https?://[^ ]+$'),
new RegExp(r'^The Original Code is Mozilla Communicator client code, released$'),
new RegExp(r'^March 31, 1998.$'), // mozilla first release date
new RegExp(r'^The Elliptic Curve Public-Key Crypto Library \(ECC Code\) included$'),
new RegExp(r'^herein is developed by SUN MICROSYSTEMS, INC\., and is contributed$'),
new RegExp(r'^to the OpenSSL project\.$'),
new RegExp(r'^This code is derived from software contributed to The NetBSD Foundation$'),
new RegExp(r'^by (?:Atsushi Onoe|Dieter Baron|Klaus Klein|Luke Mewburn|Thomas Klausner|,| |and)*\.$'),
new RegExp(r'^FT_Raccess_Get_HeaderInfo\(\) and raccess_guess_darwin_hfsplus\(\) are$'),
new RegExp(r'^derived from ftobjs\.c\.$'),
// TODO(ianh): I wish there was a way around including the next few lines so many times in the output:
new RegExp(r"^This file (?:is|was) part of the Independent JPEG Group's software[:.]$"),
new RegExp(r'^It was modified by The libjpeg-turbo Project to include only code$'),
new RegExp(r'^relevant to libjpeg-turbo\.$'),
new RegExp(r'^It was modified by The libjpeg-turbo Project to include only code relevant$'),
new RegExp(r'^to libjpeg-turbo\.$'),
new RegExp(r'^It was modified by The libjpeg-turbo Project to include only code and$'),
new RegExp(r'^information relevant to libjpeg-turbo\.$'),
new RegExp(r'^All or some portions of this file are derived from material licensed$'),
new RegExp(r'^to the University of California by American Telephone and Telegraph$'),
new RegExp(r'^Co\. or Unix System Laboratories, Inc\. and are reproduced herein with$'),
new RegExp(r'^the permission of UNIX System Laboratories, Inc.$'),
new RegExp(r'^This software was developed by the Computer Systems Engineering group$'),
new RegExp(r'^at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and$'),
new RegExp(r'^contributed to Berkeley\.$'),
new RegExp(r'^This code is derived from software contributed to Berkeley by$'),
new RegExp(r'^Ralph Campbell\. +This file is derived from the MIPS RISC$'),
new RegExp(r'^Architecture book by Gerry Kane\.$'),
new RegExp(r'^All advertising materials mentioning features or use of this software$'),
new RegExp(r'^must display the following acknowledgement:$'),
new RegExp(r'^This product includes software developed by the University of$'),
new RegExp(r'^California, Lawrence Berkeley Laboratory\.$'),
new RegExp(r'^ *Condition of use and distribution are the same than zlib :$'),
new RegExp(r'^The MIT License:$'),
new RegExp(r'^$'), // TODO(ianh): file an issue on what happens if you omit the close quote
];
// patterns that indicate we're running into another license
final List<RegExp> licenseFragments = <RegExp>[
new RegExp(r'"as is" without express or implied warranty\.'),
new RegExp(r'version of this file under any of the LGPL, the MPL or the GPL\.'),
new RegExp(r'SUCH DAMAGE\.'),
new RegExp(r'found in the LICENSE file'),
new RegExp(r'<http://www\.gnu\.org/licenses/>'),
];
final String _linebreak = r' *(?:(?:\*/ *|[*#])?(?:\n\1 *(?:\*/ *)?)*\n\1\2 *)?';
final String _linebreakLoose = r' *(?:(?:\*/ *|[*#])?\n(?:-|;|#|<|!|/|\*| |REM)*)*';
// LICENSE RECOGNIZERS
final RegExp lrApache = new RegExp(r'^(?: |\r|\n)*Apache License\b');
final RegExp lrMPL = new RegExp(r'^(?: |\r|\n)*Mozilla Public License Version 2\.0\n');
final RegExp lrGPL = new RegExp(r'^(?: |\r|\n)*GNU GENERAL PUBLIC LICENSE\n');
final RegExp lrAPSL = new RegExp(r'^APPLE PUBLIC SOURCE LICENSE Version 2\.0 +- +August 6, 2003');
final RegExp lrMIT = new RegExp(r'Permission(?: |\n)+is(?: |\n)+hereby(?: |\n)+granted,(?: |\n)+free(?: |\n)+of(?: |\n)+charge,(?: |\n)+to(?: |\n)+any(?: |\n)+person(?: |\n)+obtaining(?: |\n)+a(?: |\n)+copy(?: |\n)+of(?: |\n)+this(?: |\n)+software(?: |\n)+and(?: |\n)+associated(?: |\n)+documentation(?: |\n)+files(?: |\n)+\(the(?: |\n)+"Software"\),(?: |\n)+to(?: |\n)+deal(?: |\n)+in(?: |\n)+the(?: |\n)+Software(?: |\n)+without(?: |\n)+restriction,(?: |\n)+including(?: |\n)+without(?: |\n)+limitation(?: |\n)+the(?: |\n)+rights(?: |\n)+to(?: |\n)+use,(?: |\n)+copy,(?: |\n)+modify,(?: |\n)+merge,(?: |\n)+publish,(?: |\n)+distribute,(?: |\n)+sublicense,(?: |\n)+and/or(?: |\n)+sell(?: |\n)+copies(?: |\n)+of(?: |\n)+the(?: |\n)+Software,(?: |\n)+and(?: |\n)+to(?: |\n)+permit(?: |\n)+persons(?: |\n)+to(?: |\n)+whom(?: |\n)+the(?: |\n)+Software(?: |\n)+is(?: |\n)+furnished(?: |\n)+to(?: |\n)+do(?: |\n)+so,(?: |\n)+subject(?: |\n)+to(?: |\n)+the(?: |\n)+following(?: |\n)+conditions:');
final RegExp lrOpenSSL = new RegExp(r'Copyright \(c\) 1998-2011 The OpenSSL Project\. All rights reserved\.(.|\n)*Original SSLeay License');
final RegExp lrBSD = new RegExp(r'Redistribution(?: |\n)+and(?: |\n)+use(?: |\n)+in(?: |\n)+source(?: |\n)+and(?: |\n)+binary(?: |\n)+forms(?:(?: |\n)+of(?: |\n)+the(?: |\n)+software(?: |\n)+as(?: |\n)+well(?: |\n)+as(?: |\n)+documentation)?,(?: |\n)+with(?: |\n)+or(?: |\n)+without(?: |\n)+modification,(?: |\n)+are(?: |\n)+permitted(?: |\n)+provided(?: |\n)+that(?: |\n)+the(?: |\n)+following(?: |\n)+conditions(?: |\n)+are(?: |\n)+met:');
final RegExp lrZlib = new RegExp(r'Permission(?: |\n)+is(?: |\n)+granted(?: |\n)+to(?: |\n)+anyone(?: |\n)+to(?: |\n)+use(?: |\n)+this(?: |\n)+software(?: |\n)+for(?: |\n)+any(?: |\n)+purpose,(?: |\n)+including(?: |\n)+commercial(?: |\n)+applications,(?: |\n)+and(?: |\n)+to(?: |\n)+alter(?: |\n)+it(?: |\n)+and(?: |\n)+redistribute(?: |\n)+it(?: |\n)+freely,(?: |\n)+subject(?: |\n)+to(?: |\n)+the(?: |\n)+following(?: |\n)+restrictions:');
final RegExp lrPNG = new RegExp(r'This code is released under the libpng license\.');
// "NO COPYRIGHT" STATEMENTS
final List<RegExp> csNoCopyrights = <RegExp>[
// used with _tryNone
// groups are ignored
// Seen in Expat files
new RegExp(
r'^// No copyright notice; this file based on autogenerated header',
multiLine: true,
caseSensitive: false
),
// Seen in Android NDK
new RegExp(
r'^[/* ]*This header was automatically generated from a Linux kernel header\n'
r'^[/* ]*of the same name, to make information necessary for userspace to\n'
r'^[/* ]*call into the kernel available to libc. It contains only constants,\n'
r'^[/* ]*structures, and macros generated from the original header, and thus,\n'
r'^[/* ]*contains no copyrightable information.',
multiLine: true,
caseSensitive: false
),
new RegExp(
kIndent +
r'These constants were taken from version 3 of the DWARF standard, *\n'
r'^\1\2which is Copyright \(c\) 2005 Free Standards Group, and *\n'
r'^\1\2Copyright \(c\) 1992, 1993 UNIX International, Inc\. *\n',
multiLine: true,
caseSensitive: false
),
// Freetype
new RegExp(
kIndent +
(r'This is a dummy file, used to please the build system\. It is never included by the auto-fitter sources\.'.replaceAll(' ', _linebreak)),
multiLine: true,
caseSensitive: false
),
// Freetype
new RegExp(
kIndent +
(
r'This software was written by Alexander Peslyak in 2001\. No copyright is '
r'claimed, and the software is hereby placed in the public domain\. In case '
r'this attempt to disclaim copyright and place the software in the public '
r'domain is deemed null and void, then the software is Copyright \(c\) 2001 '
r'Alexander Peslyak and it is hereby released to the general public under the '
r'following terms: Redistribution and use in source and binary forms, with or '
r"without modification, are permitted\. There\'s ABSOLUTELY NO WARRANTY, "
r'express or implied\.(?: \(This is a heavily cut-down "BSD license"\.\))?'
.replaceAll(' ', _linebreak)
),
multiLine: true,
caseSensitive: false
),
];
// ATTRIBUTION STATEMENTS
final List<RegExp> csAttribution = <RegExp>[
// used with _tryAttribution
// group 1 is the prefix, group 2 is the attribution
// Seen in musl in Android SDK
new RegExp(
r'^([/* ]*)This code was written by (.+) in [0-9]+; no copyright is claimed\.\n'
r'^\1This code is in the public domain\. +Attribution is appreciated but\n'
r'^\1unnecessary\.',
multiLine: true,
caseSensitive: false
),
];
// REFERENCES TO OTHER FILES
class LicenseFileReferencePattern {
LicenseFileReferencePattern({ this.firstPrefixIndex, this.indentPrefixIndex, this.copyrightIndex, this.authorIndex, this.fileIndex, this.pattern, this.needsCopyright: true });
final int firstPrefixIndex;
final int indentPrefixIndex;
final int copyrightIndex;
final int authorIndex;
final int fileIndex;
final bool needsCopyright;
final RegExp pattern;
}
final List<LicenseFileReferencePattern> csReferencesByFilename = <LicenseFileReferencePattern>[
// used with _tryReferenceByFilename
// libpng files
new LicenseFileReferencePattern(
firstPrefixIndex: 1,
indentPrefixIndex: 2,
fileIndex: 3,
needsCopyright: true,
pattern: new RegExp(
kIndent +
r'This code is released under the libpng license. For conditions of distribution and use, see the disclaimer and license in (png.h)\b'.replaceAll(' ', _linebreak),
multiLine: true,
caseSensitive: false
),
),
// typical of much Google-written code
new LicenseFileReferencePattern(
firstPrefixIndex: 1,
indentPrefixIndex: 2,
fileIndex: 3,
pattern: new RegExp(
kIndent +
r'Use of this source(?: code)? is governed by a BS?D-style license that can be found in the '.replaceAll(' ', _linebreak) +
r'([^ ]+) file\b(?! or at)',
multiLine: true,
caseSensitive: false,
)
),
// Mojo code
new LicenseFileReferencePattern(
firstPrefixIndex: 1,
indentPrefixIndex: 2,
copyrightIndex: 3,
authorIndex: 4,
fileIndex: 5,
pattern: new RegExp(
kIndent +
r'(Copyright .+(the .+ authors)\. +All rights reserved.) +' +
r'Use of this source(?: code)? is governed by a BS?D-style license that can be found in the '.replaceAll(' ', _linebreak) +
r'([^ ]+) file\b(?! or at)',
multiLine: true,
caseSensitive: false,
)
),
// typical of Dart-derived files
new LicenseFileReferencePattern(
firstPrefixIndex: 2,
indentPrefixIndex: 3,
copyrightIndex: 1,
authorIndex: 4,
fileIndex: 5,
pattern: new RegExp(
r'(' + kIndent +
r'Copyright .+(the .+ authors)\[?\. '
r'Please see the AUTHORS file for details. All rights (?:re|solve)served\. '
r'Use of this source(?: code)? is governed by a BS?D-style license '
r'that can be found in the '.replaceAll(' ', _linebreakLoose) +
r'([^ ]+) file\b)(?! or at)',
multiLine: true,
caseSensitive: false,
)
),
// Seen in libjpeg-turbo
new LicenseFileReferencePattern(
firstPrefixIndex: 1,
indentPrefixIndex: 2,
fileIndex: 3,
pattern: new RegExp(
kIndent + r'For conditions of distribution and use, see (?:the accompanying|copyright notice in)? ([-_.a-zA-Z0-9]+)',
multiLine: true,
caseSensitive: false,
)
),
// Seen in Expat files
new LicenseFileReferencePattern(
firstPrefixIndex: 1,
indentPrefixIndex: 2,
fileIndex: 3,
pattern: new RegExp(
kIndent + r'See the file ([^ ]+) for copying permission\.',
multiLine: true,
caseSensitive: false,
)
),
// Seen in Expat files
new LicenseFileReferencePattern(
firstPrefixIndex: 1,
indentPrefixIndex: 2,
fileIndex: 3,
pattern: new RegExp(
kIndent +
r'This is free software. You are permitted to copy, distribute, or modify *\n'
r'^\1\2it under the terms of the MIT/X license \(contained in the ([^ ]+) file *\n'
r'^\1\2with this distribution\.\)',
multiLine: true,
caseSensitive: false,
)
),
// Seen in FreeType software
new LicenseFileReferencePattern(
firstPrefixIndex: 1,
indentPrefixIndex: 2,
fileIndex: 3,
pattern: new RegExp(
kIndent +
r'This file (?:is part of the FreeType project, and )?may only be used,? '
r'modified,? and distributed under the terms of the FreeType project '
r'license, (LICENSE\.TXT). By continuing to use, modify, or distribute this '
r'file you indicate that you have read the license and understand and '
r'accept it fully\.'.replaceAll(' ', _linebreak),
multiLine: true,
caseSensitive: false,
)
),
// Seen in FreeType cff software from Adobe
new LicenseFileReferencePattern(
firstPrefixIndex: 1,
indentPrefixIndex: 2,
fileIndex: 3,
pattern: new RegExp(
kIndent +
r'This software, and all works of authorship, whether in source or '
r'object code form as indicated by the copyright notice\(s\) included '
r'herein \(collectively, the "Work"\) is made available, and may only be '
r'used, modified, and distributed under the FreeType Project License, '
r'(LICENSE\.TXT)\. Additionally, subject to the terms and conditions of the '
r'FreeType Project License, each contributor to the Work hereby grants '
r'to any individual or legal entity exercising permissions granted by '
r'the FreeType Project License and this section \(hereafter, "You" or '
r'"Your"\) a perpetual, worldwide, non-exclusive, no-charge, '
r'royalty-free, irrevocable \(except as stated in this section\) patent '
r'license to make, have made, use, offer to sell, sell, import, and '
r'otherwise transfer the Work, where such license applies only to those '
r'patent claims licensable by such contributor that are necessarily '
r'infringed by their contribution\(s\) alone or by combination of their '
r'contribution\(s\) with the Work to which such contribution\(s\) was '
r'submitted\. If You institute patent litigation against any entity '
r'\(including a cross-claim or counterclaim in a lawsuit\) alleging that '
r'the Work or a contribution incorporated within the Work constitutes '
r'direct or contributory patent infringement, then any patent licenses '
r'granted to You under this License for that Work shall terminate as of '
r'the date such litigation is filed\. '
r'By using, modifying, or distributing the Work you indicate that you '
r'have read and understood the terms and conditions of the '
r'FreeType Project License as well as those provided in this section, '
r'and you accept them fully\.'.replaceAll(' ', _linebreak),
multiLine: true,
caseSensitive: false,
)
),
// Seen in Jinja files
new LicenseFileReferencePattern(
firstPrefixIndex: 1,
indentPrefixIndex: 2,
fileIndex: 3,
pattern: new RegExp(
kIndent + r':license: [A-Z0-9]+, see (.+) for more details\.',
multiLine: true,
caseSensitive: false,
)
),
// Seen in modp_b64
new LicenseFileReferencePattern(
firstPrefixIndex: 1,
indentPrefixIndex: 2,
fileIndex: 3,
pattern: new RegExp(
kIndent + r'Released under [^ ]+ license\. +See ([^ ]+) for details\.$',
multiLine: true,
caseSensitive: false,
)
),
// Seen in libxml files
new LicenseFileReferencePattern(
firstPrefixIndex: 1,
indentPrefixIndex: 2,
fileIndex: 3,
pattern: new RegExp(
kIndent + r'(?:Copy: )?See ([A-Z0-9]+) for the status of this software\.?',
multiLine: true,
caseSensitive: false,
)
),
// Seen in libxml files
new LicenseFileReferencePattern(
firstPrefixIndex: 1,
indentPrefixIndex: 2,
fileIndex: 3,
needsCopyright: false,
pattern: new RegExp(
kIndent +
r'// This file is dual licensed under the MIT and the University of Illinois Open *\n'
r'^\1\2// Source Licenses. See (LICENSE\.TXT) for details\.',
multiLine: true,
caseSensitive: false,
)
),
// BoringSSL
new LicenseFileReferencePattern(
firstPrefixIndex: 1,
indentPrefixIndex: 2,
fileIndex: 3,
needsCopyright: true,
pattern: new RegExp(
kIndent +
r'Licensed under the OpenSSL license \(the "License"\)\. You may not use '
r'this file except in compliance with the License\. You can obtain a copy '
r'in the file (LICENSE) in the source distribution or at '
r'https://www\.openssl\.org/source/license\.html'
.replaceAll(' ', _linebreak),
multiLine: true,
caseSensitive: false,
)
),
];
// INDIRECT REFERENCES TO OTHER FILES
final List<RegExp> csReferencesByType = <RegExp>[
// used with _tryReferenceByType
// groups 1 and 2 are the prefix, group 3 is the license type
// Seen in Jinja files, markupsafe files
new RegExp(
kIndent + r':license: ([A-Z0-9]+)',
multiLine: true,
caseSensitive: false
),
new RegExp(
kIndent +
r'This software is made available under the terms of the (ICU) License -- ICU 1\.\8\.1 and later\.'.replaceAll(' ', _linebreak),
multiLine: true,
caseSensitive: false
),
new RegExp(
kIndent +
(
r'(?:@APPLE_LICENSE_HEADER_START@)? '
r'This file contains Original Code and/or Modifications of Original Code '
r'as defined in and that are subject to the (Apple Public Source License) '
r"Version (2\.0) \(the 'License'\)\. You may not use this file except in "
r'compliance with the License\. Please obtain a copy of the License at '
r'(http://www\.opensource\.apple\.com/apsl/) and read it before using this '
r'file\. '
r'The Original Code and all software distributed under the License are '
r"distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER "
r'EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, '
r'INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, '
r'FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT\. '
r'Please see the License for the specific language governing rights and '
r'limitations under the License\.'
r'(?:@APPLE_LICENSE_HEADER_END@)? '
.replaceAll(' ', _linebreak)
),
multiLine: true,
caseSensitive: false
),
];
final List<RegExp> csReferencesByTypeNoCopyright = <RegExp>[
// used with _tryReferenceByType
// groups 1 and 2 are the prefix, group 3 is the license type
new RegExp(
kIndent +
r'Written by Andy Polyakov <appro@openssl\.org> for the OpenSSL '
r'project\. The module is, however, dual licensed under (OpenSSL) and '
r'CRYPTOGAMS licenses depending on where you obtain it\. For further '
r'details see http://www\.openssl\.org/~appro/cryptogams/\. '
r'Permission to use under GPL terms is granted\.'.replaceAll(' ', _linebreak),
multiLine: true,
caseSensitive: false
),
];
class MultipleVersionedLicenseReferencePattern {
MultipleVersionedLicenseReferencePattern({ this.firstPrefixIndex, this.indentPrefixIndex, this.licenseIndices, this.versionIndicies, this.checkLocalFirst: true, this.pattern });
final int firstPrefixIndex;
final int indentPrefixIndex;
final List<int> licenseIndices;
final bool checkLocalFirst;
final Map<int, int> versionIndicies;
final RegExp pattern;
}
final List<MultipleVersionedLicenseReferencePattern> csReferencesByUrl = <MultipleVersionedLicenseReferencePattern>[
// used with _tryReferenceByUrl
// AFL
new MultipleVersionedLicenseReferencePattern(
firstPrefixIndex: 1,
indentPrefixIndex: 2,
licenseIndices: const <int>[3],
versionIndicies: const <int, int>{ 3:4 },
checkLocalFirst: false,
pattern: new RegExp(
kIndent + r'Licensed under the (Academic Free License) version (3\.0)',
multiLine: true,
caseSensitive: false,
)
),
// Eclipse
// Seen in auto-generated Java code in the Dart repository.
new MultipleVersionedLicenseReferencePattern(
firstPrefixIndex: 1,
indentPrefixIndex: 2,
licenseIndices: const <int>[3],
checkLocalFirst: false,
pattern: new RegExp(
r'^(?:[-;#<!.\\"/* ]*[-;#<!.\"/*]+)?( *)Licensed under the Eclipse Public License v1\.0 \(the "License"\); you may not use this file except *\n'
r'^\1\2in compliance with the License\. +You may obtain a copy of the License at *\n'
r'^\1\2 *\n'
r'^\1\2 *(http://www\.eclipse\.org/legal/epl-v10\.html) *\n'
r'^\1\2 *\n'
r'^\1\2Unless required by applicable law or agreed to in writing, software distributed under the License *\n'
r'^\1\2is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express *\n'
r'^\1\2or implied\. +See the License for the specific language governing permissions and limitations under *\n'
r'^\1\2the License\.',
multiLine: true,
caseSensitive: false,
)
),
// Apache reference.
// Seen in Android code.
// TODO(ianh): For this license we only need to include the text once, not once per copyright
// TODO(ianh): For this license we must also include all the NOTICE text (see section 4d)
new MultipleVersionedLicenseReferencePattern(
firstPrefixIndex: 1,
indentPrefixIndex: 2,
licenseIndices: const <int>[3],
checkLocalFirst: false,
pattern: new RegExp(
kIndent +
r'Licensed under the Apache License, Version 2\.0 \(the "License"\); *\n'
r'^\1\2you may not use this file except in compliance with the License\. *\n'
r'^\1\2You may obtain a copy of the License at *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2 *(http://www\.apache\.org/licenses/LICENSE-2\.0) *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2Unless required by applicable law or agreed to in writing, software *\n'
r'^\1\2distributed under the License is distributed on an "AS IS" BASIS, *\n'
r'^\1\2WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied\. *\n'
r'^\1\2See the License for the specific language governing permissions and *\n'
r'^\1\2limitations under the License\.',
multiLine: true,
caseSensitive: false,
)
),
// BSD
new MultipleVersionedLicenseReferencePattern(
firstPrefixIndex: 1,
indentPrefixIndex: 2,
licenseIndices: const <int>[3],
checkLocalFirst: false,
pattern: new RegExp(
kIndent +
r'Use of this source code is governed by a BS?D-style *\n'
r'^\1\2license that can be found in the LICENSE file or at *\n'
r'^\1\2(https://developers.google.com/open-source/licenses/bsd)',
multiLine: true,
caseSensitive: false,
)
),
// MIT
// the crazy s/./->/ thing is someone being over-eager with search-and-replace in rapidjson
new MultipleVersionedLicenseReferencePattern(
firstPrefixIndex: 1,
indentPrefixIndex: 2,
licenseIndices: const <int>[3],
checkLocalFirst: false,
pattern: new RegExp(
kIndent +
r'Licensed under the MIT License \(the "License"\); you may not use this file except *\n'
r'^\1\2in compliance with the License(?:\.|->) You may obtain a copy of the License at *\n'
r'^\1\n'
r'^\1\2(http://opensource(?:\.|->)org/licenses/MIT) *\n'
r'^\1\n'
r'^\1\2Unless required by applicable law or agreed to in writing, software distributed *\n'
r'^\1\2under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR *\n'
r'^\1\2CONDITIONS OF ANY KIND, either express or implied(?:\.|->) See the License for the *\n'
r'^\1\2specific language governing permissions and limitations under the License(?:\.|->)',
multiLine: true,
caseSensitive: false,
)
),
// Observatory (polymer)
new MultipleVersionedLicenseReferencePattern(
firstPrefixIndex: 1,
indentPrefixIndex: 2,
licenseIndices: const <int>[3],
checkLocalFirst: false,
pattern: new RegExp(
kIndent +
r'This code may only be used under the BSD style license found at (http://polymer.github.io/LICENSE.txt)$',
multiLine: true,
caseSensitive: false,
)
),
// ashmem
new MultipleVersionedLicenseReferencePattern(
firstPrefixIndex: 1,
indentPrefixIndex: 2,
licenseIndices: const <int>[3],
versionIndicies: const <int, int>{3:4},
checkLocalFirst: false,
pattern: new RegExp(
kIndent +
r'This file is dual licensed. +It may be redistributed and/or modified *\n'
r'^\1\2under the terms of the (Apache) (2\.0) License OR version 2 of the GNU *\n'
r'^\1\2General Public License\.',
multiLine: true,
caseSensitive: false,
)
),
// GNU ISO C++ GPL+Exception
// Seen in gnu-libstdc++ in Android NDK
new MultipleVersionedLicenseReferencePattern(
firstPrefixIndex: 1,
indentPrefixIndex: 2,
licenseIndices: const <int>[5, 6],
versionIndicies: const <int, int>{5:3, 6:4},
pattern: new RegExp(
kIndent +
r'This file is part of the GNU ISO C\+\+ Library\. +This library is free *\n'
r'^\1\2software; you can redistribute _?_?it and/or modify _?_?it under the terms *\n'
r'^\1\2of the GNU General Public License as published by the Free Software *\n'
r'^\1\2Foundation; either version (3), or \(at your option\) any later *\n'
r'^\1\2version\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2This library is distributed in the hope that _?_?it will be useful, but *\n'
r'^\1\2WITHOUT ANY WARRANTY; without even the implied warranty of *\n'
r'^\1\2MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\. +See the GNU *\n'
r'^\1\2General Public License for more details\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2Under Section 7 of GPL version \3, you are granted additional *\n'
r'^\1\2permissions described in the GCC Runtime Library Exception, version *\n'
r'^\1\2(3\.1), as published by the Free Software Foundation\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2You should have received a copy of the GNU General Public License and *\n'
r'^\1\2a copy of the GCC Runtime Library Exception along with this program; *\n'
r'^\1\2see the files (COPYING3) and (COPYING\.RUNTIME) respectively\. +If not, see *\n'
r'^\1\2<http://www\.gnu\.org/licenses/>\.',
multiLine: true,
caseSensitive: false,
)
),
// GNU ISO C++ GPL+Exception, alternative wrapping
// Seen in gnu-libstdc++ in Android NDK
new MultipleVersionedLicenseReferencePattern(
firstPrefixIndex: 1,
indentPrefixIndex: 2,
licenseIndices: const <int>[5, 6],
versionIndicies: const <int, int>{5:3, 6:4},
pattern: new RegExp(
kIndent +
r'This file is part of the GNU ISO C\+\+ Library\. +This library is free *\n'
r'^\1\2software; you can redistribute it and/or modify it under the *\n'
r'^\1\2terms of the GNU General Public License as published by the *\n'
r'^\1\2Free Software Foundation; either version (3), or \(at your option\) *\n'
r'^\1\2any later version\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2This library is distributed in the hope that it will be useful, *\n'
r'^\1\2but WITHOUT ANY WARRANTY; without even the implied warranty of *\n'
r'^\1\2MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\. +See the *\n'
r'^\1\2GNU General Public License for more details\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2Under Section 7 of GPL version \3, you are granted additional *\n'
r'^\1\2permissions described in the GCC Runtime Library Exception, version *\n'
r'^\1\2(3\.1), as published by the(?:, 2009)? Free Software Foundation\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2You should have received a copy of the GNU General Public License and *\n'
r'^\1\2a copy of the GCC Runtime Library Exception along with this program; *\n'
r'^\1\2see the files (COPYING3) and (COPYING\.RUNTIME) respectively\. +If not, see *\n'
r'^\1\2<http://www\.gnu\.org/licenses/>\.',
multiLine: true,
caseSensitive: false,
)
),
// GNU ISO C++ GPL+Exception, alternative footer without exception filename
// Seen in gnu-libstdc++ in Android NDK
new MultipleVersionedLicenseReferencePattern(
firstPrefixIndex: 1,
indentPrefixIndex: 2,
licenseIndices: const <int>[6, 4],
versionIndicies: const <int, int>{6:3, 4:5},
pattern: new RegExp(
kIndent +
r'This file is part of the GNU ISO C\+\+ Library\. +This library is free *\n'
r'^\1\2software; you can redistribute it and/or modify it under the *\n'
r'^\1\2terms of the GNU General Public License as published by the *\n'
r'^\1\2Free Software Foundation; either version (3), or \(at your option\) *\n' // group 3 is the version of the gpl
r'^\1\2any later version\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2This library is distributed in the hope that it will be useful, *\n'
r'^\1\2but WITHOUT ANY WARRANTY; without even the implied warranty of *\n'
r'^\1\2MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\. +See the *\n'
r'^\1\2GNU General Public License for more details\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2Under Section 7 of GPL version \3, you are granted additional *\n'
r'^\1\2permissions described in the (GCC Runtime Library Exception), version *\n' // group 4 is the "file name" of the exception (it's missing in this version, so we use this as a hook to later, see the url mappings)
r'^\1\2(3\.1), as published by the Free Software Foundation\. *\n' // group 5 is the version of the exception
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2You should have received a copy of the GNU General Public License along *\n'
r'^\1\2with this library; see the file (COPYING3)\. +If not see *\n' // group 6 is the gpl file name
r'^\1\2<http://www\.gnu\.org/licenses/>\.',
multiLine: true,
caseSensitive: false,
)
),
// GCC GPL+Exception
// Seen in gnu-libstdc++ in Android NDK
new MultipleVersionedLicenseReferencePattern(
firstPrefixIndex: 1,
indentPrefixIndex: 2,
licenseIndices: const <int>[5, 6],
versionIndicies: const <int, int>{5:3, 6:4},
pattern: new RegExp(
kIndent +
r'This file is part of GCC. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2GCC is free software; you can redistribute it and/or modify it under *\n'
r'^\1\2the terms of the GNU General Public License as published by the Free *\n'
r'^\1\2Software Foundation; either version (3), or \(at your option\) any later *\n'
r'^\1\2version\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2GCC is distributed in the hope that it will be useful, but WITHOUT ANY *\n'
r'^\1\2WARRANTY; without even the implied warranty of MERCHANTABILITY or *\n'
r'^\1\2FITNESS FOR A PARTICULAR PURPOSE\. +See the GNU General Public License *\n'
r'^\1\2for more details\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2Under Section 7 of GPL version \3, you are granted additional *\n'
r'^\1\2permissions described in the GCC Runtime Library Exception, version *\n'
r'^\1\2(3\.1), as published by the Free Software Foundation\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2You should have received a copy of the GNU General Public License and *\n'
r'^\1\2a copy of the GCC Runtime Library Exception along with this program; *\n'
r'^\1\2see the files (COPYING3) and (COPYING\.RUNTIME) respectively\. +If not, see *\n'
r'^\1\2<http://www\.gnu\.org/licenses/>\.',
multiLine: true,
caseSensitive: false,
)
),
// GCC GPL+Exception, alternative line wrapping
// Seen in gnu-libstdc++ in Android NDK
new MultipleVersionedLicenseReferencePattern(
firstPrefixIndex: 1,
indentPrefixIndex: 2,
licenseIndices: const <int>[5, 6],
versionIndicies: const <int, int>{ 5:3, 6:4 },
pattern: new RegExp(
kIndent +
r'This file is part of GCC. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2GCC is free software; you can redistribute it and/or modify *\n'
r'^\1\2it under the terms of the GNU General Public License as published by *\n'
r'^\1\2the Free Software Foundation; either version (3), or \(at your option\) *\n'
r'^\1\2any later version\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2GCC is distributed in the hope that it will be useful, *\n'
r'^\1\2but WITHOUT ANY WARRANTY; without even the implied warranty of *\n'
r'^\1\2MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\. +See the *\n'
r'^\1\2GNU General Public License for more details\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2Under Section 7 of GPL version \3, you are granted additional *\n'
r'^\1\2permissions described in the GCC Runtime Library Exception, version *\n'
r'^\1\2(3\.1), as published by the Free Software Foundation\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2You should have received a copy of the GNU General Public License and *\n'
r'^\1\2a copy of the GCC Runtime Library Exception along with this program; *\n'
r'^\1\2see the files (COPYING3) and (COPYING\.RUNTIME) respectively\. +If not, see *\n'
r'^\1\2<http://www\.gnu\.org/licenses/>\.',
multiLine: true,
caseSensitive: false,
)
),
// LGPL 2.1
// some engine code
new MultipleVersionedLicenseReferencePattern(
firstPrefixIndex: 1,
indentPrefixIndex: 2,
licenseIndices: const <int>[4],
versionIndicies: const <int, int>{ 4:3 },
pattern: new RegExp(
kIndent +
r'This library is free software; you can redistribute it and/or *\n'
r'^\1\2modify it under the terms of the GNU Library General Public *\n'
r'^\1\2License as published by the Free Software Foundation; either *\n'
r'^\1\2version (2) of the License, or \(at your option\) any later version\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2This library is distributed in the hope that it will be useful, *\n'
r'^\1\2but WITHOUT ANY WARRANTY; without even the implied warranty of *\n?'
r'\1\2MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\. +See the GNU *\n?'
r'\1\2Library General Public License for more details\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2You should have received a copy of the GNU Library General Public License *\n'
r'^\1\2(?:along|aint) with this library; see the file (COPYING\.LI(?:B|other\.m_))\.? If not, write to *\n'
r'^\1\2the Free Software Foundation, Inc\., (?:51 Franklin Street, Fifth Floor|59 Temple Place - Suite 330), *\n'
r'^\1\2Boston, MA 0211[01]-130[17], US(?:A\.|m_)',
multiLine: true,
caseSensitive: false,
)
),
// AFL/LGPL
// xdg_mime
new MultipleVersionedLicenseReferencePattern(
firstPrefixIndex: 1,
indentPrefixIndex: 2,
licenseIndices: const <int>[4],
versionIndicies: const <int, int>{ 4:3 },
pattern: new RegExp(
kIndent +
r'Licensed under the Academic Free License version 2.0 *\n'
r'^\1\2Or under the following terms: *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2This library is free software; you can redistribute it and/or *\n'
r'^\1\2modify it under the terms of the GNU Lesser General Public *\n'
r'^\1\2License as published by the Free Software Foundation; either *\n'
r'^\1\2version (2) of the License, or \(at your option\) any later version\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2This library is distributed in the hope that it will be useful, *\n'
r'^\1\2but WITHOUT ANY WARRANTY; without even the implied warranty of *\n'
r'^\1\2MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\.\t? +See the GNU *\n'
r'^\1\2Lesser General Public License for more details\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2You should have received a copy of the (GNU Lesser) General Public *\n'
r'^\1\2License along with this library; if not, write to the *\n'
r'^\1\2Free Software Foundation, Inc\., 59 Temple Place - Suite 330, *\n'
r'^\1\2Boston, MA 0211[01]-1307, USA\.',
multiLine: true,
caseSensitive: false,
)
),
// MPL
// root_certificates
new MultipleVersionedLicenseReferencePattern(
firstPrefixIndex: 1,
indentPrefixIndex: 2,
licenseIndices: const <int>[4],
versionIndicies: const <int, int>{ 4:3 },
pattern: new RegExp(
kIndent +
r'This Source Code Form is subject to the terms of the Mozilla Public *\n'
r'^\1\2License, v\. (2.0)\. +If a copy of the MPL was not distributed with this *\n'
r'^\1\2file, You can obtain one at (http://mozilla\.org/MPL/2\.0/)\.',
multiLine: true,
caseSensitive: false,
)
),
// MPL/GPL/LGPL
// engine
new MultipleVersionedLicenseReferencePattern(
firstPrefixIndex: 1,
indentPrefixIndex: 2,
licenseIndices: const <int>[3],
versionIndicies: const <int, int>{ 3:4 },
pattern: new RegExp(
kIndent +
r'(?:Version: [GMPL/012. ]+ *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2)?The contents of this file are subject to the Mozilla Public License Version *\n'
r'^\1\2(?:1\.1) \(the "License"\); you may not use this file except in compliance with *\n'
r'^\1\2the License\. +You may obtain a copy of the License at *\n'
r'^\1\2http://www\.mozilla\.org/MPL/ *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2Software distributed under the License is distributed on an "AS IS" basis, *\n'
r'^\1\2WITHOUT WARRANTY OF ANY KIND, either express or implied\. +See the License *\n'
r'^\1\2for the specific language governing rights and limitations under the *\n'
r'^\1\2License\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2The Original Code is .+?(?:released\n'
r'^\1\2March 31, 1998\.)?\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2The Initial Developer of the Original Code is *\n'
r'^\1\2.+\n'
r'^\1\2Portions created by the Initial Developer are Copyright \(C\) [0-9]+ *\n'
r'^\1\2the Initial Developer\. +All Rights Reserved\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2Contributor\(s\): *\n'
r'(?:\1\2 .+\n)*'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2'
+
(
r'Alternatively, the contents of this file may be used under the terms of '
r'either (?:of )?the GNU General Public License Version 2 or later \(the "GPL"\), '
r'or the (GNU Lesser) General Public License Version (2\.1) or later \(the '
r'"LGPL"\), in which case the provisions of the GPL or the LGPL are '
r'applicable instead of those above\. If you wish to allow use of your '
r'version of this file only under the terms of either the GPL or the LGPL, '
r'and not to allow others to use your version of this file under the terms '
r'of the MPL, indicate your decision by deleting the provisions above and '
r'replace them with the notice and other provisions required by the GPL or '
r'the LGPL\. If you do not delete the provisions above, a recipient may use '
r'your version of this file under the terms of any one of the MPL, the GPL or '
r'the LGPL\.'
.replaceAll(' ', _linebreak)
),
multiLine: true,
caseSensitive: false,
)
),
// LGPL/MPL/GPL
// engine
new MultipleVersionedLicenseReferencePattern(
firstPrefixIndex: 1,
indentPrefixIndex: 2,
licenseIndices: const <int>[4],
versionIndicies: const <int, int>{ 4:3 },
pattern: new RegExp(
kIndent +
r'This library is free software; you can redistribute it and/or *\n'
r'^\1\2modify it under the terms of the GNU Lesser General Public *\n'
r'^\1\2License as published by the Free Software Foundation; either *\n'
r'^\1\2version (2\.1) of the License, or \(at your option\) any later version\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2This library is distributed in the hope that it will be useful, *\n'
r'^\1\2but WITHOUT ANY WARRANTY; without even the implied warranty of *\n'
r'^\1\2MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\. +See the GNU *\n'
r'^\1\2Lesser General Public License for more details\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2You should have received a copy of the (GNU Lesser) General Public *\n'
r'^\1\2License along with this library; if not, write to the Free Software *\n'
r'^\1\2Foundation, Inc\., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2Alternatively, the contents of this file may be used under the terms *\n'
r'^\1\2of either the Mozilla Public License Version 1\.1, found at *\n'
r'^\1\2http://www\.mozilla\.org/MPL/ \(the "MPL"\) or the GNU General Public *\n'
r'^\1\2License Version 2\.0, found at http://www\.fsf\.org/copyleft/gpl\.html *\n'
r'^\1\2\(the "GPL"\), in which case the provisions of the MPL or the GPL are *\n'
r'^\1\2applicable instead of those above\. +If you wish to allow use of your *\n'
r'^\1\2version of this file only under the terms of one of those two *\n'
r'^\1\2licenses \(the MPL or the GPL\) and not to allow others to use your *\n'
r'^\1\2version of this file under the LGPL, indicate your decision by *\n'
r'^\1\2deletingthe provisions above and replace them with the notice and *\n'
r'^\1\2other provisions required by the MPL or the GPL, as the case may be\. *\n'
r'^\1\2If you do not delete the provisions above, a recipient may use your *\n'
r'^\1\2version of this file under any of the LGPL, the MPL or the GPL\.',
multiLine: true,
caseSensitive: false,
)
),
];
// INLINE LICENSES
final List<RegExp> csLicenses = <RegExp>[
// used with _tryInline, with needsCopyright: true (will only match if preceded by a copyright notice)
// should have two groups, prefixes 1 and 2
// BoringSSL
new RegExp(
kIndent +
r'Redistribution and use in source and binary forms, with or without *\n'
r'^\1\2modification, are permitted provided that the following conditions *\n'
r'^\1\2are met: *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2(?:[-*1-9.)/ ]+)Redistributions of source code must retain the above copyright *\n'
r'^\1\2 *notice, this list of conditions and the following disclaimer\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2(?:[-*1-9.)/ ]+)Redistributions in binary form must reproduce the above copyright *\n'
r'^\1\2 *notice, this list of conditions and the following disclaimer in *\n'
r'^\1\2 *the documentation and/or other materials provided with the *\n'
r'^\1\2 *distribution\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2(?:[-*1-9.)/ ]+)All advertising materials mentioning features or use of this *\n'
r'^\1\2 *software must display the following acknowledgment: *\n'
r'^\1\2 *"This product includes software developed by the OpenSSL Project *\n'
r'^\1\2 *for use in the OpenSSL Toolkit\. \(http://www\.OpenSSL\.org/\)" *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2(?:[-*1-9.)/ ]+)The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to *\n'
r'^\1\2 *endorse or promote products derived from this software without *\n'
r'^\1\2 *prior written permission\. +For written permission, please contact *\n'
r'^\1\2 *[^@ ]+@OpenSSL\.org\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2(?:[-*1-9.)/ ]+)Products derived from this software may not be called "OpenSSL" *\n'
r'^\1\2 *nor may "OpenSSL" appear in their names without prior written *\n'
r'^\1\2 *permission of the OpenSSL Project\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2(?:[-*1-9.)/ ]+)Redistributions of any form whatsoever must retain the following *\n'
r'^\1\2 *acknowledgment: *\n'
r'^\1\2 *"This product includes software developed by the OpenSSL Project *\n'
r'^\1\2 *for use in the OpenSSL Toolkit \(http://www\.OpenSSL\.org/\)" *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r"^\1\2THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY *\n"
r'^\1\2EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE *\n'
r'^\1\2IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR *\n'
r'^\1\2PURPOSE ARE DISCLAIMED\. +IN NO EVENT SHALL THE OpenSSL PROJECT OR *\n'
r'^\1\2ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, *\n'
r'^\1\2SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES \(INCLUDING, BUT *\n'
r'^\1\2NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *\n'
r'^\1\2LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION\) *\n'
r'^\1\2HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, *\n'
r'^\1\2STRICT LIABILITY, OR TORT \(INCLUDING NEGLIGENCE OR OTHERWISE\) *\n'
r'^\1\2ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED *\n'
r'^\1\2OF THE POSSIBILITY OF SUCH DAMAGE\.',
multiLine: true,
caseSensitive: false
),
new RegExp(
kIndent +
r'(?:This package is an SSL implementation written *\n'
r'^\1\2by Eric Young \(eay@cryptsoft\.com\)\. *\n'
r'^\1\2The implementation was written so as to conform with Netscapes SSL\. *\n'
r'^(?:(?:\1\2?g? *)? *\n)*'
r'^\1\2This library is free for commercial and non-commercial use as long as *\n'
r'^\1\2the following conditions are aheared to\. +The following conditions *\n'
r'^\1\2apply to all code found in this distribution, be it the RC4, RSA, *\n'
r'^\1\2lhash, DES, etc\., code; not just the SSL code\. +The SSL documentation *\n'
r'^\1\2included with this distribution is covered by the same copyright terms *\n'
r'^\1\2except that the holder is Tim Hudson \(tjh@cryptsoft\.com\)\. *\n'
r'^(?:(?:\1\2?g? *)? *\n)*'
r"^\1\2Copyright remains Eric Young's, and as such any Copyright notices in *\n"
r'^\1\2the code are not to be removed\. *\n'
r'^\1\2If this package is used in a product, Eric Young should be given attribution *\n'
r'^\1\2as the author of the parts of the library used\. *\n'
r'^\1\2This can be in the form of a textual message at program startup or *\n'
r'^\1\2in documentation \(online or textual\) provided with the package\. *\n'
r'^(?:(?:\1\2?g? *)? *\n)*'
r'^\1\2)?Redistribution and use in source and binary forms, with or without *\n'
r'^\1\2modification, are permitted provided that the following conditions *\n'
r'^\1\2are met: *\n'
r'^\1\2(?:[-*1-9.)/ ]+)Redistributions of source code must retain the copyright *\n'
r'^\1\2 *notice, this list of conditions and the following disclaimer\. *\n'
r'^\1\2(?:[-*1-9.)/ ]+)Redistributions in binary form must reproduce the above copyright *\n'
r'^\1\2 *notice, this list of conditions and the following disclaimer in the *\n'
r'^\1\2 *documentation and/or other materials provided with the distribution\. *\n'
r'^\1\2(?:[-*1-9.)/ ]+)All advertising materials mentioning features or use of this software *\n'
r'^\1\2 *must display the following acknowledgement: *\n'
r'^\1\2 *"This product includes cryptographic software written by *\n'
r'^\1\2 *Eric Young \(eay@cryptsoft\.com\)" *\n'
r"^\1\2 *The word 'cryptographic' can be left out if the rouines from the library *\n" // TODO(ianh): File a bug on the number of analyzer errors you get if you replace the " characters on this line with '
r'^\1\2 *being used are not cryptographic related :-\)\. *\n'
r'^\1\2(?:[-*1-9.)/ ]+)If you include any Windows specific code \(or a derivative thereof\) fromg? *\n'
r'^\1\2 *the apps directory \(application code\) you must include an acknowledgement: *\n'
r'^\1\2 *"This product includes software written by Tim Hudson \(tjh@cryptsoft\.com\)" *\n'
r'^(?:(?:\1\2?g? *)? *\n)*'
r"^\1\2THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND *\n"
r'^\1\2ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE *\n'
r'^\1\2IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE *\n'
r'^\1\2ARE DISCLAIMED\. +IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE *\n'
r'^\1\2FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL *\n'
r'^\1\2DAMAGES \(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS *\n'
r'^\1\2OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION\) *\n'
r'^\1\2HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT *\n'
r'^\1\2LIABILITY, OR TORT \(INCLUDING NEGLIGENCE OR OTHERWISE\) ARISING IN ANY WAY *\n'
r'^\1\2OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF *\n'
r'^\1\2SUCH DAMAGE\. *\n'
r'^(?:(?:\1\2?g? *)? *\n)*'
r'^\1\2The licence and distribution terms for any publically available version or *\n'
r'^\1\2derivative of this code cannot be changed\. +i\.e\. +this code cannot simply be *\n'
r'^\1\2copied and put under another distribution licence *\n'
r'^\1\2\[including the GNU Public Licence\.\]',
multiLine: true,
caseSensitive: false
),
new RegExp(
kIndent +
(
r'License to copy and use this software is granted provided that it '
r'is identified as the "RSA Data Security, Inc\. MD5 Message-Digest '
r'Algorithm" in all material mentioning or referencing this software '
r'or this function\. '
r'License is also granted to make and use derivative works provided '
r'that such works are identified as "derived from the RSA Data '
r'Security, Inc\. MD5 Message-Digest Algorithm" in all material '
r'mentioning or referencing the derived work\. '
r'RSA Data Security, Inc\. makes no representations concerning either '
r'the merchantability of this software or the suitability of this '
r'software for any particular purpose\. It is provided "as is" '
r'without express or implied warranty of any kind\. '
r'These notices must be retained in any copies of any part of this '
r'documentation and/or software\.'
.replaceAll(' ', _linebreak)
),
multiLine: true,
caseSensitive: false,
),
// BSD-DERIVED LICENSES
new RegExp(
kIndent +
(
'Redistribution and use in source and binary forms, with or without '
'modification, are permitted provided that the following conditions are met:'
.replaceAll(' ', _linebreak)
)
+
// the conditions:
r'(?:' +
// indented blank lines
_linebreak +
// truly blank lines
r'|[\r\n]+' +
// ad clause - ucb
r'|(?:[-*1-9.)/ ]+)' +
(
'All advertising materials mentioning features or use of this software '
'must display the following acknowledgement: This product includes software '
'developed by the University of California, Berkeley and its contributors\\.'
.replaceAll(' ', _linebreak)
)
+
// ad clause - netbsd
r'|(?:[-*1-9.)/ ]+)' +
(
'All advertising materials mentioning features or use of this software '
'must display the following acknowledgement: This product includes software '
'developed by the NetBSD Foundation, Inc\\. and its contributors\\.'
.replaceAll(' ', _linebreak)
)
+
// ack clause
r'|(?:[-*1-9.)/ ]+)' +
(
r'The origin of this software must not be misrepresented; you must not claim '
r'that you wrote the original software\. If you use this software in a product, '
r'an acknowledgment in the product documentation would be appreciated but is '
r'not required\.'
.replaceAll(' ', _linebreak)
)
+
r'|(?:[-*1-9.)/ ]+)' +
(
r'Altered source versions must be plainly marked as such, and must not be '
r'misrepresented as being the original software\.'
.replaceAll(' ', _linebreak)
)
+
// no ad clauses
r'|(?:[-*1-9.)/ ]+)' +
(
'Neither my name, .+, nor the names of any other contributors to the code '
'use may not be used to endorse or promote products derived from this '
'software without specific prior written permission\\.'
.replaceAll(' ', _linebreak)
)
+
r'|(?:[-*1-9.)/ ]+)' +
(
'The name of the author may not be used to endorse or promote products '
'derived from this software without specific prior written permission\\.?'
.replaceAll(' ', _linebreak)
)
+
r'|(?:[-*1-9.)/ ]+)' +
(
'Neither the name of .+ nor the names of its contributors may be used '
'to endorse or promote products derived from this software without '
'specific prior written permission\\.'
.replaceAll(' ', _linebreak)
)
+
// notice clauses
r'|(?:[-*1-9.)/ ]+)' +
(
'Redistributions of source code must retain the above copyright notice, '
'this list of conditions and the following disclaimer\\.'
.replaceAll(' ', _linebreak)
)
+
r'|(?:[-*1-9.)/ ]+)' +
(
'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\\.'
.replaceAll(' ', _linebreak)
)
+
r'|(?:[-*1-9.)/ ]+)' +
(
'Redistributions in binary form must reproduce the above copyright notice, '
'this list of conditions and the following disclaimer\\.'
.replaceAll(' ', _linebreak)
)
// end of conditions
+
r')*'
+
// disclaimers
(
'THIS SOFTWARE IS PROVIDED (?:BY .+(?: .+)? )?["“`]+AS IS["”\']+,? AND ANY EXPRESS OR IMPLIED '
'WARRANTIES,(?::tabnew)? INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF '
'MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED\\. IN NO EVENT '
'SHALL .+(?: .+)? BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR '
'CONSEQUENTIAL DAMAGES \\(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS '
'OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION\\) HOWEVER CAUSED '
'AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \\(INCLUDING '
'NEGLIGENCE OR OTHERWISE\\) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF '
'ADVISED OF THE POSSIBILITY OF SUCH DAMAGE\\.'
.replaceAll(' ', _linebreak)
),
multiLine: true,
caseSensitive: false,
),
// THREE-CLAUSE LICENSES
// licenses in this section are sorted first by the length of the last line, in words,
// and then by the length of the bulletted clauses, in total lines.
// Seen in libjpeg-turbo
// TODO(ianh): Mark License as not needing to be shown
new RegExp(
kIndent +
r"This software is provided 'as-is', without any express or implied *\n"
r'^\1\2warranty\. +In no event will the authors be held liable for any damages *\n'
r'^\1\2arising from the use of this software\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2Permission is granted to anyone to use this software for any purpose, *\n'
r'^\1\2including commercial applications, and to alter it and redistribute it *\n'
r'^\1\2freely, subject to the following restrictions: *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2(?:[-*1-9.)/ ]+)The origin of this software must not be misrepresented; you must not *\n'
r'^\1\2 *claim that you wrote the original software\. +If you use this software *\n'
r'^\1\2 *in a product, an acknowledgment in the product documentation would be *\n'
r'^\1\2 *appreciated but is not required\. *\n'
r'^\1\2(?:[-*1-9.)/ ]+)Altered source versions must be plainly marked as such, and must not be *\n'
r'^\1\2 *misrepresented as being the original software\. *\n'
r'^\1\2(?:[-*1-9.)/ ]+)This notice may not be removed or altered from any source distribution\.',
multiLine: true,
caseSensitive: false
),
// seen in GLFW
new RegExp(
kIndent +
r"This software is provided 'as-is', without any express or implied *\n"
r'^\1\2warranty\. +In no event will the authors be held liable for any damages *\n'
r'^\1\2arising from the use of this software\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2Permission is granted to anyone to use this software for any purpose, *\n'
r'^\1\2including commercial applications, and to alter it and redistribute it *\n'
r'^\1\2freely, subject to the following restrictions: *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2(?:[-*1-9.)/ ]+)The origin of this software must not be misrepresented; you must not *\n'
r'^\1\2 *claim that you wrote the original software\. +If you use this software *\n'
r'^\1\2 *in a product, an acknowledgment in the product documentation would *\n'
r'^\1\2 *be appreciated but is not required\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2(?:[-*1-9.)/ ]+)Altered source versions must be plainly marked as such, and must not *\n'
r'^\1\2 *be misrepresented as being the original software\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2(?:[-*1-9.)/ ]+)This notice may not be removed or altered from any source *\n'
r'^\1\2 *distribution\.',
multiLine: true,
caseSensitive: false
),
// MIT-DERIVED LICENSES
// Seen in Mesa
new RegExp(
kIndent +
(
r'Permission is hereby granted, free of charge, to any person obtaining '
r'a copy of this software and(?: /or)? associated documentation files \(the "(?:Software|Materials) "\), '
r'to deal in the (?:Software|Materials) without restriction, including without limitation '
r'the rights to use, copy, modify, merge, publish, distribute, sub license, '
r'and/or sell copies of the (?:Software|Materials), and to permit persons to whom the '
r'(?:Software|Materials) (?:is|are) furnished to do so, subject to the following conditions:'
.replaceAll(' ', _linebreak)
)
+
r'(?:'
+
(
r'(?:(?:\1\2? *)? *\n)*'
+
r'|'
r'\1\2 '
r'The above copyright notice and this permission notice'
r'(?: \(including the next paragraph\))? '
r'shall be included in all copies or substantial portions '
r'of the (?:Software|Materials)\.'
r'|'
r'\1\2 '
r'In addition, the following condition applies:'
r'|'
r'\1\2 '
r'All redistributions must retain an intact copy of this copyright notice and disclaimer\.'
r'|'
r'\1\2 '
r'THE (?:SOFTWARE|MATERIALS) (?:IS|ARE) PROVIDED "AS -? IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS '
r'OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, '
r'FITNESS FOR A PARTICULAR PURPOSE AND NON-?INFRINGEMENT\. IN NO EVENT SHALL '
r'.+(?: .+)? BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER '
r'IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN '
r'CONNECTION WITH THE (?:SOFTWARE|MATERIALS) OR THE USE OR OTHER DEALINGS IN THE (?:SOFTWARE|MATERIALS)\.'
r'|'
r'\1\2 '
r'THE (?:SOFTWARE|MATERIALS) (?:IS|ARE) PROVIDED "AS -? IS" AND WITHOUT WARRANTY OF ANY KIND, '
r'EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY '
r'OR FITNESS FOR A PARTICULAR PURPOSE\.'
r'|'
r'\1\2 '
r'IN NO EVENT SHALL .+ BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL '
r'DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, '
r'WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING '
r'OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE\.'
.replaceAll(' ', _linebreak)
)
+
r')*',
multiLine: true,
caseSensitive: false
),
// OTHER BRIEF LICENSES
new RegExp(
kIndent +
r'Permission to use, copy, modify, and distribute this software for any *\n'
r'^(?:\1\2)?purpose with or without fee is hereby granted, provided that the above *\n'
r'^(?:\1\2)?copyright notice and this permission notice appear in all copies(?:, and that *\n'
r'^(?:\1\2)?the name of .+ not be used in advertising or *\n'
r'^(?:\1\2)?publicity pertaining to distribution of the document or software without *\n'
r'^(?:\1\2)?specific, written prior permission)?\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^(?:\1\2)?THE SOFTWARE IS PROVIDED "AS IS" AND .+ DISCLAIMS ALL(?: WARRANTIES)? *\n'
r'^(?:\1\2)?(?:WARRANTIES )?WITH REGARD TO THIS SOFTWARE,? INCLUDING ALL IMPLIED WARRANTIES(?: OF)? *\n'
r'^(?:\1\2)?(?:OF )?MERCHANTABILITY AND FITNESS\. +IN NO EVENT SHALL .+(?: BE LIABLE FOR)? *\n'
r'^(?:\1\2)?(?:.+ BE LIABLE FOR )?ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL(?: DAMAGES OR ANY DAMAGES)? *\n'
r'^(?:\1\2)?(?:DAMAGES OR ANY DAMAGES )?WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR(?: PROFITS, WHETHER IN AN)? *\n'
r'^(?:\1\2)?(?:PROFITS, WHETHER IN AN )?ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS(?: ACTION, ARISING OUT OF)? *\n'
r'^(?:\1\2)?(?:ACTION, ARISING OUT OF )?OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS(?: SOFTWARE)?(?: *\n'
r'^(?:\1\2)?SOFTWARE)?\.',
multiLine: true,
caseSensitive: false
),
// Seen in the NDK
new RegExp(
kIndent +
r'Permission to use, copy, modify, and/or distribute this software for any *\n'
r'^\1\2purpose with or without fee is hereby granted, provided that the above *\n'
r'^\1\2copyright notice and this permission notice appear in all copies\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2THE SOFTWARE IS PROVIDED "AS IS" AND .+ DISCLAIMS ALL WARRANTIES(?: WITH)? *\n'
r'^\1\2(?:WITH )?REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF(?: MERCHANTABILITY)? *\n'
r'^\1\2(?:MERCHANTABILITY )?AND FITNESS\. +IN NO EVENT SHALL .+ BE LIABLE FOR(?: ANY(?: SPECIAL, DIRECT,)?)? *\n'
r'^\1\2(?:(?:ANY )?SPECIAL, DIRECT, )?INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES(?: WHATSOEVER RESULTING FROM)? *\n'
r'^\1\2(?:WHATSOEVER RESULTING FROM )?LOSS OF USE, DATA OR PROFITS, WHETHER IN AN(?: ACTION(?: OF CONTRACT, NEGLIGENCE)?)? *\n'
r'^\1\2(?:(?:ACTION )?OF CONTRACT, NEGLIGENCE )?OR OTHER TORTIOUS ACTION, ARISING OUT OF(?: OR IN(?: CONNECTION WITH THE USE OR)?)? *\n'
r'^\1\2(?:(?:OR IN )?CONNECTION WITH THE USE OR )?PERFORMANCE OF THIS SOFTWARE\.',
multiLine: true,
caseSensitive: false
),
// seen in GLFW
new RegExp(
kIndent +
r'Permission to use, copy, modify, and distribute this software for any *\n'
r'^\1\2purpose with or without fee is hereby granted, provided that the above *\n'
r'^\1\2copyright notice and this permission notice appear in all copies\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r"^\1\2THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED *\n"
r'^\1\2WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF *\n'
r'^\1\2MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE\. +THE AUTHORS AND *\n'
r'^\1\2CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER\.',
multiLine: true,
caseSensitive: false
),
// seen in GLFW, base
new RegExp(
kIndent +
r'Permission to use, copy, modify, and distribute this software for any *\n'
r'^\1\2purpose without fee is hereby granted, provided that this entire notice *\n'
r'^\1\2is included in all copies of any software which is or includes a copy *\n'
r'^\1\2or modification of this software and in all copies of the supporting *\n'
r'^\1\2documentation for such software\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED *\n'
r'^\1\2WARRANTY\. +IN PARTICULAR, NEITHER THE AUTHOR NOR .+ MAKES ANY *\n'
r'^\1\2REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY *\n'
r'^\1\2OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE\.',
multiLine: true,
caseSensitive: false
),
// harfbuzz
new RegExp(
kIndent +
r'Permission is hereby granted, without written agreement and without *\n'
r'^\1\2license or royalty fees, to use, copy, modify, and distribute this *\n'
r'^\1\2software and its documentation for any purpose, provided that the *\n'
r'^\1\2above copyright notice and the following two paragraphs appear in *\n'
r'^\1\2all copies of this software\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR *\n'
r'^\1\2DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES *\n'
r'^\1\2ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN *\n'
r'^\1\2IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH *\n'
r'^\1\2DAMAGE\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, *\n'
r'^\1\2BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND *\n'
r'^\1\2FITNESS FOR A PARTICULAR PURPOSE\. +THE SOFTWARE PROVIDED HEREUNDER IS *\n'
r'^\1\2ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO *\n'
r'^\1\2PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS\. *\n',
multiLine: true,
caseSensitive: false
),
// NDK
new RegExp(
kIndent +
r'Permission to use, copy, modify and distribute this software and *\n'
r'^\1\2its documentation is hereby granted, provided that both the copyright *\n'
r'^\1\2notice and this permission notice appear in all copies of the *\n'
r'^\1\2software, derivative works or modified versions, and any portions *\n'
r'^\1\2thereof, and that both notices appear in supporting documentation. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" *\n'
r'^\1\2CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND *\n'
r'^\1\2FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2Carnegie Mellon requests users of this software to return to *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2 Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU *\n'
r'^\1\2 School of Computer Science *\n'
r'^\1\2 Carnegie Mellon University *\n'
r'^\1\2 Pittsburgh PA 15213-3890 *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2any improvements or extensions that they make and grant Carnegie the *\n'
r'^\1\2rights to redistribute these changes. *\n',
multiLine: true,
caseSensitive: false
),
// seen in Android NDK gnu-libstdc++
new RegExp(
kIndent +
(
r'Permission to use, copy, modify, (?:distribute and sell|sell, and distribute) this software '
r'(?:and its documentation for any purpose )?is hereby granted without fee, '
r'provided that the above copyright notice appears? in all copies,? and '
r'that both that copyright notice and this permission notice appear '
r'in supporting documentation\. '
r'(?:.+'
r'|Hewlett-Packard Company'
r'|Silicon Graphics'
r'|None of the above authors, nor IBM Haifa Research Laboratories,'
r') makes? (?:no|any) '
r'representations? about the suitability of this software for any '
r'(?:purpose\. It is provi)?ded "as is" without express or implied warranty\.'
.replaceAll(' ', _linebreak)
),
multiLine: true,
caseSensitive: false
),
// Seen in Android NDK
new RegExp(
kIndent +
r'Developed at (?:SunPro|SunSoft), a Sun Microsystems, Inc. business. *\n'
r'^\1\2Permission to use, copy, modify, and distribute this *\n'
r'^\1\2software is freely granted, provided that this notice *\n'
r'^\1\2is preserved.',
multiLine: true,
caseSensitive: false
),
// Seen in Android NDK (stlport)
new RegExp(
kIndent +
r'This material is provided "as is", with absolutely no warranty expressed *\n'
r'^\1\2or implied\. +Any use is at your own risk\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2Permission to use or copy this software for any purpose is hereby granted *\n'
r'^\1\2without fee, provided the above notices are retained on all copies\. *\n'
r'^\1\2Permission to modify the code and to distribute modified code is granted, *\n'
r'^\1\2provided the above notices are retained, and a notice that the code was *\n'
r'^\1\2modified is included with the above copyright notice\.',
multiLine: true,
caseSensitive: false
),
// freetype2.
new RegExp(
kIndent +
(
r'Permission to use, copy, modify, distribute, and sell this software and its '
r'documentation for any purpose is hereby granted without fee, provided that '
r'the above copyright notice appear in all copies and that both that '
r'copyright notice and this permission notice appear in supporting '
r'documentation\. '
r'The above copyright notice and this permission notice shall be included in '
r'all copies or substantial portions of the Software\. '
r'THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR '
r'IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, '
r'FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT\. IN NO EVENT SHALL THE '
r'OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN '
r'AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN '
r'CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE\. '
r'Except as contained in this notice, the name of The Open Group shall not be '
r'used in advertising or otherwise to promote the sale, use or other dealings '
r'in this Software without prior written authorization from The Open Group\. '
.replaceAll(' ', _linebreak)
),
multiLine: true,
caseSensitive: false
),
// TODO(ianh): File a bug on what happens if you replace the // with a #
// ICU
new RegExp(
kIndent +
r'This file is provided as-is by Unicode, Inc\. \(The Unicode Consortium\)\. *\n'
r'^\1\2No claims are made as to fitness for any particular purpose\. +No *\n'
r'^\1\2warranties of any kind are expressed or implied\. +The recipient *\n'
r'^\1\2agrees to determine applicability of information provided\. +If this *\n'
r'^\1\2file has been provided on optical media by Unicode, Inc\., the sole *\n'
r'^\1\2remedy for any claim will be exchange of defective media within 90 *\n'
r'^\1\2days of receipt\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2Unicode, Inc\. +hereby grants the right to freely use the information *\n'
r'^\1\2supplied in this file in the creation of products supporting the *\n'
r'^\1\2Unicode Standard, and to make copies of this file in any form for *\n'
r'^\1\2internal or external distribution as long as this notice remains *\n'
r'^\1\2attached\.',
multiLine: true,
caseSensitive: false
),
// OpenSSL
new RegExp(
kIndent +
r'The portions of the attached software \("Contribution"\) is developed by *\n'
r'^\1\2Nokia Corporation and is licensed pursuant to the OpenSSL open source *\n'
r'^\1\2license\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2The Contribution, originally written by Mika Kousa and Pasi Eronen of *\n'
r'^\1\2Nokia Corporation, consists of the "PSK" \(Pre-Shared Key\) ciphersuites *\n'
r'^\1\2support \(see RFC 4279\) to OpenSSL\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2No patent licenses or other rights except those expressly stated in *\n'
r'^\1\2the OpenSSL open source license shall be deemed granted or received *\n'
r'^\1\2expressly, by implication, estoppel, or otherwise\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2No assurances are provided by Nokia that the Contribution does not *\n'
r'^\1\2infringe the patent or other intellectual property rights of any third *\n'
r'^\1\2party or that the license provides you with all the necessary rights *\n'
r'^\1\2to make use of the Contribution\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND\. IN *\n'
r'^\1\2ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA *\n'
r'^\1\2SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY *\n'
r'^\1\2OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR *\n'
r'^\1\2OTHERWISE\.',
multiLine: true,
caseSensitive: false
),
];
final List<RegExp> csNotices = <RegExp>[
// used with _tryInline, with needsCopyright: false
// should have two groups, prefixes 1 and 2
new RegExp(
kIndent +
r'The Graphics Interchange Format\(c\) is the copyright property of CompuServe *\n'
r'^\1\2Incorporated\. +Only CompuServe Incorporated is authorized to define, redefine, *\n'
r'^\1\2enhance, alter, modify or change in any way the definition of the format\. *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2CompuServe Incorporated hereby grants a limited, non-exclusive, royalty-free *\n'
r'^\1\2license for the use of the Graphics Interchange Format\(sm\) in computer *\n'
r'^\1\2software; computer software utilizing GIF\(sm\) must acknowledge ownership of the *\n'
r'^\1\2Graphics Interchange Format and its Service Mark by CompuServe Incorporated, in *\n'
r'^\1\2User and Technical Documentation\. +Computer software utilizing GIF, which is *\n'
r'^\1\2distributed or may be distributed without User or Technical Documentation must *\n'
r'^\1\2display to the screen or printer a message acknowledging ownership of the *\n'
r'^\1\2Graphics Interchange Format and the Service Mark by CompuServe Incorporated; in *\n'
r'^\1\2this case, the acknowledgement may be displayed in an opening screen or leading *\n'
r'^\1\2banner, or a closing screen or trailing banner\. +A message such as the following *\n'
r'^\1\2may be used: *\n'
r'^(?:(?:\1\2? *)? *\n)*'
r'^\1\2 *"The Graphics Interchange Format\(c\) is the Copyright property of *\n'
r'^\1\2 *CompuServe Incorporated\. +GIF\(sm\) is a Service Mark property of *\n'
r'^\1\2 *CompuServe Incorporated\." *\n',
multiLine: true,
caseSensitive: false
),
// NSPR
// (Showing the entire block instead of the LGPL for this file is based
// on advice specifically regarding the prtime.cc file.)
new RegExp(
r'()()/\* Portions are Copyright \(C\) 2011 Google Inc \*/\n'
r'/\* \*\*\*\*\* BEGIN LICENSE BLOCK \*\*\*\*\*\n'
r' \* Version: MPL 1\.1/GPL 2\.0/LGPL 2\.1\n'
r' \*\n'
r' \* The contents of this file are subject to the Mozilla Public License Version\n'
r' \* 1\.1 \(the "License"\); you may not use this file except in compliance with\n'
r' \* the License\. +You may obtain a copy of the License at\n'
r' \* http://www\.mozilla\.org/MPL/\n'
r' \*\n'
r' \* Software distributed under the License is distributed on an "AS IS" basis,\n'
r' \* WITHOUT WARRANTY OF ANY KIND, either express or implied\. +See the License\n'
r' \* for the specific language governing rights and limitations under the\n'
r' \* License\.\n'
r' \*\n'
r' \* The Original Code is the Netscape Portable Runtime \(NSPR\)\.\n'
r' \*\n'
r' \* The Initial Developer of the Original Code is\n'
r' \* Netscape Communications Corporation\.\n'
r' \* Portions created by the Initial Developer are Copyright \(C\) 1998-2000\n'
r' \* the Initial Developer\. +All Rights Reserved\.\n'
r' \*\n'
r' \* Contributor\(s\):\n'
r' \*\n'
r' \* Alternatively, the contents of this file may be used under the terms of\n'
r' \* either the GNU General Public License Version 2 or later \(the "GPL"\), or\n'
r' \* the GNU Lesser General Public License Version 2\.1 or later \(the "LGPL"\),\n'
r' \* in which case the provisions of the GPL or the LGPL are applicable instead\n'
r' \* of those above\. +If you wish to allow use of your version of this file only\n'
r' \* under the terms of either the GPL or the LGPL, and not to allow others to\n'
r' \* use your version of this file under the terms of the MPL, indicate your\n'
r' \* decision by deleting the provisions above and replace them with the notice\n'
r' \* and other provisions required by the GPL or the LGPL\. +If you do not delete\n'
r' \* the provisions above, a recipient may use your version of this file under\n'
r' \* the terms of any one of the MPL, the GPL or the LGPL\.\n'
r' \*\n'
r' \* \*\*\*\*\* END LICENSE BLOCK \*\*\*\*\* \*/\n'
),
// Advice for this was "text verbatim".
new RegExp(
kIndent +
r'Copyright \(c\) 2015-2016 Khronos Group\. This work is licensed under a\n'
r'\1\2Creative Commons Attribution 4\.0 International License; see\n'
r'\1\2http://creativecommons\.org/licenses/by/4\.0/',
multiLine: true,
caseSensitive: false,
),
// by analogy to the above one
// seen in jsr305
new RegExp(
kIndent +
r'Copyright .+\n'
r'\1\2Released under the Creative Commons Attribution License\n'
r'\1\2 *\(?http://creativecommons\.org/licenses/by/2\.5/?\)?\n'
r'\1\2Official home: .+',
multiLine: true,
caseSensitive: false,
),
// Advice for this was "Just display its text as a politeness. Nothing else required".
new RegExp(
r'()()/\* mdXhl\.c \* ----------------------------------------------------------------------------\n'
r' \* "THE BEER-WARE LICENSE" \(Revision 42\):\n'
r' \* <phk@FreeBSD\.org> wrote this file\. +As long as you retain this notice you\n'
r' \* can do whatever you want with this stuff\. If we meet some day, and you think\n'
r' \* this stuff is worth it, you can buy me a beer in return\. +Poul-Henning Kamp\n'
r' \* ----------------------------------------------------------------------------\n'
r' \* libjpeg-turbo Modifications:\n'
r' \* Copyright \(C\) 2016, D\. R\. Commander\.?\n'
r' \* Modifications are under the same license as the original code \(see above\)\n'
r' \* ----------------------------------------------------------------------------'
),
];
// FALLBACK PATTERNS
final List<RegExp> csFallbacks = <RegExp>[
// used with _tryNone
// groups are ignored
];
// FORWARD REFERENCE
class ForwardReferencePattern {
ForwardReferencePattern({ this.firstPrefixIndex, this.indentPrefixIndex, this.pattern, this.targetPattern });
final int firstPrefixIndex;
final int indentPrefixIndex;
final RegExp pattern;
final RegExp targetPattern;
}
final List<ForwardReferencePattern> csForwardReferenceLicenses = <ForwardReferencePattern>[
// used with _tryForwardReferencePattern
// OpenSSL (in Dart third_party)
new ForwardReferencePattern(
firstPrefixIndex: 1,
indentPrefixIndex: 2,
pattern: new RegExp(
kIndent + r'(?:'
+
(
r'Portions of the attached software \("Contribution"\) are developed by .+ and are contributed to the OpenSSL project\.'
.replaceAll(' ', _linebreak)
)
+
r'|'
+
(
r'The .+ included herein is developed by .+, and is contributed to the OpenSSL project\.'
.replaceAll(' ', _linebreak)
)
+
r'|'
r'(?:(?:\1\2? *)? *\n)*'
r')*'
r'\1\2 *'
+
(
r'The .+ is licensed pursuant to the OpenSSL open source license provided (?:below|above)\.'
.replaceAll(' ', _linebreak)
),
multiLine: true,
caseSensitive: false,
),
targetPattern: new RegExp('Redistribution and use in source and binary forms(?:.|\n)+OpenSSL')
),
// libevent
new ForwardReferencePattern(
firstPrefixIndex: 1,
indentPrefixIndex: 2,
pattern: new RegExp(
kIndent + r'Use is subject to license terms\.$',
multiLine: true,
caseSensitive: false,
),
targetPattern: new RegExp('Redistribution and use in source and binary forms(?:.|\n)+SUN MICROSYSTEMS')
),
];