# 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))