summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Hughes <richard@hughsie.com>2018-03-08 14:04:43 +0000
committerRichard Hughes <richard@hughsie.com>2018-03-08 14:06:51 +0000
commitcdad22c5fdc6579ea6aeccf67372e81372e857b1 (patch)
treed6a472f7330a48871ebece3ca198d4bc9fac105c
parentce6837563ecfd4b480256aeadd3607f2c1f5a420 (diff)
downloadappstream-glib-cdad22c5fdc6579ea6aeccf67372e81372e857b1.tar.gz
Update the SPDX license list to v3.0
The SPDX team have decided to rename quite a few common tags (with the '-only' and '-or-later') suffixes and this unfortunately breaks the world. Convert the new-style v3 style IDs to the v2 style and thus accept both forms. Fixes https://github.com/hughsie/appstream-glib/issues/225
-rw-r--r--libappstream-glib/as-license-ids.txt246
-rw-r--r--libappstream-glib/as-self-test.c7
-rw-r--r--libappstream-glib/as-utils.c27
3 files changed, 164 insertions, 116 deletions
diff --git a/libappstream-glib/as-license-ids.txt b/libappstream-glib/as-license-ids.txt
index 794751e..aac4b08 100644
--- a/libappstream-glib/as-license-ids.txt
+++ b/libappstream-glib/as-license-ids.txt
@@ -1,87 +1,69 @@
-# the list of licenses from http://spdx.org/licenses/ version: 2.6
-Glide
+# the list of licenses from http://spdx.org/licenses/ version: 3.0
+0BSD
+AAL
Abstyles
+Adobe-2006
+Adobe-Glyph
+ADSL
AFL-1.1
AFL-1.2
AFL-2.0
AFL-2.1
AFL-3.0
-AMPAS
-APL-1.0
-Adobe-Glyph
-APAFML
-Adobe-2006
-AGPL-1.0
Afmparse
+AGPL-1.0
+AGPL-3.0-only
+AGPL-3.0-or-later
Aladdin
-ADSL
AMDPLPA
+AML
+AMPAS
ANTLR-PD
Apache-1.0
Apache-1.1
Apache-2.0
-AML
+APAFML
+APL-1.0
APSL-1.0
APSL-1.1
APSL-1.2
APSL-2.0
-Artistic-1.0
-Artistic-1.0-Perl
Artistic-1.0-cl8
+Artistic-1.0-Perl
+Artistic-1.0
Artistic-2.0
-AAL
Bahyph
Barr
Beerware
BitTorrent-1.0
BitTorrent-1.1
-BSL-1.0
Borceux
-BSD-2-Clause
+BSD-1-Clause
BSD-2-Clause-FreeBSD
BSD-2-Clause-NetBSD
-BSD-3-Clause
+BSD-2-Clause-Patent
+BSD-2-Clause
+BSD-3-Clause-Attribution
BSD-3-Clause-Clear
-BSD-3-Clause-No-Nuclear-License
+BSD-3-Clause-LBNL
BSD-3-Clause-No-Nuclear-License-2014
+BSD-3-Clause-No-Nuclear-License
BSD-3-Clause-No-Nuclear-Warranty
+BSD-3-Clause
+BSD-4-Clause-UC
BSD-4-Clause
BSD-Protection
BSD-Source-Code
-BSD-3-Clause-Attribution
-0BSD
-BSD-4-Clause-UC
+BSL-1.0
bzip2-1.0.5
bzip2-1.0.6
Caldera
-CECILL-1.0
-CECILL-1.1
-CECILL-2.0
-CECILL-2.1
-CECILL-B
-CECILL-C
-ClArtistic
-MIT-CMU
-CNRI-Jython
-CNRI-Python
-CNRI-Python-GPL-Compatible
-CPOL-1.02
-CDDL-1.0
-CDDL-1.1
-CPAL-1.0
-CPL-1.0
CATOSL-1.1
-Condor-1.1
CC-BY-1.0
CC-BY-2.0
CC-BY-2.5
CC-BY-3.0
CC-BY-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-NC-1.0
CC-BY-NC-2.0
CC-BY-NC-2.5
@@ -97,12 +79,35 @@ 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
+ClArtistic
+CNRI-Jython
+CNRI-Python-GPL-Compatible
+CNRI-Python
+Condor-1.1
+CPAL-1.0
+CPL-1.0
+CPOL-1.02
Crossword
CrystalStacker
CUA-OPL-1.0
@@ -110,131 +115,142 @@ Cube
curl
D-FSL-1.0
diffmark
-WTFPL
DOC
Dotseqn
DSDP
dvipdfm
-EPL-1.0
ECL-1.0
ECL-2.0
-eGenix
EFL-1.0
EFL-2.0
-MIT-advertising
-MIT-enna
+eGenix
Entessa
+EPL-1.0
+EPL-2.0
ErlPL-1.1
EUDatagrid
EUPL-1.0
EUPL-1.1
+EUPL-1.2
Eurosym
Fair
-MIT-feh
Frameworx-1.0
FreeImage
-FTL
FSFAP
FSFUL
FSFULLR
+FTL
+GFDL-1.1-only
+GFDL-1.1-or-later
+GFDL-1.2-only
+GFDL-1.2-or-later
+GFDL-1.3-only
+GFDL-1.3-or-later
Giftware
GL2PS
+Glide
Glulxe
-AGPL-3.0
-GFDL-1.1
-GFDL-1.2
-GFDL-1.3
-GPL-1.0
-GPL-2.0
-GPL-3.0
-LGPL-2.1
-LGPL-3.0
-LGPL-2.0
gnuplot
+GPL-1.0-only
+GPL-1.0-or-later
+GPL-2.0-only
+GPL-2.0-or-later
+GPL-3.0-only
+GPL-3.0-or-later
gSOAP-1.3b
HaskellReport
HPND
IBM-pibs
-IPL-1.0
ICU
+IJG
ImageMagick
iMatix
Imlib2
-IJG
Info-ZIP
Intel-ACPI
Intel
Interbase-1.0
IPA
+IPL-1.0
ISC
JasPer-2.0
JSON
-LPPL-1.0
-LPPL-1.1
-LPPL-1.2
-LPPL-1.3a
-LPPL-1.3c
+LAL-1.2
+LAL-1.3
Latex2e
-BSD-3-Clause-LBNL
Leptonica
+LGPL-2.0-only
+LGPL-2.0-or-later
+LGPL-2.1-only
+LGPL-2.1-or-later
+LGPL-3.0-only
+LGPL-3.0-or-later
LGPLLR
Libpng
libtiff
-LAL-1.2
-LAL-1.3
LiLiQ-P-1.1
-LiLiQ-Rplus-1.1
LiLiQ-R-1.1
-LPL-1.02
+LiLiQ-Rplus-1.1
LPL-1.0
+LPL-1.02
+LPPL-1.0
+LPPL-1.1
+LPPL-1.2
+LPPL-1.3a
+LPPL-1.3c
MakeIndex
-MTLL
-MS-PL
-MS-RL
MirOS
-MITNFA
+MIT-advertising
+MIT-CMU
+MIT-enna
+MIT-feh
MIT
+MITNFA
Motosoto
+mpich2
MPL-1.0
MPL-1.1
-MPL-2.0
MPL-2.0-no-copyleft-exception
-mpich2
+MPL-2.0
+MS-PL
+MS-RL
+MTLL
Multics
Mup
NASA-1.3
Naumen
NBPL-1.0
+NCSA
Net-SNMP
NetCDF
+Newsletr
NGPL
+NLOD-1.0
+NLPL
+Nokia
NOSL
+Noweb
NPL-1.0
NPL-1.1
-Newsletr
-NLPL
-Nokia
NPOSL-3.0
-NLOD-1.0
-Noweb
NRL
NTP
-Nunit
+OCCT-PL
OCLC-2.0
ODbL-1.0
-PDDL-1.0
-OCCT-PL
+OFL-1.0
+OFL-1.1
OGTSL
-OLDAP-2.2.2
OLDAP-1.1
OLDAP-1.2
OLDAP-1.3
OLDAP-1.4
-OLDAP-2.0
OLDAP-2.0.1
+OLDAP-2.0
OLDAP-2.1
-OLDAP-2.2
OLDAP-2.2.1
+OLDAP-2.2.2
+OLDAP-2.2
OLDAP-2.3
OLDAP-2.4
OLDAP-2.5
@@ -242,14 +258,15 @@ OLDAP-2.6
OLDAP-2.7
OLDAP-2.8
OML
+OpenSSL
OPL-1.0
+OSET-PL-2.1
OSL-1.0
OSL-1.1
OSL-2.0
OSL-2.1
OSL-3.0
-OpenSSL
-OSET-PL-2.1
+PDDL-1.0
PHP-3.0
PHP-3.01
Plexus
@@ -257,62 +274,60 @@ PostgreSQL
psfrag
psutils
Python-2.0
-QPL-1.0
Qhull
+QPL-1.0
Rdisc
-RPSL-1.0
+RHeCos-1.1
RPL-1.1
RPL-1.5
-RHeCos-1.1
-RSCPL
+RPSL-1.0
RSA-MD
+RSCPL
Ruby
SAX-PD
Saxpath
SCEA
-SWL
-SMPPL
Sendmail
SGI-B-1.0
SGI-B-1.1
SGI-B-2.0
-OFL-1.0
-OFL-1.1
SimPL-2.0
+SISSL-1.2
+SISSL
Sleepycat
+SMLNJ
+SMPPL
SNIA
Spencer-86
Spencer-94
Spencer-99
-SMLNJ
-SugarCRM-1.1.3
-SISSL
-SISSL-1.2
SPL-1.0
-Watcom-1.0
+SugarCRM-1.1.3
+SWL
TCL
TCP-wrappers
-Unlicense
TMate
TORQUE-1.1
TOSL
Unicode-DFS-2015
Unicode-DFS-2016
Unicode-TOU
+Unlicense
UPL-1.0
-NCSA
Vim
VOSTROM
VSL-1.0
-W3C-20150513
W3C-19980720
+W3C-20150513
W3C
+Watcom-1.0
Wsuipa
-Xnet
+WTFPL
X11
Xerox
XFree86-1.1
xinetd
+Xnet
xpp
XSkat
YPL-1.0
@@ -321,24 +336,35 @@ Zed
Zend-2.0
Zimbra-1.3
Zimbra-1.4
-Zlib
zlib-acknowledgement
+Zlib
ZPL-1.1
ZPL-2.0
ZPL-2.1
+AGPL-3.0
eCos-2.0
+GFDL-1.1
+GFDL-1.2
+GFDL-1.3
GPL-1.0+
+GPL-1.0
GPL-2.0+
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-2.0-with-GCC-exception
+GPL-2.0
GPL-3.0+
GPL-3.0-with-autoconf-exception
GPL-3.0-with-GCC-exception
+GPL-3.0
+LGPL-2.0+
+LGPL-2.0
LGPL-2.1+
+LGPL-2.1
LGPL-3.0+
-LGPL-2.0+
+LGPL-3.0
+Nunit
StandardML-NJ
-WXwindows
+wxWindows
diff --git a/libappstream-glib/as-self-test.c b/libappstream-glib/as-self-test.c
index d5fa597..a6edd49 100644
--- a/libappstream-glib/as-self-test.c
+++ b/libappstream-glib/as-self-test.c
@@ -4386,6 +4386,13 @@ as_test_utils_spdx_token_func (void)
g_strfreev (tok);
g_free (tmp);
+ /* multiple licences, using the new style */
+ tok = as_utils_spdx_license_tokenize ("LGPL-2.0-or-later AND GPL-2.0-only");
+ tmp = g_strjoinv (" ", tok);
+ g_assert_cmpstr (tmp, ==, "@LGPL-2.0+ & @GPL-2.0");
+ g_strfreev (tok);
+ g_free (tmp);
+
/* multiple licences, deprectated 'and' & 'or' */
tok = as_utils_spdx_license_tokenize ("LGPL-2.0+ and GPL-2.0 or LGPL-3.0");
tmp = g_strjoinv (" ", tok);
diff --git a/libappstream-glib/as-utils.c b/libappstream-glib/as-utils.c
index 5526a2d..5516eca 100644
--- a/libappstream-glib/as-utils.c
+++ b/libappstream-glib/as-utils.c
@@ -394,6 +394,17 @@ as_utils_spdx_license_tokenize_drop (AsUtilsSpdxHelper *helper)
g_string_truncate (helper->collect, 0);
}
+/* SPDX decided to rename some of the really common license IDs in v3
+ * which broke a lot of tools that we cannot really fix now */
+static gchar *
+as_utils_spdx_license_3to2 (const gchar *license3)
+{
+ GString *license2 = g_string_new (license3);
+ as_utils_string_replace (license2, "-only", "");
+ as_utils_string_replace (license2, "-or-later", "+");
+ return license2;
+}
+
/**
* as_utils_spdx_license_tokenize:
* @license: a license string, e.g. "LGPLv2+ and (QPL or GPLv2) and MIT"
@@ -411,32 +422,36 @@ as_utils_spdx_license_tokenize_drop (AsUtilsSpdxHelper *helper)
gchar **
as_utils_spdx_license_tokenize (const gchar *license)
{
- guint i;
AsUtilsSpdxHelper helper;
+ g_autoptr(GString) license2 = NULL;
/* handle invalid */
if (license == NULL)
return NULL;
+ /* SPDX broke the world with v3 */
+ license2 = as_utils_spdx_license_3to2 (license);
+
helper.last_token_literal = FALSE;
helper.collect = g_string_new ("");
helper.array = g_ptr_array_new_with_free_func (g_free);
- for (i = 0; license[i] != '\0'; i++) {
+ for (guint i = 0; i < license2->len; i++) {
/* handle brackets */
- if (license[i] == '(' || license[i] == ')') {
+ const gchar tmp = license2->str[i];
+ if (tmp == '(' || tmp == ')') {
as_utils_spdx_license_tokenize_drop (&helper);
- g_ptr_array_add (helper.array, g_strdup_printf ("%c", license[i]));
+ g_ptr_array_add (helper.array, g_strdup_printf ("%c", tmp));
helper.last_token_literal = FALSE;
continue;
}
/* space, so dump queue */
- if (license[i] == ' ') {
+ if (tmp == ' ') {
as_utils_spdx_license_tokenize_drop (&helper);
continue;
}
- g_string_append_c (helper.collect, license[i]);
+ g_string_append_c (helper.collect, tmp);
}
/* dump anything remaining */