| #!/usr/bin/env python3 | 
 | # Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file | 
 | # for details. All rights reserved. Use of this source code is governed by a | 
 | # BSD-style license that can be found in the LICENSE file. | 
 | """Tool for listing Dart source files. | 
 |  | 
 | If the first argument is 'relative', the script produces paths relative to the | 
 | current working directory. If the first argument is 'absolute', the script | 
 | produces absolute paths. | 
 |  | 
 | Usage: | 
 |   python3 tools/list_dart_files_as_depfile.py <depfile> <directory> <pattern> | 
 | """ | 
 |  | 
 | import os | 
 | import re | 
 | import sys | 
 |  | 
 |  | 
 | def main(argv): | 
 |     depfile = argv[1] | 
 |     directory = argv[2] | 
 |     if not os.path.isabs(directory): | 
 |         directory = os.path.realpath(directory) | 
 |  | 
 |     pattern = None | 
 |     if len(argv) > 3: | 
 |         pattern = re.compile(argv[3]) | 
 |  | 
 |     # Output a GN/Ninja depfile, whose format is a Makefile with one target. | 
 |     out = open(depfile, 'w') | 
 |     out.write(os.path.relpath(depfile)) | 
 |     out.write(":") | 
 |  | 
 |     for root, directories, files in os.walk(directory): | 
 |         # We only care about actual source files, not generated code or tests. | 
 |         for skip_dir in ['.git', 'gen', 'test']: | 
 |             if skip_dir in directories: | 
 |                 directories.remove(skip_dir) | 
 |  | 
 |         # If we are looking at the root directory, filter the immediate | 
 |         # subdirectories by the given pattern. | 
 |         if pattern and root == directory: | 
 |             directories[:] = filter(pattern.match, directories) | 
 |  | 
 |         for filename in files: | 
 |             if filename.endswith( | 
 |                     '.dart') and not filename.endswith('_test.dart'): | 
 |                 fullname = os.path.join(directory, root, filename) | 
 |                 fullname = fullname.replace(os.sep, '/') | 
 |                 out.write(" \"") | 
 |                 out.write(fullname) | 
 |                 out.write("\"") | 
 |  | 
 |     out.write("\n") | 
 |     out.close() | 
 |  | 
 |  | 
 | if __name__ == '__main__': | 
 |     sys.exit(main(sys.argv)) |