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

{
  'variables': {
    'chromium_code': 1,
  },

  'includes': [
    'sync_android.gypi',
    'sync_tests.gypi',
  ],

  'conditions': [
    # Notes:
    # 1) In static mode, the public 'sync' target has a target type of 'none',
    #    and is composed of the static library targets 'sync_api', 'sync_core',
    #    'sync_internal_api', 'sync_notifier', and 'sync_proto'.
    # 2) In component mode, we build the public 'sync' target into a single DLL,
    #    which includes the contents of sync_api.gypi, sync_core.gypi,
    #    sync_internal_api.gypi, sync_notifier.gypi, and sync_proto.gypi.
    # 3) All external targets that depend on anything in sync/ must simply
    #    declare a dependency on 'sync.gyp:sync'
    ['component=="static_library"', {
      'targets': [
        # The public sync static library target.
        {
          'target_name': 'sync',
          'type': 'none',
          'dependencies': [
            'sync_api',
            'sync_core',
            'sync_internal_api',
            'sync_notifier',
            'sync_proto',
          ],
          'export_dependent_settings': [
            'sync_notifier',
            'sync_proto',
          ],
        },

        # The sync external API library.
        {
          'target_name': 'sync_api',
          'type': 'static_library',
          'variables': { 'enable_wexit_time_destructors': 1, },
          'includes': [
            'sync_api.gypi',
          ],
          'dependencies': [
            'sync_internal_api',
            'sync_proto',
          ],
        },

        # The core sync library.
        {
          'target_name': 'sync_core',
          'type': 'static_library',
          'variables': { 'enable_wexit_time_destructors': 1, },
          'includes': [
            'sync_core.gypi',
          ],
          'dependencies': [
            'sync_notifier',
            'sync_proto',
          ],
          'export_dependent_settings': [
            'sync_notifier',
            'sync_proto',
          ],
        },

        # The sync internal API library.
        {
          'target_name': 'sync_internal_api',
          'type': 'static_library',
          'variables': { 'enable_wexit_time_destructors': 1, },
          'includes': [
            'sync_internal_api.gypi',
          ],
          'dependencies': [
            'sync_core',
            'sync_notifier',
            'sync_proto',
          ],
          'export_dependent_settings': [
            'sync_core',
            'sync_proto',
          ],
        },

        # The sync notifications library.
        {
          'target_name': 'sync_notifier',
          'type': 'static_library',
          'variables': { 'enable_wexit_time_destructors': 1, },
          'includes': [
            'sync_notifier.gypi',
          ],
        },

        # The sync protocol buffer library.
        {
          'target_name': 'sync_proto',
          'type': 'static_library',
          'variables': { 'enable_wexit_time_destructors': 1, },
          'includes': [
            'sync_proto.gypi',
          ],
        },
      ],
    },
    {  # component != static_library
      'targets': [
        # The public sync shared library target.
        {
          'target_name': 'sync',
          'type': 'shared_library',
          'variables': { 'enable_wexit_time_destructors': 1, },
          'includes': [
            'sync_api.gypi',
            'sync_core.gypi',
            'sync_internal_api.gypi',
            'sync_notifier.gypi',
            'sync_proto.gypi',
          ],
        },
      ],
    }],
  ],
}
