# Copyright 2015 The Crashpad Authors. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import("../build/crashpad_buildconfig.gni")

if (crashpad_is_in_chromium) {
  # Prevent Chromium source assignment filters from being inherited.
  set_sources_assignment_filter([])
}

source_set("tool_support") {
  sources = [
    "tool_support.cc",
    "tool_support.h",
  ]

  public_configs = [ "..:crashpad_config" ]

  deps = [ "../third_party/mini_chromium:base" ]
}

if (!crashpad_is_ios) {
  crashpad_executable("crashpad_database_util") {
    sources = [ "crashpad_database_util.cc" ]

    deps = [
      ":tool_support",
      "../build:default_exe_manifest_win",
      "../client",
      "../compat",
      "../third_party/mini_chromium:base",
      "../util",
    ]
  }

  crashpad_executable("crashpad_http_upload") {
    sources = [ "crashpad_http_upload.cc" ]

    deps = [
      ":tool_support",
      "../build:default_exe_manifest_win",
      "../compat",
      "../third_party/mini_chromium:base",
      "../util",
    ]
  }
}

crashpad_executable("base94_encoder") {
  sources = [ "base94_encoder.cc" ]
  deps = [
    ":tool_support",
    "../build:default_exe_manifest_win",
    "../third_party/mini_chromium:base",
    "../util",
  ]
}

if (!crashpad_is_fuchsia && !crashpad_is_ios) {
  crashpad_executable("generate_dump") {
    sources = [ "generate_dump.cc" ]

    deps = [
      ":tool_support",
      "../build:default_exe_manifest_win",
      "../compat",
      "../minidump",
      "../snapshot",
      "../third_party/mini_chromium:base",
      "../util",
    ]

    if (crashpad_is_mac) {
      # This would be better as a config so that it could be shared with
      # exception_port_tool, but configs can’t alter “inputs”.
      # https://crbug.com/781858.
      inputs = [ "mac/sectaskaccess_info.plist" ]
      ldflags = [
        "-sectcreate",
        "__TEXT",
        "__info_plist",
        rebase_path(inputs[0], root_build_dir),
      ]
    }

    if (crashpad_is_win) {
      cflags =
          [ "/wd4201" ]  # nonstandard extension used : nameless struct/union
    }
  }
}

if (crashpad_is_mac || crashpad_is_fuchsia) {
  crashpad_executable("run_with_crashpad") {
    sources = [ "run_with_crashpad.cc" ]

    deps = [
      ":tool_support",
      "../client",
      "../compat",
      "../third_party/mini_chromium:base",
      "../util",
    ]
  }
}

if (crashpad_is_mac) {
  crashpad_executable("catch_exception_tool") {
    sources = [ "mac/catch_exception_tool.cc" ]

    deps = [
      ":tool_support",
      "../compat",
      "../third_party/mini_chromium:base",
      "../util",
    ]
  }

  crashpad_executable("exception_port_tool") {
    sources = [ "mac/exception_port_tool.cc" ]

    # This would be better as a config so that it could be shared with
    # generate_dump, but configs can’t alter “inputs”. https://crbug.com/781858.
    inputs = [ "mac/sectaskaccess_info.plist" ]
    ldflags = [
      "-sectcreate",
      "__TEXT",
      "__info_plist",
      rebase_path(inputs[0], root_build_dir),
    ]

    deps = [
      ":tool_support",
      "../compat",
      "../third_party/mini_chromium:base",
      "../util",
    ]
  }

  crashpad_executable("on_demand_service_tool") {
    sources = [ "mac/on_demand_service_tool.mm" ]

    frameworks = [
      "CoreFoundation.framework",
      "Foundation.framework",
    ]

    deps = [
      ":tool_support",
      "../compat",
      "../third_party/mini_chromium:base",
      "../util",
    ]
  }
}
