X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=tools%2Fccanlint%2Flicenses.c;h=ca8bc73d0d58e0be508ab6e5f4cc5352a0af1072;hp=962412ccd8ef09f00f71c9e6a775e68b58595dd4;hb=2ea90b45cf37292aba7c81b34736661c080497de;hpb=77818c1729ed1dc68b7b99a6def6ac534a0da07c diff --git a/tools/ccanlint/licenses.c b/tools/ccanlint/licenses.c index 962412cc..ca8bc73d 100644 --- a/tools/ccanlint/licenses.c +++ b/tools/ccanlint/licenses.c @@ -1,107 +1,133 @@ #include "licenses.h" #include "ccanlint.h" -#include #include -#include +#include +#include const struct license_info licenses[] = { { "LGPLv2+", "LGPL", + "GNU LGPL version 2 (or later)", { "gnu lesser general public license", "version 2", "or at your option any later version" } }, { "LGPLv2", "LGPL", + "GNU LGPL version 2", { "gnu lesser general public license", "version 2", NULL } }, { "LGPLv3", "LGPL", + "GNU LGPL version 3", { "gnu lesser general public license", "version 3", NULL } }, { "LGPL", "LGPL", + "GNU LGPL", { "gnu lesser general public license", NULL, NULL } }, { "GPLv2+", "GPL", + "GNU GPL version 2 (or later)", { "gnu general public license", "version 2", "or at your option any later version" } }, { "GPLv2", "GPL", + "GNU GPL version 2", { "gnu general public license", "version 2", NULL } }, { "GPLv3", "GPL", + "GNU GPL version 3 (or later)", { "gnu general public license", "version 3", NULL } }, { "GPL", "GPL", + "GNU GPL", { "gnu general public license", NULL, NULL } }, { "BSD-3CLAUSE", "BSD", + "3-clause BSD license", { "redistributions of source code must retain", "redistributions in binary form must reproduce", "endorse or promote" } }, { "BSD-MIT", "MIT", + "MIT (BSD) license", { "without restriction", "above copyright notice", "without warranty" } }, + { "CC0", "CC0", + "CC0 license (public domain)", + { "Waiver.", + "unconditionally waives", + NULL + } + }, { "Public domain", "Public domain", + NULL, { NULL, NULL, NULL } }, { "Unknown license", "Unknown license", + NULL, { NULL, NULL, NULL } }, }; /* License compatibilty chart (simplified: we don't test that licenses between * files are compatible). */ +#define O true +#define X false bool license_compatible[LICENSE_UNKNOWN+1][LICENSE_UNKNOWN] = { -/* LGPL2+ LGPL2 LGPL3 LGPL GPL2+ GPL2 GPL3 GPL BSD MIT PD */ +/* LGPL2+ LGPL3 GPL2+ GPL3 BSD CC0 + LGPL2 LGPL GPL2 GPL MIT PD */ /* _info says: LGPL2+ */ - { true, false,false,true, false,false,false,false,true, true, true }, + { O, X, X, O, X, X, X, X, O, O, O, O }, /* _info says: LGPL2 only */ - { true, true, false,true, false,false,false,false,true, true, true }, + { O, O, X, O, X, X, X, X, O, O, O, O }, /* _info says: LGPL3 (or any later version) */ - { true, false,true, true, false,false,false,false,true, true, true }, + { O, X, O, O, X, X, X, X, O, O, O, O }, /* _info says: LGPL (no version specified) */ - { true, true, true, true, false,false,false,false,true, true, true }, + { O, O, O, O, X, X, X, X, O, O, O, O }, /* _info says: GPL2+ */ - { true, true, true, true, true, false,false,true, true, true, true }, + { O, O, O, O, O, X, X, O, O, O, O, O }, /* _info says: GPL2 only */ - { true, true, true, true, true, true, false,true, true, true, true }, + { O, O, O, O, O, O, X, O, O, O, O, O }, /* _info says: GPL3 (or any later version) */ - { true, true, true, true, true, false,true, true, true, true, true }, + { O, O, O, O, O, X, O, O, O, O, O, O }, /* _info says: GPL (unknown version) */ - { true, true, true, true, true, true, true, true, true, true, true }, + { O, O, O, O, O, O, O, O, O, O, O, O }, /* _info says: BSD (3-clause) */ - { false,false,false,false,false,false,false,false,true, true, true }, + { X, X, X, X, X, X, X, X, O, O, O, O }, /* _info says: MIT */ - { false,false,false,false,false,false,false,false,false,true, true }, + { X, X, X, X, X, X, X, X, X, O, O, O }, +/* _info says: CC0 */ + { X, X, X, X, X, X, X, X, X, X, O, O }, /* _info says: Public domain */ - { false,false,false,false,false,false,false,false,false,false,true }, + { X, X, X, X, X, X, X, X, X, X, O, O }, /* _info says something we don't understand */ - { false,false,false,false,false,false,false,false,false,false,true } + { X, X, X, X, X, X, X, X, X, X, O, O } }; +#undef X +#undef O /* See GPLv2 and v2 (basically same wording) for interpreting versions: * the "any later version" means the recepient can choose. */ @@ -140,7 +166,12 @@ enum license which_license(struct doc_section *d) return LICENSE_MIT; if (streq(d->lines[0], "BSD (3 clause)")) return LICENSE_BSD; - if (strreg(NULL, d->lines[0], "[Pp]ublic [Dd]omain")) + if (streq(d->lines[0], "CC0")) + return LICENSE_CC0; + if (tal_strreg(NULL, d->lines[0], "CC0 \\([Pp]ublic [Dd]omain\\)", + NULL)) + return LICENSE_CC0; + if (tal_strreg(NULL, d->lines[0], "[Pp]ublic [Dd]omain")) return LICENSE_PUBLIC_DOMAIN; return LICENSE_UNKNOWN; @@ -152,7 +183,7 @@ const char *get_ccan_simplified(struct ccan_file *f) unsigned int i, j; /* Simplify for easy matching: only alnum and single spaces. */ - f->simplified = talloc_strdup(f, get_ccan_file_contents(f)); + f->simplified = tal_strdup(f, get_ccan_file_contents(f)); for (i = 0, j = 0; f->simplified[i]; i++) { if (cisupper(f->simplified[i])) f->simplified[j++] = tolower(f->simplified[i]); @@ -191,10 +222,16 @@ struct doc_section *find_license_tag(const struct manifest *m) struct doc_section *d; list_for_each(get_ccan_file_docs(m->info_file), d, list) { - if (!streq(d->function, m->basename)) + if (!streq(d->function, m->modname)) continue; if (streq(d->type, "license")) return d; } return NULL; } + +const char *get_license_oneliner(const tal_t *ctx, enum license license) +{ + return tal_fmt(ctx, "/* %s - see LICENSE file for details */", + licenses[license].describe); +}