chromium/tools/grit/stamp_grit_sources.py

# Copyright 2014 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# This script enumerates the files in the given directory, writing an empty
# stamp file and a .d file listing the inputs required to make the stamp. This
# allows us to dynamically depend on the grit sources without enumerating the
# grit directory for every invocation of grit (which is what adding the source
# files to every .grd file's .d file would entail) or shelling out to grit
# synchronously during GN execution to get the list (which would be slow).
#
# Usage:
#    stamp_grit_sources.py <directory> <stamp-file> <.d-file>


import os
import sys

def GritSourceFiles(grit_root_dir):
  files = []
  for root, _, filenames in os.walk(grit_root_dir):
    grit_src = [os.path.join(root, f) for f in filenames
                if f.endswith('.py') and not f.endswith('_unittest.py')]
    files.extend(grit_src)
  files = [f.replace('\\', '/') for f in files]
  return sorted(files)


def WriteDepFile(dep_file, stamp_file, source_files):
  with open(dep_file, "w") as f:
    f.write(stamp_file)
    f.write(": ")
    f.write(' '.join(source_files))


def WriteStampFile(stamp_file):
  with open(stamp_file, "w"):
    pass


def main(argv):
  if len(argv) != 4:
    print("Error: expecting 3 args.")
    return 1

  grit_root_dir = sys.argv[1]
  stamp_file = sys.argv[2]
  dep_file = sys.argv[3]

  WriteStampFile(stamp_file)
  WriteDepFile(dep_file, stamp_file, GritSourceFiles(grit_root_dir))
  return 0


if __name__ == '__main__':
  sys.exit(main(sys.argv))