| Index: tools/licenses.py | 
| diff --git a/tools/licenses.py b/tools/licenses.py | 
| index b01db489da107bfd599742db55a4bb243c092558..28ffe063b6ac991a20801c5f2769ed9869f6a136 100755 | 
| --- a/tools/licenses.py | 
| +++ b/tools/licenses.py | 
| @@ -93,13 +93,13 @@ PRUNE_DIRS = ('.svn', '.git',             # VCS metadata | 
| 'layout_tests')             # lots of subdirs | 
|  | 
| ADDITIONAL_PATHS = ( | 
| +    os.path.join('googleurl'), | 
| +    os.path.join('native_client_sdk'), | 
| # The directory with the word list for Chinese and Japanese segmentation | 
| # with different license terms than ICU. | 
| os.path.join('third_party','icu','source','data','brkitr'), | 
| # Fake directory so we can include the strongtalk license. | 
| os.path.join('v8', 'strongtalk'), | 
| -    # Fake directory so we can include the google-url license. | 
| -    'googleurl', | 
| ) | 
|  | 
|  | 
| @@ -116,6 +116,19 @@ SPECIAL_CASES = { | 
| "Name": "Almost Native Graphics Layer Engine", | 
| "URL": "http://code.google.com/p/angleproject/", | 
| }, | 
| +    os.path.join('third_party', 'cros_system_api'): { | 
| +        "Name": "Chromium OS system API", | 
| +        "URL": "http://www.chromium.org/chromium-os", | 
| +        "License": "BSD", | 
| +        # Absolute path here is resolved as relative to the source root. | 
| +        "License File": "/LICENSE.chromium_os", | 
| +    }, | 
| +    os.path.join('third_party', 'GTM'): { | 
| +        "Name": "Google Toolbox for Mac", | 
| +        "URL": "http://code.google.com/p/google-toolbox-for-mac/", | 
| +        "License": "Apache 2.0", | 
| +        "License File": "COPYING", | 
| +    }, | 
| os.path.join('third_party', 'lss'): { | 
| "Name": "linux-syscall-support", | 
| "URL": "http://code.google.com/p/lss/", | 
| @@ -124,33 +137,46 @@ SPECIAL_CASES = { | 
| "Name": "OTS (OpenType Sanitizer)", | 
| "URL": "http://code.google.com/p/ots/", | 
| }, | 
| +    os.path.join('third_party', 'pdfsqueeze'): { | 
| +        "Name": "pdfsqueeze", | 
| +        "URL": "http://code.google.com/p/pdfsqueeze/", | 
| +        "License": "Apache 2.0", | 
| +        "License File": "COPYING", | 
| +    }, | 
| os.path.join('third_party', 'ppapi'): { | 
| "Name": "ppapi", | 
| "URL": "http://code.google.com/p/ppapi/", | 
| }, | 
| +    os.path.join('third_party', 'scons-2.0.1'): { | 
| +        "Name": "scons-2.0.1", | 
| +        "URL": "http://www.scons.org", | 
| +        "License": "MIT", | 
| +    }, | 
| +    os.path.join('third_party', 'trace-viewer'): { | 
| +        "Name": "trace-viewer", | 
| +        "URL": "http://code.google.com/p/trace-viewer", | 
| +        "License": "BSD", | 
| +    }, | 
| +    os.path.join('third_party', 'v8-i18n'): { | 
| +        "Name": "Internationalization Library for v8", | 
| +        "URL": "http://code.google.com/p/v8-i18n/", | 
| +    }, | 
| os.path.join('third_party', 'WebKit'): { | 
| "Name": "WebKit", | 
| "URL": "http://webkit.org/", | 
| +        "License": "BSD and GPL v2", | 
| # Absolute path here is resolved as relative to the source root. | 
| "License File": "/webkit/LICENSE", | 
| }, | 
| -    os.path.join('third_party', 'GTM'): { | 
| -        "Name": "Google Toolbox for Mac", | 
| -        "URL": "http://code.google.com/p/google-toolbox-for-mac/", | 
| -        "License File": "COPYING", | 
| -    }, | 
| -    os.path.join('third_party', 'pdfsqueeze'): { | 
| -        "Name": "pdfsqueeze", | 
| -        "URL": "http://code.google.com/p/pdfsqueeze/", | 
| -        "License File": "COPYING", | 
| -    }, | 
| -    os.path.join('third_party', 'v8-i18n'): { | 
| -        "Name": "Internationalization Library for v8", | 
| -        "URL": "http://code.google.com/p/v8-i18n/", | 
| +    os.path.join('third_party', 'webpagereplay'): { | 
| +        "Name": "webpagereplay", | 
| +        "URL": "http://code.google.com/p/web-page-replay", | 
| +        "License": "Apache 2.0", | 
| }, | 
| os.path.join('v8', 'strongtalk'): { | 
| "Name": "Strongtalk", | 
| "URL": "http://www.strongtalk.org/", | 
| +        # Absolute path here is resolved as relative to the source root. | 
| "License File": "/v8/LICENSE.strongtalk", | 
| }, | 
| } | 
| @@ -194,7 +220,8 @@ def ParseDir(path): | 
| # Try to find README.chromium. | 
| readme_path = os.path.join(path, 'README.chromium') | 
| if not os.path.exists(readme_path): | 
| -            raise LicenseError("missing README.chromium") | 
| +            raise LicenseError("missing README.chromium or licenses.py " | 
| +                               "SPECIAL_CASES entry") | 
|  | 
| for line in open(readme_path): | 
| line = line.strip() | 
| @@ -236,6 +263,15 @@ def ParseDir(path): | 
| return metadata | 
|  | 
|  | 
| +def ContainsFiles(path): | 
| +    """Determines whether any files exist in a directory or in any of its | 
| +    subdirectories.""" | 
| +    for _, _, files in os.walk(path): | 
| +        if files: | 
| +            return True | 
| +    return False | 
| + | 
| + | 
| def FindThirdPartyDirs(): | 
| """Find all third_party directories underneath the current directory.""" | 
| third_party_dirs = [] | 
| @@ -264,10 +300,17 @@ def FindThirdPartyDirs(): | 
| dirs[:] = [] | 
| continue | 
|  | 
| +        # Don't recurse into paths in ADDITIONAL_PATHS, like we do with regular | 
| +        # third_party/foo paths. | 
| +        if path in ADDITIONAL_PATHS: | 
| +            dirs[:] = [] | 
| + | 
| for dir in ADDITIONAL_PATHS: | 
| third_party_dirs.append(dir) | 
|  | 
| -    return third_party_dirs | 
| +    # If a directory contains no files, assume it's a DEPS directory for a | 
| +    # project not used by our current configuration and skip it. | 
| +    return [x for x in third_party_dirs if ContainsFiles(x)] | 
|  | 
|  | 
| def ScanThirdPartyDirs(): | 
|  |