# Copyright 2014 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.

import("//build/config/mac/mac_sdk.gni")
import("//testing/test.gni")
import("//third_party/protobuf/proto_library.gni")

proto_library("seatbelt_proto") {
  visibility = [ ":*" ]
  sources = [
    "seatbelt.proto",
  ]
}

component("seatbelt") {
  sources = [
    "sandbox_compiler.cc",
    "sandbox_compiler.h",
    "sandbox_logging.cc",
    "sandbox_logging.h",
    "seatbelt.cc",
    "seatbelt.h",
    "seatbelt_exec.cc",
    "seatbelt_exec.h",
    "seatbelt_export.h",
  ]
  libs = [ "sandbox" ]
  deps = [
    ":seatbelt_proto",
  ]
  public_deps = [
    "//third_party/protobuf:protobuf_lite",
  ]
  defines = [ "SEATBELT_IMPLEMENTATION" ]
}

component("seatbelt_extension") {
  sources = [
    "seatbelt_extension.cc",
    "seatbelt_extension.h",
    "seatbelt_extension_token.cc",
    "seatbelt_extension_token.h",
  ]
  libs = [ "sandbox" ]
  public_deps = [
    "//base",
  ]
  defines = [ "SEATBELT_IMPLEMENTATION" ]
}

component("system_services") {
  sources = [
    "seatbelt_export.h",
    "system_services.cc",
    "system_services.h",
  ]
  libs = [
    "Carbon.framework",
    "CoreFoundation.framework",
  ]
  public_deps = [
    "//base",
  ]
  defines = [ "SEATBELT_IMPLEMENTATION" ]
}

test("sandbox_mac_unittests") {
  sources = [
    "mojom/struct_traits_unittest.cc",
    "sandbox_mac_compiler_unittest.mm",
    "sandbox_mac_compiler_v2_unittest.mm",
    "sandbox_mac_seatbelt_exec_unittest.cc",
    "seatbelt_extension_unittest.cc",
  ]

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

  deps = [
    ":seatbelt",
    ":seatbelt_extension",
    ":seatbelt_proto",
    "mojom:test_interfaces",
    "//base",
    "//mojo/core/test:run_all_unittests",
    "//testing/gtest",
  ]
}
