aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/BUILD_simulator.py
blob: 46d3cd79e7008511d4b322b4153ef488565c5da4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/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)