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

{
  'targets': [
    {
      # GN version: //components/precache/core
      'target_name': 'precache_core',
      'type': 'static_library',
      'dependencies': [
        'precache_core_proto',
        '../base/base.gyp:base',
        '../third_party/protobuf/protobuf.gyp:protobuf_lite',
        '../url/url.gyp:url_lib',
      ],
      'include_dirs': [
        '..',
      ],
      'sources': [
        'precache/core/precache_database.cc',
        'precache/core/precache_database.h',
        'precache/core/precache_fetcher.cc',
        'precache/core/precache_fetcher.h',
        'precache/core/precache_switches.cc',
        'precache/core/precache_switches.h',
        'precache/core/precache_url_table.cc',
        'precache/core/precache_url_table.h',
      ],
      'includes': [ 'precache/precache_defines.gypi', ],
      'direct_dependent_settings': {
        # Make direct dependents also include the precache defines. This allows
        # the unit tests to use these defines.
        'includes': [ 'precache/precache_defines.gypi', ],
      },
    },
    {
      # GN version: //components/precache/core:proto
      'target_name': 'precache_core_proto',
      'type': 'static_library',
      'sources': [
        'precache/core/proto/precache.proto',
      ],
      'variables': {
        'proto_in_dir': 'precache/core/proto',
        'proto_out_dir': 'components/precache/core/proto',
      },
      'includes': [ '../build/protoc.gypi', ],
    },
  ],
  'conditions': [
    ['OS!="ios"', {
      'targets': [
        {
          # GN Version: //components/precache/content
          'target_name': 'precache_content',
          'type': 'static_library',
          'dependencies': [
            'precache_core',
            'precache_core_proto',
            '../base/base.gyp:base',
            '../components/components.gyp:sync_driver',
            '../content/content.gyp:content_browser',
            '../url/url.gyp:url_lib',
          ],
          'include_dirs': [
            '..',
          ],
          'sources': [
            # Note: sources list duplicated in GN build.
            'precache/content/precache_manager.cc',
            'precache/content/precache_manager.h',
          ],
        },
      ],
    }],
    ['OS=="android"', {
      'targets': [{
        'target_name': 'precache_java',
        'type': 'none',
        'dependencies': [
          '../base/base.gyp:base',
          '../content/content.gyp:content_java',
        ],
        'variables': {
          'java_in_dir': 'precache/android/java',
        },
        'includes': [ '../build/java.gypi' ],
      }, {
        'target_name': 'precache_javatests',
        'type': 'none',
        'dependencies': [
          'precache_java',
          '../base/base.gyp:base_java_test_support',
        ],
        'variables': {
          'java_in_dir': 'precache/android/javatests',
        },
        'includes': [ '../build/java.gypi' ],
      }],
    }],
  ],
}
