mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
b717f73402
31a6eaabc1
is obsoleted with
https://github.com/rubygems/rubygems/pull/3820
437 lines
6.7 KiB
Ruby
437 lines
6.7 KiB
Ruby
# frozen_string_literal: true
|
|
require 'rubygems/text'
|
|
|
|
class Gem::Licenses
|
|
extend Gem::Text
|
|
|
|
NONSTANDARD = 'Nonstandard'.freeze
|
|
|
|
# Software Package Data Exchange (SPDX) standard open-source software
|
|
# license identifiers
|
|
LICENSE_IDENTIFIERS = %w[
|
|
0BSD
|
|
AAL
|
|
ADSL
|
|
AFL-1.1
|
|
AFL-1.2
|
|
AFL-2.0
|
|
AFL-2.1
|
|
AFL-3.0
|
|
AGPL-1.0
|
|
AGPL-3.0
|
|
AGPL-3.0-only
|
|
AGPL-3.0-or-later
|
|
AMDPLPA
|
|
AML
|
|
AMPAS
|
|
ANTLR-PD
|
|
APAFML
|
|
APL-1.0
|
|
APSL-1.0
|
|
APSL-1.1
|
|
APSL-1.2
|
|
APSL-2.0
|
|
Abstyles
|
|
Adobe-2006
|
|
Adobe-Glyph
|
|
Afmparse
|
|
Aladdin
|
|
Apache-1.0
|
|
Apache-1.1
|
|
Apache-2.0
|
|
Artistic-1.0
|
|
Artistic-1.0-Perl
|
|
Artistic-1.0-cl8
|
|
Artistic-2.0
|
|
BSD-1-Clause
|
|
BSD-2-Clause
|
|
BSD-2-Clause-FreeBSD
|
|
BSD-2-Clause-NetBSD
|
|
BSD-2-Clause-Patent
|
|
BSD-3-Clause
|
|
BSD-3-Clause-Attribution
|
|
BSD-3-Clause-Clear
|
|
BSD-3-Clause-LBNL
|
|
BSD-3-Clause-No-Nuclear-License
|
|
BSD-3-Clause-No-Nuclear-License-2014
|
|
BSD-3-Clause-No-Nuclear-Warranty
|
|
BSD-4-Clause
|
|
BSD-4-Clause-UC
|
|
BSD-Protection
|
|
BSD-Source-Code
|
|
BSL-1.0
|
|
Bahyph
|
|
Barr
|
|
Beerware
|
|
BitTorrent-1.0
|
|
BitTorrent-1.1
|
|
Borceux
|
|
CATOSL-1.1
|
|
CC-BY-1.0
|
|
CC-BY-2.0
|
|
CC-BY-2.5
|
|
CC-BY-3.0
|
|
CC-BY-4.0
|
|
CC-BY-NC-1.0
|
|
CC-BY-NC-2.0
|
|
CC-BY-NC-2.5
|
|
CC-BY-NC-3.0
|
|
CC-BY-NC-4.0
|
|
CC-BY-NC-ND-1.0
|
|
CC-BY-NC-ND-2.0
|
|
CC-BY-NC-ND-2.5
|
|
CC-BY-NC-ND-3.0
|
|
CC-BY-NC-ND-4.0
|
|
CC-BY-NC-SA-1.0
|
|
CC-BY-NC-SA-2.0
|
|
CC-BY-NC-SA-2.5
|
|
CC-BY-NC-SA-3.0
|
|
CC-BY-NC-SA-4.0
|
|
CC-BY-ND-1.0
|
|
CC-BY-ND-2.0
|
|
CC-BY-ND-2.5
|
|
CC-BY-ND-3.0
|
|
CC-BY-ND-4.0
|
|
CC-BY-SA-1.0
|
|
CC-BY-SA-2.0
|
|
CC-BY-SA-2.5
|
|
CC-BY-SA-3.0
|
|
CC-BY-SA-4.0
|
|
CC0-1.0
|
|
CDDL-1.0
|
|
CDDL-1.1
|
|
CDLA-Permissive-1.0
|
|
CDLA-Sharing-1.0
|
|
CECILL-1.0
|
|
CECILL-1.1
|
|
CECILL-2.0
|
|
CECILL-2.1
|
|
CECILL-B
|
|
CECILL-C
|
|
CNRI-Jython
|
|
CNRI-Python
|
|
CNRI-Python-GPL-Compatible
|
|
CPAL-1.0
|
|
CPL-1.0
|
|
CPOL-1.02
|
|
CUA-OPL-1.0
|
|
Caldera
|
|
ClArtistic
|
|
Condor-1.1
|
|
Crossword
|
|
CrystalStacker
|
|
Cube
|
|
D-FSL-1.0
|
|
DOC
|
|
DSDP
|
|
Dotseqn
|
|
ECL-1.0
|
|
ECL-2.0
|
|
EFL-1.0
|
|
EFL-2.0
|
|
EPL-1.0
|
|
EPL-2.0
|
|
EUDatagrid
|
|
EUPL-1.0
|
|
EUPL-1.1
|
|
EUPL-1.2
|
|
Entessa
|
|
ErlPL-1.1
|
|
Eurosym
|
|
FSFAP
|
|
FSFUL
|
|
FSFULLR
|
|
FTL
|
|
Fair
|
|
Frameworx-1.0
|
|
FreeImage
|
|
GFDL-1.1
|
|
GFDL-1.1-only
|
|
GFDL-1.1-or-later
|
|
GFDL-1.2
|
|
GFDL-1.2-only
|
|
GFDL-1.2-or-later
|
|
GFDL-1.3
|
|
GFDL-1.3-only
|
|
GFDL-1.3-or-later
|
|
GL2PS
|
|
GPL-1.0
|
|
GPL-1.0+
|
|
GPL-1.0-only
|
|
GPL-1.0-or-later
|
|
GPL-2.0
|
|
GPL-2.0+
|
|
GPL-2.0-only
|
|
GPL-2.0-or-later
|
|
GPL-2.0-with-GCC-exception
|
|
GPL-2.0-with-autoconf-exception
|
|
GPL-2.0-with-bison-exception
|
|
GPL-2.0-with-classpath-exception
|
|
GPL-2.0-with-font-exception
|
|
GPL-3.0
|
|
GPL-3.0+
|
|
GPL-3.0-only
|
|
GPL-3.0-or-later
|
|
GPL-3.0-with-GCC-exception
|
|
GPL-3.0-with-autoconf-exception
|
|
Giftware
|
|
Glide
|
|
Glulxe
|
|
HPND
|
|
HaskellReport
|
|
IBM-pibs
|
|
ICU
|
|
IJG
|
|
IPA
|
|
IPL-1.0
|
|
ISC
|
|
ImageMagick
|
|
Imlib2
|
|
Info-ZIP
|
|
Intel
|
|
Intel-ACPI
|
|
Interbase-1.0
|
|
JSON
|
|
JasPer-2.0
|
|
LAL-1.2
|
|
LAL-1.3
|
|
LGPL-2.0
|
|
LGPL-2.0+
|
|
LGPL-2.0-only
|
|
LGPL-2.0-or-later
|
|
LGPL-2.1
|
|
LGPL-2.1+
|
|
LGPL-2.1-only
|
|
LGPL-2.1-or-later
|
|
LGPL-3.0
|
|
LGPL-3.0+
|
|
LGPL-3.0-only
|
|
LGPL-3.0-or-later
|
|
LGPLLR
|
|
LPL-1.0
|
|
LPL-1.02
|
|
LPPL-1.0
|
|
LPPL-1.1
|
|
LPPL-1.2
|
|
LPPL-1.3a
|
|
LPPL-1.3c
|
|
Latex2e
|
|
Leptonica
|
|
LiLiQ-P-1.1
|
|
LiLiQ-R-1.1
|
|
LiLiQ-Rplus-1.1
|
|
Libpng
|
|
MIT
|
|
MIT-CMU
|
|
MIT-advertising
|
|
MIT-enna
|
|
MIT-feh
|
|
MITNFA
|
|
MPL-1.0
|
|
MPL-1.1
|
|
MPL-2.0
|
|
MPL-2.0-no-copyleft-exception
|
|
MS-PL
|
|
MS-RL
|
|
MTLL
|
|
MakeIndex
|
|
MirOS
|
|
Motosoto
|
|
Multics
|
|
Mup
|
|
NASA-1.3
|
|
NBPL-1.0
|
|
NCSA
|
|
NGPL
|
|
NLOD-1.0
|
|
NLPL
|
|
NOSL
|
|
NPL-1.0
|
|
NPL-1.1
|
|
NPOSL-3.0
|
|
NRL
|
|
NTP
|
|
Naumen
|
|
Net-SNMP
|
|
NetCDF
|
|
Newsletr
|
|
Nokia
|
|
Noweb
|
|
Nunit
|
|
OCCT-PL
|
|
OCLC-2.0
|
|
ODbL-1.0
|
|
OFL-1.0
|
|
OFL-1.1
|
|
OGTSL
|
|
OLDAP-1.1
|
|
OLDAP-1.2
|
|
OLDAP-1.3
|
|
OLDAP-1.4
|
|
OLDAP-2.0
|
|
OLDAP-2.0.1
|
|
OLDAP-2.1
|
|
OLDAP-2.2
|
|
OLDAP-2.2.1
|
|
OLDAP-2.2.2
|
|
OLDAP-2.3
|
|
OLDAP-2.4
|
|
OLDAP-2.5
|
|
OLDAP-2.6
|
|
OLDAP-2.7
|
|
OLDAP-2.8
|
|
OML
|
|
OPL-1.0
|
|
OSET-PL-2.1
|
|
OSL-1.0
|
|
OSL-1.1
|
|
OSL-2.0
|
|
OSL-2.1
|
|
OSL-3.0
|
|
OpenSSL
|
|
PDDL-1.0
|
|
PHP-3.0
|
|
PHP-3.01
|
|
Plexus
|
|
PostgreSQL
|
|
Python-2.0
|
|
QPL-1.0
|
|
Qhull
|
|
RHeCos-1.1
|
|
RPL-1.1
|
|
RPL-1.5
|
|
RPSL-1.0
|
|
RSA-MD
|
|
RSCPL
|
|
Rdisc
|
|
Ruby
|
|
SAX-PD
|
|
SCEA
|
|
SGI-B-1.0
|
|
SGI-B-1.1
|
|
SGI-B-2.0
|
|
SISSL
|
|
SISSL-1.2
|
|
SMLNJ
|
|
SMPPL
|
|
SNIA
|
|
SPL-1.0
|
|
SWL
|
|
Saxpath
|
|
Sendmail
|
|
SimPL-2.0
|
|
Sleepycat
|
|
Spencer-86
|
|
Spencer-94
|
|
Spencer-99
|
|
StandardML-NJ
|
|
SugarCRM-1.1.3
|
|
TCL
|
|
TCP-wrappers
|
|
TMate
|
|
TORQUE-1.1
|
|
TOSL
|
|
UPL-1.0
|
|
Unicode-DFS-2015
|
|
Unicode-DFS-2016
|
|
Unicode-TOU
|
|
Unlicense
|
|
VOSTROM
|
|
VSL-1.0
|
|
Vim
|
|
W3C
|
|
W3C-19980720
|
|
W3C-20150513
|
|
WTFPL
|
|
Watcom-1.0
|
|
Wsuipa
|
|
X11
|
|
XFree86-1.1
|
|
XSkat
|
|
Xerox
|
|
Xnet
|
|
YPL-1.0
|
|
YPL-1.1
|
|
ZPL-1.1
|
|
ZPL-2.0
|
|
ZPL-2.1
|
|
Zed
|
|
Zend-2.0
|
|
Zimbra-1.3
|
|
Zimbra-1.4
|
|
Zlib
|
|
bzip2-1.0.5
|
|
bzip2-1.0.6
|
|
curl
|
|
diffmark
|
|
dvipdfm
|
|
eCos-2.0
|
|
eGenix
|
|
gSOAP-1.3b
|
|
gnuplot
|
|
iMatix
|
|
libtiff
|
|
mpich2
|
|
psfrag
|
|
psutils
|
|
wxWindows
|
|
xinetd
|
|
xpp
|
|
zlib-acknowledgement
|
|
].freeze
|
|
|
|
# exception identifiers
|
|
EXCEPTION_IDENTIFIERS = %w[
|
|
389-exception
|
|
Autoconf-exception-2.0
|
|
Autoconf-exception-3.0
|
|
Bison-exception-2.2
|
|
Bootloader-exception
|
|
CLISP-exception-2.0
|
|
Classpath-exception-2.0
|
|
DigiRule-FOSS-exception
|
|
FLTK-exception
|
|
Fawkes-Runtime-exception
|
|
Font-exception-2.0
|
|
GCC-exception-2.0
|
|
GCC-exception-3.1
|
|
LZMA-exception
|
|
Libtool-exception
|
|
Linux-syscall-note
|
|
Nokia-Qt-exception-1.1
|
|
OCCT-exception-1.0
|
|
Qwt-exception-1.0
|
|
WxWindows-exception-3.1
|
|
eCos-exception-2.0
|
|
freertos-exception-2.0
|
|
gnu-javamail-exception
|
|
i2p-gpl-java-exception
|
|
mif-exception
|
|
openvpn-openssl-exception
|
|
u-boot-exception-2.0
|
|
].freeze
|
|
|
|
REGEXP = %r{
|
|
\A
|
|
(
|
|
#{Regexp.union(LICENSE_IDENTIFIERS)}
|
|
\+?
|
|
(\s WITH \s #{Regexp.union(EXCEPTION_IDENTIFIERS)})?
|
|
| #{NONSTANDARD}
|
|
)
|
|
\Z
|
|
}ox.freeze
|
|
|
|
def self.match?(license)
|
|
!REGEXP.match(license).nil?
|
|
end
|
|
|
|
def self.suggestions(license)
|
|
by_distance = LICENSE_IDENTIFIERS.group_by do |identifier|
|
|
levenshtein_distance(identifier, license)
|
|
end
|
|
lowest = by_distance.keys.min
|
|
return unless lowest < license.size
|
|
by_distance[lowest]
|
|
end
|
|
end
|