chiark / gitweb /
lint: use only license tags from https://spdx.org/license-list
authorHans-Christoph Steiner <hans@eds.org>
Mon, 15 May 2017 14:46:52 +0000 (16:46 +0200)
committerHans-Christoph Steiner <hans@eds.org>
Fri, 26 May 2017 19:03:38 +0000 (21:03 +0200)
closes #234

fdroidserver/lint.py

index a1702225934226d8dfc3523ac312cbf434ad7cb1..9aebd9981c8b59d3fb7eca9ebf19743c8548aa29 100644 (file)
@@ -87,10 +87,6 @@ regex_checks = {
         (re.compile(r'.*\s$'),
          "Unnecessary trailing space"),
     ],
-    'License': [
-        (re.compile(r'^(|None|Unknown)$'),
-         "No license specified"),
-    ],
     'Summary': [
         (re.compile(r'^$'),
          "Summary yet to be filled"),
@@ -351,6 +347,13 @@ def check_format(app):
         yield "Run rewritemeta to fix formatting"
 
 
+def check_license_tag(app):
+    '''Ensure all license tags are in https://spdx.org/license-list'''
+    if app.License.rstrip('+') not in SPDX:
+        yield 'Invalid license tag "%s"! Use only tags from https://spdx.org/license-list' \
+            % (app.License)
+
+
 def check_extlib_dir(apps):
     dir_path = os.path.join('build', 'extlib')
     files = set()
@@ -429,6 +432,7 @@ def main():
             check_builds,
             check_files_dir,
             check_format,
+            check_license_tag,
         ]
 
         for check_func in app_check_funcs:
@@ -440,5 +444,341 @@ def main():
         sys.exit(1)
 
 
+# A compiled, public domain list of official SPDX license tags from:
+# https://github.com/sindresorhus/spdx-license-list/blob/v3.0.1/spdx-simple.json
+# The deprecated license tags have been removed from the list, they are at the
+# bottom, starting after the last license tags that start with Z.
+# This is at the bottom, since its a long list of data
+SPDX = [
+    "PublicDomain",  # an F-Droid addition, until we can enforce a better option
+    "Glide",
+    "Abstyles",
+    "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",
+    "Aladdin",
+    "ADSL",
+    "AMDPLPA",
+    "ANTLR-PD",
+    "Apache-1.0",
+    "Apache-1.1",
+    "Apache-2.0",
+    "AML",
+    "APSL-1.0",
+    "APSL-1.1",
+    "APSL-1.2",
+    "APSL-2.0",
+    "Artistic-1.0",
+    "Artistic-1.0-Perl",
+    "Artistic-1.0-cl8",
+    "Artistic-2.0",
+    "AAL",
+    "Bahyph",
+    "Barr",
+    "Beerware",
+    "BitTorrent-1.0",
+    "BitTorrent-1.1",
+    "BSL-1.0",
+    "Borceux",
+    "BSD-2-Clause",
+    "BSD-2-Clause-FreeBSD",
+    "BSD-2-Clause-NetBSD",
+    "BSD-3-Clause",
+    "BSD-3-Clause-Clear",
+    "BSD-3-Clause-No-Nuclear-License",
+    "BSD-3-Clause-No-Nuclear-License-2014",
+    "BSD-3-Clause-No-Nuclear-Warranty",
+    "BSD-4-Clause",
+    "BSD-Protection",
+    "BSD-Source-Code",
+    "BSD-3-Clause-Attribution",
+    "0BSD",
+    "BSD-4-Clause-UC",
+    "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",
+    "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-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",
+    "Crossword",
+    "CrystalStacker",
+    "CUA-OPL-1.0",
+    "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",
+    "Entessa",
+    "ErlPL-1.1",
+    "EUDatagrid",
+    "EUPL-1.0",
+    "EUPL-1.1",
+    "Eurosym",
+    "Fair",
+    "MIT-feh",
+    "Frameworx-1.0",
+    "FreeImage",
+    "FTL",
+    "FSFAP",
+    "FSFUL",
+    "FSFULLR",
+    "Giftware",
+    "GL2PS",
+    "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",
+    "gSOAP-1.3b",
+    "HaskellReport",
+    "HPND",
+    "IBM-pibs",
+    "IPL-1.0",
+    "ICU",
+    "ImageMagick",
+    "iMatix",
+    "Imlib2",
+    "IJG",
+    "Info-ZIP",
+    "Intel-ACPI",
+    "Intel",
+    "Interbase-1.0",
+    "IPA",
+    "ISC",
+    "JasPer-2.0",
+    "JSON",
+    "LPPL-1.0",
+    "LPPL-1.1",
+    "LPPL-1.2",
+    "LPPL-1.3a",
+    "LPPL-1.3c",
+    "Latex2e",
+    "BSD-3-Clause-LBNL",
+    "Leptonica",
+    "LGPLLR",
+    "Libpng",
+    "libtiff",
+    "LAL-1.2",
+    "LAL-1.3",
+    "LiLiQ-P-1.1",
+    "LiLiQ-Rplus-1.1",
+    "LiLiQ-R-1.1",
+    "LPL-1.02",
+    "LPL-1.0",
+    "MakeIndex",
+    "MTLL",
+    "MS-PL",
+    "MS-RL",
+    "MirOS",
+    "MITNFA",
+    "MIT",
+    "Motosoto",
+    "MPL-1.0",
+    "MPL-1.1",
+    "MPL-2.0",
+    "MPL-2.0-no-copyleft-exception",
+    "mpich2",
+    "Multics",
+    "Mup",
+    "NASA-1.3",
+    "Naumen",
+    "NBPL-1.0",
+    "Net-SNMP",
+    "NetCDF",
+    "NGPL",
+    "NOSL",
+    "NPL-1.0",
+    "NPL-1.1",
+    "Newsletr",
+    "NLPL",
+    "Nokia",
+    "NPOSL-3.0",
+    "NLOD-1.0",
+    "Noweb",
+    "NRL",
+    "NTP",
+    "Nunit",
+    "OCLC-2.0",
+    "ODbL-1.0",
+    "PDDL-1.0",
+    "OCCT-PL",
+    "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.1",
+    "OLDAP-2.2",
+    "OLDAP-2.2.1",
+    "OLDAP-2.3",
+    "OLDAP-2.4",
+    "OLDAP-2.5",
+    "OLDAP-2.6",
+    "OLDAP-2.7",
+    "OLDAP-2.8",
+    "OML",
+    "OPL-1.0",
+    "OSL-1.0",
+    "OSL-1.1",
+    "OSL-2.0",
+    "OSL-2.1",
+    "OSL-3.0",
+    "OpenSSL",
+    "OSET-PL-2.1",
+    "PHP-3.0",
+    "PHP-3.01",
+    "Plexus",
+    "PostgreSQL",
+    "psfrag",
+    "psutils",
+    "Python-2.0",
+    "QPL-1.0",
+    "Qhull",
+    "Rdisc",
+    "RPSL-1.0",
+    "RPL-1.1",
+    "RPL-1.5",
+    "RHeCos-1.1",
+    "RSCPL",
+    "RSA-MD",
+    "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",
+    "Sleepycat",
+    "SNIA",
+    "Spencer-86",
+    "Spencer-94",
+    "Spencer-99",
+    "SMLNJ",
+    "SugarCRM-1.1.3",
+    "SISSL",
+    "SISSL-1.2",
+    "SPL-1.0",
+    "Watcom-1.0",
+    "TCL",
+    "TCP-wrappers",
+    "Unlicense",
+    "TMate",
+    "TORQUE-1.1",
+    "TOSL",
+    "Unicode-DFS-2015",
+    "Unicode-DFS-2016",
+    "Unicode-TOU",
+    "UPL-1.0",
+    "NCSA",
+    "Vim",
+    "VOSTROM",
+    "VSL-1.0",
+    "W3C-20150513",
+    "W3C-19980720",
+    "W3C",
+    "Wsuipa",
+    "Xnet",
+    "X11",
+    "Xerox",
+    "XFree86-1.1",
+    "xinetd",
+    "xpp",
+    "XSkat",
+    "YPL-1.0",
+    "YPL-1.1",
+    "Zed",
+    "Zend-2.0",
+    "Zimbra-1.3",
+    "Zimbra-1.4",
+    "Zlib",
+    "zlib-acknowledgement",
+    "ZPL-1.1",
+    "ZPL-2.0",
+    "ZPL-2.1",
+]
+
 if __name__ == "__main__":
     main()