# Copyright (c) 2012 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.

{
  'includes': [
    'breakpad_sender.gypi',
    'breakpad_handler.gypi',
  ],
  'conditions': [
    # minidump_stackwalk and minidump_dump are tool-type executables that do
    # not build on iOS.
    ['OS!="ios" and OS!="win"', {
      'targets': [
        {
          'target_name': 'minidump_stackwalk',
          'type': 'executable',
          'includes': ['breakpad_tools.gypi'],
          'defines': ['BPLOG_MINIMUM_SEVERITY=SEVERITY_ERROR'],
          'sources': [
            'src/processor/basic_code_module.h',
            'src/processor/basic_code_modules.cc',
            'src/processor/basic_code_modules.h',
            'src/processor/basic_source_line_resolver.cc',
            'src/processor/binarystream.cc',
            'src/processor/binarystream.h',
            'src/processor/call_stack.cc',
            'src/processor/cfi_frame_info.cc',
            'src/processor/cfi_frame_info.h',
            'src/processor/disassembler_x86.cc',
            'src/processor/disassembler_x86.h',
            'src/processor/exploitability.cc',
            'src/processor/exploitability_linux.cc',
            'src/processor/exploitability_linux.h',
            'src/processor/exploitability_win.cc',
            'src/processor/exploitability_win.h',
            'src/processor/logging.cc',
            'src/processor/logging.h',
            'src/processor/minidump.cc',
            'src/processor/minidump_processor.cc',
            'src/processor/minidump_stackwalk.cc',
            'src/processor/pathname_stripper.cc',
            'src/processor/pathname_stripper.h',
            'src/processor/process_state.cc',
            'src/processor/simple_symbol_supplier.cc',
            'src/processor/simple_symbol_supplier.h',
            'src/processor/source_line_resolver_base.cc',
            'src/processor/stack_frame_cpu.cc',
            'src/processor/stack_frame_symbolizer.cc',
            'src/processor/stackwalker.cc',
            'src/processor/stackwalker_amd64.cc',
            'src/processor/stackwalker_amd64.h',
            'src/processor/stackwalker_arm.cc',
            'src/processor/stackwalker_arm.h',
            'src/processor/stackwalker_arm64.cc',
            'src/processor/stackwalker_arm64.h',
            'src/processor/stackwalker_mips.cc',
            'src/processor/stackwalker_mips.h',
            'src/processor/stackwalker_ppc.cc',
            'src/processor/stackwalker_ppc.h',
            'src/processor/stackwalker_ppc64.cc',
            'src/processor/stackwalker_ppc64.h',
            'src/processor/stackwalker_sparc.cc',
            'src/processor/stackwalker_sparc.h',
            'src/processor/stackwalker_x86.cc',
            'src/processor/stackwalker_x86.h',
            'src/processor/tokenize.cc',
            'src/processor/tokenize.h',
            # libdisasm
            'src/third_party/libdisasm/ia32_implicit.c',
            'src/third_party/libdisasm/ia32_implicit.h',
            'src/third_party/libdisasm/ia32_insn.c',
            'src/third_party/libdisasm/ia32_insn.h',
            'src/third_party/libdisasm/ia32_invariant.c',
            'src/third_party/libdisasm/ia32_invariant.h',
            'src/third_party/libdisasm/ia32_modrm.c',
            'src/third_party/libdisasm/ia32_modrm.h',
            'src/third_party/libdisasm/ia32_opcode_tables.c',
            'src/third_party/libdisasm/ia32_opcode_tables.h',
            'src/third_party/libdisasm/ia32_operand.c',
            'src/third_party/libdisasm/ia32_operand.h',
            'src/third_party/libdisasm/ia32_reg.c',
            'src/third_party/libdisasm/ia32_reg.h',
            'src/third_party/libdisasm/ia32_settings.c',
            'src/third_party/libdisasm/ia32_settings.h',
            'src/third_party/libdisasm/libdis.h',
            'src/third_party/libdisasm/qword.h',
            'src/third_party/libdisasm/x86_disasm.c',
            'src/third_party/libdisasm/x86_format.c',
            'src/third_party/libdisasm/x86_imm.c',
            'src/third_party/libdisasm/x86_imm.h',
            'src/third_party/libdisasm/x86_insn.c',
            'src/third_party/libdisasm/x86_misc.c',
            'src/third_party/libdisasm/x86_operand_list.c',
            'src/third_party/libdisasm/x86_operand_list.h',
          ],
        },
        {
          'target_name': 'minidump_dump',
          'type': 'executable',
          'includes': ['breakpad_tools.gypi'],
          'sources': [
            'src/processor/basic_code_module.h',
            'src/processor/basic_code_modules.cc',
            'src/processor/basic_code_modules.h',
            'src/processor/logging.cc',
            'src/processor/logging.h',
            'src/processor/minidump.cc',
            'src/processor/minidump_dump.cc',
            'src/processor/pathname_stripper.cc',
            'src/processor/pathname_stripper.h',
          ],
        },
      ],
    }],
    ['OS=="mac" or (OS=="ios" and "<(GENERATOR)"=="ninja")', {
      'target_defaults': {
        'include_dirs': [
          'src',
        ],
        'configurations': {
          'Debug_Base': {
            'defines': [
              # This is needed for GTMLogger to work correctly.
              'DEBUG',
            ],
          },
        },
      },
      'targets': [
        {
          'target_name': 'dump_syms',
          'type': 'executable',
          'toolsets': ['host'],
          'include_dirs': [
            'src/common/mac',
          ],
          'sources': [
            'src/common/dwarf/bytereader.cc',
            'src/common/dwarf_cfi_to_module.cc',
            'src/common/dwarf_cu_to_module.cc',
            'src/common/dwarf/dwarf2diehandler.cc',
            'src/common/dwarf/dwarf2reader.cc',
            'src/common/dwarf_line_to_module.cc',
            'src/common/language.cc',
            'src/common/mac/arch_utilities.cc',
            'src/common/mac/arch_utilities.h',
            'src/common/mac/dump_syms.mm',
            'src/common/mac/file_id.cc',
            'src/common/mac/macho_id.cc',
            'src/common/mac/macho_reader.cc',
            'src/common/mac/macho_utilities.cc',
            'src/common/mac/macho_walker.cc',
            'src/common/md5.cc',
            'src/common/module.cc',
            'src/common/stabs_reader.cc',
            'src/common/stabs_to_module.cc',
            'src/tools/mac/dump_syms/dump_syms_tool.mm',
          ],
          'defines': [
            # For src/common/stabs_reader.h.
            'HAVE_MACH_O_NLIST_H',
          ],
          'xcode_settings': {
            # Like ld, dump_syms needs to operate on enough data that it may
            # actually need to be able to address more than 4GB. Use x86_64.
            # Don't worry! An x86_64 dump_syms is perfectly able to dump
            # 32-bit files.
            'ARCHS': [
              'x86_64',
            ],

            # The DWARF utilities require -funsigned-char.
            'GCC_CHAR_IS_UNSIGNED_CHAR': 'YES',

            # dwarf2reader.cc uses dynamic_cast.
            'GCC_ENABLE_CPP_RTTI': 'YES',
          },
          'link_settings': {
            'libraries': [
              '$(SDKROOT)/System/Library/Frameworks/Foundation.framework',
            ],
          },
          'configurations': {
            'Release_Base': {
              'xcode_settings': {
                # dump_syms crashes when built at -O1, -O2, and -O3.  It does
                # not crash at -Os.  To play it safe, dump_syms is always built
                # at -O0 until this can be sorted out.
                # http://code.google.com/p/google-breakpad/issues/detail?id=329
                'GCC_OPTIMIZATION_LEVEL': '0',  # -O0
               },
             },
          },
        },
        {
          'target_name': 'symupload',
          'type': 'executable',
          'toolsets': ['host'],
          'include_dirs': [
            'src/common/mac',
          ],
          'sources': [
            'src/common/mac/HTTPMultipartUpload.m',
            'src/tools/mac/symupload/symupload.m',
          ],
          'link_settings': {
            'libraries': [
              '$(SDKROOT)/System/Library/Frameworks/Foundation.framework',
            ],
          }
        },
      ],
    }],
    ['OS=="mac"', {
      'target_defaults': {
        'include_dirs': [
          'src',
        ],
        'configurations': {
          'Debug_Base': {
            'defines': [
              # This is needed for GTMLogger to work correctly.
              'DEBUG',
            ],
          },
        },
      },
      'targets': [
        {
          'target_name': 'breakpad_utilities',
          'type': 'static_library',
          'sources': [
            'src/client/mac/handler/breakpad_nlist_64.cc',
            'src/client/mac/handler/dynamic_images.cc',
            'src/client/mac/handler/minidump_generator.cc',
            'src/client/minidump_file_writer.cc',
            'src/common/convert_UTF.c',
            'src/common/mac/MachIPC.mm',
            'src/common/mac/arch_utilities.cc',
            'src/common/mac/bootstrap_compat.cc',
            'src/common/mac/file_id.cc',
            'src/common/mac/macho_id.cc',
            'src/common/mac/macho_utilities.cc',
            'src/common/mac/macho_walker.cc',
            'src/common/mac/string_utilities.cc',
            'src/common/md5.cc',
            'src/common/simple_string_dictionary.cc',
            'src/common/string_conversion.cc',
          ],
        },
        {
          'target_name': 'crash_inspector',
          'type': 'executable',
          'variables': {
            'mac_real_dsym': 1,
          },
          'dependencies': [
            'breakpad_utilities',
          ],
          'include_dirs': [
            'src/client/apple/Framework',
            'src/common/mac',
          ],
          'sources': [
            'src/client/mac/crash_generation/ConfigFile.mm',
            'src/client/mac/crash_generation/Inspector.mm',
            'src/client/mac/crash_generation/InspectorMain.mm',
          ],
          'link_settings': {
            'libraries': [
              '$(SDKROOT)/System/Library/Frameworks/CoreServices.framework',
              '$(SDKROOT)/System/Library/Frameworks/Foundation.framework',
            ],
          }
        },
        {
          'target_name': 'crash_report_sender',
          'type': 'executable',
          'mac_bundle': 1,
          'variables': {
            'mac_real_dsym': 1,
          },
          'include_dirs': [
            'src/common/mac',
          ],
          'sources': [
            'src/common/mac/HTTPMultipartUpload.m',
            'src/client/mac/sender/crash_report_sender.m',
            'src/client/mac/sender/uploader.mm',
            'src/common/mac/GTMLogger.m',
          ],
          'mac_bundle_resources': [
            'src/client/mac/sender/English.lproj/Localizable.strings',
            'src/client/mac/sender/crash_report_sender.icns',
            'src/client/mac/sender/Breakpad.xib',
            'src/client/mac/sender/crash_report_sender-Info.plist',
          ],
          'mac_bundle_resources!': [
             'src/client/mac/sender/crash_report_sender-Info.plist',
          ],
          'xcode_settings': {
             'INFOPLIST_FILE': 'src/client/mac/sender/crash_report_sender-Info.plist',
          },
          'link_settings': {
            'libraries': [
              '$(SDKROOT)/System/Library/Frameworks/AppKit.framework',
              '$(SDKROOT)/System/Library/Frameworks/Foundation.framework',
              '$(SDKROOT)/System/Library/Frameworks/SystemConfiguration.framework',
            ],
          }
        },
        {
          'target_name': 'breakpad',
          'type': 'static_library',
          'dependencies': [
            'breakpad_utilities',
            'crash_inspector',
            'crash_report_sender',
          ],
          'include_dirs': [
            'src/client/apple/Framework',
          ],
          'direct_dependent_settings': {
            'include_dirs': [
              'src/client/apple/Framework',
            ],
          },
          'defines': [
            'USE_PROTECTED_ALLOCATIONS=1',
          ],
          'sources': [
            'src/client/mac/crash_generation/crash_generation_client.cc',
            'src/client/mac/crash_generation/crash_generation_client.h',
            'src/client/mac/handler/protected_memory_allocator.cc',
            'src/client/mac/handler/exception_handler.cc',
            'src/client/mac/Framework/Breakpad.mm',
            'src/client/mac/Framework/OnDemandServer.mm',
          ],
        },
      ],
    }],
    [ 'OS=="linux" or OS=="android" or OS=="freebsd"', {
      'conditions': [
        ['OS=="android"', {
          'defines': [
            '__ANDROID__',
          ],
        }],
      ],
      # Tools needed for archiving build symbols.
      'targets': [
        {
          'target_name': 'symupload',
          'type': 'executable',

          'includes': ['breakpad_tools.gypi'],

          'sources': [
            'src/tools/linux/symupload/sym_upload.cc',
            'src/common/linux/http_upload.cc',
            'src/common/linux/http_upload.h',
          ],
          'include_dirs': [
            'src',
            'src/third_party',
          ],
          'link_settings': {
            'libraries': [
              '-ldl',
            ],
          },
        },
        {
          'target_name': 'dump_syms',
          'type': 'executable',
          'conditions': [
            ['OS=="android"', {
              'toolsets': [ 'host' ],
            }],
          ],

          # dwarf2reader.cc uses dynamic_cast. Because we don't typically
          # don't support RTTI, we enable it for this single target. Since
          # dump_syms doesn't share any object files with anything else,
          # this doesn't end up polluting Chrome itself.
          'cflags_cc!': ['-fno-rtti'],

          'sources': [
            'src/common/dwarf/bytereader.cc',
            'src/common/dwarf_cfi_to_module.cc',
            'src/common/dwarf_cfi_to_module.h',
            'src/common/dwarf_cu_to_module.cc',
            'src/common/dwarf_cu_to_module.h',
            'src/common/dwarf/dwarf2diehandler.cc',
            'src/common/dwarf/dwarf2reader.cc',
            'src/common/dwarf_line_to_module.cc',
            'src/common/dwarf_line_to_module.h',
            'src/common/language.cc',
            'src/common/language.h',
            'src/common/linux/crc32.cc',
            'src/common/linux/crc32.h',
            'src/common/linux/dump_symbols.cc',
            'src/common/linux/dump_symbols.h',
            'src/common/linux/elf_symbols_to_module.cc',
            'src/common/linux/elf_symbols_to_module.h',
            'src/common/linux/elfutils.cc',
            'src/common/linux/elfutils.h',
            'src/common/linux/file_id.cc',
            'src/common/linux/file_id.h',
            'src/common/linux/linux_libc_support.cc',
            'src/common/linux/linux_libc_support.h',
            'src/common/linux/memory_mapped_file.cc',
            'src/common/linux/memory_mapped_file.h',
            'src/common/linux/guid_creator.h',
            'src/common/module.cc',
            'src/common/module.h',
            'src/common/stabs_reader.cc',
            'src/common/stabs_reader.h',
            'src/common/stabs_to_module.cc',
            'src/common/stabs_to_module.h',
            'src/tools/linux/dump_syms/dump_syms.cc',
          ],

          # Breakpad rev 583 introduced this flag.
          # Using this define, stabs_reader.h will include a.out.h to
          # build on Linux.
          'defines': [
            'HAVE_A_OUT_H',
          ],

          'include_dirs': [
            'src',
            '..',
          ],
        },
        {
          'target_name': 'breakpad_client',
          'type': 'static_library',

          'sources': [
            'src/client/linux/crash_generation/crash_generation_client.cc',
            'src/client/linux/crash_generation/crash_generation_client.h',
            'src/client/linux/handler/exception_handler.cc',
            'src/client/linux/handler/exception_handler.h',
            'src/client/linux/handler/minidump_descriptor.cc',
            'src/client/linux/handler/minidump_descriptor.h',
            'src/client/linux/log/log.cc',
            'src/client/linux/log/log.h',
            'src/client/linux/minidump_writer/cpu_set.h',
            'src/client/linux/minidump_writer/directory_reader.h',
            'src/client/linux/minidump_writer/line_reader.h',
            'src/client/linux/minidump_writer/linux_core_dumper.cc',
            'src/client/linux/minidump_writer/linux_core_dumper.h',
            'src/client/linux/minidump_writer/linux_dumper.cc',
            'src/client/linux/minidump_writer/linux_dumper.h',
            'src/client/linux/minidump_writer/linux_ptrace_dumper.cc',
            'src/client/linux/minidump_writer/linux_ptrace_dumper.h',
            'src/client/linux/minidump_writer/minidump_writer.cc',
            'src/client/linux/minidump_writer/minidump_writer.h',
            'src/client/linux/minidump_writer/proc_cpuinfo_reader.h',
            'src/client/minidump_file_writer-inl.h',
            'src/client/minidump_file_writer.cc',
            'src/client/minidump_file_writer.h',
            'src/common/convert_UTF.c',
            'src/common/convert_UTF.h',
            'src/common/linux/elf_core_dump.cc',
            'src/common/linux/elf_core_dump.h',
            'src/common/linux/elfutils.cc',
            'src/common/linux/elfutils.h',
            'src/common/linux/file_id.cc',
            'src/common/linux/file_id.h',
            'src/common/linux/google_crashdump_uploader.cc',
            'src/common/linux/google_crashdump_uploader.h',
            'src/common/linux/guid_creator.cc',
            'src/common/linux/guid_creator.h',
            'src/common/linux/libcurl_wrapper.cc',
            'src/common/linux/libcurl_wrapper.h',
            'src/common/linux/linux_libc_support.cc',
            'src/common/linux/linux_libc_support.h',
            'src/common/linux/memory_mapped_file.cc',
            'src/common/linux/memory_mapped_file.h',
            'src/common/linux/safe_readlink.cc',
            'src/common/linux/safe_readlink.h',
            'src/common/memory.h',
            'src/common/simple_string_dictionary.cc',
            'src/common/simple_string_dictionary.h',
            'src/common/string_conversion.cc',
            'src/common/string_conversion.h',
          ],

          'conditions': [
            # Android NDK toolchain doesn't support -mimplicit-it=always
            ['target_arch=="arm" and OS!="android"', {
              'cflags': ['-Wa,-mimplicit-it=always'],
            }],
            ['target_arch=="arm" and chromeos==1', {
              # Avoid running out of registers in
              # linux_syscall_support.h:sys_clone()'s inline assembly.
              'cflags': ['-marm'],
            }],
            ['OS=="android"', {
              'include_dirs': [
                'src/common/android/include',
              ],
              'direct_dependent_settings': {
                'include_dirs': [
                  'src/common/android/include',
                ],
              },
              'sources': [
                'src/common/android/breakpad_getcontext.S',
              ],
            }],
            ['OS!="android"', {
              'link_settings': {
                'libraries': [
                  # In case of Android, '-ldl' is added in common.gypi, since it
                  # is needed for stlport_static. For LD, the order of libraries
                  # is important, and thus we skip to add it here.
                  '-ldl',
                ],
              },
            }],
          ],

          'include_dirs': [
            'src',
            'src/client',
            'src/third_party/linux/include',
            '..',
            '.',
          ],
        },
        {
          # Breakpad r693 uses some files from src/processor in unit tests.
          'target_name': 'breakpad_processor_support',
          'type': 'static_library',

          'sources': [
            'src/common/scoped_ptr.h',
            'src/processor/basic_code_modules.cc',
            'src/processor/basic_code_modules.h',
            'src/processor/logging.cc',
            'src/processor/logging.h',
            'src/processor/minidump.cc',
            'src/processor/pathname_stripper.cc',
            'src/processor/pathname_stripper.h',
          ],

          'include_dirs': [
            'src',
            'src/client',
            'src/third_party/linux/include',
            '..',
            '.',
          ],
        },
        {
          'target_name': 'breakpad_unittests',
          'type': 'executable',
          'dependencies': [
            '../testing/gtest.gyp:gtest',
            '../testing/gtest.gyp:gtest_main',
            '../testing/gmock.gyp:gmock',
            'breakpad_client',
            'breakpad_processor_support',
            'linux_dumper_unittest_helper',
          ],

          'sources': [
            'linux/breakpad_googletest_includes.h',
            'src/client/linux/handler/exception_handler_unittest.cc',
            'src/client/linux/minidump_writer/cpu_set_unittest.cc',
            'src/client/linux/minidump_writer/directory_reader_unittest.cc',
            'src/client/linux/minidump_writer/line_reader_unittest.cc',
            'src/client/linux/minidump_writer/linux_core_dumper_unittest.cc',
            'src/client/linux/minidump_writer/linux_ptrace_dumper_unittest.cc',
            'src/client/linux/minidump_writer/minidump_writer_unittest.cc',
            'src/client/linux/minidump_writer/minidump_writer_unittest_utils.cc',
            'src/client/linux/minidump_writer/proc_cpuinfo_reader_unittest.cc',
            'src/common/linux/elf_core_dump_unittest.cc',
            'src/common/linux/file_id_unittest.cc',
            'src/common/linux/linux_libc_support_unittest.cc',
            'src/common/linux/synth_elf.cc',
            'src/common/linux/tests/auto_testfile.h',
            'src/common/linux/tests/crash_generator.cc',
            'src/common/linux/tests/crash_generator.h',
            'src/common/memory_range.h',
            'src/common/memory_unittest.cc',
            'src/common/simple_string_dictionary_unittest.cc',
            'src/common/test_assembler.cc',
            'src/common/tests/file_utils.cc',
            'src/common/tests/file_utils.h',
            'src/tools/linux/md2core/minidump_memory_range.h',
            'src/tools/linux/md2core/minidump_memory_range_unittest.cc',
          ],

          'include_dirs': [
            'linux', # Use our copy of breakpad_googletest_includes.h
            'src',
            '..',
            '.',
          ],
          'conditions': [
            [ 'clang == 1', {
              'cflags': [
                # See http://crbug.com/138571#c18
                '-Wno-unused-value',
              ],
            }],
            ['OS=="android"', {
              'libraries': [
                '-llog',
              ],
              'include_dirs': [
                'src/common/android/include',
              ],
              'sources': [
                'src/common/android/breakpad_getcontext_unittest.cc',
              ],
            }],
          ],
        },
        {
          'target_name': 'linux_dumper_unittest_helper',
          'type': 'executable',
          'dependencies': [
            'breakpad_processor_support',
          ],
          'sources': [
            'src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc',
          ],

          'include_dirs': [
            'src',
            '..',
          ],
          'conditions': [
            ['target_arch=="mipsel" and OS=="android"', {
              'include_dirs': [
                'src/common/android/include',
              ],
            }],
          ],
        },
        {
          'target_name': 'generate_test_dump',
          'type': 'executable',

          'sources': [
            'linux/generate-test-dump.cc',
          ],

          'dependencies': [
            'breakpad_client',
          ],

          'include_dirs': [
            '..',
            'src',
          ],
          'conditions': [
            ['OS=="android"', {
              'libraries': [
                '-llog',
              ],
              'include_dirs': [
                'src/common/android/include',
              ],
            }],
          ],
        },
        {
          'target_name': 'minidump-2-core',
          'type': 'executable',

          'sources': [
            'src/tools/linux/md2core/minidump-2-core.cc'
          ],

          'dependencies': [
            'breakpad_client',
          ],

          'include_dirs': [
            '..',
            'src',
          ],
        },
        {
          'target_name': 'core-2-minidump',
          'type': 'executable',

          'sources': [
            'src/tools/linux/core2md/core2md.cc'
          ],

          'dependencies': [
            'breakpad_client',
          ],

          'include_dirs': [
            '..',
            'src',
          ],
        },
      ],
    }],
    ['OS=="ios"', {
      'targets': [
        {
          'target_name': 'breakpad_client',
          'type': 'static_library',
          'sources': [
            'src/client/ios/Breakpad.h',
            'src/client/ios/Breakpad.mm',
            'src/client/ios/BreakpadController.h',
            'src/client/ios/BreakpadController.mm',
            'src/client/ios/handler/ios_exception_minidump_generator.mm',
            'src/client/ios/handler/ios_exception_minidump_generator.h',
            'src/client/mac/crash_generation/ConfigFile.h',
            'src/client/mac/crash_generation/ConfigFile.mm',
            'src/client/mac/handler/breakpad_nlist_64.cc',
            'src/client/mac/handler/breakpad_nlist_64.h',
            'src/client/mac/handler/dynamic_images.cc',
            'src/client/mac/handler/dynamic_images.h',
            'src/client/mac/handler/protected_memory_allocator.cc',
            'src/client/mac/handler/protected_memory_allocator.h',
            'src/client/mac/handler/exception_handler.cc',
            'src/client/mac/handler/exception_handler.h',
            'src/client/mac/handler/minidump_generator.cc',
            'src/client/mac/handler/minidump_generator.h',
            'src/client/mac/sender/uploader.h',
            'src/client/mac/sender/uploader.mm',
            'src/client/minidump_file_writer.cc',
            'src/client/minidump_file_writer.h',
            'src/client/minidump_file_writer-inl.h',
            'src/common/convert_UTF.c',
            'src/common/convert_UTF.h',
            'src/common/mac/file_id.cc',
            'src/common/mac/file_id.h',
            'src/common/mac/HTTPMultipartUpload.m',
            'src/common/mac/macho_id.cc',
            'src/common/mac/macho_id.h',
            'src/common/mac/macho_utilities.cc',
            'src/common/mac/macho_utilities.h',
            'src/common/mac/macho_walker.cc',
            'src/common/mac/macho_walker.h',
            'src/common/mac/string_utilities.cc',
            'src/common/mac/string_utilities.h',
            'src/common/md5.cc',
            'src/common/md5.h',
            'src/common/simple_string_dictionary.cc',
            'src/common/simple_string_dictionary.h',
            'src/common/string_conversion.cc',
            'src/common/string_conversion.h',
            'src/google_breakpad/common/minidump_format.h',
          ],
          'include_dirs': [
            'src',
            'src/client/mac/Framework',
            'src/common/mac',
          ],
        }
      ]
    }],
    ['OS=="ios" and "<(GENERATOR)"!="ninja"', {
      'variables': {
        'ninja_output_dir': 'ninja-breakpad',
        'ninja_product_dir':
          '<(DEPTH)/xcodebuild/<(ninja_output_dir)/<(CONFIGURATION_NAME)',
      },
      # Generation is done via two actions: (1) compiling the executable with
      # ninja, and (2) copying the executable into a location that is shared
      # with other projects. These actions are separated into two targets in
      # order to be able to specify that the second action should not run until
      # the first action finishes (since the ordering of multiple actions in
      # one target is defined only by inputs and outputs, and it's impossible
      # to set correct inputs for the ninja build, so setting all the inputs
      # and outputs isn't an option).
      'targets': [
        {
          'target_name': 'compile_breakpad_utilities',
          'type': 'none',
          'variables': {
            # Gyp to rerun
            're_run_targets': [
              'breakpad/breakpad.gyp',
            ],
          },
          'includes': ['../build/ios/mac_build.gypi'],
          'actions': [
            {
              'action_name': 'compile breakpad utilities',
              'inputs': [],
              'outputs': [],
              'action': [
                '<@(ninja_cmd)',
                'dump_syms',
                'symupload',
              ],
              'message': 'Generating the breakpad executables',
            },
          ],
        },
        {
          'target_name': 'breakpad_utilities',
          'type': 'none',
          'dependencies': [
            'compile_breakpad_utilities',
          ],
          'actions': [
            {
              'action_name': 'copy dump_syms',
              'inputs': [
                '<(ninja_product_dir)/dump_syms',
              ],
              'outputs': [
                '<(PRODUCT_DIR)/dump_syms',
              ],
              'action': [
                'cp',
                '<(ninja_product_dir)/dump_syms',
                '<(PRODUCT_DIR)/dump_syms',
              ],
            },
            {
              'action_name': 'copy symupload',
              'inputs': [
                '<(ninja_product_dir)/symupload',
              ],
              'outputs': [
                '<(PRODUCT_DIR)/symupload',
              ],
              'action': [
                'cp',
                '<(ninja_product_dir)/symupload',
                '<(PRODUCT_DIR)/symupload',
              ],
            },
          ],
        },
        {
          'target_name': 'dump_syms',
          'type': 'none',
          'dependencies': [
            'breakpad_utilities',
          ],
        },
        {
          'target_name': 'symupload',
          'type': 'none',
          'dependencies': [
            'breakpad_utilities',
          ],
        }
      ],
    }],
    ['OS=="android"', {
      'targets': [
        {
          'target_name': 'breakpad_unittests_stripped',
          'type': 'none',
          'dependencies': [ 'breakpad_unittests' ],
          'actions': [{
            'action_name': 'strip breakpad_unittests',
            'inputs': [ '<(PRODUCT_DIR)/breakpad_unittests' ],
            'outputs': [ '<(PRODUCT_DIR)/breakpad_unittests_stripped' ],
            'action': [ '<(android_strip)', '<@(_inputs)', '-o', '<@(_outputs)' ],
          }],
        }
      ],
    }],
  ],
}