# 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") {
  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_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" ]
  }
}
