# 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")

config("compat_config") {
  include_dirs = []

  if (crashpad_is_mac) {
    include_dirs += [ "mac" ]
  } else if (!crashpad_is_ios) {
    include_dirs += [ "non_mac" ]
  }

  if (crashpad_is_linux || crashpad_is_android) {
    include_dirs += [ "linux" ]
  }

  if (crashpad_is_android) {
    include_dirs += [ "android" ]
  }

  if (crashpad_is_win) {
    include_dirs += [ "win" ]
  } else {
    include_dirs += [ "non_win" ]
  }

  if (!crashpad_is_linux && !crashpad_is_android && !crashpad_is_fuchsia) {
    include_dirs += [ "non_elf" ]
  }
}

template("compat_target") {
  if (crashpad_is_mac || crashpad_is_ios) {
    # There are no sources to compile, which doesn’t mix will with a
    # static_library.
    group(target_name) {
      forward_variables_from(invoker, "*")
    }
  } else {
    static_library(target_name) {
      forward_variables_from(invoker, "*")
    }
  }
}

compat_target("compat") {
  if (crashpad_is_in_starboard) {
    check_includes = false
  }

  sources = []

  if (crashpad_is_mac) {
    sources += [
      "mac/AvailabilityMacros.h",
      "mac/kern/exc_resource.h",
      "mac/mach-o/loader.h",
      "mac/mach/mach.h",
      "mac/sys/resource.h",
    ]
  } else if (!crashpad_is_ios) {
    sources += [
      "non_mac/mach-o/loader.h",
      "non_mac/mach/mach.h",
      "non_mac/mach/machine.h",
      "non_mac/mach/vm_prot.h",
    ]
  }

  if (crashpad_is_linux || crashpad_is_android) {
    sources += [
      "linux/signal.h",
      "linux/sys/mman.cc",
      "linux/sys/mman.h",
      "linux/sys/ptrace.h",
      "linux/sys/user.h",
    ]
  }

  if (!crashpad_is_in_starboard && crashpad_is_android) {
    sources += [
      "android/android/api-level.cc",
      "android/android/api-level.h",
      "android/dlfcn_internal.cc",
      "android/dlfcn_internal.h",
      "android/elf.h",
      "android/linux/elf.h",
      "android/linux/prctl.h",
      "android/linux/ptrace.h",
      "android/sched.h",
      "android/sys/epoll.cc",
      "android/sys/epoll.h",
      "android/sys/mman.cc",
      "android/sys/mman.h",
      "android/sys/syscall.h",
      "android/sys/user.h",
    ]
  }

  if (crashpad_is_win) {
    sources += [
      "win/getopt.h",
      "win/strings.cc",
      "win/strings.h",
      "win/sys/types.h",
      "win/time.cc",
      "win/time.h",
      "win/winbase.h",
      "win/winnt.h",
      "win/winternl.h",
    ]
  } else {
    sources += [
      "non_win/dbghelp.h",
      "non_win/minwinbase.h",
      "non_win/timezoneapi.h",
      "non_win/verrsrc.h",
      "non_win/windows.h",
      "non_win/winnt.h",
    ]
  }

  if (!crashpad_is_linux && !crashpad_is_android && !crashpad_is_fuchsia) {
    sources += [ "non_elf/elf.h" ]
  }

  public_configs = [
    ":compat_config",
    "..:crashpad_config",
  ]

  deps = []

  if (!crashpad_is_mac) {
    deps += [ "../third_party/xnu" ]
  }

  if (crashpad_is_win) {
    deps += [ "../third_party/getopt" ]
  }

  if (!crashpad_is_linux && !crashpad_is_android && !crashpad_is_fuchsia) {
    deps += [ "../third_party/glibc" ]
  }
}
