#!/usr/bin/env python
# Copyright 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
''' Verifies that builds of the embedded content_shell do not included
unnecessary dependencies.'''
import getopt
import os
import re
import string
import subprocess
import sys
import optparse
kUndesiredLibraryList = [
'libcairo',
'libpango',
'libglib',
]
binary_target = 'content_shell'
def _main():
parser = optparse.OptionParser(
"usage: %prog -b
--target ")
parser.add_option("-b", "--build-dir",
help="the location of the compiler output")
parser.add_option("--target", help="Debug or Release")
options, args = parser.parse_args()
# Bake target into build_dir.
if options.target and options.build_dir:
assert (options.target !=
os.path.basename(os.path.dirname(options.build_dir)))
options.build_dir = os.path.join(os.path.abspath(options.build_dir),
options.target)
if options.build_dir != None:
target = os.path.join(options.build_dir, binary_target)
else:
target = binary_target
forbidden_regexp = re.compile(string.join(kUndesiredLibraryList, '|'))
success = 0
p = subprocess.Popen(['ldd', target], stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
out, err = p.communicate()
if err != '':
print "Failed to execute ldd to analyze dependencies for " + target + ':'
print ' ' + err
print "FAILED\n"
return 1
if out == '':
print "No output to scan for forbidden dependencies?\n"
print "\nFAILED\n"
return 1
success = 1
deps = string.split(out, '\n')
for d in deps:
if re.search(forbidden_regexp, d) != None:
success = 0
print "Forbidden library: " + d
if success == 1:
print "\nSUCCESS\n"
return 0
else:
print "\nFAILED\n"
return 1
if __name__ == "__main__":
# handle arguments...
# do something reasonable if not run with one...
sys.exit(_main())