Index: tools/licenses.py |
diff --git a/tools/licenses.py b/tools/licenses.py |
index 5b68d5dd9aceda7be47f8c13c7f584a91c0e27a8..9ba1cff4a2ceb4164a8add736e0c768aff17dec9 100755 |
--- a/tools/licenses.py |
+++ b/tools/licenses.py |
@@ -20,6 +20,12 @@ import cgi |
import os |
import sys |
+# TODO(agrieve): Move build_utils.WriteDepFile into a non-android directory. |
+_REPOSITORY_ROOT = os.path.dirname(os.path.dirname(__file__)) |
+sys.path.append(os.path.join(_REPOSITORY_ROOT, 'build/android/gyp/util')) |
+import build_utils |
+ |
+ |
# Paths from the root of the tree to directories to skip. |
PRUNE_PATHS = set([ |
# Placeholder directory only, not third-party code. |
@@ -476,7 +482,8 @@ def ScanThirdPartyDirs(root=None): |
def GenerateCredits( |
- file_template_file, entry_template_file, output_file, target_os): |
+ file_template_file, entry_template_file, output_file, target_os, |
+ depfile=None): |
"""Generate about:credits.""" |
def EvaluateTemplate(template, env, escape=True): |
@@ -488,22 +495,22 @@ def GenerateCredits( |
template = template.replace('{{%s}}' % key, val) |
return template |
- root = os.path.join(os.path.dirname(__file__), '..') |
- third_party_dirs = FindThirdPartyDirs(PRUNE_PATHS, root) |
+ third_party_dirs = FindThirdPartyDirs(PRUNE_PATHS, _REPOSITORY_ROOT) |
if not file_template_file: |
- file_template_file = os.path.join(root, 'components', 'about_ui', |
- 'resources', 'about_credits.tmpl') |
+ file_template_file = os.path.join(_REPOSITORY_ROOT, 'components', |
+ 'about_ui', 'resources', |
+ 'about_credits.tmpl') |
if not entry_template_file: |
- entry_template_file = os.path.join(root, 'components', 'about_ui', |
- 'resources', |
+ entry_template_file = os.path.join(_REPOSITORY_ROOT, 'components', |
+ 'about_ui', 'resources', |
'about_credits_entry.tmpl') |
entry_template = open(entry_template_file).read() |
entries = [] |
for path in third_party_dirs: |
try: |
- metadata = ParseDir(path, root) |
+ metadata = ParseDir(path, _REPOSITORY_ROOT) |
except LicenseError: |
# TODO(phajdan.jr): Convert to fatal error (http://crbug.com/39240). |
continue |
@@ -521,6 +528,7 @@ def GenerateCredits( |
entry = { |
'name': metadata['Name'], |
'content': EvaluateTemplate(entry_template, env), |
+ 'license_file': metadata['License File'], |
} |
entries.append(entry) |
@@ -538,6 +546,19 @@ def GenerateCredits( |
else: |
print template_contents |
+ if depfile: |
+ assert output_file |
+ # Add in build.ninja so that the target will be considered dirty whenever |
+ # gn gen is run. Otherwise, it will fail to notice new files being added. |
+ # This is still no perfect, as it will fail if no build files are changed, |
+ # but a new README.chromium / LICENSE is added. This shouldn't happen in |
+ # practice however. |
+ license_file_list = (entry['license_file'] for entry in entries) |
+ license_file_list = (os.path.relpath(p) for p in license_file_list) |
+ license_file_list = sorted(set(license_file_list)) |
+ build_utils.WriteDepfile(depfile, output_file, |
+ license_file_list + ['build.ninja']) |
+ |
return True |
@@ -551,6 +572,7 @@ def main(): |
help='OS that this build is targeting.') |
parser.add_argument('command', choices=['help', 'scan', 'credits']) |
parser.add_argument('output_file', nargs='?') |
+ build_utils.AddDepfileOption(parser) |
args = parser.parse_args() |
if args.command == 'scan': |
@@ -558,7 +580,7 @@ def main(): |
return 1 |
elif args.command == 'credits': |
if not GenerateCredits(args.file_template, args.entry_template, |
- args.output_file, args.target_os): |
+ args.output_file, args.target_os, args.depfile): |
return 1 |
else: |
print __doc__ |