Commit 29d1208b authored by feng's avatar feng Committed by Commit bot

[Android] Insert chromium version string into native libraries.

When building the native libraries, insert the version string into
native libraries as a section .chromium.verson.

BUG=417510

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

Cr-Commit-Position: refs/heads/master@{#297065}
parent 1cbaf3d0
#!/usr/bin/env python
#
# Copyright 2014 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.
"""Insert a version string into a library as a section '.chromium.version'.
"""
import optparse
import os
import sys
import tempfile
from util import build_utils
def InsertChromiumVersion(android_objcopy,
library_path,
version_string):
# Remove existing .chromium.version section from .so
objcopy_command = [android_objcopy,
'--remove-section=.chromium.version',
library_path]
build_utils.CheckOutput(objcopy_command)
# Add a .chromium.version section.
with tempfile.NamedTemporaryFile() as stream:
stream.write(version_string)
stream.flush()
objcopy_command = [android_objcopy,
'--add-section', '.chromium.version=%s' % stream.name,
library_path]
build_utils.CheckOutput(objcopy_command)
def main(args):
args = build_utils.ExpandFileArgs(args)
parser = optparse.OptionParser()
parser.add_option('--android-objcopy',
help='Path to the toolchain\'s objcopy binary')
parser.add_option('--libraries-source-dir',
help='Directory of native libraries')
parser.add_option('--libraries',
help='List of libraries')
parser.add_option('--version-string',
help='Version string to be inserted')
parser.add_option('--stamp', help='Path to touch on success')
options, _ = parser.parse_args(args)
libraries = build_utils.ParseGypList(options.libraries)
for library in libraries:
library_path = os.path.join(options.libraries_source_dir, library)
InsertChromiumVersion(options.android_objcopy,
library_path,
options.version_string)
if options.stamp:
build_utils.Touch(options.stamp)
return 0
if __name__ == '__main__':
sys.exit(main(sys.argv[1:]))
# Copyright 2014 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.
# This file is meant to be included into an action to provide a rule that
# inserts a chromium version string into native libraries.
#
# To use this, create a gyp target with the following form:
# {
# 'action_name': 'insert_chromium_version',
# 'actions': [
# 'variables': {
# 'ordered_libraries_file': 'file generated by write_ordered_libraries'
# 'libraries_source_dir': 'the directory contains native libraries'
# 'input_paths': 'files to be added to the list of inputs'
# 'stamp': 'file to touch when the action is complete'
# 'version_string': 'chromium version string to be inserted'
# 'includes': [ '../../build/android/insert_chromium_version.gypi' ],
# ],
# },
#
{
'message': 'Inserting chromium version string into native libraries',
'variables': {
'input_paths': [],
},
'inputs': [
'<(DEPTH)/build/android/gyp/util/build_utils.py',
'<(DEPTH)/build/android/gyp/insert_chromium_version.py',
'<(ordered_libraries_file)',
'>@(input_paths)',
],
'outputs': [
'<(stamp)',
],
'action': [
'python', '<(DEPTH)/build/android/gyp/insert_chromium_version.py',
'--android-objcopy=<(android_objcopy)',
'--libraries-source-dir=<(libraries_source_dir)',
'--libraries=@FileArg(<(ordered_libraries_file):libraries)',
'--version-string=<(version_string)',
'--stamp=<(stamp)',
],
'conditions': [
['component == "shared_library"', {
# Add a fake output to force the build to always re-run this step. This
# is required because the real inputs are not known at gyp-time and
# changing base.so may not trigger changes to dependent libraries.
'outputs': [ '<(stamp).fake' ]
}],
],
}
...@@ -110,6 +110,7 @@ ...@@ -110,6 +110,7 @@
'strip_stamp': '<(intermediate_dir)/strip.stamp', 'strip_stamp': '<(intermediate_dir)/strip.stamp',
'stripped_libraries_dir': '<(intermediate_dir)/stripped_libraries', 'stripped_libraries_dir': '<(intermediate_dir)/stripped_libraries',
'strip_additional_stamp': '<(intermediate_dir)/strip_additional.stamp', 'strip_additional_stamp': '<(intermediate_dir)/strip_additional.stamp',
'version_stamp': '<(intermediate_dir)/version.stamp',
'javac_includes': [], 'javac_includes': [],
'jar_excluded_classes': [], 'jar_excluded_classes': [],
'javac_jar_path': '<(intermediate_dir)/<(_target_name).javac.jar', 'javac_jar_path': '<(intermediate_dir)/<(_target_name).javac.jar',
...@@ -363,6 +364,19 @@ ...@@ -363,6 +364,19 @@
}, },
'includes': ['../build/android/pack_arm_relocations.gypi'], 'includes': ['../build/android/pack_arm_relocations.gypi'],
}, },
{
'action_name': 'insert_chromium_version',
'variables': {
'ordered_libraries_file%': '<(ordered_libraries_file)',
'libraries_source_dir%': '<(libraries_source_dir)',
'version_string': '<(native_lib_version_name)',
'input_paths': [
'<(pack_arm_relocations_stamp)',
],
'stamp': '<(version_stamp)'
},
'includes': ['../build/android/insert_chromium_version.gypi'],
},
{ {
'variables': { 'variables': {
'input_libraries': [ 'input_libraries': [
...@@ -461,8 +475,8 @@ ...@@ -461,8 +475,8 @@
'variables': { 'variables': {
'inputs': [ 'inputs': [
'<(ordered_libraries_file)', '<(ordered_libraries_file)',
'<(pack_arm_relocations_stamp)',
'<(strip_additional_stamp)', '<(strip_additional_stamp)',
'<(version_stamp)',
], ],
'input_apk_path': '<(unsigned_apk_path)', 'input_apk_path': '<(unsigned_apk_path)',
'output_apk_path': '<(unsigned_standalone_apk_path)', 'output_apk_path': '<(unsigned_standalone_apk_path)',
...@@ -478,8 +492,8 @@ ...@@ -478,8 +492,8 @@
'variables': { 'variables': {
'libraries_source_dir': '<(apk_package_native_libs_dir)/<(android_app_abi)', 'libraries_source_dir': '<(apk_package_native_libs_dir)/<(android_app_abi)',
'package_input_paths': [ 'package_input_paths': [
'<(pack_arm_relocations_stamp)',
'<(strip_additional_stamp)', '<(strip_additional_stamp)',
'<(version_stamp)',
], ],
}, },
}], }],
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment