| #!/usr/bin/env python |
| # |
| # Copyright 2015 Google Inc. |
| # |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # This script does a very rough simulation of BUILD file expansion, |
| # mostly to see the effects of glob(). |
| |
| # We start by adding some symbols to our namespace that BUILD.public calls. |
| |
| import glob |
| import pprint |
| |
| def noop(*args, **kwargs): |
| pass |
| |
| # Simulates BUILD file glob(). |
| def BUILD_glob(include, exclude=()): |
| files = set() |
| for pattern in include: |
| files.update(glob.glob(pattern)) |
| for pattern in exclude: |
| files.difference_update(glob.glob(pattern)) |
| return list(sorted(files)) |
| |
| # With these namespaces, we can treat BUILD.public as if it were |
| # Python code. This pulls its variable definitions (SRCS, HDRS, |
| # DEFINES, etc.) into local_names. |
| global_names = { |
| 'exports_files': noop, |
| 'glob': BUILD_glob, |
| } |
| local_names = {} |
| execfile('BUILD.public', global_names, local_names) |
| |
| with open('tools/BUILD.public.expected', 'w') as out: |
| print >>out, "This file is auto-generated by tools/BUILD_simulator.py." |
| print >>out, "It expands BUILD.public to make it easy to see changes." |
| for name, value in sorted(local_names.items()): |
| print >>out, name, '= ', |
| pprint.pprint(value, out) |