# 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.

# This file is meant to be included into an action to provide a rule that strips
# native libraries.
#
# To use this, create a gyp target with the following form:
#  {
#    'action_name': 'strip_native_libraries',
#    'actions': [
#      'variables': {
#        'ordered_libraries_file': 'file generated by write_ordered_libraries'
#        'input_paths': 'files to be added to the list of inputs'
#        'stamp': 'file to touch when the action is complete'
#        'stripped_libraries_dir': 'directory to store stripped libraries',
#      },
#      'includes': [ '../../build/android/strip_native_libraries.gypi' ],
#    ],
#  },
#

{
  'message': 'Stripping libraries for <(_target_name)',
  'variables': {
    'input_paths': [],
  },
  'inputs': [
    '<(DEPTH)/build/android/gyp/util/build_utils.py',
    '<(DEPTH)/build/android/gyp/strip_library_for_device.py',
    '<(ordered_libraries_file)',
    '>@(input_paths)',
  ],
  'outputs': [
    '<(stamp)',
  ],
  'conditions': [
    ['android_must_copy_system_libraries == 1', {
      # 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' ]
    }],
  ],
  'action': [
    'python', '<(DEPTH)/build/android/gyp/strip_library_for_device.py',
    '--android-strip=<(android_strip)',
    '--android-strip-arg=--strip-unneeded',
    '--stripped-libraries-dir=<(stripped_libraries_dir)',
    '--libraries-dir=<(SHARED_LIB_DIR),<(PRODUCT_DIR)',
    '--libraries=@FileArg(<(ordered_libraries_file):libraries)',
    '--stamp=<(stamp)',
  ],
}
