Linux: add script to remove bundled libraries.

BUG=none
R=thestig@chromium.org

Review URL: https://codereview.chromium.org/23037005

git-svn-id: http://src.chromium.org/svn/trunk/src/build@218816 4ff67af0-8c30-449e-8e8b-ad334ec8d88c
This commit is contained in:
phajdan.jr@chromium.org 2013-08-21 20:17:42 +00:00
Родитель c119820b94
Коммит 25c00602b1
2 изменённых файлов: 109 добавлений и 6 удалений

Просмотреть файл

@ -17,12 +17,28 @@ libraries is the norm.
Usage:
replace_gyp_files.py <gyp-flags>
1. remove_bundled_libraries.py <preserved-directories>
For example: replace_gyp_files.py -Duse_system_harfbuzz=1
For example: remove_bundled_libraries.py third_party/mesa
The script ignores flags other than -D for convenience. This makes it possible
to have a variable e.g. ${myconf} with all the options, and execute:
The script scans sources looking for third_party directories.
Everything that is not explicitly preserved is removed (except for
gyp files), and the script fails if any directory passed on command
line does not exist (to ensure list is kept up to date).
build/linux/unbundle/replace_gyp_files.py ${myconf}
build/gyp_chromium ${myconf}
This is intended to be used on sources extracted from a tarball,
not a repository.
NOTE: by default this will not remove anything (for safety). Pass
--do-remove flag to actually remove files.
2. replace_gyp_files.py <gyp-flags>
For example: replace_gyp_files.py -Duse_system_harfbuzz=1
The script ignores flags other than -D for convenience. This makes it
possible to have a variable e.g. ${myconf} with all the options, and
execute:
build/linux/unbundle/replace_gyp_files.py ${myconf}
build/gyp_chromium ${myconf}

Просмотреть файл

@ -0,0 +1,87 @@
#!/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.
"""
Removes bundled libraries to make sure they are not used.
See README for more details.
"""
import optparse
import os.path
import sys
def DoMain(argv):
my_dirname = os.path.abspath(os.path.dirname(__file__))
source_tree_root = os.path.abspath(
os.path.join(my_dirname, '..', '..', '..'))
if os.path.join(source_tree_root, 'build', 'linux', 'unbundle') != my_dirname:
print ('Sanity check failed: please run this script from ' +
'build/linux/unbundle directory.')
return 1
parser = optparse.OptionParser()
parser.add_option('--do-remove', action='store_true')
options, args = parser.parse_args(argv)
exclusion_used = {}
for exclusion in args:
exclusion_used[exclusion] = False
for root, dirs, files in os.walk(source_tree_root, topdown=False):
# Only look at paths which contain a "third_party" component
# (note that e.g. third_party.png doesn't count).
root_relpath = os.path.relpath(root, source_tree_root)
if 'third_party' not in root_relpath.split(os.sep):
continue
for f in files:
path = os.path.join(root, f)
relpath = os.path.relpath(path, source_tree_root)
excluded = False
for exclusion in args:
if relpath.startswith(exclusion):
# Multiple exclusions can match the same path. Go through all of them
# and mark each one as used.
exclusion_used[exclusion] = True
excluded = True
if excluded:
continue
# Deleting gyp files almost always leads to gyp failures.
# These files come from Chromium project, and can be replaced if needed.
if f.endswith('.gyp') or f.endswith('.gypi'):
continue
if options.do_remove:
# Delete the file - best way to ensure it's not used during build.
os.remove(path)
else:
# By default just print paths that would be removed.
print path
exit_code = 0
# Fail if exclusion list contains stale entries - this helps keep it
# up to date.
for exclusion, used in exclusion_used.iteritems():
if not used:
print '%s does not exist' % exclusion
exit_code = 1
if not options.do_remove:
print ('To actually remove files printed above, please pass ' +
'--do-remove flag.')
return exit_code
if __name__ == '__main__':
sys.exit(DoMain(sys.argv[1:]))