# Copyright 2015 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/rules.gni")
import("//build/mac/tweak_info_plist.gni")
import("//build/util/branding.gni")

# This is the part of the shim process compiled into Chrome. It runs only
# in the shim process, after the shim finds and loads the Chrome
# Framework bundle.
source_set("app_shim") {
  sources = [
    "../app/chrome_crash_reporter_client.h",
    "app_shim_controller.h",
    "app_shim_controller.mm",
    "app_shim_delegate.h",
    "app_shim_delegate.mm",
    "chrome_main_app_mode_mac.mm",
  ]

  deps = [
    "//chrome:strings",
    "//chrome/browser/ui",
    "//chrome/common",
    "//chrome/common:mojo_bindings",
    "//components/crash/content/app",
    "//components/remote_cocoa/app_shim",
    "//content/public/browser",
    "//ipc",
    "//mojo/core/embedder",
    "//ui/accelerated_widget_mac",
    "//ui/base",
  ]
}

tweak_info_plist("tweak_app_mode_loader_plist") {
  info_plist = "app_mode-Info.plist"
  args = [
    "--breakpad=0",
    "--keystone=0",
    "--scm=0",
  ]
}

mac_info_plist("app_mode_loader_plist") {
  info_plist_target = ":tweak_app_mode_loader_plist"

  executable_name = "app_mode_loader"

  extra_substitutions = [
    "APP_MODE_APP_BUNDLE_ID=$chrome_mac_bundle_id.app.@APP_MODE_SHORTCUT_ID@",
  ]
}

bundle_data("app_mode_loader_plist_bundle_data") {
  sources = get_target_outputs(":app_mode_loader_plist")

  outputs = [
    "{{bundle_resources_dir}}/app_mode-Info.plist",
  ]

  public_deps = [
    ":app_mode_loader_plist",
  ]
}

executable("app_mode_loader") {
  configs += [ "//build/config/compiler:wexit_time_destructors" ]

  sources = [
    "app_mode_loader_mac.mm",
  ]

  if (is_component_build) {
    # Loaders are installed to ~/Applications. In a component build, include
    # the absolute path to the out dir in their library search path so that
    # their components are found at launch.
    ldflags = [
      "-rpath",
      rebase_path(root_out_dir),
    ]
  }

  deps = [
    "//base",
    "//chrome/common:app_mode_app_support",
    "//chrome/common:constants",
    "//chrome/common:non_code_constants",
  ]

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