166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis# Copyright (c) 2013 The Chromium Authors. All rights reserved.
266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis# Use of this source code is governed by a BSD-style license that can be
366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis# found in the LICENSE file.
466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisimport os
666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
766a37686207944273ced825e0e8b6b6375f8c3deJamie GennisGYP_FILE = "trace_viewer.gyp"
866a37686207944273ced825e0e8b6b6375f8c3deJamie GennisFILE_GROUPS = ["tracing_html_files",
966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    "tracing_css_files",
1066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    "tracing_js_files",
116833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis    "tracing_template_files",
126833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis    "tracing_img_files"]
1366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
1466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisdef GypCheck():
1566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  f = open(GYP_FILE, 'r')
1666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  gyp = f.read()
1766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  f.close()
1866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
1966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  data = eval(gyp)
2066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  gyp_files = []
2166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  for group in FILE_GROUPS:
2266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    gyp_files.extend(data["variables"][group])
2366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
2466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  known_files = []
2566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  for (dirpath, dirnames, filenames) in os.walk('src'):
2666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    for name in filenames:
2766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      if not name.endswith(("_test.js", "_test_data.js", "tests.html")):
2866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis        known_files.append(os.path.join(dirpath, name))
2966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
3066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  u = set(gyp_files).union(set(known_files))
3166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  i = set(gyp_files).intersection(set(known_files))
3266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  diff = list(u - i)
3366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
3466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  if len(diff) == 0:
3566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    return ''
3666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
3766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  error = 'Entries in ' + GYP_FILE + ' do not match files on disk:\n'
3866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  in_gyp_only = list(set(gyp_files) - set(known_files))
3966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  in_known_only = list(set(known_files) - set(gyp_files))
4066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
4166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  if len(in_gyp_only) > 0:
4266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    error += '  In GYP only:\n    ' + '\n    '.join(sorted(in_gyp_only))
4366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  if len(in_known_only) > 0:
4466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    if len(in_gyp_only) > 0:
4566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      error += '\n\n'
4666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    error += '  On disk only:\n    ' + '\n    '.join(sorted(in_known_only))
4766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
4866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  return error
49