15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/usr/bin/env python
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved.
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file.
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""Makes sure that all files contain proper licensing information."""
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)import json
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import optparse
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import os.path
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import subprocess
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import sys
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def PrintUsage():
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  print """Usage: python checklicenses.py [--root <root>] [tocheck]
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  --root   Specifies the repository root. This defaults to "../.." relative
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           to the script file. This will be correct given the normal location
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           of the script in "<root>/tools/checklicenses".
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  --ignore-suppressions  Ignores path-specific license whitelist. Useful when
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         trying to remove a suppression/whitelist entry.
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  tocheck  Specifies the directory, relative to root, to check. This defaults
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           to "." so it checks everything.
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Examples:
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  python checklicenses.py
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  python checklicenses.py --root ~/chromium/src third_party"""
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WHITELISTED_LICENSES = [
34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    'Anti-Grain Geometry',
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'Apache (v2.0)',
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'Apache (v2.0) BSD (2 clause)',
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'Apache (v2.0) GPL (v2)',
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'Apple MIT',  # https://fedoraproject.org/wiki/Licensing/Apple_MIT_License
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'APSL (v2)',
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'APSL (v2) BSD (4 clause)',
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'BSD',
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'BSD (2 clause)',
43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    'BSD (2 clause) ISC',
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'BSD (2 clause) MIT/X11 (BSD like)',
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'BSD (3 clause)',
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    'BSD (3 clause) GPL (v2)',
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'BSD (3 clause) ISC',
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    'BSD (3 clause) LGPL (v2 or later)',
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'BSD (3 clause) LGPL (v2.1 or later)',
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'BSD (3 clause) MIT/X11 (BSD like)',
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'BSD (4 clause)',
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'BSD-like',
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # TODO(phajdan.jr): Make licensecheck not print BSD-like twice.
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'BSD-like MIT/X11 (BSD like)',
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'BSL (v1.0)',
58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    'FreeType (BSD like)',
59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    'FreeType (BSD like) with patent clause',
60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    'GPL (v2) LGPL (v2.1 or later)',
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'GPL (v2 or later) with Bison parser exception',
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'GPL (v2 or later) with libtool exception',
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'GPL (v3 or later) with Bison parser exception',
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'GPL with Bison parser exception',
65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    'Independent JPEG Group License',
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'ISC',
67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    'LGPL (unversioned/unknown version)',
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'LGPL (v2)',
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'LGPL (v2 or later)',
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'LGPL (v2.1)',
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'LGPL (v2.1 or later)',
72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    'LGPL (v3 or later)',
73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    'MIT/X11 (BSD like)',
74a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    'MIT/X11 (BSD like) LGPL (v2.1 or later)',
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'MPL (v1.0) LGPL (v2 or later)',
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'MPL (v1.1)',
77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    'MPL (v1.1) BSD (3 clause) GPL (v2) LGPL (v2.1 or later)',
78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    'MPL (v1.1) BSD (3 clause) LGPL (v2.1 or later)',
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'MPL (v1.1) BSD-like',
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'MPL (v1.1) BSD-like GPL (unversioned/unknown version)',
81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    'MPL (v1.1) BSD-like GPL (v2) LGPL (v2.1 or later)',
82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    'MPL (v1.1) GPL (v2)',
83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    'MPL (v1.1) GPL (v2) LGPL (v2 or later)',
84eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    'MPL (v1.1) GPL (v2) LGPL (v2.1 or later)',
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'MPL (v1.1) GPL (unversioned/unknown version)',
86eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    'MPL (v1.1) LGPL (v2 or later)',
87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    'MPL (v1.1) LGPL (v2.1 or later)',
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    'MPL (v2.0)',
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'Ms-PL',
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'Public domain',
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'Public domain BSD',
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'Public domain BSD (3 clause)',
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'Public domain BSD-like',
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'Public domain LGPL (v2.1 or later)',
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'libpng',
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'zlib/libpng',
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'SGI Free Software License B',
986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    'SunSoft (BSD like)',
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'University of Illinois/NCSA Open Source License (BSD like)',
1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    ('University of Illinois/NCSA Open Source License (BSD like) '
1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     'MIT/X11 (BSD like)'),
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)]
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PATH_SPECIFIC_WHITELISTED_LICENSES = {
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'base/third_party/icu': [  # http://crbug.com/98087
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # http://code.google.com/p/google-breakpad/issues/detail?id=450
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'breakpad/src': [
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'chrome/common/extensions/docs/examples': [  # http://crbug.com/98092
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # This contains files copied from elsewhere from the tree. Since the copied
1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # directories might have suppressions below (like simplejson), whitelist the
1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # whole directory. This is also not shipped code.
1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    'chrome/common/extensions/docs/server2/third_party': [
1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'UNKNOWN',
1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    ],
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'courgette/third_party/bsdiff_create.cc': [  # http://crbug.com/98095
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'native_client': [  # http://crbug.com/98099
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'native_client/toolchain': [
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'BSD GPL (v2 or later)',
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'BSD (2 clause) GPL (v2 or later)',
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'BSD (3 clause) GPL (v2 or later)',
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'BSL (v1.0) GPL',
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'BSL (v1.0) GPL (v3.1)',
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'GPL',
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'GPL (unversioned/unknown version)',
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'GPL (v2)',
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'GPL (v2 or later)',
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'GPL (v3.1)',
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'GPL (v3 or later)',
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/WebKit': [
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # http://code.google.com/p/angleproject/issues/detail?id=217
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/angle': [
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    # http://crbug.com/222828
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    # http://bugs.python.org/issue17514
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    'third_party/chromite/third_party/argparse.py': [
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
158a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    # http://crbug.com/326117
159a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    # https://bitbucket.org/chrisatlee/poster/issue/21
160a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    'third_party/chromite/third_party/poster': [
161a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        'UNKNOWN',
162a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    ],
163a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
1645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    # http://crbug.com/333508
1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    'third_party/clang_format/script': [
1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        'UNKNOWN',
1675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    ],
1685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
169116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    # http://crbug.com/333508
170116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    'buildtools/clang_format/script': [
171116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        'UNKNOWN',
172116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    ],
173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # https://mail.python.org/pipermail/cython-devel/2014-July/004062.html
1755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    'third_party/cython': [
1765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        'UNKNOWN',
1775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    ],
1785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/devscripts': [
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'GPL (v2 or later)',
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/expat/files/lib': [  # http://crbug.com/98121
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/ffmpeg': [
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'GPL',
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'GPL (v2)',
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'GPL (v2 or later)',
1891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        'GPL (v3 or later)',
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',  # http://crbug.com/98123
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
1925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    'third_party/fontconfig': [
1935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        # https://bugs.freedesktop.org/show_bug.cgi?id=73401
1945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        'UNKNOWN',
1955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    ],
1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    'third_party/freetype2': [ # http://crbug.com/177319
1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        'UNKNOWN',
1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ],
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/hunspell': [  # http://crbug.com/98134
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/iccjpeg': [  # http://crbug.com/98137
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/icu': [  # http://crbug.com/98301
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/lcov': [  # http://crbug.com/98304
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/lcov/contrib/galaxy/genflat.pl': [
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'GPL (v2 or later)',
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    'third_party/libc++/trunk/include/support/solaris': [
2155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        # http://llvm.org/bugs/show_bug.cgi?id=18291
2165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        'UNKNOWN',
2175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    ],
2185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    'third_party/libc++/trunk/src/support/solaris/xlocale.c': [
2195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        # http://llvm.org/bugs/show_bug.cgi?id=18291
2205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        'UNKNOWN',
2215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    ],
2225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    'third_party/libc++/trunk/test': [
2235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        # http://llvm.org/bugs/show_bug.cgi?id=18291
2245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        'UNKNOWN',
2255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    ],
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/libevent': [  # http://crbug.com/98309
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/libjingle/source/talk': [  # http://crbug.com/98310
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/libjpeg_turbo': [  # http://crbug.com/98314
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    # Many liblouis files are mirrored but not used in the NaCl module.
2371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    # They are not excluded from the mirror because of lack of infrastructure
2381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    # support.  Getting license headers added to the files where missing is
2391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    # tracked in https://github.com/liblouis/liblouis/issues/22.
2401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    'third_party/liblouis/src': [
2411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        'GPL (v3 or later)',
2421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        'UNKNOWN',
2431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ],
2441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/libpng': [  # http://crbug.com/98318
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # The following files lack license headers, but are trivial.
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/libusb/src/libusb/os/poll_posix.h': [
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/libvpx/source': [  # http://crbug.com/98319
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/libxml': [
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/libxslt': [
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/lzma_sdk': [
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
266868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    'third_party/mesa/src': [
267868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        'GPL (v2)',
268868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        'GPL (v3 or later)',
269868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        'MIT/X11 (BSD like) GPL (v3 or later) with Bison parser exception',
270868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        'UNKNOWN',  # http://crbug.com/98450
271868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    ],
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/modp_b64': [
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
275c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    'third_party/openmax_dl/dl' : [
276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        'Khronos Group',
277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ],
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/openssl': [  # http://crbug.com/98451
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
281116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    'third_party/boringssl': [
282116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        # There are some files in BoringSSL which came from OpenSSL and have no
283116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        # license in them. We don't wish to add the license header ourselves
284116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        # thus we don't expect to pass license checks.
285116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        'UNKNOWN',
286116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    ],
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/ots/tools/ttf-checksum.py': [  # http://code.google.com/p/ots/issues/detail?id=2
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/molokocacao': [  # http://crbug.com/98453
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/npapi/npspy': [
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/ocmock/OCMock': [  # http://crbug.com/98454
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/ply/__init__.py': [
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    'third_party/protobuf': [  # http://crbug.com/98455
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    # http://crbug.com/222831
3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    # https://bitbucket.org/eliben/pyelftools/issue/12
3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    'third_party/pyelftools': [
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/scons-2.0.1/engine/SCons': [  # http://crbug.com/98462
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/simplejson': [
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/skia': [  # http://crbug.com/98463
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/snappy/src': [  # http://crbug.com/98464
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/smhasher/src': [  # http://crbug.com/98465
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
327c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    'third_party/speech-dispatcher/libspeechd.h': [
328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        'GPL (v2 or later)',
329c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ],
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/sqlite': [
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
33358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
3345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    # http://crbug.com/334668
3355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    # MIT license.
3365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    'tools/swarming_client/third_party/httplib2': [
3375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        'UNKNOWN',
3385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    ],
3395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
3405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    # http://crbug.com/334668
3415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    # Apache v2.0.
3425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    'tools/swarming_client/third_party/oauth2client': [
3435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        'UNKNOWN',
3445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    ],
3455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
34668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    # https://github.com/kennethreitz/requests/issues/1610
3470f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    'tools/swarming_client/third_party/requests': [
34868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        'UNKNOWN',
34968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    ],
35068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/swig/Lib/linkruntime.c': [  # http://crbug.com/98585
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/talloc': [
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'GPL (v3 or later)',
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',  # http://crbug.com/98588
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/tcmalloc': [
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',  # http://crbug.com/98589
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/tlslite': [
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/webdriver': [  # http://crbug.com/98590
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
367a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
368a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    # https://github.com/html5lib/html5lib-python/issues/125
369a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    # https://github.com/KhronosGroup/WebGL/issues/435
370a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    'third_party/webgl/src': [
371a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        'UNKNOWN',
372a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    ],
373a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/webrtc': [  # http://crbug.com/98592
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/xdg-utils': [  # http://crbug.com/98593
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/yasm/source': [  # http://crbug.com/98594
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/zlib/contrib/minizip': [
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'third_party/zlib/trees.h': [
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'tools/emacs': [  # http://crbug.com/98595
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'tools/gyp/test': [
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'tools/python/google/__init__.py': [
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'tools/stats_viewer/Properties/AssemblyInfo.cs': [
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'tools/symsrc/pefile.py': [
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
4045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    'tools/telemetry/third_party/pyserial': [
4055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        # https://sourceforge.net/p/pyserial/feature-requests/35/
4065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        'UNKNOWN',
4075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    ],
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'v8/test/cctest': [  # http://crbug.com/98597
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'UNKNOWN',
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ],
411116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    'v8/src/third_party/kernel/tools/perf/util/jitdump.h': [  # http://crbug.com/391716
412116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        'UNKNOWN',
413116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    ],
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def check_licenses(options, args):
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Figure out which directory we have to check.
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if len(args) == 0:
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # No directory to check specified, use the repository root.
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    start_dir = options.base_directory
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  elif len(args) == 1:
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # Directory specified. Start here. It's supposed to be relative to the
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # base directory.
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    start_dir = os.path.abspath(os.path.join(options.base_directory, args[0]))
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else:
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # More than one argument, we don't handle this.
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PrintUsage()
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 1
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  print "Using base directory:", options.base_directory
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  print "Checking:", start_dir
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  print
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  licensecheck_path = os.path.abspath(os.path.join(options.base_directory,
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                   'third_party',
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                   'devscripts',
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                   'licensecheck.pl'))
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  licensecheck = subprocess.Popen([licensecheck_path,
4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   '-l', '100',
4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   '-r', start_dir],
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  stdout=subprocess.PIPE,
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  stderr=subprocess.PIPE)
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  stdout, stderr = licensecheck.communicate()
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if options.verbose:
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print '----------- licensecheck stdout -----------'
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print stdout
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print '--------- end licensecheck stdout ---------'
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if licensecheck.returncode != 0 or stderr:
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print '----------- licensecheck stderr -----------'
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print stderr
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print '--------- end licensecheck stderr ---------'
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print "\nFAILED\n"
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 1
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4570f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  used_suppressions = set()
45846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  errors = []
4590f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for line in stdout.splitlines():
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    filename, license = line.split(':', 1)
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    filename = os.path.relpath(filename.strip(), options.base_directory)
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # All files in the build output directory are generated one way or another.
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # There's no need to check them.
4664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    if filename.startswith('out/'):
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      continue
4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # For now we're just interested in the license.
4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    license = license.replace('*No copyright*', '').strip()
4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # Skip generated files.
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if 'GENERATED FILE' in license:
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      continue
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if license in WHITELISTED_LICENSES:
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      continue
4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if not options.ignore_suppressions:
4800f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      matched_prefixes = [
4810f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)          prefix for prefix in PATH_SPECIFIC_WHITELISTED_LICENSES
4820f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)          if filename.startswith(prefix) and
4830f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)          license in PATH_SPECIFIC_WHITELISTED_LICENSES[prefix]]
4840f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      if matched_prefixes:
4850f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)        used_suppressions.update(set(matched_prefixes))
4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        continue
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
48846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    errors.append({'filename': filename, 'license': license})
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
49046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  if options.json:
49146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    with open(options.json, 'w') as f:
49246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      json.dump(errors, f)
4930f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
49446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  if errors:
49546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    for error in errors:
49646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      print "'%s' has non-whitelisted license '%s'" % (
49746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)          error['filename'], error['license'])
4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print "\nFAILED\n"
4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print "Please read",
5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print "http://www.chromium.org/developers/adding-3rd-party-libraries"
5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print "for more info how to handle the failure."
5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print
5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print "Please respect OWNERS of checklicenses.py. Changes violating"
5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print "this requirement may be reverted."
5050f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
5060f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    # Do not print unused suppressions so that above message is clearly
5070f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    # visible and gets proper attention. Too much unrelated output
5080f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    # would be distracting and make the important points easier to miss.
5090f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 1
5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
51246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  print "\nSUCCESS\n"
51346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
51446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  if not len(args):
51546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    unused_suppressions = set(
51646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        PATH_SPECIFIC_WHITELISTED_LICENSES.iterkeys()).difference(
51746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)            used_suppressions)
51846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    if unused_suppressions:
51946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      print "\nNOTE: unused suppressions detected:\n"
52046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      print '\n'.join(unused_suppressions)
52146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
52246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  return 0
52346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def main():
5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  default_root = os.path.abspath(
5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      os.path.join(os.path.dirname(__file__), '..', '..'))
5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  option_parser = optparse.OptionParser()
5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  option_parser.add_option('--root', default=default_root,
5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           dest='base_directory',
5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           help='Specifies the repository root. This defaults '
5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           'to "../.." relative to the script file, which '
5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           'will normally be the repository root.')
5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  option_parser.add_option('-v', '--verbose', action='store_true',
5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           default=False, help='Print debug logging')
5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  option_parser.add_option('--ignore-suppressions',
5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           action='store_true',
5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           default=False,
5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           help='Ignore path-specific license whitelist.')
54046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  option_parser.add_option('--json', help='Path to JSON output file')
5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  options, args = option_parser.parse_args()
5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return check_licenses(options, args)
5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if '__main__' == __name__:
5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sys.exit(main())
547