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

Side by Side Diff: tools/check_ecs_deps/check_ecs_deps.py

Issue 95903002: Enhance check_ecs_deps to allow locally built libraries. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Fixed pylint warnings Created 7 years 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | 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 # Copyright 2013 The Chromium Authors. All rights reserved. 2 # Copyright 2013 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 ''' Verifies that builds of the embedded content_shell do not included 6 ''' Verifies that builds of the embedded content_shell do not included
7 unnecessary dependencies.''' 7 unnecessary dependencies.'''
8 8
9 import getopt
10 import os 9 import os
11 import re 10 import re
12 import string 11 import string
13 import subprocess 12 import subprocess
14 import sys 13 import sys
15 import optparse 14 import optparse
16 15
17 kUndesiredLibraryList = [ 16 kUndesiredLibraryList = [
18 # 'libasound', # ALSA sound - needs to go eventually 17 # 'libasound', # ALSA sound - needs to go eventually
19 'libcairo', 18 'libcairo',
(...skipping 23 matching lines...) Expand all
43 'libpthread', 42 'libpthread',
44 'librt', 43 'librt',
45 'libsmime3', 44 'libsmime3',
46 'libstdc++', 45 'libstdc++',
47 'libz', 46 'libz',
48 'linux-vdso', 47 'linux-vdso',
49 ] 48 ]
50 49
51 binary_target = 'content_shell' 50 binary_target = 'content_shell'
52 51
53 def stdmsg(final, errors): 52 def stdmsg(_final, errors):
54 if errors: 53 if errors:
55 for message in errors: 54 for message in errors:
56 print message 55 print message
57 56
58 def bbmsg(final, errors): 57 def bbmsg(final, errors):
59 if errors: 58 if errors:
60 for message in errors: 59 for message in errors:
61 print '@@@STEP_TEXT@%s@@@' % message 60 print '@@@STEP_TEXT@%s@@@' % message
62 if final: 61 if final:
63 print '\n@@@STEP_%s@@@' % final 62 print '\n@@@STEP_%s@@@' % final
64 63
65 64
66 def _main(): 65 def _main():
67 output = { 66 output = {
68 'message': lambda x: stdmsg(None, x), 67 'message': lambda x: stdmsg(None, x),
69 'fail': lambda x: stdmsg('FAILED', x), 68 'fail': lambda x: stdmsg('FAILED', x),
70 'warn': lambda x: stdmsg('WARNING', x), 69 'warn': lambda x: stdmsg('WARNING', x),
71 'abend': lambda x: stdmsg('FAILED', x), 70 'abend': lambda x: stdmsg('FAILED', x),
72 'ok': lambda x: stdmsg('SUCCESS', x), 71 'ok': lambda x: stdmsg('SUCCESS', x),
72 'verbose': lambda x: None,
73 } 73 }
74 74
75 parser = optparse.OptionParser( 75 parser = optparse.OptionParser(
76 "usage: %prog -b <dir> --target <Debug|Release>") 76 "usage: %prog -b <dir> --target <Debug|Release>")
77 parser.add_option("", "--annotate", dest='annotate', action='store_true', 77 parser.add_option("", "--annotate", dest='annotate', action='store_true',
78 default=False, help="include buildbot annotations in output") 78 default=False, help="include buildbot annotations in output")
79 parser.add_option("", "--noannotate", dest='annotate', action='store_false') 79 parser.add_option("", "--noannotate", dest='annotate', action='store_false')
80 parser.add_option("-b", "--build-dir", 80 parser.add_option("-b", "--build-dir",
81 help="the location of the compiler output") 81 help="the location of the compiler output")
82 parser.add_option("--target", help="Debug or Release") 82 parser.add_option("--target", help="Debug or Release")
83 parser.add_option('-v', '--verbose', default=False, action='store_true')
83 84
84 options, args = parser.parse_args() 85 options, args = parser.parse_args()
86 if args:
87 parser.usage()
88 return -1
89
85 # Bake target into build_dir. 90 # Bake target into build_dir.
86 if options.target and options.build_dir: 91 if options.target and options.build_dir:
87 assert (options.target != 92 assert (options.target !=
88 os.path.basename(os.path.dirname(options.build_dir))) 93 os.path.basename(os.path.dirname(options.build_dir)))
89 options.build_dir = os.path.join(os.path.abspath(options.build_dir), 94 options.build_dir = os.path.join(os.path.abspath(options.build_dir),
90 options.target) 95 options.target)
91 96
92 if options.build_dir != None: 97 if options.build_dir != None:
93 target = os.path.join(options.build_dir, binary_target) 98 target = os.path.join(options.build_dir, binary_target)
94 else: 99 else:
95 target = binary_target 100 target = binary_target
96 101
97 if options.annotate: 102 if options.annotate:
98 output = { 103 output.update({
99 'message': lambda x: bbmsg(None, x), 104 'message': lambda x: bbmsg(None, x),
100 'fail': lambda x: bbmsg('FAILURE', x), 105 'fail': lambda x: bbmsg('FAILURE', x),
101 'warn': lambda x: bbmsg('WARNINGS', x), 106 'warn': lambda x: bbmsg('WARNINGS', x),
102 'abend': lambda x: bbmsg('EXCEPTIONS', x), 107 'abend': lambda x: bbmsg('EXCEPTIONS', x),
103 'ok': lambda x: bbmsg(None, x), 108 'ok': lambda x: bbmsg(None, x),
104 } 109 })
110
111 if options.verbose:
112 output['verbose'] = lambda x: stdmsg(None, x)
105 113
106 forbidden_regexp = re.compile(string.join(map(re.escape, 114 forbidden_regexp = re.compile(string.join(map(re.escape,
107 kUndesiredLibraryList), '|')) 115 kUndesiredLibraryList), '|'))
108 mapping_regexp = re.compile(r"\s*([^/]*) => ") 116 mapping_regexp = re.compile(r"\s*([^/]*) => (.*)")
109 blessed_regexp = re.compile(r"(%s)[-0-9.]*\.so" % string.join(map(re.escape, 117 blessed_regexp = re.compile(r"(%s)[-0-9.]*\.so" % string.join(map(re.escape,
110 kAllowedLibraryList), '|')) 118 kAllowedLibraryList), '|'))
119 if options.build_dir != None:
120 built_regexp = re.compile(re.escape(options.build_dir))
121 else:
122 built_regexp = re.compile(re.escape('lib'))
123
111 success = 0 124 success = 0
112 warning = 0 125 warning = 0
113 126
114 p = subprocess.Popen(['ldd', target], stdout=subprocess.PIPE, 127 p = subprocess.Popen(['ldd', target], stdout=subprocess.PIPE,
115 stderr=subprocess.PIPE) 128 stderr=subprocess.PIPE)
116 out, err = p.communicate() 129 out, err = p.communicate()
117 130
118 if err != '': 131 if err != '':
119 output['abend']([ 132 output['abend']([
120 'Failed to execute ldd to analyze dependencies for ' + target + ':', 133 'Failed to execute ldd to analyze dependencies for ' + target + ':',
121 ' ' + err, 134 ' ' + err,
122 ]) 135 ])
123 return 1 136 return 1
124 137
125 if out == '': 138 if out == '':
126 output['abend']([ 139 output['abend']([
127 'No output to scan for forbidden dependencies.' 140 'No output to scan for forbidden dependencies.'
128 ]) 141 ])
129 return 1 142 return 1
130 143
131 success = 1 144 success = 1
132 deps = string.split(out, '\n') 145 deps = string.split(out, '\n')
133 for d in deps: 146 for d in deps:
134 libmatch = mapping_regexp.match(d) 147 libmatch = mapping_regexp.match(d)
135 if libmatch: 148 if libmatch:
136 lib = libmatch.group(1) 149 lib = libmatch.group(1)
137 if forbidden_regexp.search(lib): 150 source = libmatch.group(2)
138 success = 0 151 if forbidden_regexp.search(lib):
139 output['message'](['Forbidden library: ' + lib]) 152 success = 0
140 if not blessed_regexp.match(lib): 153 output['message'](['Forbidden library: ' + lib])
141 warning = 1 154 elif built_regexp.match(source):
142 output['message'](['Unexpected library: ' + lib]) 155 output['verbose'](['Built library: ' + lib])
156 elif blessed_regexp.match(lib):
157 output['verbose'](['Blessed library: ' + lib])
158 else:
159 warning = 1
160 output['message'](['Unexpected library: ' + lib])
143 161
144 if success == 1: 162 if success == 1:
145 if warning == 1: 163 if warning == 1:
146 output['warn'](None) 164 output['warn'](None)
147 else: 165 else:
148 output['ok'](None) 166 output['ok'](None)
149 return 0 167 return 0
150 else: 168 else:
151 output['fail'](None) 169 output['fail'](None)
152 return 1 170 return 1
153 171
154 if __name__ == "__main__": 172 if __name__ == "__main__":
155 # handle arguments... 173 # handle arguments...
156 # do something reasonable if not run with one... 174 # do something reasonable if not run with one...
157 sys.exit(_main()) 175 sys.exit(_main())
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698