Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(128)

Side by Side Diff: tools/BUILD_simulator.py

Issue 1401883005: Add dm target to BUILD and refactor BUILD file. Fix blaze compilation errors. (Closed) Base URL: https://skia.googlesource.com/skia@master
Patch Set: Rebase and fix new issues in SkJpegCodec.cpp. Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« src/codec/SkJpegCodec.cpp ('K') | « tools/BUILD.public.expected ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # 2 #
3 # Copyright 2015 Google Inc. 3 # Copyright 2015 Google Inc.
4 # 4 #
5 # Use of this source code is governed by a BSD-style license that can be 5 # Use of this source code is governed by a BSD-style license that can be
6 # found in the LICENSE file. 6 # found in the LICENSE file.
7 7
8 # This script does a very rough simulation of BUILD file expansion, 8 # This script does a very rough simulation of BUILD file expansion,
9 # mostly to see the effects of glob(). 9 # mostly to see the effects of glob().
10 10
11 # We start by adding some symbols to our namespace that BUILD.public calls. 11 # We start by adding some symbols to our namespace that BUILD.public calls.
12 12
13 import glob 13 import glob
14 import os
14 import pprint 15 import pprint
16 import re
15 17
16 def noop(*args, **kwargs): 18 def noop(*args, **kwargs):
17 pass 19 pass
18 20
21 DOUBLE_STAR_RE = re.compile(r'/\*\*/')
22 STAR_RE = re.compile(r'\*')
23 DOUBLE_STAR_PLACEHOLDER = "xxxdoublestarxxx"
24 STAR_PLACEHOLDER = "xxxstarxxx"
25
26 # Returns a set of files that match pattern.
27 def BUILD_glob_single(pattern):
28 if pattern.find('**') < 0:
29 # If pattern doesn't include **, glob.glob more-or-less does the right
30 # thing.
31 return glob.glob(pattern)
32 # First transform pattern into a regexp.
33 # Temporarily remove ** and *.
34 pattern2 = DOUBLE_STAR_RE.sub(DOUBLE_STAR_PLACEHOLDER, pattern)
35 pattern3 = STAR_RE.sub(STAR_PLACEHOLDER, pattern2)
36 # Replace any regexp special characters.
37 pattern4 = re.escape(pattern3)
38 # Replace * with [^/]* and ** with .*.
39 pattern5 = pattern4.replace(STAR_PLACEHOLDER, '[^/]*')
40 pattern6 = pattern5.replace(DOUBLE_STAR_PLACEHOLDER, '.*/')
41 # Anchor the match at the beginning and end.
42 pattern7 = "^" + pattern6 + "$"
43 pattern_re = re.compile(pattern7)
44 matches = set()
45 for root, _, files in os.walk('.'):
46 for fname in files:
47 # Remove initial "./".
48 path = os.path.join(root, fname)[2:]
49 if pattern_re.match(path):
50 matches.add(path)
51 return matches
52
19 # Simulates BUILD file glob(). 53 # Simulates BUILD file glob().
20 def BUILD_glob(include, exclude=()): 54 def BUILD_glob(include, exclude=()):
21 files = set() 55 files = set()
22 for pattern in include: 56 for pattern in include:
23 files.update(glob.glob(pattern)) 57 files.update(BUILD_glob_single(pattern))
24 for pattern in exclude: 58 for pattern in exclude:
25 files.difference_update(glob.glob(pattern)) 59 files.difference_update(BUILD_glob_single(pattern))
26 return list(sorted(files)) 60 return list(sorted(files))
27 61
28 # With these namespaces, we can treat BUILD.public as if it were 62 # With these namespaces, we can treat BUILD.public as if it were
29 # Python code. This pulls its variable definitions (SRCS, HDRS, 63 # Python code. This pulls its variable definitions (SRCS, HDRS,
30 # DEFINES, etc.) into local_names. 64 # DEFINES, etc.) into local_names.
31 global_names = { 65 global_names = {
32 'exports_files': noop, 66 'exports_files': noop,
67 'cc_library': noop,
68 'cc_test': noop,
33 'glob': BUILD_glob, 69 'glob': BUILD_glob,
70 'EXTERNAL_DEPS': [],
71 'BASE_DIR': "",
72 'DM_EXTERNAL_DEPS': [],
34 } 73 }
35 local_names = {} 74 local_names = {}
36 execfile('BUILD.public', global_names, local_names) 75 execfile('BUILD.public', global_names, local_names)
37 76
38 with open('tools/BUILD.public.expected', 'w') as out: 77 with open('tools/BUILD.public.expected', 'w') as out:
39 print >>out, "This file is auto-generated by tools/BUILD_simulator.py." 78 print >>out, "This file is auto-generated by tools/BUILD_simulator.py."
40 print >>out, "It expands BUILD.public to make it easy to see changes." 79 print >>out, "It expands BUILD.public to make it easy to see changes."
41 for name, value in sorted(local_names.items()): 80 for name, value in sorted(local_names.items()):
42 print >>out, name, '= ', 81 print >>out, name, '= ',
43 pprint.pprint(value, out) 82 pprint.pprint(value, out)
OLDNEW
« src/codec/SkJpegCodec.cpp ('K') | « tools/BUILD.public.expected ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698