# 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 a target to provide a rule
# to strip and place dependent shared libraries required by a native binary in a
# single folder that can later be pushed to the device.
#
# NOTE: consider packaging your binary as an apk instead of running a native
# library.
#
# To use this, create a gyp target with the following form:
#  {
#    'target_name': 'target_that_depends_on_my_binary',
#    'type': 'none',
#    'dependencies': [
#      'my_binary',
#    ],
#    'variables': {
#      'native_binary': '<(PRODUCT_DIR)/my_binary',
#      'output_dir': 'location to place binary and dependent libraries'
#    },
#    'includes': [ '../../build/android/native_app_dependencies.gypi' ],
#  },
#

{
  'variables': {
    'include_main_binary%': 1,
  },
  'conditions': [
      ['android_must_copy_system_libraries == 1', {
        'dependencies': [
          '<(DEPTH)/build/android/setup.gyp:copy_system_libraries',
        ],
        'variables': {
          'intermediate_dir': '<(PRODUCT_DIR)/<(_target_name)',
          'ordered_libraries_file': '<(intermediate_dir)/native_libraries.json',
        },
        'actions': [
          {
            'variables': {
              'input_libraries': ['<(native_binary)'],
            },
            'includes': ['../../build/android/write_ordered_libraries.gypi'],
          },
          {
            'action_name': 'stripping native libraries',
            'variables': {
              'stripped_libraries_dir%': '<(output_dir)',
              'input_paths': ['<(native_binary)'],
              'stamp': '<(intermediate_dir)/strip.stamp',
            },
            'includes': ['../../build/android/strip_native_libraries.gypi'],
          },
        ],
      }],
      ['include_main_binary==1', {
        'copies': [
          {
            'destination': '<(output_dir)',
            'files': [ '<(native_binary)' ],
          }
        ],
      }],
  ],
}
