From: Rusty Russell Date: Thu, 21 Jul 2011 04:59:06 +0000 (+0930) Subject: ccanlint: move license tag matching into common code. X-Git-Url: http://git.ozlabs.org/?p=ccan;a=commitdiff_plain;h=77818c1729ed1dc68b7b99a6def6ac534a0da07c ccanlint: move license tag matching into common code. Refactoring helps the next patch. --- diff --git a/tools/ccanlint/licenses.c b/tools/ccanlint/licenses.c index c2a4871d..962412cc 100644 --- a/tools/ccanlint/licenses.c +++ b/tools/ccanlint/licenses.c @@ -2,6 +2,7 @@ #include "ccanlint.h" #include #include +#include const struct license_info licenses[] = { { "LGPLv2+", "LGPL", @@ -102,6 +103,49 @@ bool license_compatible[LICENSE_UNKNOWN+1][LICENSE_UNKNOWN] = { { false,false,false,false,false,false,false,false,false,false,true } }; +/* See GPLv2 and v2 (basically same wording) for interpreting versions: + * the "any later version" means the recepient can choose. */ +enum license which_license(struct doc_section *d) +{ + if (!d) + return LICENSE_UNKNOWN; + + /* This means "user chooses what version", including GPLv1! */ + if (streq(d->lines[0], "GPL")) + return LICENSE_GPL; + /* This means "v2 only". */ + if (streq(d->lines[0], "GPLv2")) + return LICENSE_GPLv2; + /* This means "v2 or above" at user's choice. */ + if (streq(d->lines[0], "GPL (v2 or any later version)")) + return LICENSE_GPLv2_PLUS; + /* This means "v3 or above" at user's choice. */ + if (streq(d->lines[0], "GPL (v3 or any later version)")) + return LICENSE_GPLv3; + + /* This means "user chooses what version" */ + if (streq(d->lines[0], "LGPL")) + return LICENSE_LGPL; + /* This means "v2.1 only". */ + if (streq(d->lines[0], "LGPLv2.1")) + return LICENSE_LGPLv2; + /* This means "v2.1 or above" at user's choice. */ + if (streq(d->lines[0], "LGPL (v2.1 or any later version)")) + return LICENSE_LGPLv2_PLUS; + /* This means "v3 or above" at user's choice. */ + if (streq(d->lines[0], "LGPL (v3 or any later version)")) + return LICENSE_LGPLv3; + + if (streq(d->lines[0], "BSD-MIT") || streq(d->lines[0], "MIT")) + return LICENSE_MIT; + if (streq(d->lines[0], "BSD (3 clause)")) + return LICENSE_BSD; + if (strreg(NULL, d->lines[0], "[Pp]ublic [Dd]omain")) + return LICENSE_PUBLIC_DOMAIN; + + return LICENSE_UNKNOWN; +} + const char *get_ccan_simplified(struct ccan_file *f) { if (!f->simplified) { @@ -141,3 +185,16 @@ bool find_boilerplate(struct ccan_file *f, enum license license) } return true; } + +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)) + continue; + if (streq(d->type, "license")) + return d; + } + return NULL; +} diff --git a/tools/ccanlint/licenses.h b/tools/ccanlint/licenses.h index 72b14d25..48aad167 100644 --- a/tools/ccanlint/licenses.h +++ b/tools/ccanlint/licenses.h @@ -34,4 +34,10 @@ extern const struct license_info licenses[]; struct ccan_file; bool find_boilerplate(struct ccan_file *f, enum license license); +struct doc_section; +enum license which_license(struct doc_section *d); + +struct manifest; +struct doc_section *find_license_tag(const struct manifest *m); + #endif /* CCANLINT_LICENSES_H */ diff --git a/tools/ccanlint/tests/license_exists.c b/tools/ccanlint/tests/license_exists.c index dbfe29b5..09a9b7e6 100644 --- a/tools/ccanlint/tests/license_exists.c +++ b/tools/ccanlint/tests/license_exists.c @@ -10,60 +10,6 @@ #include #include #include -#include - -static struct doc_section *find_license_tag(const struct manifest *m) -{ - struct doc_section *d; - - list_for_each(m->info_file->doc_sections, d, list) { - if (!streq(d->function, m->basename)) - continue; - if (streq(d->type, "license")) - return d; - } - return NULL; -} - -/* See GPLv2 and v2 (basically same wording) for interpreting versions: - * the "any later version" means the recepient can choose. */ -static enum license which_license(struct doc_section *d) -{ - /* This means "user chooses what version", including GPLv1! */ - if (streq(d->lines[0], "GPL")) - return LICENSE_GPL; - /* This means "v2 only". */ - if (streq(d->lines[0], "GPLv2")) - return LICENSE_GPLv2; - /* This means "v2 or above" at user's choice. */ - if (streq(d->lines[0], "GPL (v2 or any later version)")) - return LICENSE_GPLv2_PLUS; - /* This means "v3 or above" at user's choice. */ - if (streq(d->lines[0], "GPL (v3 or any later version)")) - return LICENSE_GPLv3; - - /* This means "user chooses what version" */ - if (streq(d->lines[0], "LGPL")) - return LICENSE_LGPL; - /* This means "v2.1 only". */ - if (streq(d->lines[0], "LGPLv2.1")) - return LICENSE_LGPLv2; - /* This means "v2.1 or above" at user's choice. */ - if (streq(d->lines[0], "LGPL (v2.1 or any later version)")) - return LICENSE_LGPLv2_PLUS; - /* This means "v3 or above" at user's choice. */ - if (streq(d->lines[0], "LGPL (v3 or any later version)")) - return LICENSE_LGPLv3; - - if (streq(d->lines[0], "BSD-MIT") || streq(d->lines[0], "MIT")) - return LICENSE_MIT; - if (streq(d->lines[0], "BSD (3 clause)")) - return LICENSE_BSD; - if (strreg(NULL, d->lines[0], "[Pp]ublic [Dd]omain")) - return LICENSE_PUBLIC_DOMAIN; - - return LICENSE_UNKNOWN; -} static const char *expected_link(enum license license) {