6f6bef84a3
Fix blaze compilation errors. The default compilation options for blaze require that the initialization list must list fields in initialization order. Also deal with differing versions of libjpeg. The BUILD changes were started by melanielc in google3 cl/102860957. BUG=skia: Review URL: https://codereview.chromium.org/1401883005
83 lines
2.5 KiB
Python
Executable File
83 lines
2.5 KiB
Python
Executable File
#!/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 os
|
|
import pprint
|
|
import re
|
|
|
|
def noop(*args, **kwargs):
|
|
pass
|
|
|
|
DOUBLE_STAR_RE = re.compile(r'/\*\*/')
|
|
STAR_RE = re.compile(r'\*')
|
|
DOUBLE_STAR_PLACEHOLDER = "xxxdoublestarxxx"
|
|
STAR_PLACEHOLDER = "xxxstarxxx"
|
|
|
|
# Returns a set of files that match pattern.
|
|
def BUILD_glob_single(pattern):
|
|
if pattern.find('**') < 0:
|
|
# If pattern doesn't include **, glob.glob more-or-less does the right
|
|
# thing.
|
|
return glob.glob(pattern)
|
|
# First transform pattern into a regexp.
|
|
# Temporarily remove ** and *.
|
|
pattern2 = DOUBLE_STAR_RE.sub(DOUBLE_STAR_PLACEHOLDER, pattern)
|
|
pattern3 = STAR_RE.sub(STAR_PLACEHOLDER, pattern2)
|
|
# Replace any regexp special characters.
|
|
pattern4 = re.escape(pattern3)
|
|
# Replace * with [^/]* and ** with .*.
|
|
pattern5 = pattern4.replace(STAR_PLACEHOLDER, '[^/]*')
|
|
pattern6 = pattern5.replace(DOUBLE_STAR_PLACEHOLDER, '.*/')
|
|
# Anchor the match at the beginning and end.
|
|
pattern7 = "^" + pattern6 + "$"
|
|
pattern_re = re.compile(pattern7)
|
|
matches = set()
|
|
for root, _, files in os.walk('.'):
|
|
for fname in files:
|
|
# Remove initial "./".
|
|
path = os.path.join(root, fname)[2:]
|
|
if pattern_re.match(path):
|
|
matches.add(path)
|
|
return matches
|
|
|
|
# Simulates BUILD file glob().
|
|
def BUILD_glob(include, exclude=()):
|
|
files = set()
|
|
for pattern in include:
|
|
files.update(BUILD_glob_single(pattern))
|
|
for pattern in exclude:
|
|
files.difference_update(BUILD_glob_single(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,
|
|
'cc_library': noop,
|
|
'cc_test': noop,
|
|
'glob': BUILD_glob,
|
|
'EXTERNAL_DEPS': [],
|
|
'BASE_DIR': "",
|
|
'DM_EXTERNAL_DEPS': [],
|
|
}
|
|
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)
|