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

generate_stubs_script = "//tools/generate_stubs/generate_stubs.py"
generate_stubs_header = "xpc_stubs_header.fragment"
generate_stubs_sig_public = "xpc_stubs.sig"
generate_stubs_sig_private = "xpc_private_stubs.sig"
generate_stubs_project = "sandbox/mac"
generate_stubs_output_stem = "xpc_stubs"

action("generate_stubs") {
  script = generate_stubs_script
  sources = [
    generate_stubs_sig_private,
    generate_stubs_sig_public,
  ]
  inputs = [
    generate_stubs_header,
  ]
  outputs = [
    "$target_gen_dir/$generate_stubs_output_stem.cc",
    "$target_gen_dir/$generate_stubs_output_stem.h",
  ]
  args = [
    "-i",
    rebase_path(target_gen_dir, root_build_dir),
    "-o",
    rebase_path(target_gen_dir, root_build_dir),
    "-t",
    "posix_stubs",
    "-e",
    rebase_path(generate_stubs_header, root_build_dir),
    "-s",
    generate_stubs_output_stem,
    "-p",
    generate_stubs_project,
    "-x",
    "SANDBOX_EXPORT",
  ]
  args += rebase_path(sources, root_build_dir)
}

component("sandbox") {
  sources = [
    "bootstrap_sandbox.cc",
    "bootstrap_sandbox.h",
    "launchd_interception_server.cc",
    "launchd_interception_server.h",
    "mach_message_server.cc",
    "mach_message_server.h",
    "message_server.h",
    "os_compatibility.cc",
    "os_compatibility.h",
    "policy.cc",
    "policy.h",
    "pre_exec_delegate.cc",
    "pre_exec_delegate.h",
    "xpc.cc",
    "xpc.h",
    "xpc_message_server.cc",
    "xpc_message_server.h",
  ]

  defines = [ "SANDBOX_IMPLEMENTATION" ]
  libs = [ "bsm" ]

  deps = [
    "//base",
  ]

  # When the build SDK is 10.6, generate a dynamic stub loader. When the
  # SDK is higher, then libxpc.dylib will be loaded automatically as part
  # of libSystem, and only forward declarations of private symbols are
  # necessary.
  if (mac_sdk_version == "10.6") {
    deps += [ ":generate_stubs" ]
    sources += get_target_outputs(":generate_stubs")
  }
}

test("sandbox_mac_unittests") {
  sources = [
    "bootstrap_sandbox_unittest.mm",
    "policy_unittest.cc",
    "xpc_message_server_unittest.cc",
  ]

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

  deps = [
    ":sandbox",
    "//base",
    "//base/test:run_all_unittests",
    "//testing/gtest",
  ]
}
