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

Side by Side Diff: build/toolchain/wrapper_utils.py

Issue 2272713004: Reland of Enable whitelist generation for official builds. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 3 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
« no previous file with comments | « build/toolchain/gcc_toolchain.gni ('k') | chrome/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 # Copyright (c) 2016 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 """Helper functions for gcc_toolchain.gni wrappers."""
6
7 import os
8 import re
9 import subprocess
10 import shlex
11 import sys
12
13 _BAT_PREFIX = 'cmd /c call '
14 _WHITELIST_RE = re.compile('whitelisted_resource_(?P<resource_id>[0-9]+)')
15
16
17 def CommandToRun(command):
18 """Generates commands compatible with Windows.
19
20 When running on a Windows host and using a toolchain whose tools are
21 actually wrapper scripts (i.e. .bat files on Windows) rather than binary
22 executables, the |command| to run has to be prefixed with this magic.
23 The GN toolchain definitions take care of that for when GN/Ninja is
24 running the tool directly. When that command is passed in to this
25 script, it appears as a unitary string but needs to be split up so that
26 just 'cmd' is the actual command given to Python's subprocess module.
27
28 Args:
29 command: List containing the UNIX style |command|.
30
31 Returns:
32 A list containing the Windows version of the |command|.
33 """
34 if command[0].startswith(_BAT_PREFIX):
35 command = command[0].split(None, 3) + command[1:]
36 return command
37
38
39 def ResolveRspLinks(inputs):
40 """Return a list of files contained in a response file.
41
42 Args:
43 inputs: A command containing rsp files.
44
45 Returns:
46 A set containing the rsp file content."""
47 rspfiles = [a[1:] for a in inputs if a.startswith('@')]
48 resolved = set()
49 for rspfile in rspfiles:
50 with open(rspfile, 'r') as f:
51 resolved.update(shlex.split(f.read()))
52
53 return resolved
54
55
56 def CombineResourceWhitelists(whitelist_candidates, outfile):
57 """Combines all whitelists for a resource file into a single whitelist.
58
59 Args:
60 whitelist_candidates: List of paths to rsp files containing all targets.
61 outfile: Path to save the combined whitelist.
62 """
63 whitelists = ('%s.whitelist' % candidate for candidate in whitelist_candidates
64 if os.path.exists('%s.whitelist' % candidate))
65
66 resources = set()
67 for whitelist in whitelists:
68 with open(whitelist, 'r') as f:
69 resources.update(f.readlines())
70
71 with open(outfile, 'w') as f:
72 f.writelines(resources)
73
74
75 def ExtractResourceIdsFromPragmaWarnings(text):
76 """Returns set of resource IDs that are inside unknown pragma warnings.
77
78 Args:
79 text: The text that will be scanned for unknown pragma warnings.
80
81 Returns:
82 A set containing integers representing resource IDs.
83 """
84 used_resources = set()
85 lines = text.splitlines()
86 for ln in lines:
87 match = _WHITELIST_RE.search(ln)
88 if match:
89 resource_id = int(match.group('resource_id'))
90 used_resources.add(resource_id)
91
92 return used_resources
93
94
95 def CaptureCommandStderr(command):
96 """Returns the stderr of a command.
97
98 Args:
99 args: A list containing the command and arguments.
100 cwd: The working directory from where the command should be made.
101 env: Environment variables for the new process.
102 """
103 child = subprocess.Popen(command, stderr=subprocess.PIPE)
104 _, stderr = child.communicate()
105 return child.returncode, stderr
OLDNEW
« no previous file with comments | « build/toolchain/gcc_toolchain.gni ('k') | chrome/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698