# 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/crash/core/browser
      'target_name': 'crash_core_browser',
      'type': 'static_library',
      'include_dirs': [
        '..',
      ],
      'dependencies': [
        'upload_list',
        '../base/base.gyp:base',
        '../components/components_strings.gyp:components_strings',
      ],
      'sources': [
        'crash/core/browser/crashes_ui_util.cc',
        'crash/core/browser/crashes_ui_util.h',
      ],
    },
    {
      # GN version: //components/crash/core/common
      'target_name': 'crash_core_common',
      'type': 'static_library',
      'include_dirs': [
        '..',
      ],
      'dependencies': [
        # List of dependencies is intentionally very minimal. Please avoid
        # adding extra dependencies without first checking with OWNERS.
        '../base/base.gyp:base',
      ],
      'sources': [
        'crash/core/common/crash_keys.cc',
        'crash/core/common/crash_keys.h',
      ],
      'conditions': [
        ['OS=="mac" or OS=="ios"', {
          'sources': [
            'crash/core/common/objc_zombie.h',
            'crash/core/common/objc_zombie.mm',
          ],
        }],
      ],
    },
  ],
  'conditions': [
    ['OS=="win" and target_arch=="ia32"', {
      'targets': [
        {
          'target_name': 'crash_core_common_win64',
          'type': 'static_library',
          'include_dirs': [
            '..',
          ],
          'dependencies': [
            # List of dependencies is intentionally very minimal. Please avoid
            # adding extra dependencies without first checking with OWNERS.
            '../base/base.gyp:base_win64',
          ],
          'sources': [
            'crash/core/common/crash_keys.cc',
            'crash/core/common/crash_keys.h',
          ],
          'configurations': {
            'Common_Base': {
              'msvs_target_platform': 'x64',
            },
          },
        },
      ],
    }],
    ['OS!="ios"', {
      'targets': [
        {
          'target_name': 'crash_component_lib',
          'type': 'static_library',
          'sources': [
            'crash/content/app/crash_keys_win.cc',
            'crash/content/app/crash_keys_win.h',
            'crash/content/app/crash_reporter_client.cc',
            'crash/content/app/crash_reporter_client.h',
          ],
          'include_dirs': [
            '..',
            '../breakpad/src',
          ],
        },
        {
          # TODO(mark): https://crbug.com/466890: merge this target with
          # crash_component.
          #
          # This is a temporary base target that is depended on by both
          # crash_component and crash_component_breakpad_to_be_deleted. It
          # provides everything common to both of those targets. For a short
          # period, there are two Mac and Windows crash component
          # implementations. The new one uses a Crashpad implementation and is
          # used by Chrome. The old one uses a Breakpad implementation and is
          # used by content_shell. Consumers should depend on the desired
          # target. All three targets behave identically on non-Mac/-Windows.
          # When content_shell and any other consumers are migrated to the
          # Crashpad implementation on Mac/Windows, crash_component will merge
          # back into this target, crash_component_non_mac_win, which will be
          # renamed crash_component. crash_component_breakpad_to_be_deleted will
          # be deleted.
          #
          # While this situation exists:
          #
          # Do not depend on this target directly! Depend on
          # crash_component_breakpad_to_be_deleted for old Breakpad behavior on
          # all platforms, or preferably, depend on crash_component to get Breakpad
          # everywhere except for Mac and Windows, where you will get Crashpad.
          #
          # GN version: //components/crash/content/app:app_non_mac
          'target_name': 'crash_component_non_mac_win',
          'variables': {
            'conditions': [
              ['OS == "ios" or OS == "mac"', {
                # On IOS there are no files compiled into the library, and we
                # can't have libraries with zero objects.
                # For now, the same applies to Mac OS X, until this target
                # merges with crash_component.
                'crash_component_target_type%': 'none',
              }, {
                'crash_component_target_type%': 'static_library',
              }],
            ],
          },
          'type': '<(crash_component_target_type)',
          'sources': [
            'crash/content/app/breakpad_linux.cc',
            'crash/content/app/breakpad_linux.h',
            'crash/content/app/breakpad_linux_impl.h',
            'crash/content/app/hard_error_handler_win.cc',
            'crash/content/app/hard_error_handler_win.h',
          ],
          'dependencies': [
            'crash_component_lib',
            '../base/base.gyp:base',
          ],
          'defines': ['CRASH_IMPLEMENTATION'],
          'conditions': [
            ['OS=="win"', {
              'dependencies': [
                '../breakpad/breakpad.gyp:breakpad_handler',
                '../breakpad/breakpad.gyp:breakpad_sender',
                '../sandbox/sandbox.gyp:sandbox',
              ],
            }],
            ['os_posix == 1 and OS != "mac" and OS != "ios"', {
              'dependencies': [
                '../breakpad/breakpad.gyp:breakpad_client',
              ],
              'include_dirs': [
                '../breakpad/src',
              ],
            }],
          ],
          'target_conditions': [
            # Need 'target_conditions' to override default filename_rules to include
            # the files on Android.
            ['OS=="android"', {
              'sources/': [
                ['include', '^crash/content/app/breakpad_linux\\.cc$'],
              ],
            }],
          ],
        },
        {
          # Note: if you depend on this target, you need to either link in
          # content.gyp:content_common, or add
          # content/public/common/content_switches.cc to your sources.
          #
          # GN version: //components/crash/content/app

          # TODO(mark): https://crbug.com/466890: merge this target with
          # crash_component_non_mac_win.
          #
          # Most of this target is actually in its dependency,
          # crash_component_non_mac_win.  See the comment in that target for an
          # explanation for the split. The split is temporary and the two targets
          # will be unified again soon.
          'target_name': 'crash_component',
          'variables': {
            'conditions': [
              ['OS != "mac" and OS != "win"', {
                # There are no source files except on Mac OS X and Windows.
                'crash_component_target_type%': 'none',
              }, {
                'crash_component_target_type%': 'static_library',
              }],
            ],
          },
          'type': '<(crash_component_target_type)',
          'sources': [
            'crash/content/app/crashpad.cc',
            'crash/content/app/crashpad.h',
            'crash/content/app/crashpad_mac.mm',
            'crash/content/app/crashpad_win.cc',
          ],
          'dependencies': [
            'crash_component_non_mac_win',
            'crash_component_lib',
            '../base/base.gyp:base',
          ],
          'defines': ['CRASH_IMPLEMENTATION'],
          'conditions': [
            ['OS=="mac" or OS=="win"', {
              'dependencies': [
                '../third_party/crashpad/crashpad/client/client.gyp:crashpad_client',
              ],
            }],
          ],
        },
        {
          # TODO(mark): https://crbug.com/466890: remove this target.
          #
          # This is a temporary target provided for Mac and Windows Breakpad
          # users that have not yet migrated to Crashpad (namely content_shell).
          # This target will be removed shortly and all consumers will be
          # expected to use Crashpad as the Mac and Windows crash-reporting
          # client. See the comment in the crash_component_non_mac_win target
          # for more details.
          #
          # GN version: //components/crash/content/app:app_breakpad_mac_to_be_deleted
          'target_name': 'crash_component_breakpad_to_be_deleted',
          'variables': {
            'conditions': [
              ['OS != "mac" and OS != "win"', {
                # There are no source files on any platform but Mac OS X and
                # Windows.
                'crash_component_target_type%': 'none',
              }, {
                'crash_component_target_type%': 'static_library',
              }],
            ],
          },
          'type': '<(crash_component_target_type)',
          'sources': [
            'crash/content/app/breakpad_mac.h',
            'crash/content/app/breakpad_mac.mm',
            'crash/content/app/breakpad_win.cc',
            'crash/content/app/breakpad_win.h',
          ],
          'dependencies': [
            'crash_component_non_mac_win',
            'crash_component_lib',
          ],
          'defines': ['CRASH_IMPLEMENTATION'],
          'conditions': [
            ['OS=="mac"', {
              'dependencies': [
                '../breakpad/breakpad.gyp:breakpad',
              ],
              'include_dirs': [
                '..',
                '../breakpad/src',
              ],
            }],
            ['OS=="win"', {
              'dependencies': [
                '../breakpad/breakpad.gyp:breakpad_handler',
              ],
              'include_dirs': [
                '..',
                '../breakpad/src',
              ],
            }],
          ],
        },
        {
          # GN version: //components/crash/content/app:test_support
          'target_name': 'crash_test_support',
          'type': 'none',
          'dependencies': [
            'crash_component_lib',
          ],
          'direct_dependent_settings': {
            'include_dirs' : [
              '../breakpad/src',
            ],
          }
        },
      ],
      'conditions': [
        ['OS=="win"', {
          'targets': [
            {
              # GN version: //components/crash/content/tools:crash_service
              'target_name': 'breakpad_crash_service',
              'type': 'static_library',
              'dependencies': [
                '../base/base.gyp:base',
                '../breakpad/breakpad.gyp:breakpad_handler',
                '../breakpad/breakpad.gyp:breakpad_sender',
              ],
              'sources': [
                'crash/content/tools/crash_service.cc',
                'crash/content/tools/crash_service.h',
              ],
            },
          ],
        }],
        ['OS=="win" and target_arch=="ia32"', {
          'targets': [
            {
              # Note: if you depend on this target, you need to either link in
              # content.gyp:content_common, or add
              # content/public/common/content_switches.cc to your sources.
              'target_name': 'breakpad_win64',
              'type': 'static_library',
              'sources': [
                'crash/content/app/breakpad_linux.cc',
                'crash/content/app/breakpad_linux.h',
                'crash/content/app/breakpad_linux_impl.h',
                'crash/content/app/breakpad_mac.h',
                'crash/content/app/breakpad_mac.mm',
                'crash/content/app/breakpad_win.cc',
                'crash/content/app/breakpad_win.h',
                # TODO(siggi): test the x64 version too.
                'crash/content/app/crash_keys_win.cc',
                'crash/content/app/crash_keys_win.h',
                'crash/content/app/crash_reporter_client.cc',
                'crash/content/app/crash_reporter_client.h',
                'crash/content/app/hard_error_handler_win.cc',
                'crash/content/app/hard_error_handler_win.h',
              ],
              'defines': [
                'COMPILE_CONTENT_STATICALLY',
                'CRASH_IMPLEMENTATION',
              ],
              'dependencies': [
                '../base/base.gyp:base_win64',
                '../breakpad/breakpad.gyp:breakpad_handler_win64',
                '../breakpad/breakpad.gyp:breakpad_sender_win64',
                '../sandbox/sandbox.gyp:sandbox_win64',
              ],
              'configurations': {
                'Common_Base': {
                  'msvs_target_platform': 'x64',
                },
              },
            },
            {
              # GN version: //components/crash/content/tools:crash_service
              'target_name': 'breakpad_crash_service_win64',
              'type': 'static_library',
              'dependencies': [
                '../base/base.gyp:base_win64',
                '../breakpad/breakpad.gyp:breakpad_handler_win64',
                '../breakpad/breakpad.gyp:breakpad_sender_win64',
              ],
              'sources': [
                'crash/content/tools/crash_service.cc',
                'crash/content/tools/crash_service.h',
              ],
              'configurations': {
                'Common_Base': {
                  'msvs_target_platform': 'x64',
                },
              },
            },
          ],
        }],
        ['OS=="mac"', {
          'targets': [
            {
              'target_name': 'breakpad_stubs',
              'type': 'static_library',
              'dependencies': [
                '../base/base.gyp:base',
              ],
              'sources': [
                'crash/content/app/breakpad_mac.h',
                'crash/content/app/breakpad_mac_stubs.mm',
                'crash/content/app/crash_reporter_client.cc',
                'crash/content/app/crash_reporter_client.h',
              ],
            },
          ],
        }],
        ['os_posix == 1 and OS != "mac"', {
          'targets': [
            {
              # GN version: //components/crash/content/browser
              'target_name': 'breakpad_host',
              'type': 'static_library',
              'dependencies': [
                'crash_component',
                '../base/base.gyp:base',
                '../breakpad/breakpad.gyp:breakpad_client',
                '../content/content.gyp:content_browser',
                '../content/content.gyp:content_common',
              ],
              'sources': [
                'crash/content/browser/crash_dump_manager_android.cc',
                'crash/content/browser/crash_dump_manager_android.h',
                'crash/content/browser/crash_handler_host_linux.cc',
                'crash/content/browser/crash_handler_host_linux.h',
              ],
              'include_dirs': [
                '../breakpad/src',
              ],
              'target_conditions': [
                # Need 'target_conditions' to override default filename_rules to include
                # the files on Android.
                ['OS=="android"', {
                  'sources/': [
                    ['include', '^crash/content/browser/crash_handler_host_linux\\.cc$'],
                  ],
                }],
              ],
            },
          ],
        }],
      ],
    }],
  ],
}
